diff --git a/.Rbuildignore b/.Rbuildignore index b91d99a..ac3badd 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,4 +1,8 @@ ^\.github$ ^\.history$ src/agemat.tpl -sandbox/ +^sandbox$ +^data-raw$ +^_pkgdown\.yml$ +^docs$ +^pkgdown$ diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml new file mode 100644 index 0000000..c9f0165 --- /dev/null +++ b/.github/workflows/pkgdown.yaml @@ -0,0 +1,50 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + release: + types: [published] + workflow_dispatch: + +name: pkgdown + +permissions: read-all + +jobs: + pkgdown: + runs-on: ubuntu-latest + # Only restrict concurrency for non-PR jobs + concurrency: + group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::pkgdown, local::. + needs: website + + - name: Build site + run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) + shell: Rscript {0} + + - name: Deploy to GitHub pages 🚀 + if: github.event_name != 'pull_request' + uses: JamesIves/github-pages-deploy-action@v4.5.0 + with: + clean: false + branch: gh-pages + folder: docs diff --git a/.gitignore b/.gitignore index 41f1d59..c6ff177 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,11 @@ .history sandbox/ +ignored/ +# results created by the vignette +*.out +Results/ +# files created by compiling the TMB model +*.dll +*.o +# files for the pkgdown website +docs diff --git a/DESCRIPTION b/DESCRIPTION index 19f693b..38a5104 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,51 +1,80 @@ -Package: nwfscAgeingError Type: Package -Title: Source Code for Punt et al. (2008): Ageing Error and Imprecision -Version: 1.3.4 +Package: AgeingError +Title: Estimating ageing error with 'TMB' from double reads +Version: 2.0.2 Authors@R: c( - person( - given = c("Ian", "G."), - family = "Taylor", - email = "ian.taylor@noaa.gov", - role = c("aut", "cre") - comment = c(ORCID = "0000-0001-8489-2488") - ), - person( - given = c("Kelli", "F."), - family = "Johnson", - role = "aut", - comment = c(ORCID = "0000-0002-5149-451X") - ), - person( - given = c("Andre", "E."), - family = "Punt", - role = "aut", - comment = c(ORCID = "0000-0001-8489-2488") - ), - person( - given = c("James", "T."), - family = "Thorson", - role = "aut", - comment = c(ORCID = "0000-0001-7415-1010") - ), - person( - given = c("Ian", "J."), - family = "Stewart", - role = "ctb" - ), - person( - given = c("Melissa", "A."), - family = "Haltuch", - role = "ctb", - comment = c(ORCID = "0000-0003-2821-1267") + person(c("Andre", "E."), "Punt", role = "aut", + comment = c(ORCID = "0000-0001-8489-2488")), + person(c("Kelli", "F."), "Johnson", role = "aut", + comment = c(ORCID = "0000-0001-9563-1937")), + person(c("James", "T."), "Thorson", role = c("ctb", "cph"), + comment = c(ORCID = "0000-0001-7415-1010")), + person(c("Ian", "G."), "Taylor", email = "ian.taylor@noaa.gov", + role = c("aut", "cre"), + comment = c(ORCID = "0000-0001-8489-2488")), + person("Paul", "Burch", role = "aut", + comment = c(ORCID = "0000-0002-9853-462X")), + person(c("Ian", "J."), "Stewart", role = "ctb"), + person(c("Melissa", "A."), "Haltuch", role = "ctb", + comment = c(ORCID = "0000-0003-2821-1267")) ) - ) -Description: Source code and examples for how to use double-read data to - estimate ageing imprecision and bias from fishery otoliths. The code - was developed for Punt et al. (2008) and updated in 2022. -URL: http://github.com/pfmc-assessments/nwfscAgeingError -BugReports: http://github.com/pfmc-assessments/nwfscAgeingError/issues -License: GPL-2 +Description: Implements Generalized Linear Mixed Effect Models (GLMMs) using + 'TMB' to estimate ageing error from double reads of otoliths. The original + analysis (Punt et al. 2008; ) was written in `ADMB` + and focused on estimating imprecision and bias. The newer version of the + software allows for random effects using `TMB`. +License: GPL-3 +URL: https://pfmc-assessments.github.io/AgeingError/index.html, https://pfmc-assessments.github.io/AgeingError/, http://pfmc-assessments.github.io/AgeingError/ +BugReports: https://github.com/pfmc-assessments/AgeingError/issues +Depends: + R (>= 3.5.0) +Imports: + assertthat, + cli, + clisymbols, + fs, + generics, + glmmTMB, + graphics, + lifecycle, + Matrix, + methods, + mgcv, + mvtnorm, + nlme, + rlang, + stats, + TMB (>= 1.8.0) +Suggests: + dplyr, + effects (>= 4.0-1), + emmeans (>= 1.4), + estimability, + future, + future.apply, + ggeffects, + ggforce, + ggplot2, + knitr, + lme4, + rgdal, + rmarkdown, + sf, + splancs, + testthat, + tibble, + visreg +LinkingTo: + RcppEigen, + TMB +VignetteBuilder: + knitr +ByteCompile: true +Config/testthat/edition: 3 +Config/testthat/parallel: true +Copyright: inst/COPYRIGHTS Encoding: UTF-8 -RoxygenNote: 7.2.1 +LazyData: true Roxygen: list(markdown = TRUE) +RoxygenNote: 7.3.1 +SystemRequirements: GNU make, C++17 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b8ce8ea --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +PACKAGE=AgeingError +VERSION := $(shell sed -n '/^Version: /s///p' DESCRIPTION) +DATE := $(shell sed -n '/^Date: /s///p' DESCRIPTION) +TARBALL=${PACKAGE}_${VERSION}.tar.gz +ZIPFILE=${PACKAGE}_${VERSION}.zip + +# Allow e.g. "make R=R-devel install" +R=R + +all: + make doc-update + make build-package + make install + +doc-update: + echo "roxygen2::roxygenize(\".\")" | $(R) --slave + +build-package: + $(R) CMD build --no-build-vignettes --no-manual . + +install: + $(R) CMD INSTALL --preclean --no-multiarch --with-keep.source . + +cran-check: + echo "devtools::check(\".\")" | $(R) --slave diff --git a/NAMESPACE b/NAMESPACE index 71ff999..13da61d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,6 @@ # Generated by roxygen2: do not edit by hand +export(DoApplyAgeError) export(PlotOutputFn) export(RunFn) export(SimulatorFn) @@ -7,5 +8,9 @@ export(StepwiseFn) export(ageing_comparison) export(cMx) export(estgrowth.vb) +export(fit) +export(plot_output) export(rMx) +export(run) importFrom(stats,dnorm) +useDynLib(AgeingError, .registration = TRUE) diff --git a/NEWS.md b/NEWS.md index 8b5662c..289f419 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,15 @@ +# AgeingError development + +# AgeingError 2.0.2 +* Renamed github repository, + +# AgeingError 2.0.0 + +* Changed package name to AgeingError +* Added TMB code that is pre-compiled in the package +* Added `run()` as a wrapper for the code provided by @puntae +* Increased the number of examples present in the package + # nwfscAgeingError 1.3.3 * Added a `NEWS.md` file to track changes to the package. diff --git a/R/CreateData.R b/R/CreateData.R new file mode 100644 index 0000000..0cdf30b --- /dev/null +++ b/R/CreateData.R @@ -0,0 +1,341 @@ +#' Read the ageing error data +#' +#' @param DataFile Filename for input data +#' @param NDataSet Number of data sets within `DataFile` +#' @param verbose Return messages to the console (in addition to any output to +#' `EchoFile`) +#' @param EchoFile A file path to a file that will be created or appended to if +#' it already exists to store information about your data inputs. The default +#' is `''`, which leads to output being printed to the screen rather than +#' saved in a file. An example of a user-defined input would be +#' `'EchoTMB.out'`. +#' @author Andre E. Punt +CreateData <- function(DataFile = "data.dat", + NDataSet = 1, + verbose = FALSE, + EchoFile = "") { + # Put a first line in the EchoFile if the file does not already exist + if (!file.exists(EchoFile)) { + write("", file = EchoFile) + } + MatchTable <- function(Table, + Char1 = NULL, + Char2 = NULL, + Char3 = NULL, + Char4 = NULL, + Char5 = NULL) { + ii <- rep(T, length(Table[, 1])) + if (!is.null(Char1)) { + ii <- ii & (Table[, 1] == Char1) + } + if (!is.null(Char2)) { + ii <- ii & (Table[, 2] == Char2) + } + if (!is.null(Char3)) { + ii <- ii & (Table[, 3] == Char3) + } + if (!is.null(Char4)) { + ii <- ii & (Table[, 4] == Char4) + } + if (!is.null(Char5)) { + ii <- ii & (Table[, 5] == Char5) + } + ii <- seq(1:length(Table[, 1]))[ii] + return(ii) + } + + # Read in the data file + Data <- read.table( + DataFile, + comment.char = "?", + fill = TRUE, + blank.lines.skip = TRUE, + stringsAsFactors = FALSE, + col.names = 1:100 + ) + + # Extract the minimum and maximum ages + Index <- MatchTable(Data, Char1 = "Range_of_ages") + MinAge <- as.numeric(Data[Index + 1, 1]) + MaxAge <- as.numeric(Data[Index + 1, 2]) + + # Details of the readers + IndexVals <- rep(0, NDataSet) + Npnt <- rep(0, NDataSet) + NReaders <- rep(0, NDataSet) + MinusA <- rep(0, NDataSet) + PlusA <- rep(0, NDataSet) + RefAge <- rep(0, NDataSet) + MaxReader <- 1 + for (Idataset in 1:NDataSet) { + SearchTerm <- paste("Data_set_", Idataset, sep = "") + IndexVals[Idataset] <- MatchTable(Data, Char1 = SearchTerm) + Npnt[Idataset] <- as.numeric(Data[IndexVals[Idataset] + 1, 1]) + NReaders[Idataset] <- as.numeric(Data[IndexVals[Idataset] + 2, 1]) + MinusA[Idataset] <- as.numeric(Data[IndexVals[Idataset] + 3, 1]) + PlusA[Idataset] <- as.numeric(Data[IndexVals[Idataset] + 3, 2]) + RefAge[Idataset] <- as.numeric(Data[IndexVals[Idataset] + 3, 3]) + Readers <- as.numeric(Data[IndexVals[Idataset] + 4, 1:NReaders[Idataset]]) + MaxReader <- max(MaxReader, Readers) + if (verbose) { + cat("readers", Readers, "\n") + } + } + ReadPnt <- matrix(0, nrow = NDataSet, ncol = MaxReader) + for (Idataset in 1:NDataSet) { + ReadPnt[Idataset, 1:NReaders[Idataset]] <- as.numeric( + Data[IndexVals[Idataset] + 4, 1:NReaders[Idataset]] + ) + } + + # Now extract the data + TheData <- array(-999, dim = c(NDataSet, max(Npnt), MaxReader + 1)) + Ipnt <- 0 + for (Idataset in 1:NDataSet) { + for (Iline in 1:Npnt[Idataset]) { + TheData[Idataset, Iline, 1:(NReaders[Idataset] + 1)] <- as.numeric( + Data[(IndexVals[Idataset] + 4 + Iline), 1:(NReaders[Idataset] + 1)] + ) + } + if (verbose) { + cat( + "Last line of data set", + Idataset, + "is", + TheData[Idataset, Npnt[Idataset], 1:(NReaders[Idataset] + 1)], + "\n" + ) + } + } + + # Do checks on the data set + MaAge <- -1 + MiAge <- 1000 + NegVals <- 0 + for (IDataS in 1:NDataSet) { + for (Ipnt in 1:Npnt[IDataS]) { + for (Ireader in 1:NReaders[IDataS]) { + if (TheData[IDataS, Ipnt, Ireader + 1] >= 0) { + if (TheData[IDataS, Ipnt, Ireader + 1] > MaAge) { + MaAge <- TheData[IDataS, Ipnt, Ireader + 1] + } + if (TheData[IDataS, Ipnt, Ireader + 1] < MiAge) { + MiAge <- TheData[IDataS, Ipnt, Ireader + 1] + } + } else { + NegVals <- 1 + } + } + } + } + if (NegVals == 1) { + cat( + "WARNING - there are some missing data;", + "the effective sample size calculation may be dubious, \n\n" + ) + } + + # Create a tabular summary of the data + write("Structure of the data set", EchoFile, append = TRUE) + write("Data set # Entries Reader boolean", EchoFile, append = TRUE) + ReaderStruc <- matrix(0, nrow = 1000, ncol = MaxReader + 2) + Presense <- rep(0, MaxReader) + ReaderSumm <- matrix(0, nrow = NDataSet, ncol = 3) + NrowStruc <- 0 + for (IDataS in 1:NDataSet) { + for (II in 1:Npnt[IDataS]) { + Presense <- rep(0, MaxReader) + for (Ireader in 1:NReaders[IDataS]) { + if (TheData[IDataS, II, Ireader + 1] >= 0) { + Presense[Ireader] <- ReadPnt[IDataS, Ireader] + } + } + Ifound <- 0 + if (NrowStruc > 0) { + for (JJ in 1:NrowStruc) { + if (ReaderStruc[JJ, 1] == IDataS) { + Jfound <- 1 + for (Ireader in 1:NReaders[IDataS]) { + if (Presense[Ireader] != ReaderStruc[JJ, Ireader + 2]) { + Jfound <- 0 + } + } + if (Jfound == 1) { + Ifound <- JJ + } + } + } + } + if (Ifound == 0) { + NrowStruc <- NrowStruc + 1 + ReaderStruc[NrowStruc, 1] <- IDataS + ReaderStruc[NrowStruc, 2] <- TheData[IDataS, II, 1] + ReaderSumm[IDataS, 3] <- ReaderSumm[IDataS, 3] + 1 + for (Ireader in 1:NReaders[IDataS]) { + ReaderStruc[NrowStruc, Ireader + 2] <- Presense[Ireader] + } + } else { + ReaderStruc[Ifound, 2] <- ReaderStruc[Ifound, 2] + TheData[ + IDataS, + II, 1 + ] + } + } + } + cat("Number of rows in NrowStruc", NrowStruc, "\n") + print(NrowStruc) + ReaderStruc <- matrix( + ReaderStruc[1:NrowStruc, ], + nrow = NrowStruc, + ncol = length(ReaderStruc[1, ]) + ) + print("ReaderStruc") + print(ReaderStruc) + for (II in 1:NrowStruc) { + write(ReaderStruc[II, ], EchoFile, append = TRUE, ncol = MaxReader + 2) + } + print("ReaderSumm") + print(ReaderSumm) + + # Create a reader summary; ReaderSumm[IDataS,2] is the maximum number of + # readers for a given combination of readers + for (II in 1:NrowStruc) { + IDataS <- ReaderStruc[II, 1] + ReaderSumm[IDataS, 1] <- IDataS + MaxReaderOpt <- 0 + for (Ireader in 1:NReaders[IDataS]) { + if (ReaderStruc[NrowStruc, Ireader + 2] > 0) { + MaxReaderOpt <- MaxReaderOpt + 1 + } + } + if (MaxReaderOpt > ReaderSumm[IDataS, 2]) { + ReaderSumm[IDataS, 2] <- MaxReaderOpt + } + } + write("ReaderSumm", EchoFile, append = TRUE) + write(t(ReaderSumm), EchoFile, append = TRUE, ncol = 3) + print("ReaderSumm") + print(ReaderSumm) + + # Outputs to screen + write( + paste("Number of reads by data set: ", NReaders), + EchoFile, + append = TRUE + ) + write( + paste("Minimum and Maximum Ages: ", MiAge, " ", MaAge), + EchoFile, + append = TRUE + ) + write( + "", + EchoFile, + append = TRUE + ) + + # Record total sample size and specify effective Ns + EffNOpt <- rep(0, NDataSet) + TotalN <- rep(0, NDataSet) + EffN <- rep(0, NDataSet) + for (IDataSet in 1:NDataSet) { + TotalN[IDataSet] <- 0 + for (Ipnt in 1:Npnt[IDataSet]) { + TotalN[IDataSet] <- TotalN[IDataSet] + TheData[IDataSet, Ipnt, 1] + } + } + for (IDataSet in 1:NDataSet) { + if (EffNOpt[IDataSet] <= 0) { + EffN[IDataSet] <- TotalN[IDataSet] + } else { + EffN[IDataSet] <- EffNOpt[IDataSet] + } + } + + # Check for duplicates and condense as needed + OneProblem <- 0 + for (IDataSet in 1:NDataSet) { + Problem <- 0 + for (II in 2:Npnt[IDataSet]) { + for (JJ in 1:(II - 1)) { + if (TheData[IDataSet, JJ, 1] > 0) { + Ifound <- 0 + for (Iread in 1:NReaders[IDataSet]) { + if (TheData[IDataSet, JJ, Iread + + 1] != TheData[IDataSet, II, Iread + 1]) { + Ifound <- 1 + } + } + if (Ifound == 0) { + cat("Warning: Lines ", II, " and ", JJ, " have the same ages\n") + TheData[IDataSet, JJ, 1] <- TheData[IDataSet, JJ, 1] + TheData[ + IDataSet, + II, 1 + ] + TheData[IDataSet, II, 1] <- -1 + Problem <- 1 + } + } + } # JJ + } + if (Problem == 1) { + cat( + "Duplicate entries found for data set ", + IDataSet, + "; corrected data set in Echo.File\n" + ) + cat( + "Duplicate entries found for data set ", + IDataSet, + "; corrected data set follows\n" + ) + NLineOut <- 0 + for (II in 1:Npnt[IDataSet]) { + if (TheData[IDataSet, II, 1] > 0) { + NLineOut <- NLineOut + 1 + write(TheData[IDataSet, II, ], EchoFile, append = TRUE) + } + } + write(paste("New lines ", NLineOut), EchoFile, append = TRUE) + OneProblem <- 1 + } + } + if (OneProblem == 1) { + AA + } + + ## Counter for storage + MaxCells <- 1 + for (IDataS in 1:NDataSet) { + Ncells <- 1 + for (Ireader in 1:ReaderSumm[IDataS, 2]) { + Ncells <- Ncells * (MaxAge + 1) + } + if (Ncells > MaxCells) { + MaxCells <- Ncells + } + } + write(paste("total cells ", MaxCells), EchoFile, append = TRUE) + + Outs <- NULL + Outs$MinAge <- MinAge + Outs$MaxAge <- MaxAge + Outs$NDataSet <- NDataSet + Outs$MaxReader <- MaxReader + Outs$TheData <- TheData + Outs$Npnt <- Npnt + Outs$ReadPnt <- ReadPnt + Outs$NReaders <- NReaders + Outs$MinusA <- MinusA + Outs$PlusA <- PlusA + Outs$RefAge <- RefAge + Outs$ReaderSumm <- ReaderSumm + Outs$ReaderStruc <- ReaderStruc + Outs$MaxCells <- MaxCells + Outs$TotalN <- TotalN + Outs$EffN <- EffN + if (verbose) { + print(str(Outs)) + } + return(Outs) +} \ No newline at end of file diff --git a/R/CreateSpecs.R b/R/CreateSpecs.R new file mode 100644 index 0000000..1533496 --- /dev/null +++ b/R/CreateSpecs.R @@ -0,0 +1,257 @@ +#' Read the ageing error specifications +#' +#' @param SpecsFile Filename for input specifications. +#' @param DataSpecs The output from CreateData() +#' @param verbose Return messages to the console (TRUE/FALSE) + +#' @author Andre E. Punt +CreateSpecs <- function(SpecsFile = "data.spc", + DataSpecs, + verbose = FALSE) { + MatchTable <- function(Table, + Char1 = NULL, + Char2 = NULL, + Char3 = NULL, + Char4 = NULL, + Char5 = NULL) { + ii <- rep(T, length(Table[, 1])) + if (!is.null(Char1)) { + ii <- ii & (Table[, 1] == Char1) + } + if (!is.null(Char2)) { + ii <- ii & (Table[, 2] == Char2) + } + if (!is.null(Char3)) { + ii <- ii & (Table[, 3] == Char3) + } + if (!is.null(Char4)) { + ii <- ii & (Table[, 4] == Char4) + } + if (!is.null(Char5)) { + ii <- ii & (Table[, 5] == Char5) + } + ii <- seq(1:length(Table[, 1]))[ii] + return(ii) + } + + Specs <- read.table( + SpecsFile, + comment.char = "?", + fill = TRUE, + blank.lines.skip = TRUE, + stringsAsFactors = FALSE, + col.names = 1:10 + ) + + # Read in the initial values + ModelSpecs <- vector(mode = "list", length = DataSpecs$MaxReader) + IndexA <- MatchTable(Specs, Char1 = "#", Char2 = "reader") + 1 + NumBias <- 0 + NumSigma <- 0 + for (Ireader in 1:DataSpecs$MaxReader) { + DefaultList <- list( + BiasOpt = NULL, + SigOpt = NULL, + BiasPar = NULL, + BiasLow = NULL, + BiasHi = NULL, + BiasUsed = NULL, + SigmaPar = NULL, + SigmaLow = NULL, + SigmaHi = NULL, + SigmaUsed = NULL + ) + DefaultList$BiasOpt <- as.numeric(Specs[IndexA, 2]) + DefaultList$SigOpt <- as.numeric(Specs[IndexA, 3]) + + # Check for valud bias options + if (DefaultList$BiasOpt >= 0 & !DefaultList$BiasOpt %in% c(0, 1, 2)) { + cat( + "Error specifying bias option for reader ", + Ireader, + "; Bias option ", + DefaultList$BiasOpt, + " is not implemented- stopping\n" + ) + AA + } + if (DefaultList$SigOpt >= 0 & !DefaultList$SigOpt %in% c(1:8)) { + cat( + "Error specifying variance option for reader ", + Ireader, + "; Variance option ", + DefaultList$SigOpt, + " is not implemented- stopping\n" + ) + AA + } + + IndexA <- IndexA + 1 + ModelSpecs[[Ireader]] <- DefaultList + } + + # Parameters defining Sigmas (Spline) + Index <- MatchTable( + Specs, + Char1 = "#", + Char2 = "Spline", + Char3 = "specifications" + ) + xvals <- matrix(0, nrow = DataSpecs$MaxReader, ncol = 100) + nknots <- rep(0, DataSpecs$MaxReader) + for (Ireader in 1:DataSpecs$MaxReader) { + if (ModelSpecs[[Ireader]]$SigOpt == 5) { + nknots[Ireader] <- as.numeric(Specs[Index + 1, 1]) + for (IDcnt in 1:nknots[Ireader]) { + xvals[Ireader, IDcnt] <- as.numeric(Specs[Index + + 2, IDcnt]) + } + Index <- Index + 2 + cat("Spline used to define SD for reader ", Ireader, "\n") + cat("Selected knots are located at ") + for (IDcnt in 1:nknots[Ireader]) cat(xvals[Ireader, IDcnt], " ") + cat("\n") + } + } + + Index <- MatchTable( + Specs, + Char1 = "#", + Char2 = "Linear", + Char3 = "specifications" + ) + # linear model specifications + xvalsL <- matrix(0, nrow = DataSpecs$MaxReader, ncol = 100) + nknotsL <- rep(0, DataSpecs$MaxReader) + for (Ireader in 1:DataSpecs$MaxReader) { + if (ModelSpecs[[Ireader]]$SigOpt == 6) { + nknotsL[Ireader] <- as.numeric(Specs[Index + 1, 1]) + for (IDcnt in 1:nknotsL[Ireader]) { + xvalsL[Ireader, IDcnt] <- as.numeric(Specs[Index + + 2, IDcnt]) + } + Index <- Index + 2 + if (xvalsL[Ireader, 1] != DataSpecs$MinAge) { + print("First age must be 1") + AA + } + if (xvalsL[Ireader, nknotsL[Ireader]] != DataSpecs$MaxAge) { + print("last age must be MaxAge") + AA + } + cat("Linear interpolation used to define SD for reader ", Ireader, "\n") + cat("Selected knots are located at ") + for (IDcnt in 1:nknotsL[Ireader]) cat(xvalsL[Ireader, IDcnt], " ") + cat("\n") + } + } + + # Read in the initial values + IndexB <- MatchTable(Specs, Char1 = "Bias_Pars") + 1 + IndexC <- MatchTable(Specs, Char1 = "Sigma_Pars") + 1 + NumBias <- 0 + NumSigma <- 0 + for (Ireader in 1:DataSpecs$MaxReader) { + DefaultList <- list( + BiasOpt = NULL, + SigOpt = NULL, + BiasPar = NULL, + BiasLow = NULL, + BiasHi = NULL, + BiasUsed = NULL, + SigmaPar = NULL, + SigmaLow = NULL, + SigmaHi = NULL, + SigmaUsed = NULL + ) + DefaultList$BiasOpt <- ModelSpecs[[Ireader]]$BiasOpt + DefaultList$SigOpt <- ModelSpecs[[Ireader]]$SigOpt + Nbias <- 0 + if (DefaultList$BiasOpt == 1) { + Nbias <- 1 + } + if (DefaultList$BiasOpt == 2) { + Nbias <- 3 + } + if (Nbias > 0) { + for (Ibias in 1:Nbias) { + DefaultList$BiasPar <- c(DefaultList$BiasPar, as.numeric(Specs[ + IndexB, + 3 + ])) + DefaultList$BiasLow <- c(DefaultList$BiasLow, as.numeric(Specs[ + IndexB, + 1 + ])) + DefaultList$BiasHi <- c(DefaultList$BiasHi, as.numeric(Specs[ + IndexB, + 2 + ])) + DefaultList$BiasUsed <- c(DefaultList$BiasUsed, as.numeric(Specs[ + IndexB, + 4 + ])) + IndexB <- IndexB + 1 + } + } + NumBias <- NumBias + Nbias + Nsigma <- 0 + if (DefaultList$SigOpt == 1) { + Nsigma <- 1 + } + if (DefaultList$SigOpt == 2) { + Nsigma <- 3 + } + if (DefaultList$SigOpt == 3) { + Nsigma <- 3 + } + if (DefaultList$SigOpt == 5) { + Nsigma <- nknots[Ireader] + } + if (DefaultList$SigOpt == 6) { + Nsigma <- nknotsL[Ireader] + } + if (DefaultList$SigOpt == 7) { + Nsigma <- 2 + } + if (DefaultList$SigOpt == 8) { + Nsigma <- 2 + } + if (Nsigma > 0) { + for (Isigma in 1:Nsigma) { + DefaultList$SigmaPar <- c(DefaultList$SigmaPar, as.numeric(Specs[ + IndexC, + 3 + ])) + DefaultList$SigmaLow <- c(DefaultList$SigmaLow, as.numeric(Specs[ + IndexC, + 1 + ])) + DefaultList$SigmaHi <- c(DefaultList$SigmaHi, as.numeric(Specs[ + IndexC, + 2 + ])) + DefaultList$SigmaUsed <- c(DefaultList$SigmaUsed, as.numeric(Specs[ + IndexC, + 4 + ])) + IndexC <- IndexC + 1 + } + } + NumSigma <- NumSigma + Nsigma + ModelSpecs[[Ireader]] <- DefaultList + } + + Outs <- NULL + Outs$ModelSpecs <- ModelSpecs + Outs$NumSigma <- NumSigma + Outs$NumBias <- NumBias + Outs$xvalsL <- xvalsL + Outs$nknotsL <- nknotsL + Outs$xvals <- xvals + Outs$nknots <- nknots + if (verbose) { + print(str(Outs)) + } + return(Outs) +} \ No newline at end of file diff --git a/R/DoApplyAgeError.R b/R/DoApplyAgeError.R new file mode 100644 index 0000000..fd51bfd --- /dev/null +++ b/R/DoApplyAgeError.R @@ -0,0 +1,299 @@ +#' Run the ageing error optimization routine +#' +#' @param Species A string that will be used to create file names. Typically, +#' users will use the common name for the species of interest, especially if +#' you are saving files from multiple species in a single directory. Though, +#' the default is `"AgeingError"`. +#' @param DataSpecs A data object returned from [CreateData()]. +#' @param ModelSpecsInp A specification object returned from [CreateSpecs()]. +#' @param AprobWght,SlopeWght Numeric values passed to the model. The defaults +#' are 1e-06 and 0.01. Andre originally had these hard coded from his +#' workspace. TODO: decide if they should be passed in the specifications or +#' data files. +#' @param SaveDir A path, relative or absolute, to a directory where the +#' results will be saved. The directory need not exist currently as it will +#' be created dynamically. +#' @param verbose A logical specifying if messages should be printed. The +#' default is to **NOT** print, i.e., `verbose = FALSE`. +#' +#' @export +#' @author Andre E. Punt +DoApplyAgeError <- function(Species = "AgeingError", + DataSpecs, + ModelSpecsInp, + AprobWght = 1e-06, + SlopeWght = 0.01, + SaveDir = getwd(), + verbose = FALSE) { + fs::dir_create(SaveDir) + SaveFile <- file.path( + SaveDir, + paste0(Species, ".lda") + ) + if (verbose) { + cli::cli_inform( + "Results will be saved to {SaveFile}" + ) + } + + # Extract material from the data specs + MinAge <- DataSpecs$MinAge + MaxAge <- DataSpecs$MaxAge + MaxReader <- DataSpecs$MaxReader + NDataSet <- DataSpecs$NDataSet + Npnt <- DataSpecs$Npnt + ReadPnt <- DataSpecs$ReadPnt + TheData <- DataSpecs$TheData + Nread <- DataSpecs$NReaders + MinusA <- DataSpecs$MinusA + PlusA <- DataSpecs$PlusA + RefAge <- DataSpecs$RefAge + + # extract the Sigma and bias options + BiasOpt <- rep(NA, MaxReader) + SigOpt <- rep(NA, MaxReader) + NumBias <- ModelSpecsInp$NumBias + NumSig <- ModelSpecsInp$NumSigma + Bias_LO <- NULL + Bias_HI <- NULL + Bias_INIT <- NULL + Sigma_LO <- NULL + Sigma_HI <- NULL + Sigma_INIT <- NULL + ModelSpecs <- ModelSpecsInp$ModelSpecs + if (NumBias > 0) { + BiasParMap <- as.factor(NULL) + } else { + BiasParMap <- factor(NA) + } + if (NumSig > 0) { + SDParMap <- as.factor(NULL) + } else { + SDParMap <- factor(NA) + } + IBiasCnt <- 0 + ISigCnt <- 0 + for (Ireader in 1:MaxReader) { + TheSpecs <- ModelSpecs[[Ireader]] + SigOpt[Ireader] <- TheSpecs$SigOpt + BiasOpt[Ireader] <- TheSpecs$BiasOpt + if (BiasOpt[Ireader] > 0) { + for (II in 1:length(TheSpecs$BiasLow)) { + IBiasCnt <- IBiasCnt + 1 + if (TheSpecs$BiasUsed[II] > 0) { + Bias_LO <- c(Bias_LO, TheSpecs$BiasLow[II]) + Bias_HI <- c(Bias_HI, TheSpecs$BiasHi[II]) + BiasParMap <- c(BiasParMap, factor(IBiasCnt)) + } else { + BiasParMap <- c(BiasParMap, factor(NA)) + } + } + Bias_INIT <- c(Bias_INIT, TheSpecs$BiasPar) + } + if (SigOpt[Ireader] > 0) { + for (II in 1:length(TheSpecs$SigmaLow)) { + ISigCnt <- ISigCnt + 1 + if (TheSpecs$SigmaUsed[II] > 0) { + Sigma_LO <- c(Sigma_LO, TheSpecs$SigmaLow[II]) + Sigma_HI <- c(Sigma_HI, TheSpecs$SigmaHi[II]) + SDParMap <- c(SDParMap, factor(ISigCnt)) + } else { + SDParMap <- c(SDParMap, factor(NA)) + } + } + Sigma_INIT <- c(Sigma_INIT, TheSpecs$SigmaPar) + } + } + + # Find number of reads by data set and if any readers are perfect + # Number of readers for this dataset + Nreads <- rep(0, NDataSet) + # Number of data sets for which the answer is not known + NDataSetWithoutPerfect <- 0 + # one if there is no perfect reading in this dataset + Iperfect <- rep(0, NDataSet) + for (IDataS in 1:NDataSet) { + for (II in 1:Nread[IDataS]) { + if (ReadPnt[IDataS, II] > 0) { + Nreads[IDataS] <- Nreads[IDataS] + 1 + if (SigOpt[ReadPnt[IDataS, II]] == 4) { + Iperfect[IDataS] <- II + } + } + } + if (Iperfect[IDataS] == 0) { + NDataSetWithoutPerfect <- NDataSetWithoutPerfect + 1 + } + } + + # Determine the number of parameters that should be estimated + Nprobs <- 0 + Nslops <- 0 + for (IDataS in 1:NDataSet) { + if (Iperfect[IDataS] == 0) { + Nprobs <- Nprobs + (PlusA[IDataS] - MinusA[IDataS]) + if (MaxAge > PlusA[IDataS]) { + Nslops <- Nslops + 1 + } + if (MinAge < MinusA[IDataS]) { + Nslops <- Nslops + 1 + } + } + } + + # Initial values + Slope_LO <- rep(-10, Nslops) + Slope_HI <- rep(1, Nslops) + Slope_INIT <- rep(0, Nslops) + + # initial values + Prob_LO <- rep(-20, Nprobs) + Prob_HI <- rep(20, Nprobs) + Prob_INIT <- rep(0, Nprobs) + Probs <- rep(0, Nprobs) + + + # Initialize the proportion parameters + Jpnt <- 0 + for (IDataS in 1:NDataSet) { + if (Iperfect[IDataS] == 0) { + AgFreq <- rep(0, MaxAge + 1) + for (Ipnt in 1:Npnt[IDataS]) { + for (Iread in 1:Nread[IDataS]) { + if (TheData[IDataS, Ipnt, Iread + 1] >= 0) { + AgFreq[TheData[IDataS, Ipnt, Iread + 1] + 1] <- AgFreq[TheData[ + IDataS, + Ipnt, Iread + 1 + ] + 1] + TheData[IDataS, Ipnt, 1] + } + } + } + Normal <- AgFreq[RefAge[IDataS] + 1] + for (Age in (MinusA[IDataS]):(PlusA[IDataS])) { + AgFreq[Age + 1] <- log((AgFreq[Age + 1] + 0.1) / Normal) + } + + for (Age in MinusA[IDataS]:(RefAge[IDataS] - 1)) { + Jpnt <- Jpnt + 1 + Probs[Jpnt] <- AgFreq[Age + 1] + } + for (Age in (RefAge[IDataS] + 1):(PlusA[IDataS])) { + Jpnt <- Jpnt + 1 + Probs[Jpnt] <- AgFreq[Age + 1] + } + } + } + Prob_INIT <- Probs + + # Now apply + data <- list( + NDataSet = NDataSet, + MinAge = MinAge, + MaxAge = MaxAge, + BiasOpt = BiasOpt, + SigOpt = SigOpt, + MaxReader = MaxReader, + MinusA = MinusA, + PlusA = PlusA, + RefAge = RefAge, + Iperfect = Iperfect, + TheData = TheData, + Npnt = Npnt, + Nread = Nread, + MaxNpnt = max(Npnt), + ReadPnt = ReadPnt, + ReaderSumm = DataSpecs$ReaderSumm, + ReaderStruc = DataSpecs$ReaderStruc, + MaxCells = DataSpecs$MaxCells, + TotalN = DataSpecs$TotalN, + EffN = DataSpecs$EffN, + xvals = ModelSpecsInp$xvals, + nknots = ModelSpecsInp$nknots, + xvalsL = ModelSpecsInp$xvalsL, + nknotsL = ModelSpecsInp$nknotsL, + AprobWght = AprobWght, + SlopeWght = SlopeWght + ) + if (verbose) { + print(str(data)) + } + + Bias_INIT_Use <- Bias_INIT + if (is.null(Bias_INIT)) { + Bias_INIT_Use <- 1 + } + parameters <- list( + Dummy = 0, + BiasPar = Bias_INIT_Use, + SDPar = Sigma_INIT, + Slope = Slope_INIT, + Probs = Prob_INIT + ) + if (verbose) { + print(str(parameters)) + } + map <- list( + BiasPar = rep(factor(NA), NumBias), SDPar = rep(factor(NA), NumSig), + Slope = rep(factor(NA), Nslops), Probs = rep(factor(NA), Nprobs) + ) + map <- list(Dummy = factor(NA), BiasPar = BiasParMap, SDPar = SDParMap) + + if (is.null(Bias_INIT)) { + map <- list(Dummy = factor(NA), BiasPar = BiasParMap, SDPar = SDParMap) + } + if (verbose) { + print(map) + } + + ################## Sigma_LO <- c(0,0.01,0,0,0) Sigma_HI <- c(1,1,2,1,2) + upper <- c(Bias_HI, Sigma_HI, Slope_HI, Prob_HI) + lower <- c(Bias_LO, Sigma_LO, Slope_LO, Prob_LO) + model <- TMB::MakeADFun( + data, + parameters, + map = map, + silent = TRUE, + DLL = "AgeingError" + ) + model$fn_orig <- model$fn + + # Debugging track + model$fn <- function(x) { + vv <- model$fn_orig(x) + print(vv) + return(vv) + } + + # Find the model and iterate until convergence + model <- minimizer(model, method = "both", lower, upper) + best <- 1e+20 + print(model$fitv, digits = 10) + while (abs(best - model$fitv) > 1e-10) { + print("looping") + print(best) + best <- model$fitv + model <- minimizer(model, method = "both", lower, upper) + print("Objective fn:") + print(model$fitv, digits = 10) + cat("Difference", best - model$fitv, "\n") + } + model <- minimizer(model, method = "both", lower, upper, verbose = verbose) + print(model$gr(model$env$last.par.best)) + print(model$env$last.par.best) + + # Save tesults + SaveAll <- NULL + SaveAll$model <- model + SaveAll$data <- data + SaveAll$parameters <- parameters + SaveAll$report <- model$report() + save(SaveAll, file = SaveFile) + rep <- TMB::sdreport(model) + if (verbose) { + print(summary(rep)) + } + SaveAll$gradient <- rep$gradient.fixed + SaveAll$sdreport <- rep + save(SaveAll, file = SaveFile) + return(model) +} \ No newline at end of file diff --git a/R/ProcessResults.R b/R/ProcessResults.R new file mode 100644 index 0000000..6a2c377 --- /dev/null +++ b/R/ProcessResults.R @@ -0,0 +1,462 @@ +#' Process results of the ageing error estimation +#' +#' @inheritParams DoApplyAgeError +#' @param CalcEff Calculate effective sample sizes (TRUE/FALSE) +#' @author Andre E. Punt +ProcessResults <- function(Species = "AgeingError", + SaveDir = getwd(), + CalcEff = FALSE, + verbose = FALSE) { + SaveFile <- file.path( + SaveDir, + paste0("/", Species, ".lda") + ) + if (verbose) { + print(SaveFile) + } + ReportFile <- file.path( + SaveDir, + paste0("/", Species, ".rpt") + ) + if (verbose) { + print(ReportFile) + } + + load(SaveFile) + if (verbose) { + print(str(SaveAll)) + } + NDataSet <- SaveAll$data$NDataSet + MaxReader <- SaveAll$data$MaxReader + + write( + paste(SaveAll$report$f, " ", SaveAll$report$Obj_fun), + ReportFile + ) + + write( + paste("Total number of readers:", MaxReader), + ReportFile, + append = TRUE + ) + write( + paste("Number of data sets:", NDataSet), + ReportFile, + append = TRUE + ) + write( + paste("Bias options by reader:", SaveAll$data$BiasOpt), + ReportFile, + append = TRUE + ) + write( + paste("Sigma options by reader:", SaveAll$data$SigOpt), + ReportFile, + append = TRUE + ) + + write( + paste("Total objective function:", SaveAll$report$f), + ReportFile, + append = TRUE + ) + Index <- which(abs(SaveAll$gradient) == max(abs(SaveAll$gradient))) + write( + paste("maximum gradient:", SaveAll$gradient[Index]), + ReportFile, + append = TRUE + ) + + write( + paste("Number of readers: ", MaxReader), + ReportFile, + append = TRUE + ) + write( + paste("Range of ages: ", SaveAll$data$MinAge, " - ", SaveAll$data$MaxAge), + ReportFile, + append = TRUE + ) + for (Ireader in 1:NDataSet) { + write( + paste( + "Reader #", Ireader, " Minus/Plus ages: ", + SaveAll$data$MinusA[Ireader], " / ", SaveAll$data$PlusA[Ireader] + ), + ReportFile, + append = TRUE + ) + } + write(paste("Number of data sets:", NDataSet), ReportFile, append = TRUE) + write( + paste("Number of lines of data per data set: ", SaveAll$data$Npnt), + ReportFile, + append = TRUE + ) + write( + paste("Number of data points per data set:", SaveAll$data$TotalN), + ReportFile, + append = TRUE + ) + write( + "\n", + ReportFile, + append = TRUE + ) + write( + "# Bias options", + ReportFile, + append = TRUE + ) + write( + "# -X: Mirrored with pattrn X", + ReportFile, + append = TRUE + ) + write( + "# 0: Unbiased [0 parameters]", + ReportFile, + append = TRUE + ) + write( + "# 1: Linearly proportional to age [1 parameter]", + ReportFile, + append = TRUE + ) + write( + "# 2: Michaelis-Menten [3 parameters]", + ReportFile, + append = TRUE + ) + write( + "\n# SD options", + ReportFile, + append = TRUE + ) + write( + "# 1: Constant CV [1 parameter]", + ReportFile, + append = TRUE + ) + write( + "# 2: SD Michaelis-Menten [3 parameters]", + ReportFile, + append = TRUE + ) + write( + "# 3: CV Michaelis-Menten [3 parameters]", + ReportFile, + append = TRUE + ) + write( + "# 4: Known perfectly [0 parameters]", + ReportFile, + append = TRUE + ) + write( + "# 5: SD spline function of age [variable parameters]", + ReportFile, + append = TRUE + ) + write( + "# 6: SD linear piecewise function of age [ + variable parameters + ]", ReportFile, + append = TRUE + ) + write( + "# 7: SD linear function of age [2 parameters]", + ReportFile, + append = TRUE + ) + write( + "# 8: CV linear function of age [2 parameters]", + ReportFile, + append = TRUE + ) + write( + paste("Reader BiasType SigmaType"), + ReportFile, + append = TRUE + ) + for (Ireader in 1:MaxReader) { + write( + paste( + Ireader, " ", + SaveAll$data$BiasOpt[Ireader], " ", + SaveAll$data$SigOpt[Ireader] + ), + ReportFile, + append = TRUE + ) + } + write("", ReportFile, append = TRUE) + + # Bias and variance + write("Reader Age CV SD Expected age", ReportFile, append = TRUE) + for (Ireader in 1:MaxReader) { + for (Age in 0:SaveAll$data$MaxAge) { + if (Age > 1) { + CVV <- SaveAll$report$TheSD[Ireader, Age + 1] / (Age * 1) + } else { + CVV <- SaveAll$report$TheSD[Ireader, Age + 1] + } + write( + paste( + Ireader, " ", Age, " ", round(CVV, 5), " ", + round(SaveAll$report$TheSD[Ireader, Age + 1], 5), " ", + round(SaveAll$report$TheBias[Ireader, Age + 1], 5) + ), + ReportFile, + append = TRUE + ) + } + } + write("", ReportFile, append = TRUE) + + # Estimated age-structure + write("Estimated age-structure by data set", ReportFile, append = TRUE) + write("===================================", ReportFile, append = TRUE) + HeadString <- "Age " + for (IDataSet in 1:NDataSet) { + HeadString <- paste( + HeadString, + "Data set#", + IDataSet + ) + } + write(HeadString, ReportFile, append = TRUE) + for (Age in 0:SaveAll$data$MaxAge) { + HeadString <- "Age " + for (IDataSet in 1:NDataSet) { + HeadString <- paste( + HeadString, + SaveAll$report$Aprob[IDataSet, Age + 1] + ) + } + write(HeadString, ReportFile, append = TRUE) + } + write("", ReportFile, append = TRUE) + + # Age-reading error matrices + write("Final age-reading error matrices", ReportFile, append = TRUE) + for (Ireader in 1:MaxReader) { + write(paste("Matrix for reader# ", Ireader), ReportFile, append = TRUE) + write( + t(SaveAll$report$AgeErrOut[Ireader, , ]), + ncol = SaveAll$data$MaxAge + 1, + ReportFile, + append = TRUE + ) + } + + if (!is.null(SaveAll$sdreport)) { + write("\nVariable estimate SD", ReportFile, append = TRUE) + names <- row.names(summary(SaveAll$sdreport)) + write(t(cbind(names, summary(SaveAll$sdreport))), ReportFile, + append = TRUE, + ncol = 3 + ) + } + + # find the effective sample sizes + if (CalcEff == TRUE) { + ReaderSumm <- SaveAll$data$ReaderSumm + ReaderStruc <- SaveAll$data$ReaderStruc + write("Compute the effective sample sizes", ReportFile, append = TRUE) + write("==================================", ReportFile, append = TRUE) + GroupPointer <- 0 + Ages <- rep(0, MaxReader) + ProbStore <- rep(0, SaveAll$data$MaxCells) + for (IDataSet in 1:NDataSet) { + write(paste("Data set: ", IDataSet), ReportFile, append = TRUE) + write( + paste("Data_set Group Group Line Readers Obs Obs_Numbers Pred_Numbers"), + ReportFile, + append = TRUE + ) + Top <- 0 + Bot <- 0 + for (Kgroup in 1:ReaderSumm[IDataSet, 3]) { + GroupPointer <- GroupPointer + 1 + + # Find the total number of combinations of ages + # (MaxAge+1)**number_of_readers + Ncells <- 1 + for (Iread in 1:ReaderSumm[IDataSet, 2]) { + Ncells <- Ncells * (SaveAll$data$MaxAge + + 1) + } + + # Move through each possible combination of ages between 0 + # and MaxAge + TotalProb <- 0 + for (II in 1:Ncells) { + # Find the ages for this 'cell' + Ndiv <- II + for (Iread in 1:SaveAll$data$Nread[IDataSet]) Ages[Iread] <- -1 + for (Iread in 1:SaveAll$data$Nread[IDataSet]) { + if (ReaderStruc[GroupPointer, Iread + 2] > 0) { + DivJ <- 1 + if (Iread < SaveAll$data$Nread[IDataSet]) { + for (Jread in SaveAll$data$Nread[IDataSet]:(Iread + 1)) { + if (Jread > 0 & Jread <= SaveAll$data$Nread[IDataSet]) { + if (ReaderStruc[GroupPointer, Jread + 2] > 0) { + DivJ <- DivJ * (SaveAll$data$MaxAge + 1) + } + } + } + } + DivI <- floor((Ndiv - 1) / DivJ) + Ages[Iread] <- DivI + Ndiv <- Ndiv - DivI * DivJ + } + } + + # Find the probability for this cell, i.e. the probability + # of an ageing reading of Ages(1)&Ages(2)&... + if (SaveAll$data$Iperfect[IDataSet] == 0) { + Prob1 <- 0 + for (Age1 in SaveAll$data$MinAge:SaveAll$data$MaxAge) { + # Prior probability * product over readers + Prob2 <- SaveAll$report$Aprob[IDataSet, Age1 + 1] + for (Ireader in 1:SaveAll$data$Nread[IDataSet]) { + Jreader <- SaveAll$data$ReadPnt[IDataSet, Ireader] + AgeA <- Ages[Ireader] + if (AgeA >= 0) { + Prob2 <- Prob2 * SaveAll$report$AgeErrOut[Jreader, Age1 + + 1, AgeA + 1] + } + } + Prob1 <- Prob1 + Prob2 + } + ProbStore[II] <- Prob1 + TotalProb <- TotalProb + Prob1 + } else { + # Product over readers + Age1 <- Ages[1] + Prob1 <- 1 + for (Ireader in 2:SaveAll$data$Nread[IDataSet]) { + Jreader <- SaveAll$data$ReadPnt[IDataSet, Ireader] + AgeA <- Ages[Ireader] + if (Age1 >= 0 & AgeA >= 0) { + Prob1 <- Prob1 * SaveAll$report$AgeErrOut[Ireader, Age1 + + 1, AgeA + 1] + } + } + ProbStore[II] <- Prob1 + TotalProb <- TotalProb + Prob1 + } + } # for (II in 1:Ncells) + + # Now compute + writeout <- NULL + for (II in 1:Ncells) { + # Find the ages for this 'cell' + Ndiv <- II + for (Iread in 1:SaveAll$data$Nread[IDataSet]) Ages[Iread] <- -1 + for (Iread in 1:SaveAll$data$Nread[IDataSet]) { + if (ReaderStruc[GroupPointer, Iread + 2] > 0) { + DivJ <- 1 + if (Iread < SaveAll$data$Nread[IDataSet]) { + for (Jread in SaveAll$data$Nread[IDataSet]:(Iread + 1)) { + if (Jread > 0 & Jread <= SaveAll$data$Nread[IDataSet]) { + if (ReaderStruc[GroupPointer, Jread + 2] > 0) { + DivJ <- DivJ * (SaveAll$data$MaxAge + 1) + } + } + } + } + DivI <- floor((Ndiv - 1) / DivJ) + Ages[Iread] <- DivI + Ndiv <- Ndiv - DivI * DivJ + } + } + + # Check for a match + Jfound <- 0 + Pobs <- 0 + for (JJ in 1:SaveAll$data$Npnt[IDataSet]) { + # Set Ifound to 1 if the ages don't match properly + Ifound <- 0 + for (Iread in 1:SaveAll$data$Nread[IDataSet]) { + if (Ages[Iread] != SaveAll$data$TheData[IDataSet, JJ, Iread + + 1] & SaveAll$data$TheData[IDataSet, JJ, Iread + 1] >= 0) { + Ifound <- 1 + } + } + # We have a match so store the results + if (Ifound == 0) { + Pobs <- SaveAll$data$TheData[IDataSet, JJ, 1] / ReaderStruc[ + GroupPointer, + 2 + ] + Jfound <- 1 + KK <- JJ + } + } + + # Find the probability for this cell + Pest <- ProbStore[II] / TotalProb + 1e-190 + if (Jfound == 1) { + HeadString <- paste( + "Data Point: ", IDataSet, " ", GroupPointer, + " ", Kgroup, " ", KK, " " + ) + for (Iread in 1:SaveAll$data$Nread[IDataSet]) { + HeadString <- paste( + HeadString, + Ages[Iread], " " + ) + } + HeadString <- paste( + HeadString, SaveAll$data$TheData[ + IDataSet, + KK, 1 + ], " ", round( + Pobs * SaveAll$data$TotalN[IDataSet], + 7 + ), " ", round(Pest * SaveAll$data$TotalN[IDataSet], 12), + " " + ) + writeout <- rbind(writeout, HeadString) + } + + # Compute the effective sample size muliplier + Top <- Top + Pest * (1 - Pest) / ReaderStruc[GroupPointer, 2] + Bot <- Bot + (Pest - Pobs)^2 + } + write(writeout, ReportFile, append = TRUE) + } # Kgroup + EffPred <- Top / Bot * SaveAll$data$TotalN[IDataSet] + write("Data_Set Predicted_EFF Assumed_Eff Sample_size", ReportFile, + append = TRUE + ) + write(paste( + IDataSet, " ", EffPred, " ", SaveAll$data$EffN[IDataSet], + " ", SaveAll$data$TotalN[IDataSet] + ), ReportFile, append = TRUE) + write("", ReportFile, append = TRUE) + } + } # IDataSet + Npars <- length(SaveAll$sdreport$par.fixed) + + # find the effective sample sizes + for (IDataSet in 1:NDataSet) { + Data <- SaveAll$data$TheData[IDataSet, 1:SaveAll$data$Npnt[IDataSet], ] + Output <- plot_output( + Data = Data, + IDataSet = IDataSet, + MaxAge = SaveAll$data$MaxAge, + Report = SaveAll$report, + Nparameters = Npars, + LogLike = SaveAll$report$Obj_fun, + subplot = 1:3, + ReaderNames = NULL, + Species = Species, + SaveDir = SaveDir + ) + } + # print(str(Output)) + return(Output) +} \ No newline at end of file diff --git a/R/determine-.R b/R/determine-.R new file mode 100644 index 0000000..be67af5 --- /dev/null +++ b/R/determine-.R @@ -0,0 +1,14 @@ +#' Determine the number of data sets in a data file +#' @param file A file path to a data file. +#' @author Kelli F. Johnson +#' @return An integer giving the number of data sets in the file. +determine_n_sets <- function(file) { + the_lines <- readLines(file) + # Strip down to numbers and spaces + the_numbers <- gsub("\\p+|[[:alpha:][:punct:]]+", "", the_lines) + the_end <- gsub("([0-9])\\s+$", "\\1", the_numbers) + single_numbers <- grep("^[0-9]+$", the_end) + number_of_sets <- length(single_numbers) / 3 + stopifnot(number_of_sets %% 1 == 0) + return(as.integer(number_of_sets)) +} diff --git a/R/fit.R b/R/fit.R new file mode 100644 index 0000000..b31f77e --- /dev/null +++ b/R/fit.R @@ -0,0 +1,9 @@ +#' @useDynLib AgeingError, .registration = TRUE +NULL + +#' Fit an ageing error model using TMB +#' +#' @export +#' @author Kelli F. Johnson +fit <- function() { +} diff --git a/R/minimizer.R b/R/minimizer.R new file mode 100644 index 0000000..f1a842b --- /dev/null +++ b/R/minimizer.R @@ -0,0 +1,73 @@ +#' Minimize the negative log likelihood +#' +#' Minimize the negative log likelihood using `"nlmimb"` and/or `"optim"`. +#' +#' @param model A model to be optimized. +#' @param method A string specifying the desired method to be used for the +#' optimization routine. The options are listed in the function call, where +#' the default is to use `"optim"`. Using both routines is an option, via +#' `"both"`, and will lead to first optimizing the model using `"nlminb"` +#' and then re-optimization of the model with `"optim"`. Note that when using +#' [stats::optim()], the `"L-BFGS-B"` method is used rather than the default +#' method of `"Nelder-Mead"`. +#' @param lower,upper Vectors of parameter bounds of the same length as the +#' number of parameters in the model. +#' @inheritParams DoApplyAgeError +#' @author Andre E. Punt +minimizer <- function(model, + method = c("optim", "nlmimb", "both"), + lower, + upper, + verbose = FALSE) { + method <- match.arg(method) + # Check parameters 'work' + if (length(lower) > 0 & length(model$par) != length(lower)) { + cli::cli_abort("wrong number of lower bounds") + } + if (length(upper) > 0 & length(model$par) != length(upper)) { + cli::cli_abort("wrong number of upper bounds") + } + + # Find the model and iterate until convergence + if (method == "both" || method == "nlmimb") { + fit <- nlminb( + model$par, + model$fn, + model$gr, + upper = upper, + lower = lower, + control = list( + eval.max = 10000, + iter.max = 10000, + rel.tol = 1e-15, + abs.tol = 1e-15 + ) + ) + model$par <- model$env$last.par.best + model$fitv <- fit$objective + if (verbose) { + cli::cli_inform(model$fitv) + } + } + if (method == "both" || method == "optim") { + fit <- optim( + model$par, + model$fn, + method = "L-BFGS-B", + model$gr, + upper = upper, + lower = lower, + control = list(maxit = 10000, factr = 1e-15) + ) + model$par <- model$env$last.par.best + model$fitv <- fit$value + if (verbose) { + cli::cli_inform(model$fitv) + } + } + if (verbose) { + print(fit) + } + + return(model) +} diff --git a/R/nwfscAgeingError.R b/R/nwfscAgeingError.R index 19bc38b..9d7b662 100644 --- a/R/nwfscAgeingError.R +++ b/R/nwfscAgeingError.R @@ -1,234 +1,12 @@ #' Ageing error software #' -#' Data input and stepwise model selection in R for the -#' Punt et al. (2008) ageing error model -#' James T. Thorson, Ian Stewart, and André E. Punt +#' R package to support the Punt et al. (2008) ageing error model #' -#' Function name: RunFn() -#' -#' Background: -#' -#' The Punt et al. (2008) model calculates the likelihood of model parameters given an observed dataset that includes age reads (henceforth 'reads') provided by multiple readers for a set of otoliths. For each reader, two sets of parameters are estimated that define the standard deviation and bias of the reads provided by that reader. Specifically, the model has parameters that approximate the expected age of each read given the true age of an otolith, and the standard deviation of a normally distributed reading error given the true age of an otolith. Each of these functional forms can be either linear or curvilinear, and each is conditioned on an unobserved 'True' age for each otolith. This 'True' age for each otolith can be considered a random-effect, and the software computes the resulting likelihood while summing across all possible discrete values for this 'True' age for each otolith. -#' -#' This summation across all possible values for a 'True' age for each otolith also requires a hyperdistribution representing the 'prior' probability that an otolith is any given age; this prior is parameterized using a set of hyperparameters in addition to the parameters that govern the SD and bias for each reader. Specifically, one hyperparameter is estimated for every age between (and including) a MinusAge and a PlusAge, which are defined exogenously for every model run. Ages above the PlusAge or below the MinusAge have a prior Proportion-at-Age defined as a loglinear deviation from the Proportion-at-Age for the PlusAge and MinusAge. The slope of these loglinear deviations thus constitutes an additional 1 or 2 fixed effect parameter to estimate. The 'True' proportion-at-age is then calculated from these fixed effect and log-linear slope parameters by normalizing the resulting distribution so that it sums to one. -#' -#' Necessary Inputs: -#' -#' Format data: Data should be formatted with unique reading records as rows and readers/labs as columns (exampling in Table 1). Specifically, each column corresponds to a reader, readers, lab or labs with a unique reading error and bias; the Punt (2008) model allows for approximately 15 unique columns, so the number of 'readers' must be less than this. Additionally, an additional column inserted on the left-hand side of the data matrix indicates the number of otoliths with that unique read record; this cell is generally '1', but any instances where two or more otoliths have identical reads for all readers are combined and this cell is incremented. Any missing entries (i.e., where a reader has not read anything for a given otolith) are indicated with a '-999' in that cell. The model can be configured such that a given column (i.e. reader) has parameter values that 'mirror' the parameter values for a reader to it's left. This can allow estimation of a model where readers within the same lab are estimated to -#' have the same reading error and bias. Any instance where a particular reader (or lab) provides multiple reads for a single otolith can be dealt with by creating a 2nd column for that reader, and configuring the model so that parameters for that 2nd column mirror the parameters for the 1st column for that reader. Select inputs: The call-function 'FnRun()' in R writes data in the necessary format and then calls the Punt (2008) model. This model requires several inputs, which are listed and explained below: -#' -#' Data: This is the data set as previously formatted. If the data has multiple rows with identical reads, this will cause an error and the 'XXX.rep' file will have a properly formatted data matrix which can be cut-pasted into a 'XXX.dat' file for use. -#' -#' SigOpt: This a vector with one entry for each reader (i.e. Ncol-1 entries). Each entry specifies the functional form of reading error as a function of true age. Possible entries include: -#' '-1', '-2', '-3', etc: This will make this reader mirror the estimated SD from another reader to it's left. '-1' causes it to mirror the estimated SD for the first reader, etc. This number has to be lower than the current entry number. -#' -#' '1' : Constant CV, i.e., a 1 parameter linear relationship of SD with true age. -#' -#' '2': Curvilinear SD, i.e., a 3 parameter Hollings-form relationship of SD with true age -#' -#' '3': Curvilinear with CV, i.e., a 3-parameter Hollings-form relationship of CV with true age -#' -#' '4': No error (but potentially bias) -#' -#' BiasOpt: This is a vector with one entry for each reader: -#' -#' '-1', '-2', '-3': See SigOpt -#' -#' '0': Unbiased -#' -#' '1': Constant CV, i.e., a 1-parameter linear relationship of bias with true age -#' -#' '2': Curvilinear, i.e., a 2-parameter Hollings-form relationship of bias with true age -#' -#' NDataSets: This is generally '1' and other values are not implemented in the current R-code. -#' -#' MinAge: The minimum possible 'True' age -#' -#' MaxAge: The maximum possible 'True' age -#' -#' RefAge: An arbitrarily chosen age from which 'true' age-composition fixed-effects are calculated as an offset. This has no effect on the answer, but could potentially effect estimation speed. -#' -#' MinusAge: The minimum age for which an age-specific age-composition is estimated. Ages below this MinusAge have 'true' proportion-at-age (Pa) estimated as P_a=P_MinusAge?e^(?(MinusAge-a)), where ? is an estimated log-linear trend in the 'true' proportion-at-age. If MinusAge = MinAge, ? is not estimated. -#' -#' PlusAge: Identical to MinusAge except defining the age above with age-specific age-composition is not estimated. -#' -#' MaxSd: An upper bound on possible values for the standard deviation of reading error -#' -#' MaxExpectedAge: Set to MaxAge -#' -#' SaveFile: Directory where 'agemat.exe' is located and where all ADMB intermediate and output files should be located. -#' -#' EffSampleSize: Indicating whether effective sample size should be calculated. Missing values in the data matrix will cause this to be ineffective, in which case this should be set to '0' -#' -#' Intern: 'TRUE' indicates that ADMB output should be displayed in R; 'FALSE' does not. -#' -#' Stepwise model selection in R -#' -#' Function name: StepwiseFn() -#' -#' Background: -#' -#' Stepwise model selection allows many different model configurations to be explored: in this code, I have used AIC as the metric for comparison among model structures, although BIC or other criteria could be used. AIC seems appropriate to select among possible PlusAge values, because this parameter determines the number of estimated fixed effect hyperparameters that are used to define the true 'Proportion-at-age' hyperdistribution. This hyperdistribution in turn is used as a 'prior' when integrating across a 'True Age' associated with each otolith. This 'True Age' latent effect can be interpreted as a random effect (one for each observation), so the use of AIC to select among parameterizations of the fixed effects defining this hyperdistribution is customary (Pinheiro and Bates 2009). Additionally, the use of AIC to select the value of the PlusAge parameter appears (in preliminary analysis using Sablefish ageing error data) to lead to a 'True' proportion-at-age that is biologically plausible. -#' -#' Necessary Inputs: -#' -#' Format data: Same as for a single-run -#' -#' Select inputs: Most inputs are the same as for a single-run. However, the 'SigOpt' 'BiasOpt' and 'PlusAge' are now specified using a matrix called 'PossibleMat', which has 2*Nreaders+2 rows and as many columns as necessary. Row #1-#Nreaders specify the SigOpt for each reader; Next are the BiasOpt for each reader, followed by the PlusAge. The first entry in each row specifies the starting value for that parameter in the search algorithm; a value must be specified in the first column for each parameter. Any parameter for which the search algorithm should search across possible values has other possible values in the 2nd, 3rd, and subsequent cells in that row. An example is given in Table 2. -#' -#' Diagnostic figures in R -#' -#' Function name: PlotOutputFn() -#' -#' Background: -#' -#' There are many ways to visualize the results that are provided by the Punt et al. (2008) model. Some of these allow comparison with observed data. However, any comparison with observed data is a little problematic, as comparisons must generally be conditioned on a 'True' age that is not observed. In place of a 'True' age, the diagnostic plots that we present generally condition on an 'Estimated' age, which is fixed as the mode of the conditional probability-at-age for each otolith. -#' -#' Diagnostic plots include: -#' -#' Error and bias by reader: A panel graph where each panel shows the expected and standard deviation in age reads for that reader. This is displayed against a scatterplot of the 'Read' and 'Estimated' ages for each otolith that was read by that reader. -#' -#' Proportion-at-age histogram: The estimated 'Proportion-at-age' can be plotted as a histogram, and is displayed against the 'observed' distribution of read ages. This is useful to determine if the estimated 'proportion-at-age' is generally plausible, e.g., whether it has too many ages where the estimated proportion-at-age approaches zero (which is unlikely in a composite sample with moderate effective sample sizes). This plot can also be used as a diagnostic to confirm that AIC has selected reasonable values for the MinusAge and PlusAge parameters. -#' -#' Necessary Inputs: -#' -#' The plotting function reads the 'XXX.rep' and 'XXX.par' files that are located in the directory that is provided. It also requires specifying the MaxAge and Data, as formatted and defined earlier. #' @references #' Punt, A.E., Smith, D.C., KrusicGolub, K., and Robertson, S. 2008. #' Quantifying age-reading error for use in fisheries stock assessments, #' with application to species in Australias southern and eastern scalefish and shark fishery. #' Canadian Journal of Fisheries and Aquatic Sciences 65: 1991-2005. #' -#' @examples -#' \dontrun{ -#' # File for Punt et al. (2008) model (pre-compiled in ADMB) -#' SourceFile = paste0( -#' system.file(package='AgeingErrorPackage'),'/executables/' -#' ) -#' -#' # This is where all runs will be located -#' DateFile = paste(getwd(),'/',Sys.Date(),'/',sep='') -#' dir.create(DateFile) -#' -#' ############################# -#' # -#' # Generate and run with an artificial dataset -#' # -#' # SimulatorFn() generates the data and has the following settings -#' # Nreaders is the number of readers -#' # ReadsMat is a matrix where each row specifies how many reads -#' # (in the first column) have a particular pattern of double reads -#' # (in the second through Nreaders+1 columns) -#' # SelexForm is the selectivity-at-age form -#' # (logistic selex-at-age is the only one that is implemented) -#' # SelexParams are standard to the logistic equation -#' # BiasParams b in the following equation: -#' # E[AgeRead] = b*TrueAge -#' # ErrorParams are CV in the following equation: -#' # Var[AgeRead] = (CV*TrueAge)^2 -#' # RecCV is the is the CV in recruitment -#' # (and recruitment is assumed stationary over time) -#' # RecAR1 is first-order autoregressive coefficient in recruitment -#' # Amax is the maximum allowable age -#' # -#' ############################# -#' -#' ##### Parameters for generating data -#' # This represents 2 unique readers -#' # Row 1 -- Otoliths read only once by reader -#' # Row 2 -- Otoliths read twice by reader 1 -#' # Row 2 -- Otoliths read only once by reader 2 -#' # Row 4 -- Otoliths read twice by reader 2 -#' # Row 5 -- Otoliths read once by reader 1 and once by reader 2 -#' Nreaders = 4 -#' ReadsMat = cbind(NumberOfReads=rep(100,5), -#' Reader1=c(1,1,0,0,1), Reader1_DoubleReads=c(0,1,0,0,0), -#' Reader2=c(0,0,1,1,1), Reader2_DoubleReads=c(0,0,0,1,0) -#' ) -#' rownames(ReadsMat) = c("Reader1_Only", "Reader1_DoubleReads", -#' "Reader2_Only", "Reader2_DoubleReads", "Reader1_&_Reader2" -#' ) -#' -#' # Generate data -#' AgeReads = SimulatorFn(Nreaders = Nreaders, M = 0.2, -#' SelexForm = "Logistic", SelexParams = c(5,0.2), -#' BiasParams = c(1,1,1.1,1.1), ErrorParams = c(0.2,0.2,0.2,0.2), -#' ReadsMat = ReadsMat, RecCv = 0.6, RecAr1 = 0.8, Amax = 100 -#' ) -#' utils::write.csv(AgeReads, -#' file = paste0(DateFile,"Simulated_data_example.csv") -#' ) -#' -#' ##### Format data -#' Nreaders = ncol(AgeReads) -#' AgeReads = ifelse(is.na(AgeReads),-999,AgeReads) -#' # Change NA to -999 (which the Punt software considers missing data) -#' -#' # Potentially eliminate rows that are only read once -#' # These rows have no information about reading error, -#' # but are potentially informative about latent age-structure -#' # It is unknown whether eliminating these rows degrades -#' # estimation of error and bias, and is currently recommended -#' # to speed up computation -#' # KeepRow = ifelse(rowSums(ifelse(AgeReads==-999,0,1),na.rm=TRUE)<=1, -#' # FALSE,TRUE -#' # ) -#' # AgeReads = AgeReads[KeepRow,] -#' # Combine duplicate rows -#' AgeReads2 = rMx(c(1, AgeReads[1,])) # correctly formatted data object -#' for(RowI in 2:nrow(AgeReads)){ -#' DupRow = NA -#' for(PreviousRowJ in 1:nrow(AgeReads2)){ -#' if(all(AgeReads[RowI,1:Nreaders]==AgeReads2[PreviousRowJ,1:Nreaders+1])) DupRow = PreviousRowJ -#' } -#' if(is.na(DupRow)) AgeReads2 = rbind(AgeReads2, c(1, AgeReads[RowI,])) -#' # Add new row to AgeReads2 -#' if(!is.na(DupRow)) AgeReads2[DupRow,1] = AgeReads2[DupRow,1] + 1 -#' # Increment number of samples for the previous duplicate -#' } -#' -#' ######## Determine settings for ADMB -#' -#' # Generate vector with settings for Bias -#' # One entry for each reader -#' # -X = Mirror the parameters for reader X -#' # 0 = Unbiased (at least 1 reader has to be) -#' # 1 = Linear bias -#' # 2 = Curvilinear bias (3 param) -#' BiasOpt = c(0,-1,2,-3) -#' -#' # Generate vector with settings for SD -#' # One entry for each reader -#' # -X = Mirror the parameters for reader X -#' # 0 = No error -#' # 1 = Constant coefficient of variation -#' # 2 = Curvilinear standard deviation (3 param) -#' # 3 = Curvilinear coefficient of variation (3 param) -#' SigOpt = c(3,-1,3,-3) -#' -#' # Define minimum and maximum ages for integral across unobserved ages -#' MinAge = 1 -#' MaxAge = ceiling(max(AgeReads2)/10)*10 -#' -#' # Run the model -#' # Data=AgeReads2; SigOpt=SigOpt; BiasOpt=BiasOpt; -#' # NDataSets=1; MinAge=MinAge; MaxAge=MaxAge; -#' # RefAge=10; MinusAge=1; PlusAge=30; MaxSd=40; -#' # MaxExpectedAge=MaxAge+10; SaveFile=DateFile; -#' # AdmbFile=SourceFile; EffSampleSize=0; Intern=TRUE -#' RunFn(Data = AgeReads2, SigOpt = SigOpt, BiasOpt = BiasOpt, -#' NDataSets = 1, MinAge = MinAge, MaxAge = MaxAge, RefAge = 10, -#' MinusAge = 1, PlusAge = 30, SaveFile = DateFile, AdmbFile = SourceFile, -#' EffSampleSize = 0, Intern = FALSE, JustWrite = FALSE -#' ) -#' -#' # Plot output -#' # Data = AgeReads2; MaxAge = MaxAge; SaveFile = DateFile; PlotType = "PDF" -#' PlotOutputFn(Data = AgeReads2, MaxAge = MaxAge, SaveFile = DateFile, -#' PlotType = "PDF" -#' ) -#' } -#' -#' @docType package -#' @name nwfscAgeingError -NULL \ No newline at end of file +#' @keywords internal +"_PACKAGE" diff --git a/R/plot_output.R b/R/plot_output.R new file mode 100644 index 0000000..5a47292 --- /dev/null +++ b/R/plot_output.R @@ -0,0 +1,329 @@ +#' Plot output +#' +#' Plots age comparisons and results from the fitted Ageing Error model +#' +#' @param Data Input data matrix +#' @param MaxAge Maximum estimated age +#' @param SaveFile Directory for fitted model +#' @param ReaderNames Vector with names of each reader, defaults to +#' 'Reader1', 'Reader2', etc. if left at the default argument of `NULL`. +#' If you pass a vector of strings, the vector must be the same length as +#' `NCOL(Data) - 1`. +#' @param subplot Vector of which plots to create. +#' @param ... Additional arguments passed to [ageing_comparison()]. +#' @return Returns AIC, AICc, and BIC for fitted model. +#' +#' @references Punt, A.E., Smith, D.C., KrusicGolub, K., and Robertson, S. 2008. +#' Quantifying age-reading error for use in fisheries stock assessments, +#' with application to species in Australias southern and eastern scalefish +#' and shark fishery. Can. J. Fish. Aquat. Sci. 65: 1991-2005. +#' +#' @author James T. Thorson, Ian G. Taylor +#' +#' @export +#' +plot_output <- function(Data, + IDataSet, + MaxAge, + Report, + subplot = 1:3, + Nparameters = 0, + LogLike = 0, + ReaderNames = NULL, + Species = "AgeingError", + SaveDir = getwd(), + verbose = FALSE, + ...) { + fs::dir_create(SaveDir) + + # Interpret inputs + Nreaders <- ncol(Data) - 1 + Ages <- Nages <- MaxAge + 1 + + # Reader names + if (is.null(ReaderNames)) { + ReaderNames <- paste0("Reader", 1:Nreaders) + } + + # Age-reading error matrices: dimensions are Reader, TrueAge, EstAge + MisclassArray <- array( + NA, + dim = c(Nreaders, Ages, Ages), + dimnames = list( + paste("Reader", 1:Nreaders), + paste("TrueAge", 0:MaxAge), + paste("EstAge", 0:MaxAge) + ) + ) + for (i in 1:Nreaders) { + MisclassArray[i, , ] <- Report$AgeErrOut[i, , ] + } + + # Estimated age-structure + AgeStruct <- cbind(0:MaxAge, t(Report$Aprob)) + + # Reader CV, SD and Bias + Temp <- matrix(0, nrow = 5 * Nages * Nreaders, ncol = 5) + for (Ireader in 1:Nreaders) { + yrange <- (Ireader - 1) * Nages + Temp[yrange + 1:Nages, 1] <- Ireader + Temp[yrange + 1:Nages, 2] <- 0:MaxAge + Temp[yrange + 1:Nages, 3] <- Report$TheSD[Ireader, ] / c(1, 1:MaxAge) + Temp[yrange + 1:Nages, 4] <- Report$TheSD[Ireader, ] + Temp[yrange + 1:Nages, 5] <- Report$TheBias[Ireader, ] + } + Temp <- t(Temp) + + ErrorAndBiasArray <- array( + as.numeric(Temp), + dim = c(5, Nages, Nreaders), + dimnames = list( + c("Reader", "True_Age", "CV", "SD", "Expected_age"), + paste("Age", 0:MaxAge), + paste("Reader", 1:Nreaders) + ) + ) + if (verbose) { + print(str(ErrorAndBiasArray)) + } + # Estimate unobserved age for each otolith This is done by assigning each + # otolith to the age which has maximum posterior probability (i.e. the + # conditional mode, as is typically done for random effects) + AgeProbs <- array( + NA, + dim = c(nrow(Data), Ages), + dimnames = list( + paste("Otolith", 1:nrow(Data)), + paste("TrueAge", 0:MaxAge) + ) + ) + OtI <- AgeI <- ReadI <- 1 + for (OtI in 1:nrow(Data)) { + for (AgeI in 1:Ages) { + AgeProbs[OtI, AgeI] <- 1 + for (ReadI in 1:Nreaders) { + if (Data[OtI, ReadI + 1] != -999) { + AgeRead <- Data[OtI, ReadI + 1] + AgeProbs[OtI, AgeI] <- AgeProbs[OtI, AgeI] * (MisclassArray[ + ReadI, + AgeI, AgeRead + 1 + ])^Data[OtI, 1] + } # end check for value other than -999 + } # end loop over readers + } # end loop over ages + } # end loop over rows of data + + # Remove MaxAge before calculating 'TrueAge' because the MaxAge is a + # plus-group, and ends up with maximum probability for most ages in the + # upper tail ANDRE - Found another issue - should be age-1 because the + # first age is zero + TrueAge <- apply( + AgeProbs, + MARGIN = 1, + FUN = function(Vec) { + order(Vec[-length(Vec)], decreasing = TRUE)[1] + } + ) - 1 + + DataExpanded <- Data[rep(1:nrow(Data), Data[, 1]), -1] + DataExpanded[DataExpanded == -999] <- NA + + # Plot comparison of data for each pair of readers + if (1 %in% subplot) { + # make plots of input data for each reader pair + for (ireader in 1:(Nreaders - 1)) { + for (jreader in (ireader + 1):Nreaders) { + ageing_comparison( + xvec = DataExpanded[, ireader], + yvec = DataExpanded[, jreader], + xlab = ReaderNames[ireader], + ylab = ReaderNames[jreader], + maxage = max(DataExpanded, na.rm = TRUE), + hist = FALSE, + png = TRUE, + SaveFile = SaveDir, + filename = paste0( + Species, + "-DataSet-", + IDataSet, + "-", + ReaderNames[ireader], + "Vs", + ReaderNames[jreader], + ".png" + ), + verbose = verbose, + ... + ) + } + } + } # end check for whether subplot 1 was requested + + # Plot estimated age structure + if (2 %in% subplot) { + png( + file.path( + SaveDir, + paste0( + Species, + "-DataSet-", + IDataSet, + "EstimatedVsObservedAgeStructure.png" + ) + ), + width = 6, + height = 6, + units = "in", + res = 200 + ) + par(mar = c(3, 3, 2, 0), mgp = c(1.5, 0.25, 0), tck = -0.02, oma = c( + 0, + 0, 0, 0 + ) + 0.1) + plot( + x = AgeStruct[, 1], + y = AgeStruct[, 2], + type = "s", + lwd = 2, + xlab = "Age", + ylab = "Prop", + main = "Estimated=Black, Observed=Red" + ) + hist( + as.matrix(DataExpanded), + add = TRUE, + freq = FALSE, + breaks = seq(0, MaxAge, by = 1), + col = rgb(red = 1, green = 0, blue = 0, alpha = 0.3) + ) + dev.off() + } # end check for whether subplot was requested + + # Plot true age against different age reads + if (3 %in% subplot) { + Ncol <- ceiling(sqrt(Nreaders)) + Nrow <- ceiling(Nreaders / Ncol) + png( + file.path( + SaveDir, + paste0( + Species, + "-DataSet-", + IDataSet, + "TrueVsReadsByReader.png" + ) + ), + width = Ncol * 3, + height = Nrow * 3, + units = "in", + res = 200 + ) + par( + mfrow = c(Nrow, Ncol), + mar = c(3, 3, 2, 0), + mgp = c(1.5, 0.25, 0), + tck = -0.02, + oma = c(0, 0, 5, 0) + 0.1 + ) + for (ReadI in 1:Nreaders) { + Main <- ReaderNames[ReadI] + + # Add 0.5 to match convention in Punt model that otoliths are + # read half way through year + Temp <- cbind(TrueAge, Data[, ReadI + 1] + 0.5) + # Exclude rows with no read for this reader + Temp <- Temp[which(Data[, ReadI + 1] != -999), ] + plot( + x = Temp[, 1], + y = Temp[, 2], + ylim = c(0, MaxAge), + xlim = c(0, MaxAge), + col = rgb(red = 0, green = 0, blue = 0, alpha = 0.2), + xlab = "Mode predicted age | parameters", + ylab = "Read age", + lwd = 2, + main = Main, + pch = 21, + cex = 0.2 + ) + lines(x = c(0, MaxAge), y = c(0, MaxAge), lwd = 1, lty = "dashed") + lines( + x = ErrorAndBiasArray["True_Age", , ReadI], + y = ErrorAndBiasArray["Expected_age", , ReadI], + type = "l", + col = "red", + lwd = 1 + ) + lines( + x = ErrorAndBiasArray["True_Age", , ReadI], + y = ErrorAndBiasArray["SD", , ReadI], + type = "l", + col = "blue", + lwd = 1 + ) + lines( + x = ErrorAndBiasArray["True_Age", , ReadI], + y = ErrorAndBiasArray["Expected_age", , ReadI] + + 2 * ErrorAndBiasArray["SD", , ReadI], + type = "l", + col = "red", + lwd = 1, + lty = "dashed" + ) + lines( + x = ErrorAndBiasArray["True_Age", , ReadI], + y = ErrorAndBiasArray["Expected_age", , ReadI] - + 2 * ErrorAndBiasArray["SD", , ReadI], + type = "l", + col = "red", + lwd = 1, + lty = "dashed" + ) + } + mtext( + side = 3, + outer = TRUE, + text = paste0( + "Reads(dot), Sd(blue), expected_read(red solid line),\n", + " and 95% CI for expected_read(red dotted line)" + ), + line = 1 + ) + dev.off() + } # end check for whether subplot was requested + + ## AIC + Nll <- LogLike + Df <- Nparameters + n <- sum(ifelse(Data[, -1] == -999, 0, 1)) + Aic <- 2 * Nll + 2 * Df + Aicc <- Aic + 2 * Df * (Df + 1) / (n - Df - 1) + Bic <- 2 * Nll + Df * log(n) + + # Write definitions to file + for (ReadI in 1:Nreaders) { + Main <- ReaderNames[ReadI] + write.csv( + ErrorAndBiasArray[, , ReadI], + file = file.path( + SaveDir, + paste0( + Species, + " SS3_format_", + Main, + ".csv", + sep = "" + ) + ) + ) + } + + + # Return stuff + ModelSelection <- list(AIC = Aic, AICc = Aicc, BIC = Bic) + Output <- list( + ModelSelection = ModelSelection, + ErrorAndBiasArray = ErrorAndBiasArray + ) + return(Output) +} \ No newline at end of file diff --git a/R/run.R b/R/run.R new file mode 100644 index 0000000..ede757e --- /dev/null +++ b/R/run.R @@ -0,0 +1,53 @@ +prepare_inputs <- function(file_data, file_specs) { + the_data <- CreateData( + DataFile = file_data, + NDataSet = determine_n_sets(file_data) + ) + the_specs <- CreateSpecs( + SpecsFile = file_specs, + DataSpecs = the_data + ) + return(list( + data = the_data, + specs = the_specs + )) +} + +prepare_run <- function(inputs, directory) { + model <- AgeingError:::DoApplyAgeError( + Species = "AgeingError", + DataSpecs = inputs[["data"]], + ModelSpecs = inputs[["specs"]], + AprobWght = 0.000001, + SlopeWght = 0.01, + SaveDir = directory, + verbose = FALSE + ) + Output <- AgeingError:::ProcessResults( + Species = "AgeingError", + SaveDir = directory, + CalcEff = FALSE, + verbose = FALSE + ) + return(model) +} + +#' Run ageing error routine +#' +#' A wrapper for running a TMB model to estimate ageing error for a given data +#' set and specification file. +#' +#' @param file_data A string specifying the file path to a data file. +#' @param file_specs A string specifying the file path to the specifications +#' file. +#' @param directory A string specifying a file path to a directory where you +#' would like to save the results. +#' +#' @export +#' @author Kelli F. Johnson +#' @return Invisibly return model output. +run <- function(file_data, file_specs, directory) { + inputs <- prepare_inputs(file_data = file_data, file_specs = file_specs) + outputs <- prepare_run(inputs = inputs, directory = directory) + return(invisible(outputs)) +} diff --git a/R/zzz.R b/R/zzz.R new file mode 100644 index 0000000..a65726d --- /dev/null +++ b/R/zzz.R @@ -0,0 +1,4 @@ + +.onUnload <- function(libpath) { + library.dynam.unload("AgeingError", libpath) +} diff --git a/README.md b/README.md index 4f22a7a..fd2564d 100644 --- a/README.md +++ b/README.md @@ -1,95 +1,27 @@ Description ================ -nwfscAgeingError -* Wrapper for tool to estimate ageing error given double-reads of hard structures (e.g., otoliths) +AgeingError + +* Software to estimate ageing error given double-reads of hard structures (e.g., otoliths) - [![R build status](https://github.com/pfmc-assessments/nwfscAgeingError/workflows/R-CMD-check/badge.svg)](https://github.com/pfmc-assessments/nwfscAgeingError/actions) + [![R build status](https://github.com/pfmc-assessments/AgeingError/workflows/R-CMD-check/badge.svg)](https://github.com/pfmc-assessments/AgeingError/actions) Instructions ============= -First, download the executable for your operating system from the releases page: -https://github.com/pfmc-assessments/nwfscAgeingError/releases - -Then install the `nwfscAgeingError` package from this github site as follows: +Install the `AgeingError` package from this github site as follows: ```r -install.packages("devtools") -devtools::install_github("pfmc-assessments/nwfscAgeingError") -# Load package -library(nwfscAgeingError) - -##### Run examples -# File where the Punt et al. (2008) model (pre-compiled in ADMB) resides -SourceFile <- file.path(system.file("executables", - package = "nwfscAgeingError"), .Platform$file.sep) -# This is where all runs will be located -dir <- getwd() -DateFile <- file.path(dir, Sys.Date()) -dir.create(DateFile) - -##### Generate and run with an artificial dataset -example(SimulatorFn) -utils::write.csv(AgeReads, - file = file.path(DateFile, "Simulated_data_example.csv")) - -##### Format data -example(RunFn) -##### Run the model (MAY TAKE 5-10 MINUTES) -RunFn(Data = AgeReads2, SigOpt = SigOpt, KnotAges = KnotAges, - BiasOpt = BiasOpt, - NDataSets = 1, MinAge = MinAge, MaxAge = MaxAge, RefAge = 10, - MinusAge = 1, PlusAge = 30, SaveFile = DateFile, AdmbFile = SourceFile, - EffSampleSize = 0, Intern = FALSE, JustWrite = FALSE, CallType = "shell" -) -# Plot output -PlotOutputFn(Data = AgeReads2, MaxAge = MaxAge, - SaveFile = DateFile, PlotType = "PDF" -) - -example(StepwiseFn) -# Run model selection -# This outputs a series of files -# 1. "Stepwise - Model loop X.txt" -- -# Shows the AIC/BIC/AICc value for all different combinations -# of parameters arising from changing one parameter at a time -# according to SearchMat during loop X -# 2. "Stepwise - Record.txt" -- -# The Xth row of IcRecord shows the record of the -# Information Criterion for all trials in loop X, -# while the Xth row of StateRecord shows the current selected values -# for all parameters at the end of loop X -# 3. Standard plots for each loop -# WARNING: One run of this stepwise model building example can take -# 8+ hours, and should be run overnight -StepwiseFn(SearchMat = SearchMat, Data = AgeReads2, - NDataSets = 1, MinAge = MinAge, MaxAge = MaxAge, - RefAge = 10, MaxSd = 40, MaxExpectedAge = MaxAge+10, - SaveFile = DateFile, - InformationCriterion = c("AIC", "AICc", "BIC")[3] -) - -``` +# using {remotes} +remotes::install_github("pfmc-assessments/AgeingError") +# using {pak} +pak::pak("pfmc-assessments/AgeingError") -Citing this package -============= -When using this software, please cite it as: - -* Thorson, J.T., Stewart, I.J., and Punt, A.E. 2012. nwfscAgeingError: a user interface in R for the Punt et al. (2008) method for calculating ageing error and imprecision. Available from: http://github.com/pfmc-assessments/nwfscAgeingError. - -and also please cite the Punt et al. (2008) paper below. +# Load package +library(AgeingError) -Further reading -============= -The user manual (which may not include all current features) can accessed by running the following R code: -```r -library(nwfscAgeingError) -?nwfscAgeingError ``` -For more details regarding development and testing of this software please see: -* Punt, A.E., Smith, D.C., KrusicGolub, K., and Robertson, S. 2008. Quantifying age-reading error for use in fisheries stock assessments, with application to species in Australia’s southern and eastern scalefish and shark fishery. Can. J. Fish. Aquat. Sci. 65: 1991–2005. https://doi.org/10.1139/F08-111. - - +See the vignette for example use. diff --git a/_pkgdown.yml b/_pkgdown.yml new file mode 100644 index 0000000..63f4f8e --- /dev/null +++ b/_pkgdown.yml @@ -0,0 +1,4 @@ +url: http://pfmc-assessments.github.io/nwfscAgeingError/ +template: + bootstrap: 5 + diff --git a/inst/CITATION b/inst/CITATION new file mode 100644 index 0000000..483c1c6 --- /dev/null +++ b/inst/CITATION @@ -0,0 +1,17 @@ +bibentry( + bibtype = "Article", + title = paste0("Quantifying age-reading error for use in fisheries stock + assessments, with application to species in {Australia}'s + southern and eastern scalefish and shark fishery"), + author = c( + person(c("Andre", "E."), "Punt"), + person(c("D.", "C."), "Smith"), + person(c("K."), "KrusicGolub"), + person(c("S."), "Robertson") + ), + year = "2008", + journal = "Canadian Journal of Fisheries and Aquatic Sciences", + volume = "65", + pages = "1991--2005", + doi = "10.1139/F08-11" +) diff --git a/inst/extdata/BG2022.dat b/inst/extdata/BG2022.dat new file mode 100644 index 0000000..ca263fa --- /dev/null +++ b/inst/extdata/BG2022.dat @@ -0,0 +1,272 @@ +Range_of_ages +0 25 + +Data_set_1 +264 # number of lines +4 # Number of readers +0 25 5 # minus group; plus group; reference age + 1 2 3 4 # Which readers +9 0 0 -999 -999 +1 0 10 -999 -999 +153 1 1 -999 -999 +30 1 2 -999 -999 +1 1 4 -999 -999 +12 2 1 -999 -999 +454 2 2 -999 -999 +51 2 3 -999 -999 +33 3 2 -999 -999 +499 3 3 -999 -999 +65 3 4 -999 -999 +3 3 5 -999 -999 +1 3 6 -999 -999 +64 4 3 -999 -999 +561 4 4 -999 -999 +95 4 5 -999 -999 +4 4 6 -999 -999 +3 4 7 -999 -999 +1 4 13 -999 -999 +1 5 3 -999 -999 +59 5 4 -999 -999 +588 5 5 -999 -999 +81 5 6 -999 -999 +12 5 7 -999 -999 +4 5 8 -999 -999 +6 6 4 -999 -999 +83 6 5 -999 -999 +325 6 6 -999 -999 +47 6 7 -999 -999 +9 6 8 -999 -999 +2 6 9 -999 -999 +1 6 14 -999 -999 +5 7 5 -999 -999 +31 7 6 -999 -999 +236 7 7 -999 -999 +37 7 8 -999 -999 +7 7 9 -999 -999 +2 7 10 -999 -999 +1 7 15 -999 -999 +1 8 3 -999 -999 +3 8 5 -999 -999 +6 8 6 -999 -999 +37 8 7 -999 -999 +196 8 8 -999 -999 +44 8 9 -999 -999 +6 8 10 -999 -999 +1 8 11 -999 -999 +1 9 5 -999 -999 +3 9 6 -999 -999 +6 9 7 -999 -999 +35 9 8 -999 -999 +261 9 9 -999 -999 +40 9 10 -999 -999 +4 9 11 -999 -999 +2 9 12 -999 -999 +1 10 7 -999 -999 +5 10 8 -999 -999 +34 10 9 -999 -999 +239 10 10 -999 -999 +29 10 11 -999 -999 +1 10 12 -999 -999 +1 11 8 -999 -999 +6 11 9 -999 -999 +34 11 10 -999 -999 +115 11 11 -999 -999 +15 11 12 -999 -999 +4 11 13 -999 -999 +2 11 15 -999 -999 +1 11 16 -999 -999 +1 12 7 -999 -999 +1 12 9 -999 -999 +1 12 10 -999 -999 +8 12 11 -999 -999 +54 12 12 -999 -999 +19 12 13 -999 -999 +3 12 14 -999 -999 +2 12 15 -999 -999 +1 13 3 -999 -999 +1 13 4 -999 -999 +1 13 9 -999 -999 +3 13 11 -999 -999 +19 13 12 -999 -999 +138 13 13 -999 -999 +34 13 14 -999 -999 +5 13 15 -999 -999 +1 14 9 -999 -999 +1 14 10 -999 -999 +2 14 12 -999 -999 +21 14 13 -999 -999 +172 14 14 -999 -999 +29 14 15 -999 -999 +2 14 16 -999 -999 +1 14 17 -999 -999 +8 15 13 -999 -999 +21 15 14 -999 -999 +181 15 15 -999 -999 +31 15 16 -999 -999 +4 15 17 -999 -999 +2 15 18 -999 -999 +1 16 5 -999 -999 +1 16 13 -999 -999 +6 16 14 -999 -999 +23 16 15 -999 -999 +148 16 16 -999 -999 +20 16 17 -999 -999 +4 16 18 -999 -999 +1 17 13 -999 -999 +1 17 14 -999 -999 +5 17 15 -999 -999 +17 17 16 -999 -999 +92 17 17 -999 -999 +19 17 18 -999 -999 +1 18 15 -999 -999 +1 18 16 -999 -999 +12 18 17 -999 -999 +78 18 18 -999 -999 +13 18 19 -999 -999 +1 18 21 -999 -999 +1 19 15 -999 -999 +1 19 16 -999 -999 +4 19 17 -999 -999 +8 19 18 -999 -999 +100 19 19 -999 -999 +10 19 20 -999 -999 +1 19 21 -999 -999 +1 20 18 -999 -999 +3 20 19 -999 -999 +19 20 20 -999 -999 +1 20 21 -999 -999 +2 21 19 -999 -999 +1 21 20 -999 -999 +9 21 21 -999 -999 +5 21 22 -999 -999 +1 21 23 -999 -999 +1 22 21 -999 -999 +2 22 22 -999 -999 +2 23 21 -999 -999 +2 23 23 -999 -999 +1 24 23 -999 -999 +2 24 24 -999 -999 +1 25 24 -999 -999 +27 -999 -999 1 1 +13 -999 -999 1 2 +3 -999 -999 2 1 +227 -999 -999 2 2 +27 -999 -999 2 3 +1 -999 -999 2 4 +1 -999 -999 3 1 +9 -999 -999 3 2 +181 -999 -999 3 3 +41 -999 -999 3 4 +3 -999 -999 3 5 +37 -999 -999 4 3 +179 -999 -999 4 4 +34 -999 -999 4 5 +2 -999 -999 4 6 +4 -999 -999 5 3 +25 -999 -999 5 4 +123 -999 -999 5 5 +60 -999 -999 5 6 +7 -999 -999 5 7 +2 -999 -999 6 4 +39 -999 -999 6 5 +318 -999 -999 6 6 +97 -999 -999 6 7 +5 -999 -999 6 8 +5 -999 -999 7 5 +97 -999 -999 7 6 +348 -999 -999 7 7 +82 -999 -999 7 8 +3 -999 -999 7 10 +5 -999 -999 8 6 +80 -999 -999 8 7 +239 -999 -999 8 8 +75 -999 -999 8 9 +13 -999 -999 8 10 +1 -999 -999 8 11 +6 -999 -999 9 7 +68 -999 -999 9 8 +300 -999 -999 9 9 +113 -999 -999 9 10 +10 -999 -999 9 11 +1 -999 -999 9 12 +6 -999 -999 10 8 +95 -999 -999 10 9 +317 -999 -999 10 10 +65 -999 -999 10 11 +5 -999 -999 10 12 +2 -999 -999 10 13 +7 -999 -999 11 9 +82 -999 -999 11 10 +148 -999 -999 11 11 +30 -999 -999 11 12 +5 -999 -999 11 13 +1 -999 -999 11 14 +1 -999 -999 12 9 +16 -999 -999 12 10 +42 -999 -999 12 11 +69 -999 -999 12 12 +29 -999 -999 12 13 +8 -999 -999 12 14 +4 -999 -999 12 15 +3 -999 -999 13 10 +8 -999 -999 13 11 +29 -999 -999 13 12 +50 -999 -999 13 13 +37 -999 -999 13 14 +9 -999 -999 13 15 +2 -999 -999 13 16 +1 -999 -999 14 11 +5 -999 -999 14 12 +23 -999 -999 14 13 +53 -999 -999 14 14 +25 -999 -999 14 15 +7 -999 -999 14 16 +2 -999 -999 14 17 +1 -999 -999 15 12 +3 -999 -999 15 13 +21 -999 -999 15 14 +32 -999 -999 15 15 +23 -999 -999 15 16 +5 -999 -999 15 17 +4 -999 -999 15 18 +1 -999 -999 16 13 +5 -999 -999 16 14 +22 -999 -999 16 15 +50 -999 -999 16 16 +19 -999 -999 16 17 +7 -999 -999 16 18 +1 -999 -999 16 19 +1 -999 -999 16 20 +1 -999 -999 17 14 +5 -999 -999 17 15 +18 -999 -999 17 16 +43 -999 -999 17 17 +23 -999 -999 17 18 +4 -999 -999 17 19 +2 -999 -999 17 20 +5 -999 -999 18 16 +22 -999 -999 18 17 +22 -999 -999 18 18 +7 -999 -999 18 19 +3 -999 -999 18 20 +3 -999 -999 18 21 +1 -999 -999 19 15 +5 -999 -999 19 17 +6 -999 -999 19 18 +8 -999 -999 19 19 +7 -999 -999 19 20 +2 -999 -999 19 21 +1 -999 -999 20 17 +1 -999 -999 20 18 +3 -999 -999 20 19 +7 -999 -999 20 20 +3 -999 -999 20 21 +1 -999 -999 21 19 +3 -999 -999 21 20 +6 -999 -999 21 21 +1 -999 -999 21 24 +2 -999 -999 22 19 +2 -999 -999 22 20 +1 -999 -999 22 21 +1 -999 -999 23 21 +1 -999 -999 23 22 diff --git a/inst/extdata/BG2022.spc b/inst/extdata/BG2022.spc new file mode 100644 index 0000000..48ead69 --- /dev/null +++ b/inst/extdata/BG2022.spc @@ -0,0 +1,16 @@ +# reader BiasOpt SigmaOpt + 1 0 2 + 2 0 -1 + 3 0 2 + 4 0 -3 + +Bias_Pars (low high init, on/off) + +Sigma_Pars (low high init, on/off) + 0 1 0.2 1 # Readers 1 & 2 +0.01 1 0.001 1 + 0 2 0.5 1 + + 0 1 0.2 1 # Readers 3 & 4 + 0.01 1 0.001 1 + 0 2 0.5 1 diff --git a/inst/extdata/BG2022_trim_8_1.dat b/inst/extdata/BG2022_trim_8_1.dat new file mode 100644 index 0000000..da7338c --- /dev/null +++ b/inst/extdata/BG2022_trim_8_1.dat @@ -0,0 +1,260 @@ +Range_of_ages +0 25 + +Data_set_1 +252 # number of lines +4 # Number of readers +0 25 5 # minus group; plus group; reference age + 1 2 3 4 # Which readers +153 1 1 -999 -999 +30 1 2 -999 -999 +1 1 4 -999 -999 +12 2 1 -999 -999 +454 2 2 -999 -999 +51 2 3 -999 -999 +33 3 2 -999 -999 +499 3 3 -999 -999 +65 3 4 -999 -999 +3 3 5 -999 -999 +1 3 6 -999 -999 +64 4 3 -999 -999 +561 4 4 -999 -999 +95 4 5 -999 -999 +4 4 6 -999 -999 +3 4 7 -999 -999 +1 5 3 -999 -999 +59 5 4 -999 -999 +588 5 5 -999 -999 +81 5 6 -999 -999 +12 5 7 -999 -999 +4 5 8 -999 -999 +6 6 4 -999 -999 +83 6 5 -999 -999 +325 6 6 -999 -999 +47 6 7 -999 -999 +9 6 8 -999 -999 +2 6 9 -999 -999 +5 7 5 -999 -999 +31 7 6 -999 -999 +236 7 7 -999 -999 +37 7 8 -999 -999 +7 7 9 -999 -999 +2 7 10 -999 -999 +3 8 5 -999 -999 +6 8 6 -999 -999 +37 8 7 -999 -999 +196 8 8 -999 -999 +44 8 9 -999 -999 +6 8 10 -999 -999 +1 8 11 -999 -999 +1 9 5 -999 -999 +3 9 6 -999 -999 +6 9 7 -999 -999 +35 9 8 -999 -999 +261 9 9 -999 -999 +40 9 10 -999 -999 +4 9 11 -999 -999 +2 9 12 -999 -999 +1 10 7 -999 -999 +5 10 8 -999 -999 +34 10 9 -999 -999 +239 10 10 -999 -999 +29 10 11 -999 -999 +1 10 12 -999 -999 +1 11 8 -999 -999 +6 11 9 -999 -999 +34 11 10 -999 -999 +115 11 11 -999 -999 +15 11 12 -999 -999 +4 11 13 -999 -999 +2 11 15 -999 -999 +1 12 9 -999 -999 +1 12 10 -999 -999 +8 12 11 -999 -999 +54 12 12 -999 -999 +19 12 13 -999 -999 +3 12 14 -999 -999 +2 12 15 -999 -999 +1 13 9 -999 -999 +3 13 11 -999 -999 +19 13 12 -999 -999 +138 13 13 -999 -999 +34 13 14 -999 -999 +5 13 15 -999 -999 +1 14 10 -999 -999 +2 14 12 -999 -999 +21 14 13 -999 -999 +172 14 14 -999 -999 +29 14 15 -999 -999 +2 14 16 -999 -999 +1 14 17 -999 -999 +8 15 13 -999 -999 +21 15 14 -999 -999 +181 15 15 -999 -999 +31 15 16 -999 -999 +4 15 17 -999 -999 +2 15 18 -999 -999 +1 16 13 -999 -999 +6 16 14 -999 -999 +23 16 15 -999 -999 +148 16 16 -999 -999 +20 16 17 -999 -999 +4 16 18 -999 -999 +1 17 13 -999 -999 +1 17 14 -999 -999 +5 17 15 -999 -999 +17 17 16 -999 -999 +92 17 17 -999 -999 +19 17 18 -999 -999 +1 18 15 -999 -999 +1 18 16 -999 -999 +12 18 17 -999 -999 +78 18 18 -999 -999 +13 18 19 -999 -999 +1 18 21 -999 -999 +1 19 15 -999 -999 +1 19 16 -999 -999 +4 19 17 -999 -999 +8 19 18 -999 -999 +100 19 19 -999 -999 +10 19 20 -999 -999 +1 19 21 -999 -999 +1 20 18 -999 -999 +3 20 19 -999 -999 +19 20 20 -999 -999 +1 20 21 -999 -999 +2 21 19 -999 -999 +1 21 20 -999 -999 +9 21 21 -999 -999 +5 21 22 -999 -999 +1 21 23 -999 -999 +1 22 21 -999 -999 +2 22 22 -999 -999 +2 23 21 -999 -999 +2 23 23 -999 -999 +1 24 23 -999 -999 +2 24 24 -999 -999 +1 25 24 -999 -999 +27 -999 -999 1 1 +13 -999 -999 1 2 +3 -999 -999 2 1 +227 -999 -999 2 2 +27 -999 -999 2 3 +1 -999 -999 2 4 +1 -999 -999 3 1 +9 -999 -999 3 2 +181 -999 -999 3 3 +41 -999 -999 3 4 +3 -999 -999 3 5 +37 -999 -999 4 3 +179 -999 -999 4 4 +34 -999 -999 4 5 +2 -999 -999 4 6 +4 -999 -999 5 3 +25 -999 -999 5 4 +123 -999 -999 5 5 +60 -999 -999 5 6 +7 -999 -999 5 7 +2 -999 -999 6 4 +39 -999 -999 6 5 +318 -999 -999 6 6 +97 -999 -999 6 7 +5 -999 -999 6 8 +5 -999 -999 7 5 +97 -999 -999 7 6 +348 -999 -999 7 7 +82 -999 -999 7 8 +3 -999 -999 7 10 +5 -999 -999 8 6 +80 -999 -999 8 7 +239 -999 -999 8 8 +75 -999 -999 8 9 +13 -999 -999 8 10 +1 -999 -999 8 11 +6 -999 -999 9 7 +68 -999 -999 9 8 +300 -999 -999 9 9 +113 -999 -999 9 10 +10 -999 -999 9 11 +1 -999 -999 9 12 +6 -999 -999 10 8 +95 -999 -999 10 9 +317 -999 -999 10 10 +65 -999 -999 10 11 +5 -999 -999 10 12 +2 -999 -999 10 13 +7 -999 -999 11 9 +82 -999 -999 11 10 +148 -999 -999 11 11 +30 -999 -999 11 12 +5 -999 -999 11 13 +1 -999 -999 11 14 +1 -999 -999 12 9 +16 -999 -999 12 10 +42 -999 -999 12 11 +69 -999 -999 12 12 +29 -999 -999 12 13 +8 -999 -999 12 14 +4 -999 -999 12 15 +3 -999 -999 13 10 +8 -999 -999 13 11 +29 -999 -999 13 12 +50 -999 -999 13 13 +37 -999 -999 13 14 +9 -999 -999 13 15 +2 -999 -999 13 16 +1 -999 -999 14 11 +5 -999 -999 14 12 +23 -999 -999 14 13 +53 -999 -999 14 14 +25 -999 -999 14 15 +7 -999 -999 14 16 +2 -999 -999 14 17 +1 -999 -999 15 12 +3 -999 -999 15 13 +21 -999 -999 15 14 +32 -999 -999 15 15 +23 -999 -999 15 16 +5 -999 -999 15 17 +4 -999 -999 15 18 +1 -999 -999 16 13 +5 -999 -999 16 14 +22 -999 -999 16 15 +50 -999 -999 16 16 +19 -999 -999 16 17 +7 -999 -999 16 18 +1 -999 -999 16 19 +1 -999 -999 16 20 +1 -999 -999 17 14 +5 -999 -999 17 15 +18 -999 -999 17 16 +43 -999 -999 17 17 +23 -999 -999 17 18 +4 -999 -999 17 19 +2 -999 -999 17 20 +5 -999 -999 18 16 +22 -999 -999 18 17 +22 -999 -999 18 18 +7 -999 -999 18 19 +3 -999 -999 18 20 +3 -999 -999 18 21 +1 -999 -999 19 15 +5 -999 -999 19 17 +6 -999 -999 19 18 +8 -999 -999 19 19 +7 -999 -999 19 20 +2 -999 -999 19 21 +1 -999 -999 20 17 +1 -999 -999 20 18 +3 -999 -999 20 19 +7 -999 -999 20 20 +3 -999 -999 20 21 +1 -999 -999 21 19 +3 -999 -999 21 20 +6 -999 -999 21 21 +1 -999 -999 21 24 +2 -999 -999 22 19 +2 -999 -999 22 20 +1 -999 -999 22 21 +1 -999 -999 23 21 +1 -999 -999 23 22 diff --git a/inst/extdata/BG2022_trim_8_1.spc b/inst/extdata/BG2022_trim_8_1.spc new file mode 100644 index 0000000..6ad50cd --- /dev/null +++ b/inst/extdata/BG2022_trim_8_1.spc @@ -0,0 +1,15 @@ +# reader BiasOpt SigmaOpt + 1 0 2 + 2 0 -1 + 3 0 7 + 4 0 -3 + +Bias_Pars (low high init, on/off) + +Sigma_Pars (low high init, on/off) + 0 1 0.2 1 # Readers 1 & 2 +0.01 1 0.001 1 + 0 2 0.5 1 + + 0 1 0.2 0 # Readers 3 & 4 + 0 2 0.5 1 diff --git a/inst/extdata/BigSkate2019_double_reads.csv b/inst/extdata/BigSkate2019_double_reads.csv deleted file mode 100644 index 63174b6..0000000 --- a/inst/extdata/BigSkate2019_double_reads.csv +++ /dev/null @@ -1,519 +0,0 @@ -SampleYear,SpeciesID,SpecimenID,DoubleReadSampleID,Original_Age_Estimate,Original_AgerID,DoubleRead_Age_Estimate,DoubleRead_AgerID -2004,BSKT,WA04001-BSKT-1,1762,4,reader1,4,reader2 -2004,BSKT,WA04002-BSKT-2,1762,5,reader1,4,reader2 -2004,BSKT,WA04002-BSKT-6,1762,6,reader1,5,reader2 -2007,BSKT,OR070174-BSKT-5,1726,7,reader1,7,reader2 -2007,BSKT,OR070174-BSKT-7,1726,8,reader1,7,reader2 -2007,BSKT,OR070177-BSKT-1,1726,6,reader1,5,reader2 -2007,BSKT,OR070177-BSKT-15,1726,8,reader1,10,reader2 -2007,BSKT,OR070177-BSKT-5,1726,7,reader1,8,reader2 -2008,BSKT,OR084005-BSKT-10,1726,7,reader1,12,reader2 -2008,BSKT,OR084005-BSKT-2,1726,9,reader1,10,reader2 -2008,BSKT,OR084008-BSKT-1,1726,6,reader1,6,reader2 -2008,BSKT,OR084008-BSKT-3,1726,7,reader1,7,reader2 -2008,BSKT,OR084009-BSKT-1,1726,5,reader1,5,reader2 -2008,BSKT,OR084011-BSKT-1,1726,6,reader1,6,reader2 -2008,BSKT,OR084011-BSKT-9,1726,4,reader1,5,reader2 -2008,BSKT,OR084013-BSKT-4,1726,6,reader1,6,reader2 -2008,BSKT,OR084013-BSKT-7,1726,9,reader1,9,reader2 -2008,BSKT,OR084015-BSKT-1,1726,5,reader1,4,reader2 -2008,BSKT,OR084015-BSKT-10,1726,3,reader1,3,reader2 -2008,BSKT,OR084015-BSKT-2,1726,6,reader1,7,reader2 -2008,BSKT,OR084015-BSKT-7,1726,6,reader1,6,reader2 -2008,BSKT,OR084018-BSKT-4,1726,2,reader1,3,reader2 -2008,BSKT,OR084018-BSKT-7,1726,7,reader1,6,reader2 -2008,BSKT,OR084020-BSKT-5,1726,8,reader1,8,reader2 -2009,BSKT,100030652,1747,3,reader1,3,reader2 -2009,BSKT,100030658,1747,4,reader1,4,reader2 -2009,BSKT,100030660,1747,3,reader1,3,reader2 -2009,BSKT,100030662,1747,5,reader1,5,reader2 -2009,BSKT,100030664,1747,8,reader1,8,reader2 -2009,BSKT,100030668,1747,3,reader1,2,reader2 -2009,BSKT,100030685,1747,1,reader1,1,reader2 -2009,BSKT,100030693,1747,3,reader1,3,reader2 -2009,BSKT,100030700,1747,8,reader1,7,reader2 -2009,BSKT,100030703,1747,4,reader1,4,reader2 -2009,BSKT,100030710,1747,1,reader1,1,reader2 -2009,BSKT,100030717,1747,2,reader1,2,reader2 -2009,BSKT,100030719,1747,2,reader1,2,reader2 -2009,BSKT,100030724,1747,1,reader1,1,reader2 -2009,BSKT,100030727,1747,1,reader1,1,reader2 -2009,BSKT,100030731,1747,2,reader1,2,reader2 -2009,BSKT,100030745,1747,6,reader1,7,reader2 -2009,BSKT,100030747,1747,4,reader1,5,reader2 -2009,BSKT,100030760,1747,6,reader1,6,reader2 -2009,BSKT,100030765,1747,3,reader1,3,reader2 -2009,BSKT,100030770,1747,5,reader1,5,reader2 -2009,BSKT,100030772,1747,3,reader1,3,reader2 -2009,BSKT,100030781,1747,1,reader1,0,reader2 -2009,BSKT,100030786,1747,1,reader1,1,reader2 -2009,BSKT,100161987,1747,3,reader1,3,reader2 -2009,BSKT,100161990,1747,1,reader1,0,reader2 -2009,BSKT,100161993,1747,1,reader1,1,reader2 -2009,BSKT,100161994,1747,3,reader1,2,reader2 -2009,BSKT,100161995,1747,1,reader1,0,reader2 -2009,BSKT,100161998,1747,2,reader1,1,reader2 -2009,BSKT,100171987,1747,2,reader1,2,reader2 -2009,BSKT,100171992,1747,2,reader1,2,reader2 -2009,BSKT,100171995,1747,3,reader1,3,reader2 -2009,BSKT,100171996,1747,3,reader1,3,reader2 -2009,BSKT,100171998,1747,13,reader1,13,reader2 -2009,BSKT,100172000,1747,7,reader1,6,reader2 -2009,BSKT,100187993,1747,3,reader1,4,reader2 -2009,BSKT,100187994,1747,4,reader1,5,reader2 -2009,BSKT,100187996,1747,2,reader1,2,reader2 -2009,BSKT,100188983,1747,4,reader1,4,reader2 -2009,BSKT,100188984,1747,5,reader1,5,reader2 -2009,BSKT,100188986,1747,3,reader1,3,reader2 -2009,BSKT,100188989,1747,5,reader1,4,reader2 -2009,BSKT,100188992,1747,3,reader1,2,reader2 -2009,BSKT,100188993,1747,2,reader1,2,reader2 -2009,BSKT,100195047,1747,1,reader1,0,reader2 -2009,BSKT,100195072,1747,2,reader1,2,reader2 -2009,BSKT,OR095003-BSKT-2,1726,8,reader1,8,reader2 -2009,BSKT,OR095006-BSKT-1,1726,8,reader1,9,reader2 -2009,BSKT,OR095007-BSKT-10,1726,6,reader1,4,reader2 -2009,BSKT,OR095007-BSKT-5,1726,8,reader1,8,reader2 -2009,BSKT,OR095007-BSKT-7,1726,5,reader1,6,reader2 -2009,BSKT,OR095007-BSKT-8,1726,5,reader1,6,reader2 -2009,BSKT,OR095009-BSKT-6,1726,2,reader1,3,reader2 -2009,BSKT,OR095014-BSKT-1,1726,7,reader1,7,reader2 -2009,BSKT,OR095014-BSKT-4,1726,4,reader1,4,reader2 -2009,BSKT,OR095014-BSKT-5,1726,9,reader1,9,reader2 -2009,BSKT,OR095014-BSKT-6,1726,4,reader1,5,reader2 -2009,BSKT,OR095017-BSKT-6,1726,9,reader1,8,reader2 -2009,BSKT,OR095017-BSKT-8,1726,12,reader1,12,reader2 -2009,BSKT,OR095019-BSKT-4,1726,9,reader1,8,reader2 -2009,BSKT,OR095020-BSKT-9,1726,6,reader1,6,reader2 -2009,BSKT,OR095041-BSKT-1,1726,7,reader1,8,reader2 -2009,BSKT,OR095041-BSKT-10,1726,5,reader1,5,reader2 -2009,BSKT,OR095041-BSKT-5,1726,10,reader1,8,reader2 -2009,BSKT,WA09002-BSKT-7,1762,3,reader1,3,reader2 -2009,BSKT,WA09003-BSKT-10,1762,4,reader1,4,reader2 -2009,BSKT,WA09003-BSKT-12,1762,4,reader1,4,reader2 -2009,BSKT,WA09003-BSKT-28,1762,8,reader1,8,reader2 -2009,BSKT,WA09003-BSKT-29,1762,4,reader1,4,reader2 -2009,BSKT,WA09003-BSKT-6,1762,11,reader1,11,reader2 -2009,BSKT,WA09004-BSKT-2,1762,3,reader1,4,reader2 -2009,BSKT,WA09004-BSKT-3,1762,8,reader1,8,reader2 -2009,BSKT,WA09004-BSKT-4,1762,6,reader1,9,reader2 -2009,BSKT,WA09005-BSKT-2,1762,10,reader1,9,reader2 -2009,BSKT,WA09006-BSKT-1,1762,12,reader1,10,reader2 -2009,BSKT,WA09007-BSKT-2,1762,9,reader1,10,reader2 -2009,BSKT,WA09007-BSKT-6,1762,4,reader1,4,reader2 -2009,BSKT,WA09008-BSKT-3,1762,8,reader1,8,reader2 -2010,BSKT,100030732,1585,4,reader1,4,reader2 -2010,BSKT,100030732,1652,4,reader1,4,reader3 -2010,BSKT,100030732,1653,4,reader1,4,reader4 -2010,BSKT,100030732,1659,4,reader1,4,reader5 -2010,BSKT,100030734,1585,2,reader1,2,reader2 -2010,BSKT,100030734,1652,2,reader1,3,reader3 -2010,BSKT,100030734,1653,2,reader1,2,reader4 -2010,BSKT,100030734,1659,2,reader1,3,reader5 -2010,BSKT,100030735,1585,3,reader1,4,reader2 -2010,BSKT,100030735,1652,3,reader1,3,reader3 -2010,BSKT,100030735,1653,3,reader1,3,reader4 -2010,BSKT,100030735,1659,3,reader1,3,reader5 -2010,BSKT,100030736,1585,4,reader1,4,reader2 -2010,BSKT,100030736,1652,4,reader1,5,reader3 -2010,BSKT,100030736,1653,4,reader1,5,reader4 -2010,BSKT,100030736,1659,4,reader1,5,reader5 -2010,BSKT,100030737,1585,2,reader1,2,reader2 -2010,BSKT,100030737,1652,2,reader1,2,reader3 -2010,BSKT,100030737,1653,2,reader1,3,reader4 -2010,BSKT,100030737,1659,2,reader1,2,reader5 -2010,BSKT,100030738,1585,4,reader1,4,reader2 -2010,BSKT,100030738,1652,4,reader1,3,reader3 -2010,BSKT,100030738,1653,4,reader1,4,reader4 -2010,BSKT,100030738,1659,4,reader1,4,reader5 -2010,BSKT,100030739,1585,5,reader1,5,reader2 -2010,BSKT,100030739,1652,5,reader1,5,reader3 -2010,BSKT,100030739,1653,5,reader1,6,reader4 -2010,BSKT,100030739,1659,5,reader1,5,reader5 -2010,BSKT,100030740,1585,2,reader1,2,reader2 -2010,BSKT,100030740,1652,2,reader1,2,reader3 -2010,BSKT,100030740,1653,2,reader1,1,reader4 -2010,BSKT,100030740,1659,2,reader1,3,reader5 -2010,BSKT,100030741,1585,2,reader1,1,reader2 -2010,BSKT,100030741,1652,2,reader1,1,reader3 -2010,BSKT,100030741,1653,2,reader1,2,reader4 -2010,BSKT,100030741,1659,2,reader1,2,reader5 -2010,BSKT,100030742,1585,9,reader1,10,reader2 -2010,BSKT,100030742,1652,9,reader1,9,reader3 -2010,BSKT,100030742,1653,9,reader1,8,reader4 -2010,BSKT,100030742,1659,9,reader1,8,reader5 -2010,BSKT,100030798,1585,8,reader1,7,reader2 -2010,BSKT,100030798,1652,8,reader1,7,reader3 -2010,BSKT,100030798,1653,8,reader1,7,reader4 -2010,BSKT,100030798,1659,8,reader1,7,reader5 -2010,BSKT,100030799,1585,4,reader1,3,reader2 -2010,BSKT,100030799,1652,4,reader1,5,reader3 -2010,BSKT,100030799,1653,4,reader1,5,reader4 -2010,BSKT,100030799,1659,4,reader1,4,reader5 -2010,BSKT,100030800,1585,4,reader1,4,reader2 -2010,BSKT,100030800,1652,4,reader1,4,reader3 -2010,BSKT,100030800,1653,4,reader1,6,reader4 -2010,BSKT,100030800,1659,4,reader1,4,reader5 -2010,BSKT,100161989,1585,2,reader1,2,reader2 -2010,BSKT,100161989,1652,2,reader1,4,reader3 -2010,BSKT,100161989,1653,2,reader1,2,reader4 -2010,BSKT,100161989,1659,2,reader1,2,reader5 -2010,BSKT,100161991,1585,2,reader1,2,reader2 -2010,BSKT,100161991,1652,2,reader1,2,reader3 -2010,BSKT,100161991,1653,2,reader1,3,reader4 -2010,BSKT,100161991,1659,2,reader1,2,reader5 -2010,BSKT,100161999,1585,4,reader1,4,reader2 -2010,BSKT,100161999,1652,4,reader1,3,reader3 -2010,BSKT,100161999,1653,4,reader1,4,reader4 -2010,BSKT,100161999,1659,4,reader1,4,reader5 -2010,BSKT,100195005,1585,0,reader1,0,reader2 -2010,BSKT,100195005,1652,0,reader1,0,reader3 -2010,BSKT,100195005,1653,0,reader1,0,reader4 -2010,BSKT,100195005,1659,0,reader1,0,reader5 -2010,BSKT,100195006,1585,4,reader1,4,reader2 -2010,BSKT,100195006,1652,4,reader1,4,reader3 -2010,BSKT,100195006,1653,4,reader1,4,reader4 -2010,BSKT,100195006,1659,4,reader1,4,reader5 -2010,BSKT,100195007,1585,4,reader1,4,reader2 -2010,BSKT,100195007,1652,4,reader1,4,reader3 -2010,BSKT,100195007,1653,4,reader1,4,reader4 -2010,BSKT,100195007,1659,4,reader1,5,reader5 -2010,BSKT,100195009,1585,3,reader1,3,reader2 -2010,BSKT,100195009,1652,3,reader1,3,reader3 -2010,BSKT,100195009,1653,3,reader1,3,reader4 -2010,BSKT,100195009,1659,3,reader1,3,reader5 -2010,BSKT,100195015,1585,5,reader1,5,reader2 -2010,BSKT,100195015,1652,5,reader1,9,reader3 -2010,BSKT,100195015,1653,5,reader1,5,reader4 -2010,BSKT,100195015,1659,5,reader1,5,reader5 -2010,BSKT,100195016,1585,2,reader1,3,reader2 -2010,BSKT,100195016,1652,2,reader1,4,reader3 -2010,BSKT,100195016,1653,2,reader1,3,reader4 -2010,BSKT,100195016,1659,2,reader1,3,reader5 -2010,BSKT,100195017,1585,3,reader1,4,reader2 -2010,BSKT,100195017,1652,3,reader1,5,reader3 -2010,BSKT,100195017,1653,3,reader1,4,reader4 -2010,BSKT,100195017,1659,3,reader1,4,reader5 -2010,BSKT,100195018,1585,1,reader1,1,reader2 -2010,BSKT,100195018,1652,1,reader1,1,reader3 -2010,BSKT,100195018,1653,1,reader1,2,reader4 -2010,BSKT,100195018,1659,1,reader1,1,reader5 -2010,BSKT,100195019,1585,1,reader1,1,reader2 -2010,BSKT,100195019,1652,1,reader1,2,reader3 -2010,BSKT,100195019,1653,1,reader1,2,reader4 -2010,BSKT,100195019,1659,1,reader1,2,reader5 -2010,BSKT,100195021,1585,3,reader1,4,reader2 -2010,BSKT,100195021,1652,3,reader1,5,reader3 -2010,BSKT,100195021,1653,3,reader1,5,reader4 -2010,BSKT,100195021,1659,3,reader1,4,reader5 -2010,BSKT,100195027,1585,8,reader1,8,reader2 -2010,BSKT,100195027,1652,8,reader1,8,reader3 -2010,BSKT,100195027,1653,8,reader1,8,reader4 -2010,BSKT,100195027,1659,8,reader1,8,reader5 -2010,BSKT,100195028,1585,2,reader1,2,reader2 -2010,BSKT,100195028,1652,2,reader1,2,reader3 -2010,BSKT,100195028,1653,2,reader1,2,reader4 -2010,BSKT,100195028,1659,2,reader1,2,reader5 -2010,BSKT,100195029,1585,3,reader1,3,reader2 -2010,BSKT,100195029,1652,3,reader1,3,reader3 -2010,BSKT,100195029,1653,3,reader1,3,reader4 -2010,BSKT,100195029,1659,3,reader1,3,reader5 -2010,BSKT,100195030,1585,1,reader1,1,reader2 -2010,BSKT,100195030,1652,1,reader1,3,reader3 -2010,BSKT,100195030,1653,1,reader1,2,reader4 -2010,BSKT,100195030,1659,1,reader1,1,reader5 -2010,BSKT,100195031,1585,6,reader1,5,reader2 -2010,BSKT,100195031,1652,6,reader1,6,reader3 -2010,BSKT,100195031,1653,6,reader1,6,reader4 -2010,BSKT,100195031,1659,6,reader1,6,reader5 -2010,BSKT,100195037,1585,3,reader1,3,reader2 -2010,BSKT,100195037,1653,3,reader1,3,reader4 -2010,BSKT,100195037,1659,3,reader1,5,reader5 -2010,BSKT,100195038,1585,3,reader1,3,reader2 -2010,BSKT,100195038,1652,3,reader1,2,reader3 -2010,BSKT,100195038,1653,3,reader1,2,reader4 -2010,BSKT,100195038,1659,3,reader1,3,reader5 -2010,BSKT,100195048,1585,4,reader1,4,reader2 -2010,BSKT,100195048,1652,4,reader1,4,reader3 -2010,BSKT,100195048,1653,4,reader1,4,reader4 -2010,BSKT,100195048,1659,4,reader1,4,reader5 -2010,BSKT,100195049,1585,6,reader1,6,reader2 -2010,BSKT,100195049,1652,6,reader1,6,reader3 -2010,BSKT,100195049,1653,6,reader1,6,reader4 -2010,BSKT,100195049,1659,6,reader1,6,reader5 -2010,BSKT,100195050,1585,3,reader1,3,reader2 -2010,BSKT,100195050,1652,3,reader1,4,reader3 -2010,BSKT,100195050,1653,3,reader1,3,reader4 -2010,BSKT,100195050,1659,3,reader1,3,reader5 -2010,BSKT,100195051,1585,3,reader1,3,reader2 -2010,BSKT,100195051,1652,3,reader1,3,reader3 -2010,BSKT,100195051,1653,3,reader1,3,reader4 -2010,BSKT,100195051,1659,3,reader1,3,reader5 -2010,BSKT,100195055,1585,2,reader1,2,reader2 -2010,BSKT,100195055,1653,2,reader1,2,reader4 -2010,BSKT,100195055,1659,2,reader1,2,reader5 -2010,BSKT,100195056,1585,5,reader1,5,reader2 -2010,BSKT,100195056,1652,5,reader1,5,reader3 -2010,BSKT,100195056,1653,5,reader1,5,reader4 -2010,BSKT,100195056,1659,5,reader1,5,reader5 -2010,BSKT,100195067,1622,8,reader1,10,reader2 -2010,BSKT,100195069,1622,7,reader1,8,reader2 -2010,BSKT,100195070,1622,2,reader1,2,reader2 -2010,BSKT,100195073,1622,5,reader1,6,reader2 -2010,BSKT,100195082,1622,2,reader1,2,reader2 -2010,BSKT,100195085,1622,7,reader1,9,reader2 -2010,BSKT,100195087,1622,4,reader1,4,reader2 -2010,BSKT,100196009,1622,3,reader1,2,reader2 -2010,BSKT,100196017,1622,3,reader1,3,reader2 -2010,BSKT,100196031,1622,2,reader1,2,reader2 -2010,BSKT,100196032,1622,1,reader1,1,reader2 -2010,BSKT,100196045,1622,3,reader1,3,reader2 -2010,BSKT,100196046,1622,3,reader1,3,reader2 -2010,BSKT,100196060,1622,3,reader1,3,reader2 -2010,BSKT,100196072,1622,3,reader1,5,reader2 -2010,BSKT,100196079,1622,2,reader1,2,reader2 -2010,BSKT,100196081,1622,4,reader1,4,reader2 -2010,BSKT,100196082,1622,5,reader1,6,reader2 -2010,BSKT,100196093,1622,2,reader1,3,reader2 -2010,BSKT,100196099,1622,4,reader1,5,reader2 -2010,BSKT,100196101,1622,4,reader1,6,reader2 -2010,BSKT,100196107,1622,2,reader1,3,reader2 -2010,BSKT,100196124,1622,8,reader1,7,reader2 -2010,BSKT,100196127,1622,4,reader1,4,reader2 -2010,BSKT,100196128,1622,2,reader1,3,reader2 -2010,BSKT,100196795,1622,7,reader1,7,reader2 -2010,BSKT,100196798,1622,2,reader1,3,reader2 -2010,BSKT,100196802,1622,6,reader1,6,reader2 -2010,BSKT,100197002,1622,1,reader1,1,reader2 -2010,BSKT,100197005,1622,1,reader1,0,reader2 -2010,BSKT,100197013,1622,0,reader1,0,reader2 -2010,BSKT,100197014,1622,2,reader1,4,reader2 -2010,BSKT,100197015,1622,2,reader1,4,reader2 -2010,BSKT,100197016,1622,3,reader1,6,reader2 -2010,BSKT,100197018,1622,1,reader1,1,reader2 -2010,BSKT,100197020,1622,0,reader1,0,reader2 -2010,BSKT,100197034,1622,2,reader1,4,reader2 -2010,BSKT,100197046,1622,4,reader1,5,reader2 -2010,BSKT,100197052,1622,10,reader1,12,reader2 -2010,BSKT,100197061,1622,0,reader1,0,reader2 -2010,BSKT,100197062,1622,0,reader1,0,reader2 -2010,BSKT,100197074,1622,3,reader1,2,reader2 -2010,BSKT,100197078,1622,1,reader1,1,reader2 -2010,BSKT,100197082,1622,3,reader1,2,reader2 -2010,BSKT,100197087,1622,2,reader1,1,reader2 -2010,BSKT,100197096,1622,3,reader1,2,reader2 -2010,BSKT,100197101,1622,5,reader1,4,reader2 -2010,BSKT,100197110,1622,0,reader1,0,reader2 -2010,BSKT,100197145,1622,4,reader1,3,reader2 -2010,BSKT,100197151,1622,4,reader1,4,reader2 -2010,BSKT,100197166,1622,2,reader1,1,reader2 -2010,BSKT,100197170,1622,2,reader1,1,reader2 -2010,BSKT,100197172,1622,2,reader1,2,reader2 -2010,BSKT,100201995,1622,2,reader1,0,reader2 -2010,BSKT,100201996,1622,4,reader1,3,reader2 -2010,BSKT,100201998,1622,6,reader1,8,reader2 -2010,BSKT,100204984,1622,2,reader1,2,reader2 -2010,BSKT,100204985,1622,1,reader1,0,reader2 -2010,BSKT,100204987,1622,2,reader1,1,reader2 -2010,BSKT,100204996,1622,1,reader1,1,reader2 -2010,BSKT,OR105001-BSKT-9,1726,7,reader1,8,reader2 -2010,BSKT,OR105002-BSKT-2,1726,10,reader1,11,reader2 -2010,BSKT,OR105002-BSKT-6,1726,9,reader1,9,reader2 -2010,BSKT,OR105003-BSKT-4,1726,7,reader1,8,reader2 -2010,BSKT,OR105007-BSKT-10,1726,3,reader1,4,reader2 -2010,BSKT,OR105007-BSKT-4,1726,5,reader1,7,reader2 -2010,BSKT,OR105007-BSKT-6,1726,7,reader1,8,reader2 -2010,BSKT,OR105007-BSKT-7,1726,5,reader1,7,reader2 -2010,BSKT,OR105010-BSKT-10,1726,4,reader1,4,reader2 -2010,BSKT,OR105010-BSKT-2,1726,5,reader1,6,reader2 -2010,BSKT,OR105013-BSKT-10,1726,5,reader1,6,reader2 -2010,BSKT,OR105013-BSKT-2,1726,4,reader1,4,reader2 -2010,BSKT,OR105014-BSKT-1,1726,7,reader1,8,reader2 -2010,BSKT,OR105014-BSKT-10,1726,6,reader1,7,reader2 -2010,BSKT,OR105014-BSKT-4,1726,9,reader1,9,reader2 -2010,BSKT,OR105014-BSKT-7,1726,5,reader1,6,reader2 -2010,BSKT,OR105018-BSKT-7,1726,8,reader1,9,reader2 -2011,BSKT,OR115002-BSKT-1,1726,5,reader1,6,reader2 -2011,BSKT,OR115002-BSKT-10,1726,4,reader1,4,reader2 -2011,BSKT,OR115002-BSKT-4,1726,5,reader1,7,reader2 -2011,BSKT,OR115002-BSKT-9,1726,4,reader1,5,reader2 -2011,BSKT,OR115003-BSKT-4,1726,4,reader1,3,reader2 -2011,BSKT,OR115005-BSKT-3,1726,5,reader1,5,reader2 -2011,BSKT,OR115005-BSKT-9,1726,3,reader1,3,reader2 -2011,BSKT,OR115009-BSKT-6,1726,3,reader1,4,reader2 -2011,BSKT,OR115009-BSKT-7,1726,6,reader1,6,reader2 -2011,BSKT,OR115010-BSKT-3,1726,4,reader1,4,reader2 -2011,BSKT,OR115010-BSKT-5,1726,4,reader1,6,reader2 -2011,BSKT,OR115010-BSKT-6,1726,6,reader1,7,reader2 -2011,BSKT,OR115011-BSKT-10,1726,5,reader1,5,reader2 -2011,BSKT,OR115015-BSKT-2,1726,7,reader1,8,reader2 -2011,BSKT,OR115015-BSKT-5,1726,4,reader1,5,reader2 -2011,BSKT,OR115016-BSKT-10,1726,5,reader1,7,reader2 -2011,BSKT,OR115016-BSKT-9,1726,3,reader1,4,reader2 -2011,BSKT,OR115017-BSKT-10,1726,2,reader1,3,reader2 -2011,BSKT,OR115017-BSKT-2,1726,3,reader1,4,reader2 -2011,BSKT,OR115017-BSKT-3,1726,1,reader1,3,reader2 -2011,BSKT,OR115017-BSKT-8,1726,2,reader1,2,reader2 -2011,BSKT,OR115017-BSKT-9,1726,2,reader1,2,reader2 -2011,BSKT,OR115018-BSKT-2,1726,6,reader1,5,reader2 -2011,BSKT,OR115018-BSKT-4,1726,4,reader1,3,reader2 -2011,BSKT,OR115018-BSKT-8,1726,2,reader1,2,reader2 -2011,BSKT,OR115019-BSKT-1,1726,6,reader1,8,reader2 -2011,BSKT,OR115019-BSKT-2,1726,7,reader1,6,reader2 -2011,BSKT,OR115020-BSKT-5,1726,9,reader1,7,reader2 -2011,BSKT,OR115023-BSKT-2,1726,4,reader1,4,reader2 -2011,BSKT,OR115023-BSKT-6,1726,6,reader1,6,reader2 -2011,BSKT,OR115023-BSKT-7,1726,4,reader1,4,reader2 -2011,BSKT,OR115025-BSKT-10,1726,5,reader1,6,reader2 -2011,BSKT,OR115025-BSKT-5,1726,6,reader1,7,reader2 -2011,BSKT,OR115025-BSKT-7,1726,6,reader1,5,reader2 -2011,BSKT,OR115082-BSKT-2,1726,5,reader1,3,reader2 -2011,BSKT,OR115101-BSKT-2,1726,8,reader1,9,reader2 -2011,BSKT,OR115103-BSKT-10,1726,5,reader1,6,reader2 -2011,BSKT,OR115103-BSKT-5,1726,4,reader1,5,reader2 -2012,BSKT,OR125003-BSKT-10,1726,7,reader1,8,reader2 -2012,BSKT,OR125003-BSKT-7,1726,3,reader1,3,reader2 -2012,BSKT,OR125007-BSKT-2,1726,6,reader1,6,reader2 -2012,BSKT,OR125007-BSKT-3,1726,3,reader1,3,reader2 -2012,BSKT,OR125008-BSKT-6,1726,3,reader1,5,reader2 -2012,BSKT,OR125009-BSKT-1,1726,8,reader1,8,reader2 -2012,BSKT,OR125009-BSKT-4,1726,2,reader1,2,reader2 -2012,BSKT,OR125010-BSKT-1,1726,4,reader1,3,reader2 -2012,BSKT,OR125010-BSKT-4,1726,3,reader1,3,reader2 -2012,BSKT,OR125010-BSKT-8,1726,7,reader1,7,reader2 -2012,BSKT,OR125010-BSKT-9,1726,6,reader1,6,reader2 -2012,BSKT,OR125012-BSKT-2,1726,3,reader1,3,reader2 -2012,BSKT,OR125012-BSKT-3,1726,3,reader1,3,reader2 -2012,BSKT,OR125012-BSKT-5,1726,4,reader1,4,reader2 -2012,BSKT,OR125013-BSKT-10,1726,9,reader1,8,reader2 -2012,BSKT,OR125013-BSKT-3,1726,4,reader1,4,reader2 -2012,BSKT,OR125013-BSKT-6,1726,5,reader1,6,reader2 -2012,BSKT,OR125013-BSKT-7,1726,11,reader1,11,reader2 -2012,BSKT,OR125017-BSKT-1,1726,8,reader1,7,reader2 -2012,BSKT,OR125017-BSKT-10,1726,4,reader1,4,reader2 -2012,BSKT,OR125017-BSKT-6,1726,8,reader1,8,reader2 -2012,BSKT,OR125018-BSKT-2,1726,7,reader1,8,reader2 -2012,BSKT,OR125024-BSKT-3,1726,5,reader1,7,reader2 -2012,BSKT,OR125093-BSKT-1,1726,5,reader1,4,reader2 -2016,BSKT,100250337,1724,5,reader1,6,reader2 -2016,BSKT,100250737,1724,3,reader1,3,reader2 -2016,BSKT,100286081,1724,4,reader1,4,reader2 -2016,BSKT,100286082,1724,5,reader1,6,reader2 -2016,BSKT,100286769,1724,3,reader1,2,reader2 -2016,BSKT,102015994,1724,7,reader1,7,reader2 -2016,BSKT,102015995,1724,5,reader1,5,reader2 -2016,BSKT,102016987,1724,10,reader1,8,reader2 -2016,BSKT,102022001,1724,1,reader1,1,reader2 -2016,BSKT,102022024,1724,4,reader1,4,reader2 -2016,BSKT,102022351,1724,1,reader1,1,reader2 -2016,BSKT,102022368,1724,5,reader1,5,reader2 -2016,BSKT,102022411,1724,4,reader1,5,reader2 -2016,BSKT,102025992,1724,2,reader1,2,reader2 -2016,BSKT,102025993,1724,2,reader1,2,reader2 -2016,BSKT,102025995,1724,1,reader1,1,reader2 -2016,BSKT,102025998,1724,2,reader1,2,reader2 -2016,BSKT,102032800,1724,0,reader1,0,reader2 -2016,BSKT,102040984,1724,6,reader1,6,reader2 -2016,BSKT,102042910,1724,2,reader1,3,reader2 -2016,BSKT,102042930,1724,5,reader1,9,reader2 -2016,BSKT,102042959,1724,6,reader1,5,reader2 -2016,BSKT,102042970,1724,4,reader1,6,reader2 -2016,BSKT,102042976,1724,4,reader1,4,reader2 -2016,BSKT,102047989,1724,3,reader1,2,reader2 -2016,BSKT,102050984,1724,3,reader1,3,reader2 -2016,BSKT,102057999,1724,1,reader1,1,reader2 -2016,BSKT,102060993,1724,4,reader1,6,reader2 -2017,BSKT,100250230,1725,2,reader1,2,reader2 -2017,BSKT,100250407,1725,7,reader1,6,reader2 -2017,BSKT,102022334,1725,3,reader1,3,reader2 -2017,BSKT,102023998,1725,6,reader1,6,reader2 -2017,BSKT,102024998,1725,2,reader1,3,reader2 -2017,BSKT,102025000,1725,0,reader1,1,reader2 -2017,BSKT,102063998,1725,1,reader1,2,reader2 -2017,BSKT,102063999,1725,5,reader1,5,reader2 -2017,BSKT,102070985,1725,6,reader1,7,reader2 -2017,BSKT,102070993,1725,2,reader1,2,reader2 -2017,BSKT,102097981,1725,1,reader1,2,reader2 -2017,BSKT,102097988,1725,1,reader1,2,reader2 -2017,BSKT,102097989,1725,0,reader1,1,reader2 -2017,BSKT,102113049,1725,3,reader1,4,reader2 -2017,BSKT,102113051,1725,2,reader1,3,reader2 -2017,BSKT,102113062,1725,1,reader1,2,reader2 -2017,BSKT,102113156,1725,2,reader1,3,reader2 -2017,BSKT,102113185,1725,1,reader1,1,reader2 -2017,BSKT,102113186,1725,2,reader1,3,reader2 -2017,BSKT,102113197,1725,0,reader1,1,reader2 -2017,BSKT,102113983,1725,1,reader1,2,reader2 -2017,BSKT,102113993,1725,2,reader1,3,reader2 -2017,BSKT,102116992,1725,2,reader1,3,reader2 -2017,BSKT,102121994,1725,3,reader1,3,reader2 -2017,BSKT,102123084,1725,5,reader1,8,reader2 -2017,BSKT,102123457,1725,8,reader1,9,reader2 -2017,BSKT,102123597,1725,1,reader1,1,reader2 -2017,BSKT,102123642,1725,2,reader1,3,reader2 -2017,BSKT,102123668,1725,1,reader1,2,reader2 -2017,BSKT,102123678,1725,4,reader1,4,reader2 -2017,BSKT,102124998,1725,2,reader1,2,reader2 -2017,BSKT,102124999,1725,5,reader1,5,reader2 -2017,BSKT,102125997,1725,3,reader1,2,reader2 -2018,BSKT,102075165,1747,8,reader1,7,reader2 -2018,BSKT,102075175,1747,4,reader1,4,reader2 -2018,BSKT,102075203,1747,7,reader1,7,reader2 -2018,BSKT,102075235,1747,6,reader1,5,reader2 -2018,BSKT,102075239,1747,7,reader1,5,reader2 -2018,BSKT,102075268,1747,4,reader1,3,reader2 -2018,BSKT,102075270,1747,1,reader1,2,reader2 -2018,BSKT,102075330,1747,3,reader1,3,reader2 -2018,BSKT,102105072,1747,2,reader1,2,reader2 -2018,BSKT,102105073,1747,4,reader1,3,reader2 -2018,BSKT,102105074,1747,2,reader1,2,reader2 -2018,BSKT,102105471,1747,3,reader1,3,reader2 -2018,BSKT,102105606,1747,3,reader1,3,reader2 -2018,BSKT,102105731,1747,3,reader1,3,reader2 -2018,BSKT,102105741,1747,2,reader1,2,reader2 -2018,BSKT,102105744,1747,6,reader1,5,reader2 -2018,BSKT,102105745,1747,5,reader1,4,reader2 -2018,BSKT,102105838,1747,3,reader1,3,reader2 -2018,BSKT,102105847,1747,2,reader1,2,reader2 -2018,BSKT,102105886,1747,5,reader1,5,reader2 -2018,BSKT,102105901,1747,2,reader1,2,reader2 -2018,BSKT,102105906,1747,3,reader1,3,reader2 -2018,BSKT,102106012,1747,3,reader1,3,reader2 -2018,BSKT,102106017,1747,2,reader1,2,reader2 -2018,BSKT,102106025,1747,8,reader1,7,reader2 -2018,BSKT,102106055,1747,4,reader1,4,reader2 -2018,BSKT,102106062,1747,8,reader1,7,reader2 -2018,BSKT,102106066,1747,5,reader1,4,reader2 -2018,BSKT,102106069,1747,3,reader1,2,reader2 -2018,BSKT,102106098,1747,2,reader1,1,reader2 -2018,BSKT,102106108,1747,6,reader1,5,reader2 -2018,BSKT,102106123,1747,4,reader1,4,reader2 -2018,BSKT,102116984,1747,7,reader1,6,reader2 -2018,BSKT,102123000,1747,3,reader1,2,reader2 -2018,BSKT,OR1864691-BSKT-11,1726,5,reader1,4,reader2 -2018,BSKT,OR1864691-BSKT-14,1726,6,reader1,6,reader2 -2018,BSKT,OR1864691-BSKT-2,1726,8,reader1,7,reader2 -2018,BSKT,OR1864691-BSKT-5,1726,7,reader1,7,reader2 -2018,BSKT,OR1864691-BSKT-6,1726,8,reader1,8,reader2 -2018,BSKT,OR1864691-BSKT-7,1726,8,reader1,8,reader2 -2018,BSKT,OR1865105-BSKT-14,1726,7,reader1,7,reader2 -2018,BSKT,OR1865105-BSKT-8,1726,6,reader1,6,reader2 -2018,BSKT,WA18002-BSKT-1,1762,6,reader1,7,reader2 -2018,BSKT,WA18006-BSKT-3,1762,7,reader1,7,reader2 -2018,BSKT,WA18006-BSKT-8,1762,6,reader1,6,reader2 -2018,BSKT,WA18008-BSKT-11,1762,7,reader1,7,reader2 -2018,BSKT,WA18008-BSKT-3,1762,11,reader1,11,reader2 -2018,BSKT,WA18011-BSKT-15,1762,7,reader1,8,reader2 -2018,BSKT,WA18011-BSKT-2,1762,7,reader1,7,reader2 -2018,BSKT,WA18011-BSKT-7,1762,8,reader1,9,reader2 -2018,BSKT,WA18013-BSKT-11,1762,8,reader1,7,reader2 -2018,BSKT,WA18013-BSKT-12,1762,7,reader1,7,reader2 -2018,BSKT,WA18013-BSKT-2,1762,7,reader1,8,reader2 -2018,BSKT,WA18013-BSKT-6,1762,14,reader1,12,reader2 -2018,BSKT,WA18016-BSKT-1,1762,5,reader1,8,reader2 -2018,BSKT,WA18016-BSKT-13,1762,6,reader1,7,reader2 -2018,BSKT,WA18016-BSKT-15,1762,7,reader1,6,reader2 -2018,BSKT,WA18017-BSKT-1,1762,6,reader1,8,reader2 -2018,BSKT,WA18017-BSKT-2,1762,6,reader1,7,reader2 -2018,BSKT,WA18017-BSKT-5,1762,7,reader1,8,reader2 -2018,BSKT,WA18017-BSKT-7,1762,7,reader1,8,reader2 diff --git a/inst/extdata/REB2022.dat b/inst/extdata/REB2022.dat new file mode 100644 index 0000000..793fa39 --- /dev/null +++ b/inst/extdata/REB2022.dat @@ -0,0 +1,524 @@ +Range_of_ages +0 64 + +Data_set_1 +511 # number of lines or data points +6 # number of readers +5 40 15 # minus group; plus group; reference age + 1 2 3 4 5 6 +1 4 4 -999 -999 -999 -999 +1 6 7 -999 -999 -999 -999 +3 8 8 -999 -999 -999 -999 +2 8 9 -999 -999 -999 -999 +1 8 10 -999 -999 -999 -999 +1 9 8 -999 -999 -999 -999 +4 9 9 -999 -999 -999 -999 +4 9 10 -999 -999 -999 -999 +1 9 11 -999 -999 -999 -999 +1 10 9 -999 -999 -999 -999 +6 10 10 -999 -999 -999 -999 +4 10 11 -999 -999 -999 -999 +3 10 12 -999 -999 -999 -999 +1 11 8 -999 -999 -999 -999 +6 11 10 -999 -999 -999 -999 +11 11 11 -999 -999 -999 -999 +7 11 12 -999 -999 -999 -999 +3 11 13 -999 -999 -999 -999 +2 12 10 -999 -999 -999 -999 +9 12 11 -999 -999 -999 -999 +9 12 12 -999 -999 -999 -999 +7 12 13 -999 -999 -999 -999 +4 12 14 -999 -999 -999 -999 +1 12 15 -999 -999 -999 -999 +1 13 10 -999 -999 -999 -999 +1 13 11 -999 -999 -999 -999 +7 13 12 -999 -999 -999 -999 +17 13 13 -999 -999 -999 -999 +10 13 14 -999 -999 -999 -999 +6 13 15 -999 -999 -999 -999 +1 14 12 -999 -999 -999 -999 +8 14 13 -999 -999 -999 -999 +16 14 14 -999 -999 -999 -999 +28 14 15 -999 -999 -999 -999 +2 14 16 -999 -999 -999 -999 +5 15 13 -999 -999 -999 -999 +7 15 14 -999 -999 -999 -999 +37 15 15 -999 -999 -999 -999 +9 15 16 -999 -999 -999 -999 +6 15 17 -999 -999 -999 -999 +1 15 18 -999 -999 -999 -999 +3 16 14 -999 -999 -999 -999 +9 16 15 -999 -999 -999 -999 +24 16 16 -999 -999 -999 -999 +10 16 17 -999 -999 -999 -999 +3 16 18 -999 -999 -999 -999 +1 16 19 -999 -999 -999 -999 +1 16 20 -999 -999 -999 -999 +5 17 15 -999 -999 -999 -999 +7 17 16 -999 -999 -999 -999 +19 17 17 -999 -999 -999 -999 +14 17 18 -999 -999 -999 -999 +2 17 19 -999 -999 -999 -999 +3 18 15 -999 -999 -999 -999 +1 18 16 -999 -999 -999 -999 +13 18 17 -999 -999 -999 -999 +28 18 18 -999 -999 -999 -999 +10 18 19 -999 -999 -999 -999 +4 18 20 -999 -999 -999 -999 +2 19 16 -999 -999 -999 -999 +2 19 17 -999 -999 -999 -999 +7 19 18 -999 -999 -999 -999 +21 19 19 -999 -999 -999 -999 +8 19 20 -999 -999 -999 -999 +4 19 21 -999 -999 -999 -999 +1 19 23 -999 -999 -999 -999 +1 20 16 -999 -999 -999 -999 +2 20 17 -999 -999 -999 -999 +2 20 18 -999 -999 -999 -999 +7 20 19 -999 -999 -999 -999 +13 20 20 -999 -999 -999 -999 +11 20 21 -999 -999 -999 -999 +2 20 22 -999 -999 -999 -999 +2 20 23 -999 -999 -999 -999 +1 20 24 -999 -999 -999 -999 +1 20 25 -999 -999 -999 -999 +1 21 18 -999 -999 -999 -999 +1 21 19 -999 -999 -999 -999 +8 21 20 -999 -999 -999 -999 +13 21 21 -999 -999 -999 -999 +3 21 22 -999 -999 -999 -999 +1 21 23 -999 -999 -999 -999 +1 21 24 -999 -999 -999 -999 +2 22 18 -999 -999 -999 -999 +1 22 19 -999 -999 -999 -999 +3 22 20 -999 -999 -999 -999 +8 22 21 -999 -999 -999 -999 +14 22 22 -999 -999 -999 -999 +2 22 23 -999 -999 -999 -999 +2 22 24 -999 -999 -999 -999 +1 23 21 -999 -999 -999 -999 +8 23 22 -999 -999 -999 -999 +10 23 23 -999 -999 -999 -999 +5 23 24 -999 -999 -999 -999 +1 23 25 -999 -999 -999 -999 +1 24 16 -999 -999 -999 -999 +1 24 22 -999 -999 -999 -999 +2 24 23 -999 -999 -999 -999 +16 24 24 -999 -999 -999 -999 +4 24 25 -999 -999 -999 -999 +2 24 26 -999 -999 -999 -999 +1 24 27 -999 -999 -999 -999 +2 25 22 -999 -999 -999 -999 +1 25 23 -999 -999 -999 -999 +9 25 24 -999 -999 -999 -999 +13 25 25 -999 -999 -999 -999 +4 25 26 -999 -999 -999 -999 +1 25 28 -999 -999 -999 -999 +1 25 34 -999 -999 -999 -999 +2 26 23 -999 -999 -999 -999 +5 26 24 -999 -999 -999 -999 +4 26 25 -999 -999 -999 -999 +7 26 26 -999 -999 -999 -999 +5 26 27 -999 -999 -999 -999 +2 26 28 -999 -999 -999 -999 +1 26 29 -999 -999 -999 -999 +2 27 24 -999 -999 -999 -999 +3 27 25 -999 -999 -999 -999 +4 27 26 -999 -999 -999 -999 +7 27 27 -999 -999 -999 -999 +5 27 28 -999 -999 -999 -999 +1 27 29 -999 -999 -999 -999 +1 27 35 -999 -999 -999 -999 +4 28 26 -999 -999 -999 -999 +2 28 27 -999 -999 -999 -999 +8 28 28 -999 -999 -999 -999 +2 28 29 -999 -999 -999 -999 +1 28 30 -999 -999 -999 -999 +1 29 25 -999 -999 -999 -999 +2 29 26 -999 -999 -999 -999 +1 29 27 -999 -999 -999 -999 +3 29 28 -999 -999 -999 -999 +5 29 29 -999 -999 -999 -999 +1 29 31 -999 -999 -999 -999 +1 29 34 -999 -999 -999 -999 +3 30 29 -999 -999 -999 -999 +2 30 30 -999 -999 -999 -999 +2 30 31 -999 -999 -999 -999 +1 30 32 -999 -999 -999 -999 +1 31 29 -999 -999 -999 -999 +3 31 30 -999 -999 -999 -999 +2 31 31 -999 -999 -999 -999 +1 31 32 -999 -999 -999 -999 +2 32 31 -999 -999 -999 -999 +5 32 32 -999 -999 -999 -999 +1 32 33 -999 -999 -999 -999 +1 33 30 -999 -999 -999 -999 +1 33 31 -999 -999 -999 -999 +3 33 32 -999 -999 -999 -999 +1 34 24 -999 -999 -999 -999 +1 34 31 -999 -999 -999 -999 +1 34 32 -999 -999 -999 -999 +1 34 34 -999 -999 -999 -999 +2 34 35 -999 -999 -999 -999 +2 34 36 -999 -999 -999 -999 +1 35 32 -999 -999 -999 -999 +1 35 35 -999 -999 -999 -999 +2 35 36 -999 -999 -999 -999 +1 36 36 -999 -999 -999 -999 +1 37 33 -999 -999 -999 -999 +1 37 36 -999 -999 -999 -999 +1 37 37 -999 -999 -999 -999 +1 37 38 -999 -999 -999 -999 +1 37 39 -999 -999 -999 -999 +1 38 37 -999 -999 -999 -999 +1 38 38 -999 -999 -999 -999 +1 38 39 -999 -999 -999 -999 +1 39 37 -999 -999 -999 -999 +1 39 39 -999 -999 -999 -999 +1 39 40 -999 -999 -999 -999 +1 41 35 -999 -999 -999 -999 +1 41 37 -999 -999 -999 -999 +2 41 40 -999 -999 -999 -999 +2 41 41 -999 -999 -999 -999 +1 41 43 -999 -999 -999 -999 +1 41 48 -999 -999 -999 -999 +1 42 41 -999 -999 -999 -999 +2 42 42 -999 -999 -999 -999 +1 42 45 -999 -999 -999 -999 +1 43 40 -999 -999 -999 -999 +2 43 43 -999 -999 -999 -999 +1 44 42 -999 -999 -999 -999 +1 44 43 -999 -999 -999 -999 +1 44 46 -999 -999 -999 -999 +1 46 50 -999 -999 -999 -999 +1 48 42 -999 -999 -999 -999 +1 49 50 -999 -999 -999 -999 +1 49 54 -999 -999 -999 -999 +1 51 49 -999 -999 -999 -999 +1 51 51 -999 -999 -999 -999 +1 52 51 -999 -999 -999 -999 +1 56 53 -999 -999 -999 -999 +1 63 60 -999 -999 -999 -999 +3 -999 -999 8 8 -999 -999 +1 -999 -999 8 9 -999 -999 +1 -999 -999 9 9 -999 -999 +1 -999 -999 9 10 -999 -999 +1 -999 -999 10 8 -999 -999 +5 -999 -999 10 10 -999 -999 +1 -999 -999 10 11 -999 -999 +1 -999 -999 11 10 -999 -999 +14 -999 -999 11 11 -999 -999 +4 -999 -999 11 12 -999 -999 +1 -999 -999 11 13 -999 -999 +1 -999 -999 12 10 -999 -999 +3 -999 -999 12 11 -999 -999 +6 -999 -999 12 12 -999 -999 +3 -999 -999 12 13 -999 -999 +2 -999 -999 12 14 -999 -999 +6 -999 -999 13 12 -999 -999 +24 -999 -999 13 13 -999 -999 +7 -999 -999 13 14 -999 -999 +1 -999 -999 13 15 -999 -999 +9 -999 -999 14 13 -999 -999 +15 -999 -999 14 14 -999 -999 +1 -999 -999 14 15 -999 -999 +1 -999 -999 14 16 -999 -999 +1 -999 -999 15 13 -999 -999 +5 -999 -999 15 14 -999 -999 +25 -999 -999 15 15 -999 -999 +10 -999 -999 15 16 -999 -999 +1 -999 -999 15 17 -999 -999 +1 -999 -999 16 13 -999 -999 +4 -999 -999 16 14 -999 -999 +8 -999 -999 16 15 -999 -999 +13 -999 -999 16 16 -999 -999 +6 -999 -999 16 17 -999 -999 +2 -999 -999 16 18 -999 -999 +2 -999 -999 17 15 -999 -999 +10 -999 -999 17 16 -999 -999 +29 -999 -999 17 17 -999 -999 +7 -999 -999 17 18 -999 -999 +4 -999 -999 17 19 -999 -999 +2 -999 -999 17 20 -999 -999 +3 -999 -999 18 16 -999 -999 +4 -999 -999 18 17 -999 -999 +18 -999 -999 18 18 -999 -999 +7 -999 -999 18 19 -999 -999 +4 -999 -999 18 20 -999 -999 +1 -999 -999 18 25 -999 -999 +2 -999 -999 19 17 -999 -999 +6 -999 -999 19 18 -999 -999 +30 -999 -999 19 19 -999 -999 +7 -999 -999 19 20 -999 -999 +1 -999 -999 19 22 -999 -999 +1 -999 -999 19 23 -999 -999 +2 -999 -999 20 18 -999 -999 +5 -999 -999 20 19 -999 -999 +12 -999 -999 20 20 -999 -999 +7 -999 -999 20 21 -999 -999 +1 -999 -999 20 22 -999 -999 +1 -999 -999 21 19 -999 -999 +3 -999 -999 21 20 -999 -999 +10 -999 -999 21 21 -999 -999 +9 -999 -999 21 22 -999 -999 +2 -999 -999 21 23 -999 -999 +1 -999 -999 22 19 -999 -999 +1 -999 -999 22 20 -999 -999 +4 -999 -999 22 21 -999 -999 +15 -999 -999 22 22 -999 -999 +6 -999 -999 22 23 -999 -999 +2 -999 -999 22 24 -999 -999 +1 -999 -999 22 25 -999 -999 +2 -999 -999 23 20 -999 -999 +1 -999 -999 23 21 -999 -999 +3 -999 -999 23 22 -999 -999 +8 -999 -999 23 23 -999 -999 +7 -999 -999 23 24 -999 -999 +4 -999 -999 23 25 -999 -999 +1 -999 -999 24 21 -999 -999 +3 -999 -999 24 22 -999 -999 +6 -999 -999 24 23 -999 -999 +12 -999 -999 24 24 -999 -999 +2 -999 -999 24 25 -999 -999 +1 -999 -999 24 26 -999 -999 +1 -999 -999 25 23 -999 -999 +1 -999 -999 25 24 -999 -999 +5 -999 -999 25 25 -999 -999 +3 -999 -999 25 27 -999 -999 +2 -999 -999 25 28 -999 -999 +1 -999 -999 26 22 -999 -999 +1 -999 -999 26 25 -999 -999 +8 -999 -999 26 26 -999 -999 +2 -999 -999 26 27 -999 -999 +1 -999 -999 27 25 -999 -999 +3 -999 -999 27 26 -999 -999 +3 -999 -999 27 27 -999 -999 +1 -999 -999 27 28 -999 -999 +6 -999 -999 28 27 -999 -999 +3 -999 -999 28 28 -999 -999 +1 -999 -999 28 29 -999 -999 +3 -999 -999 29 28 -999 -999 +3 -999 -999 29 29 -999 -999 +2 -999 -999 29 33 -999 -999 +3 -999 -999 30 29 -999 -999 +2 -999 -999 30 30 -999 -999 +3 -999 -999 30 31 -999 -999 +1 -999 -999 30 35 -999 -999 +1 -999 -999 31 29 -999 -999 +1 -999 -999 31 32 -999 -999 +1 -999 -999 32 32 -999 -999 +1 -999 -999 32 35 -999 -999 +2 -999 -999 35 34 -999 -999 +1 -999 -999 35 35 -999 -999 +1 -999 -999 43 46 -999 -999 +1 -999 -999 46 47 -999 -999 +1 -999 -999 48 47 -999 -999 +1 -999 -999 55 54 -999 -999 +1 -999 -999 -999 -999 8 9 +2 -999 -999 -999 -999 9 8 +4 -999 -999 -999 -999 9 9 +3 -999 -999 -999 -999 10 9 +5 -999 -999 -999 -999 10 10 +2 -999 -999 -999 -999 10 11 +4 -999 -999 -999 -999 11 10 +10 -999 -999 -999 -999 11 11 +2 -999 -999 -999 -999 11 12 +1 -999 -999 -999 -999 11 13 +3 -999 -999 -999 -999 12 11 +10 -999 -999 -999 -999 12 12 +6 -999 -999 -999 -999 12 13 +1 -999 -999 -999 -999 12 14 +1 -999 -999 -999 -999 12 15 +1 -999 -999 -999 -999 13 11 +4 -999 -999 -999 -999 13 12 +16 -999 -999 -999 -999 13 13 +3 -999 -999 -999 -999 13 14 +1 -999 -999 -999 -999 13 15 +1 -999 -999 -999 -999 14 11 +5 -999 -999 -999 -999 14 13 +13 -999 -999 -999 -999 14 14 +4 -999 -999 -999 -999 14 15 +6 -999 -999 -999 -999 15 14 +12 -999 -999 -999 -999 15 15 +6 -999 -999 -999 -999 15 16 +2 -999 -999 -999 -999 15 17 +4 -999 -999 -999 -999 16 14 +7 -999 -999 -999 -999 16 15 +15 -999 -999 -999 -999 16 16 +5 -999 -999 -999 -999 16 17 +3 -999 -999 -999 -999 16 18 +1 -999 -999 -999 -999 17 14 +2 -999 -999 -999 -999 17 15 +8 -999 -999 -999 -999 17 16 +22 -999 -999 -999 -999 17 17 +11 -999 -999 -999 -999 17 18 +2 -999 -999 -999 -999 17 19 +1 -999 -999 -999 -999 18 15 +2 -999 -999 -999 -999 18 16 +11 -999 -999 -999 -999 18 17 +30 -999 -999 -999 -999 18 18 +9 -999 -999 -999 -999 18 19 +1 -999 -999 -999 -999 18 20 +2 -999 -999 -999 -999 19 17 +8 -999 -999 -999 -999 19 18 +27 -999 -999 -999 -999 19 19 +6 -999 -999 -999 -999 19 20 +3 -999 -999 -999 -999 19 21 +1 -999 -999 -999 -999 19 22 +1 -999 -999 -999 -999 20 17 +6 -999 -999 -999 -999 20 18 +8 -999 -999 -999 -999 20 19 +11 -999 -999 -999 -999 20 20 +9 -999 -999 -999 -999 20 21 +1 -999 -999 -999 -999 20 22 +2 -999 -999 -999 -999 20 23 +1 -999 -999 -999 -999 21 19 +6 -999 -999 -999 -999 21 20 +13 -999 -999 -999 -999 21 21 +5 -999 -999 -999 -999 21 22 +1 -999 -999 -999 -999 22 19 +3 -999 -999 -999 -999 22 20 +9 -999 -999 -999 -999 22 21 +13 -999 -999 -999 -999 22 22 +8 -999 -999 -999 -999 22 23 +1 -999 -999 -999 -999 23 18 +1 -999 -999 -999 -999 23 21 +5 -999 -999 -999 -999 23 22 +10 -999 -999 -999 -999 23 23 +2 -999 -999 -999 -999 23 24 +1 -999 -999 -999 -999 24 22 +4 -999 -999 -999 -999 24 23 +8 -999 -999 -999 -999 24 24 +1 -999 -999 -999 -999 24 25 +6 -999 -999 -999 -999 24 26 +1 -999 -999 -999 -999 25 22 +2 -999 -999 -999 -999 25 24 +4 -999 -999 -999 -999 25 25 +5 -999 -999 -999 -999 25 26 +1 -999 -999 -999 -999 25 27 +2 -999 -999 -999 -999 26 25 +7 -999 -999 -999 -999 26 26 +6 -999 -999 -999 -999 26 27 +1 -999 -999 -999 -999 26 28 +1 -999 -999 -999 -999 27 24 +2 -999 -999 -999 -999 27 26 +4 -999 -999 -999 -999 27 27 +7 -999 -999 -999 -999 27 28 +3 -999 -999 -999 -999 27 29 +1 -999 -999 -999 -999 28 26 +7 -999 -999 -999 -999 28 28 +6 -999 -999 -999 -999 28 29 +3 -999 -999 -999 -999 28 30 +1 -999 -999 -999 -999 28 31 +1 -999 -999 -999 -999 29 26 +1 -999 -999 -999 -999 29 27 +4 -999 -999 -999 -999 29 28 +7 -999 -999 -999 -999 29 29 +3 -999 -999 -999 -999 29 30 +1 -999 -999 -999 -999 29 31 +1 -999 -999 -999 -999 30 27 +3 -999 -999 -999 -999 30 28 +1 -999 -999 -999 -999 30 29 +4 -999 -999 -999 -999 30 30 +1 -999 -999 -999 -999 30 31 +2 -999 -999 -999 -999 30 32 +1 -999 -999 -999 -999 30 34 +1 -999 -999 -999 -999 31 29 +4 -999 -999 -999 -999 31 30 +6 -999 -999 -999 -999 31 31 +3 -999 -999 -999 -999 31 32 +1 -999 -999 -999 -999 31 33 +1 -999 -999 -999 -999 31 34 +1 -999 -999 -999 -999 31 35 +1 -999 -999 -999 -999 32 30 +2 -999 -999 -999 -999 32 31 +3 -999 -999 -999 -999 32 32 +1 -999 -999 -999 -999 32 33 +1 -999 -999 -999 -999 32 34 +1 -999 -999 -999 -999 33 29 +3 -999 -999 -999 -999 33 32 +9 -999 -999 -999 -999 33 33 +1 -999 -999 -999 -999 33 34 +1 -999 -999 -999 -999 33 35 +1 -999 -999 -999 -999 33 36 +1 -999 -999 -999 -999 34 31 +1 -999 -999 -999 -999 34 32 +3 -999 -999 -999 -999 34 34 +1 -999 -999 -999 -999 34 35 +1 -999 -999 -999 -999 34 39 +1 -999 -999 -999 -999 35 33 +4 -999 -999 -999 -999 35 36 +1 -999 -999 -999 -999 36 34 +1 -999 -999 -999 -999 36 35 +2 -999 -999 -999 -999 36 36 +1 -999 -999 -999 -999 36 37 +1 -999 -999 -999 -999 36 41 +1 -999 -999 -999 -999 37 37 +3 -999 -999 -999 -999 37 38 +1 -999 -999 -999 -999 37 39 +1 -999 -999 -999 -999 37 40 +1 -999 -999 -999 -999 37 42 +4 -999 -999 -999 -999 38 37 +1 -999 -999 -999 -999 38 38 +1 -999 -999 -999 -999 38 40 +1 -999 -999 -999 -999 38 41 +1 -999 -999 -999 -999 39 39 +2 -999 -999 -999 -999 39 40 +1 -999 -999 -999 -999 39 41 +1 -999 -999 -999 -999 39 42 +2 -999 -999 -999 -999 40 37 +1 -999 -999 -999 -999 40 38 +3 -999 -999 -999 -999 40 39 +3 -999 -999 -999 -999 40 41 +2 -999 -999 -999 -999 40 42 +1 -999 -999 -999 -999 41 36 +1 -999 -999 -999 -999 41 40 +2 -999 -999 -999 -999 41 42 +1 -999 -999 -999 -999 42 40 +1 -999 -999 -999 -999 42 41 +2 -999 -999 -999 -999 42 42 +1 -999 -999 -999 -999 42 43 +1 -999 -999 -999 -999 43 40 +1 -999 -999 -999 -999 43 41 +1 -999 -999 -999 -999 43 42 +1 -999 -999 -999 -999 43 45 +1 -999 -999 -999 -999 44 40 +1 -999 -999 -999 -999 44 41 +1 -999 -999 -999 -999 44 42 +1 -999 -999 -999 -999 44 45 +1 -999 -999 -999 -999 45 43 +1 -999 -999 -999 -999 45 44 +2 -999 -999 -999 -999 45 45 +1 -999 -999 -999 -999 45 47 +1 -999 -999 -999 -999 45 48 +1 -999 -999 -999 -999 46 44 +2 -999 -999 -999 -999 46 46 +1 -999 -999 -999 -999 46 47 +1 -999 -999 -999 -999 47 42 +1 -999 -999 -999 -999 47 47 +2 -999 -999 -999 -999 47 50 +2 -999 -999 -999 -999 48 46 +1 -999 -999 -999 -999 48 47 +1 -999 -999 -999 -999 49 48 +1 -999 -999 -999 -999 50 48 +1 -999 -999 -999 -999 50 51 +1 -999 -999 -999 -999 51 53 +1 -999 -999 -999 -999 52 49 +1 -999 -999 -999 -999 52 51 +1 -999 -999 -999 -999 52 56 +1 -999 -999 -999 -999 53 51 +1 -999 -999 -999 -999 53 53 +1 -999 -999 -999 -999 56 53 +2 -999 -999 -999 -999 57 55 +1 -999 -999 -999 -999 57 56 +1 -999 -999 -999 -999 57 60 +1 -999 -999 -999 -999 58 53 +1 -999 -999 -999 -999 58 60 +1 -999 -999 -999 -999 58 62 +1 -999 -999 -999 -999 61 57 +1 -999 -999 -999 -999 62 62 + + + + + diff --git a/inst/extdata/REB2022.spc b/inst/extdata/REB2022.spc new file mode 100644 index 0000000..cb7a755 --- /dev/null +++ b/inst/extdata/REB2022.spc @@ -0,0 +1,13 @@ +# reader BiasOpt SigmaOpt + 1 0 1 + 2 0 -1 + 3 0 -1 + 4 0 -1 + 5 0 -1 + 6 0 -1 + +Bias_Pars (low high init, on/off) + +Sigma_Pars (low high init, on/off) + 0.001 10 0.1 1 + diff --git a/inst/extdata/REB2022_trim.dat b/inst/extdata/REB2022_trim.dat new file mode 100644 index 0000000..919bc99 --- /dev/null +++ b/inst/extdata/REB2022_trim.dat @@ -0,0 +1,520 @@ +Range_of_ages +0 64 + +Data_set_1 +507 # number of lines or data points +6 # number of readers +5 40 15 # minus group; plus group; reference age + 1 2 3 4 5 6 +1 4 4 -999 -999 -999 -999 +1 6 7 -999 -999 -999 -999 +3 8 8 -999 -999 -999 -999 +2 8 9 -999 -999 -999 -999 +1 8 10 -999 -999 -999 -999 +1 9 8 -999 -999 -999 -999 +4 9 9 -999 -999 -999 -999 +4 9 10 -999 -999 -999 -999 +1 9 11 -999 -999 -999 -999 +1 10 9 -999 -999 -999 -999 +6 10 10 -999 -999 -999 -999 +4 10 11 -999 -999 -999 -999 +3 10 12 -999 -999 -999 -999 +1 11 8 -999 -999 -999 -999 +6 11 10 -999 -999 -999 -999 +11 11 11 -999 -999 -999 -999 +7 11 12 -999 -999 -999 -999 +3 11 13 -999 -999 -999 -999 +2 12 10 -999 -999 -999 -999 +9 12 11 -999 -999 -999 -999 +9 12 12 -999 -999 -999 -999 +7 12 13 -999 -999 -999 -999 +4 12 14 -999 -999 -999 -999 +1 12 15 -999 -999 -999 -999 +1 13 10 -999 -999 -999 -999 +1 13 11 -999 -999 -999 -999 +7 13 12 -999 -999 -999 -999 +17 13 13 -999 -999 -999 -999 +10 13 14 -999 -999 -999 -999 +6 13 15 -999 -999 -999 -999 +1 14 12 -999 -999 -999 -999 +8 14 13 -999 -999 -999 -999 +16 14 14 -999 -999 -999 -999 +28 14 15 -999 -999 -999 -999 +2 14 16 -999 -999 -999 -999 +5 15 13 -999 -999 -999 -999 +7 15 14 -999 -999 -999 -999 +37 15 15 -999 -999 -999 -999 +9 15 16 -999 -999 -999 -999 +6 15 17 -999 -999 -999 -999 +1 15 18 -999 -999 -999 -999 +3 16 14 -999 -999 -999 -999 +9 16 15 -999 -999 -999 -999 +24 16 16 -999 -999 -999 -999 +10 16 17 -999 -999 -999 -999 +3 16 18 -999 -999 -999 -999 +1 16 19 -999 -999 -999 -999 +1 16 20 -999 -999 -999 -999 +5 17 15 -999 -999 -999 -999 +7 17 16 -999 -999 -999 -999 +19 17 17 -999 -999 -999 -999 +14 17 18 -999 -999 -999 -999 +2 17 19 -999 -999 -999 -999 +3 18 15 -999 -999 -999 -999 +1 18 16 -999 -999 -999 -999 +13 18 17 -999 -999 -999 -999 +28 18 18 -999 -999 -999 -999 +10 18 19 -999 -999 -999 -999 +4 18 20 -999 -999 -999 -999 +2 19 16 -999 -999 -999 -999 +2 19 17 -999 -999 -999 -999 +7 19 18 -999 -999 -999 -999 +21 19 19 -999 -999 -999 -999 +8 19 20 -999 -999 -999 -999 +4 19 21 -999 -999 -999 -999 +1 19 23 -999 -999 -999 -999 +1 20 16 -999 -999 -999 -999 +2 20 17 -999 -999 -999 -999 +2 20 18 -999 -999 -999 -999 +7 20 19 -999 -999 -999 -999 +13 20 20 -999 -999 -999 -999 +11 20 21 -999 -999 -999 -999 +2 20 22 -999 -999 -999 -999 +2 20 23 -999 -999 -999 -999 +1 20 24 -999 -999 -999 -999 +1 20 25 -999 -999 -999 -999 +1 21 18 -999 -999 -999 -999 +1 21 19 -999 -999 -999 -999 +8 21 20 -999 -999 -999 -999 +13 21 21 -999 -999 -999 -999 +3 21 22 -999 -999 -999 -999 +1 21 23 -999 -999 -999 -999 +1 21 24 -999 -999 -999 -999 +2 22 18 -999 -999 -999 -999 +1 22 19 -999 -999 -999 -999 +3 22 20 -999 -999 -999 -999 +8 22 21 -999 -999 -999 -999 +14 22 22 -999 -999 -999 -999 +2 22 23 -999 -999 -999 -999 +2 22 24 -999 -999 -999 -999 +1 23 21 -999 -999 -999 -999 +8 23 22 -999 -999 -999 -999 +10 23 23 -999 -999 -999 -999 +5 23 24 -999 -999 -999 -999 +1 23 25 -999 -999 -999 -999 +1 24 22 -999 -999 -999 -999 +2 24 23 -999 -999 -999 -999 +16 24 24 -999 -999 -999 -999 +4 24 25 -999 -999 -999 -999 +2 24 26 -999 -999 -999 -999 +1 24 27 -999 -999 -999 -999 +2 25 22 -999 -999 -999 -999 +1 25 23 -999 -999 -999 -999 +9 25 24 -999 -999 -999 -999 +13 25 25 -999 -999 -999 -999 +4 25 26 -999 -999 -999 -999 +1 25 28 -999 -999 -999 -999 +2 26 23 -999 -999 -999 -999 +5 26 24 -999 -999 -999 -999 +4 26 25 -999 -999 -999 -999 +7 26 26 -999 -999 -999 -999 +5 26 27 -999 -999 -999 -999 +2 26 28 -999 -999 -999 -999 +1 26 29 -999 -999 -999 -999 +2 27 24 -999 -999 -999 -999 +3 27 25 -999 -999 -999 -999 +4 27 26 -999 -999 -999 -999 +7 27 27 -999 -999 -999 -999 +5 27 28 -999 -999 -999 -999 +1 27 29 -999 -999 -999 -999 +1 27 35 -999 -999 -999 -999 +4 28 26 -999 -999 -999 -999 +2 28 27 -999 -999 -999 -999 +8 28 28 -999 -999 -999 -999 +2 28 29 -999 -999 -999 -999 +1 28 30 -999 -999 -999 -999 +1 29 25 -999 -999 -999 -999 +2 29 26 -999 -999 -999 -999 +1 29 27 -999 -999 -999 -999 +3 29 28 -999 -999 -999 -999 +5 29 29 -999 -999 -999 -999 +1 29 31 -999 -999 -999 -999 +1 29 34 -999 -999 -999 -999 +3 30 29 -999 -999 -999 -999 +2 30 30 -999 -999 -999 -999 +2 30 31 -999 -999 -999 -999 +1 30 32 -999 -999 -999 -999 +1 31 29 -999 -999 -999 -999 +3 31 30 -999 -999 -999 -999 +2 31 31 -999 -999 -999 -999 +1 31 32 -999 -999 -999 -999 +2 32 31 -999 -999 -999 -999 +5 32 32 -999 -999 -999 -999 +1 32 33 -999 -999 -999 -999 +1 33 30 -999 -999 -999 -999 +1 33 31 -999 -999 -999 -999 +3 33 32 -999 -999 -999 -999 +1 34 31 -999 -999 -999 -999 +1 34 32 -999 -999 -999 -999 +1 34 34 -999 -999 -999 -999 +2 34 35 -999 -999 -999 -999 +2 34 36 -999 -999 -999 -999 +1 35 32 -999 -999 -999 -999 +1 35 35 -999 -999 -999 -999 +2 35 36 -999 -999 -999 -999 +1 36 36 -999 -999 -999 -999 +1 37 33 -999 -999 -999 -999 +1 37 36 -999 -999 -999 -999 +1 37 37 -999 -999 -999 -999 +1 37 38 -999 -999 -999 -999 +1 37 39 -999 -999 -999 -999 +1 38 37 -999 -999 -999 -999 +1 38 38 -999 -999 -999 -999 +1 38 39 -999 -999 -999 -999 +1 39 37 -999 -999 -999 -999 +1 39 39 -999 -999 -999 -999 +1 39 40 -999 -999 -999 -999 +1 41 35 -999 -999 -999 -999 +1 41 37 -999 -999 -999 -999 +2 41 40 -999 -999 -999 -999 +2 41 41 -999 -999 -999 -999 +1 41 43 -999 -999 -999 -999 +1 41 48 -999 -999 -999 -999 +1 42 41 -999 -999 -999 -999 +2 42 42 -999 -999 -999 -999 +1 42 45 -999 -999 -999 -999 +1 43 40 -999 -999 -999 -999 +2 43 43 -999 -999 -999 -999 +1 44 42 -999 -999 -999 -999 +1 44 43 -999 -999 -999 -999 +1 44 46 -999 -999 -999 -999 +1 46 50 -999 -999 -999 -999 +1 48 42 -999 -999 -999 -999 +1 49 50 -999 -999 -999 -999 +1 49 54 -999 -999 -999 -999 +1 51 49 -999 -999 -999 -999 +1 51 51 -999 -999 -999 -999 +1 52 51 -999 -999 -999 -999 +1 56 53 -999 -999 -999 -999 +1 63 60 -999 -999 -999 -999 +3 -999 -999 8 8 -999 -999 +1 -999 -999 8 9 -999 -999 +1 -999 -999 9 9 -999 -999 +1 -999 -999 9 10 -999 -999 +1 -999 -999 10 8 -999 -999 +5 -999 -999 10 10 -999 -999 +1 -999 -999 10 11 -999 -999 +1 -999 -999 11 10 -999 -999 +14 -999 -999 11 11 -999 -999 +4 -999 -999 11 12 -999 -999 +1 -999 -999 11 13 -999 -999 +1 -999 -999 12 10 -999 -999 +3 -999 -999 12 11 -999 -999 +6 -999 -999 12 12 -999 -999 +3 -999 -999 12 13 -999 -999 +2 -999 -999 12 14 -999 -999 +6 -999 -999 13 12 -999 -999 +24 -999 -999 13 13 -999 -999 +7 -999 -999 13 14 -999 -999 +1 -999 -999 13 15 -999 -999 +9 -999 -999 14 13 -999 -999 +15 -999 -999 14 14 -999 -999 +1 -999 -999 14 15 -999 -999 +1 -999 -999 14 16 -999 -999 +1 -999 -999 15 13 -999 -999 +5 -999 -999 15 14 -999 -999 +25 -999 -999 15 15 -999 -999 +10 -999 -999 15 16 -999 -999 +1 -999 -999 15 17 -999 -999 +1 -999 -999 16 13 -999 -999 +4 -999 -999 16 14 -999 -999 +8 -999 -999 16 15 -999 -999 +13 -999 -999 16 16 -999 -999 +6 -999 -999 16 17 -999 -999 +2 -999 -999 16 18 -999 -999 +2 -999 -999 17 15 -999 -999 +10 -999 -999 17 16 -999 -999 +29 -999 -999 17 17 -999 -999 +7 -999 -999 17 18 -999 -999 +4 -999 -999 17 19 -999 -999 +2 -999 -999 17 20 -999 -999 +3 -999 -999 18 16 -999 -999 +4 -999 -999 18 17 -999 -999 +18 -999 -999 18 18 -999 -999 +7 -999 -999 18 19 -999 -999 +4 -999 -999 18 20 -999 -999 +2 -999 -999 19 17 -999 -999 +6 -999 -999 19 18 -999 -999 +30 -999 -999 19 19 -999 -999 +7 -999 -999 19 20 -999 -999 +1 -999 -999 19 22 -999 -999 +1 -999 -999 19 23 -999 -999 +2 -999 -999 20 18 -999 -999 +5 -999 -999 20 19 -999 -999 +12 -999 -999 20 20 -999 -999 +7 -999 -999 20 21 -999 -999 +1 -999 -999 20 22 -999 -999 +1 -999 -999 21 19 -999 -999 +3 -999 -999 21 20 -999 -999 +10 -999 -999 21 21 -999 -999 +9 -999 -999 21 22 -999 -999 +2 -999 -999 21 23 -999 -999 +1 -999 -999 22 19 -999 -999 +1 -999 -999 22 20 -999 -999 +4 -999 -999 22 21 -999 -999 +15 -999 -999 22 22 -999 -999 +6 -999 -999 22 23 -999 -999 +2 -999 -999 22 24 -999 -999 +1 -999 -999 22 25 -999 -999 +2 -999 -999 23 20 -999 -999 +1 -999 -999 23 21 -999 -999 +3 -999 -999 23 22 -999 -999 +8 -999 -999 23 23 -999 -999 +7 -999 -999 23 24 -999 -999 +4 -999 -999 23 25 -999 -999 +1 -999 -999 24 21 -999 -999 +3 -999 -999 24 22 -999 -999 +6 -999 -999 24 23 -999 -999 +12 -999 -999 24 24 -999 -999 +2 -999 -999 24 25 -999 -999 +1 -999 -999 24 26 -999 -999 +1 -999 -999 25 23 -999 -999 +1 -999 -999 25 24 -999 -999 +5 -999 -999 25 25 -999 -999 +3 -999 -999 25 27 -999 -999 +2 -999 -999 25 28 -999 -999 +1 -999 -999 26 22 -999 -999 +1 -999 -999 26 25 -999 -999 +8 -999 -999 26 26 -999 -999 +2 -999 -999 26 27 -999 -999 +1 -999 -999 27 25 -999 -999 +3 -999 -999 27 26 -999 -999 +3 -999 -999 27 27 -999 -999 +1 -999 -999 27 28 -999 -999 +6 -999 -999 28 27 -999 -999 +3 -999 -999 28 28 -999 -999 +1 -999 -999 28 29 -999 -999 +3 -999 -999 29 28 -999 -999 +3 -999 -999 29 29 -999 -999 +2 -999 -999 29 33 -999 -999 +3 -999 -999 30 29 -999 -999 +2 -999 -999 30 30 -999 -999 +3 -999 -999 30 31 -999 -999 +1 -999 -999 30 35 -999 -999 +1 -999 -999 31 29 -999 -999 +1 -999 -999 31 32 -999 -999 +1 -999 -999 32 32 -999 -999 +1 -999 -999 32 35 -999 -999 +2 -999 -999 35 34 -999 -999 +1 -999 -999 35 35 -999 -999 +1 -999 -999 43 46 -999 -999 +1 -999 -999 46 47 -999 -999 +1 -999 -999 48 47 -999 -999 +1 -999 -999 55 54 -999 -999 +1 -999 -999 -999 -999 8 9 +2 -999 -999 -999 -999 9 8 +4 -999 -999 -999 -999 9 9 +3 -999 -999 -999 -999 10 9 +5 -999 -999 -999 -999 10 10 +2 -999 -999 -999 -999 10 11 +4 -999 -999 -999 -999 11 10 +10 -999 -999 -999 -999 11 11 +2 -999 -999 -999 -999 11 12 +1 -999 -999 -999 -999 11 13 +3 -999 -999 -999 -999 12 11 +10 -999 -999 -999 -999 12 12 +6 -999 -999 -999 -999 12 13 +1 -999 -999 -999 -999 12 14 +1 -999 -999 -999 -999 12 15 +1 -999 -999 -999 -999 13 11 +4 -999 -999 -999 -999 13 12 +16 -999 -999 -999 -999 13 13 +3 -999 -999 -999 -999 13 14 +1 -999 -999 -999 -999 13 15 +1 -999 -999 -999 -999 14 11 +5 -999 -999 -999 -999 14 13 +13 -999 -999 -999 -999 14 14 +4 -999 -999 -999 -999 14 15 +6 -999 -999 -999 -999 15 14 +12 -999 -999 -999 -999 15 15 +6 -999 -999 -999 -999 15 16 +2 -999 -999 -999 -999 15 17 +4 -999 -999 -999 -999 16 14 +7 -999 -999 -999 -999 16 15 +15 -999 -999 -999 -999 16 16 +5 -999 -999 -999 -999 16 17 +3 -999 -999 -999 -999 16 18 +1 -999 -999 -999 -999 17 14 +2 -999 -999 -999 -999 17 15 +8 -999 -999 -999 -999 17 16 +22 -999 -999 -999 -999 17 17 +11 -999 -999 -999 -999 17 18 +2 -999 -999 -999 -999 17 19 +1 -999 -999 -999 -999 18 15 +2 -999 -999 -999 -999 18 16 +11 -999 -999 -999 -999 18 17 +30 -999 -999 -999 -999 18 18 +9 -999 -999 -999 -999 18 19 +1 -999 -999 -999 -999 18 20 +2 -999 -999 -999 -999 19 17 +8 -999 -999 -999 -999 19 18 +27 -999 -999 -999 -999 19 19 +6 -999 -999 -999 -999 19 20 +3 -999 -999 -999 -999 19 21 +1 -999 -999 -999 -999 19 22 +1 -999 -999 -999 -999 20 17 +6 -999 -999 -999 -999 20 18 +8 -999 -999 -999 -999 20 19 +11 -999 -999 -999 -999 20 20 +9 -999 -999 -999 -999 20 21 +1 -999 -999 -999 -999 20 22 +2 -999 -999 -999 -999 20 23 +1 -999 -999 -999 -999 21 19 +6 -999 -999 -999 -999 21 20 +13 -999 -999 -999 -999 21 21 +5 -999 -999 -999 -999 21 22 +1 -999 -999 -999 -999 22 19 +3 -999 -999 -999 -999 22 20 +9 -999 -999 -999 -999 22 21 +13 -999 -999 -999 -999 22 22 +8 -999 -999 -999 -999 22 23 +1 -999 -999 -999 -999 23 18 +1 -999 -999 -999 -999 23 21 +5 -999 -999 -999 -999 23 22 +10 -999 -999 -999 -999 23 23 +2 -999 -999 -999 -999 23 24 +1 -999 -999 -999 -999 24 22 +4 -999 -999 -999 -999 24 23 +8 -999 -999 -999 -999 24 24 +1 -999 -999 -999 -999 24 25 +6 -999 -999 -999 -999 24 26 +1 -999 -999 -999 -999 25 22 +2 -999 -999 -999 -999 25 24 +4 -999 -999 -999 -999 25 25 +5 -999 -999 -999 -999 25 26 +1 -999 -999 -999 -999 25 27 +2 -999 -999 -999 -999 26 25 +7 -999 -999 -999 -999 26 26 +6 -999 -999 -999 -999 26 27 +1 -999 -999 -999 -999 26 28 +1 -999 -999 -999 -999 27 24 +2 -999 -999 -999 -999 27 26 +4 -999 -999 -999 -999 27 27 +7 -999 -999 -999 -999 27 28 +3 -999 -999 -999 -999 27 29 +1 -999 -999 -999 -999 28 26 +7 -999 -999 -999 -999 28 28 +6 -999 -999 -999 -999 28 29 +3 -999 -999 -999 -999 28 30 +1 -999 -999 -999 -999 28 31 +1 -999 -999 -999 -999 29 26 +1 -999 -999 -999 -999 29 27 +4 -999 -999 -999 -999 29 28 +7 -999 -999 -999 -999 29 29 +3 -999 -999 -999 -999 29 30 +1 -999 -999 -999 -999 29 31 +1 -999 -999 -999 -999 30 27 +3 -999 -999 -999 -999 30 28 +1 -999 -999 -999 -999 30 29 +4 -999 -999 -999 -999 30 30 +1 -999 -999 -999 -999 30 31 +2 -999 -999 -999 -999 30 32 +1 -999 -999 -999 -999 30 34 +1 -999 -999 -999 -999 31 29 +4 -999 -999 -999 -999 31 30 +6 -999 -999 -999 -999 31 31 +3 -999 -999 -999 -999 31 32 +1 -999 -999 -999 -999 31 33 +1 -999 -999 -999 -999 31 34 +1 -999 -999 -999 -999 31 35 +1 -999 -999 -999 -999 32 30 +2 -999 -999 -999 -999 32 31 +3 -999 -999 -999 -999 32 32 +1 -999 -999 -999 -999 32 33 +1 -999 -999 -999 -999 32 34 +1 -999 -999 -999 -999 33 29 +3 -999 -999 -999 -999 33 32 +9 -999 -999 -999 -999 33 33 +1 -999 -999 -999 -999 33 34 +1 -999 -999 -999 -999 33 35 +1 -999 -999 -999 -999 33 36 +1 -999 -999 -999 -999 34 31 +1 -999 -999 -999 -999 34 32 +3 -999 -999 -999 -999 34 34 +1 -999 -999 -999 -999 34 35 +1 -999 -999 -999 -999 34 39 +1 -999 -999 -999 -999 35 33 +4 -999 -999 -999 -999 35 36 +1 -999 -999 -999 -999 36 34 +1 -999 -999 -999 -999 36 35 +2 -999 -999 -999 -999 36 36 +1 -999 -999 -999 -999 36 37 +1 -999 -999 -999 -999 36 41 +1 -999 -999 -999 -999 37 37 +3 -999 -999 -999 -999 37 38 +1 -999 -999 -999 -999 37 39 +1 -999 -999 -999 -999 37 40 +1 -999 -999 -999 -999 37 42 +4 -999 -999 -999 -999 38 37 +1 -999 -999 -999 -999 38 38 +1 -999 -999 -999 -999 38 40 +1 -999 -999 -999 -999 38 41 +1 -999 -999 -999 -999 39 39 +2 -999 -999 -999 -999 39 40 +1 -999 -999 -999 -999 39 41 +1 -999 -999 -999 -999 39 42 +2 -999 -999 -999 -999 40 37 +1 -999 -999 -999 -999 40 38 +3 -999 -999 -999 -999 40 39 +3 -999 -999 -999 -999 40 41 +2 -999 -999 -999 -999 40 42 +1 -999 -999 -999 -999 41 36 +1 -999 -999 -999 -999 41 40 +2 -999 -999 -999 -999 41 42 +1 -999 -999 -999 -999 42 40 +1 -999 -999 -999 -999 42 41 +2 -999 -999 -999 -999 42 42 +1 -999 -999 -999 -999 42 43 +1 -999 -999 -999 -999 43 40 +1 -999 -999 -999 -999 43 41 +1 -999 -999 -999 -999 43 42 +1 -999 -999 -999 -999 43 45 +1 -999 -999 -999 -999 44 40 +1 -999 -999 -999 -999 44 41 +1 -999 -999 -999 -999 44 42 +1 -999 -999 -999 -999 44 45 +1 -999 -999 -999 -999 45 43 +1 -999 -999 -999 -999 45 44 +2 -999 -999 -999 -999 45 45 +1 -999 -999 -999 -999 45 47 +1 -999 -999 -999 -999 45 48 +1 -999 -999 -999 -999 46 44 +2 -999 -999 -999 -999 46 46 +1 -999 -999 -999 -999 46 47 +1 -999 -999 -999 -999 47 42 +1 -999 -999 -999 -999 47 47 +2 -999 -999 -999 -999 47 50 +2 -999 -999 -999 -999 48 46 +1 -999 -999 -999 -999 48 47 +1 -999 -999 -999 -999 49 48 +1 -999 -999 -999 -999 50 48 +1 -999 -999 -999 -999 50 51 +1 -999 -999 -999 -999 51 53 +1 -999 -999 -999 -999 52 49 +1 -999 -999 -999 -999 52 51 +1 -999 -999 -999 -999 52 56 +1 -999 -999 -999 -999 53 51 +1 -999 -999 -999 -999 53 53 +1 -999 -999 -999 -999 56 53 +2 -999 -999 -999 -999 57 55 +1 -999 -999 -999 -999 57 56 +1 -999 -999 -999 -999 57 60 +1 -999 -999 -999 -999 58 53 +1 -999 -999 -999 -999 58 60 +1 -999 -999 -999 -999 58 62 +1 -999 -999 -999 -999 61 57 +1 -999 -999 -999 -999 62 62 + + + + + diff --git a/inst/extdata/REB2022_trim.spc b/inst/extdata/REB2022_trim.spc new file mode 100644 index 0000000..d90e924 --- /dev/null +++ b/inst/extdata/REB2022_trim.spc @@ -0,0 +1,13 @@ +# reader BiasOpt SigmaOpt + 1 0 1 + 2 0 -1 + 3 0 -1 + 4 0 -1 + 5 0 -1 + 6 0 -1 + +Bias_Pars (low high init, on/off) + +Sigma_Pars (low high init, on/off) + 0.001 10 0.0413288 1 + diff --git a/inst/extdata/Sable.dat b/inst/extdata/Sable.dat new file mode 100644 index 0000000..f891d45 --- /dev/null +++ b/inst/extdata/Sable.dat @@ -0,0 +1,5004 @@ +Range_of_ages +1 100 + +Data_set_1 +2494 # data points +6 # readers +1 50 4 # minus group; plus group; reference age + 1 2 3 4 5 6 +1 65 66 -999 -999 -999 -999 +1 61 66 -999 -999 -999 -999 +1 72 65 -999 -999 -999 -999 +1 68 63 -999 -999 -999 -999 +1 58 61 -999 -999 -999 -999 +1 64 60 -999 -999 -999 -999 +1 59 60 -999 -999 -999 -999 +1 47 59 -999 -999 -999 -999 +1 51 58 -999 -999 -999 -999 +1 66 58 -999 -999 -999 -999 +1 64 57 -999 -999 -999 -999 +1 65 57 -999 -999 -999 -999 +1 57 57 -999 -999 -999 -999 +1 52 56 -999 -999 -999 -999 +1 45 55 -999 -999 -999 -999 +1 48 55 -999 -999 -999 -999 +1 60 54 -999 -999 -999 -999 +1 52 54 -999 -999 -999 -999 +1 58 53 -999 -999 -999 -999 +1 54 53 -999 -999 -999 -999 +1 42 53 -999 -999 -999 -999 +1 55 53 -999 -999 -999 -999 +1 48 52 -999 -999 -999 -999 +1 40 51 -999 -999 -999 -999 +3 49 51 -999 -999 -999 -999 +1 39 51 -999 -999 -999 -999 +1 43 51 -999 -999 -999 -999 +1 57 51 -999 -999 -999 -999 +1 43 50 -999 -999 -999 -999 +1 49 50 -999 -999 -999 -999 +1 48 50 -999 -999 -999 -999 +1 46 49 -999 -999 -999 -999 +1 53 49 -999 -999 -999 -999 +1 49 49 -999 -999 -999 -999 +1 41 49 -999 -999 -999 -999 +1 26 49 -999 -999 -999 -999 +1 20 49 -999 -999 -999 -999 +1 47 49 -999 -999 -999 -999 +1 51 49 -999 -999 -999 -999 +1 34 48 -999 -999 -999 -999 +2 37 48 -999 -999 -999 -999 +1 53 48 -999 -999 -999 -999 +1 25 48 -999 -999 -999 -999 +1 64 48 -999 -999 -999 -999 +1 42 48 -999 -999 -999 -999 +1 63 48 -999 -999 -999 -999 +2 48 48 -999 -999 -999 -999 +1 52 48 -999 -999 -999 -999 +1 50 48 -999 -999 -999 -999 +1 43 47 -999 -999 -999 -999 +2 40 47 -999 -999 -999 -999 +1 50 47 -999 -999 -999 -999 +2 48 47 -999 -999 -999 -999 +2 54 47 -999 -999 -999 -999 +1 44 47 -999 -999 -999 -999 +2 39 47 -999 -999 -999 -999 +2 51 47 -999 -999 -999 -999 +1 47 47 -999 -999 -999 -999 +1 32 47 -999 -999 -999 -999 +2 46 46 -999 -999 -999 -999 +1 47 46 -999 -999 -999 -999 +1 52 46 -999 -999 -999 -999 +1 37 46 -999 -999 -999 -999 +1 45 46 -999 -999 -999 -999 +1 48 46 -999 -999 -999 -999 +1 39 46 -999 -999 -999 -999 +1 49 45 -999 -999 -999 -999 +1 43 45 -999 -999 -999 -999 +1 44 45 -999 -999 -999 -999 +1 51 45 -999 -999 -999 -999 +1 39 44 -999 -999 -999 -999 +2 46 44 -999 -999 -999 -999 +1 36 44 -999 -999 -999 -999 +2 43 44 -999 -999 -999 -999 +1 38 44 -999 -999 -999 -999 +1 27 44 -999 -999 -999 -999 +1 47 44 -999 -999 -999 -999 +1 54 44 -999 -999 -999 -999 +1 50 44 -999 -999 -999 -999 +1 31 43 -999 -999 -999 -999 +1 43 43 -999 -999 -999 -999 +1 50 43 -999 -999 -999 -999 +1 46 43 -999 -999 -999 -999 +1 59 43 -999 -999 -999 -999 +1 47 43 -999 -999 -999 -999 +1 42 43 -999 -999 -999 -999 +2 43 42 -999 -999 -999 -999 +1 42 42 -999 -999 -999 -999 +1 41 42 -999 -999 -999 -999 +2 37 42 -999 -999 -999 -999 +1 39 42 -999 -999 -999 -999 +1 38 42 -999 -999 -999 -999 +1 32 42 -999 -999 -999 -999 +1 47 42 -999 -999 -999 -999 +1 44 42 -999 -999 -999 -999 +2 37 41 -999 -999 -999 -999 +2 39 41 -999 -999 -999 -999 +2 47 41 -999 -999 -999 -999 +1 22 41 -999 -999 -999 -999 +1 34 41 -999 -999 -999 -999 +1 45 41 -999 -999 -999 -999 +1 31 41 -999 -999 -999 -999 +1 44 41 -999 -999 -999 -999 +2 40 40 -999 -999 -999 -999 +1 33 40 -999 -999 -999 -999 +1 34 40 -999 -999 -999 -999 +1 42 40 -999 -999 -999 -999 +1 31 40 -999 -999 -999 -999 +1 45 40 -999 -999 -999 -999 +1 41 40 -999 -999 -999 -999 +1 36 40 -999 -999 -999 -999 +2 24 40 -999 -999 -999 -999 +1 43 40 -999 -999 -999 -999 +1 37 40 -999 -999 -999 -999 +1 28 40 -999 -999 -999 -999 +1 29 40 -999 -999 -999 -999 +2 36 39 -999 -999 -999 -999 +4 32 39 -999 -999 -999 -999 +2 31 39 -999 -999 -999 -999 +2 43 39 -999 -999 -999 -999 +1 33 39 -999 -999 -999 -999 +3 37 39 -999 -999 -999 -999 +1 29 39 -999 -999 -999 -999 +1 38 39 -999 -999 -999 -999 +1 35 39 -999 -999 -999 -999 +1 27 39 -999 -999 -999 -999 +1 45 39 -999 -999 -999 -999 +1 41 39 -999 -999 -999 -999 +1 30 38 -999 -999 -999 -999 +1 29 38 -999 -999 -999 -999 +2 26 38 -999 -999 -999 -999 +1 35 38 -999 -999 -999 -999 +1 41 38 -999 -999 -999 -999 +1 27 38 -999 -999 -999 -999 +1 38 38 -999 -999 -999 -999 +1 45 38 -999 -999 -999 -999 +1 31 38 -999 -999 -999 -999 +1 34 38 -999 -999 -999 -999 +1 43 38 -999 -999 -999 -999 +3 32 37 -999 -999 -999 -999 +1 30 37 -999 -999 -999 -999 +1 26 37 -999 -999 -999 -999 +3 34 37 -999 -999 -999 -999 +2 37 37 -999 -999 -999 -999 +1 48 37 -999 -999 -999 -999 +2 39 37 -999 -999 -999 -999 +2 33 37 -999 -999 -999 -999 +1 44 37 -999 -999 -999 -999 +1 35 37 -999 -999 -999 -999 +1 40 37 -999 -999 -999 -999 +1 18 37 -999 -999 -999 -999 +1 42 37 -999 -999 -999 -999 +1 46 37 -999 -999 -999 -999 +3 32 36 -999 -999 -999 -999 +1 35 36 -999 -999 -999 -999 +2 31 36 -999 -999 -999 -999 +1 30 36 -999 -999 -999 -999 +1 25 36 -999 -999 -999 -999 +1 40 36 -999 -999 -999 -999 +2 43 36 -999 -999 -999 -999 +2 36 36 -999 -999 -999 -999 +1 33 36 -999 -999 -999 -999 +1 27 36 -999 -999 -999 -999 +1 20 36 -999 -999 -999 -999 +2 39 36 -999 -999 -999 -999 +1 18 36 -999 -999 -999 -999 +1 28 36 -999 -999 -999 -999 +3 45 36 -999 -999 -999 -999 +1 38 36 -999 -999 -999 -999 +1 46 36 -999 -999 -999 -999 +1 49 36 -999 -999 -999 -999 +2 36 35 -999 -999 -999 -999 +1 43 35 -999 -999 -999 -999 +1 37 35 -999 -999 -999 -999 +1 29 35 -999 -999 -999 -999 +2 22 35 -999 -999 -999 -999 +1 30 35 -999 -999 -999 -999 +3 35 35 -999 -999 -999 -999 +1 42 35 -999 -999 -999 -999 +1 20 35 -999 -999 -999 -999 +1 38 35 -999 -999 -999 -999 +1 33 35 -999 -999 -999 -999 +1 31 35 -999 -999 -999 -999 +2 28 35 -999 -999 -999 -999 +1 39 35 -999 -999 -999 -999 +2 29 34 -999 -999 -999 -999 +2 40 34 -999 -999 -999 -999 +2 28 34 -999 -999 -999 -999 +2 35 34 -999 -999 -999 -999 +1 45 34 -999 -999 -999 -999 +1 23 34 -999 -999 -999 -999 +1 22 34 -999 -999 -999 -999 +1 19 34 -999 -999 -999 -999 +1 36 34 -999 -999 -999 -999 +2 31 34 -999 -999 -999 -999 +1 17 34 -999 -999 -999 -999 +1 38 34 -999 -999 -999 -999 +1 51 34 -999 -999 -999 -999 +1 18 34 -999 -999 -999 -999 +1 33 34 -999 -999 -999 -999 +1 30 34 -999 -999 -999 -999 +3 34 33 -999 -999 -999 -999 +2 36 33 -999 -999 -999 -999 +1 33 33 -999 -999 -999 -999 +4 31 33 -999 -999 -999 -999 +1 41 33 -999 -999 -999 -999 +1 35 33 -999 -999 -999 -999 +1 16 33 -999 -999 -999 -999 +1 40 33 -999 -999 -999 -999 +4 28 33 -999 -999 -999 -999 +1 38 33 -999 -999 -999 -999 +1 52 33 -999 -999 -999 -999 +1 17 33 -999 -999 -999 -999 +1 21 33 -999 -999 -999 -999 +1 37 33 -999 -999 -999 -999 +1 42 33 -999 -999 -999 -999 +1 39 33 -999 -999 -999 -999 +1 20 33 -999 -999 -999 -999 +2 38 32 -999 -999 -999 -999 +1 39 32 -999 -999 -999 -999 +2 29 32 -999 -999 -999 -999 +3 34 32 -999 -999 -999 -999 +5 32 32 -999 -999 -999 -999 +3 37 32 -999 -999 -999 -999 +3 35 32 -999 -999 -999 -999 +2 31 32 -999 -999 -999 -999 +2 16 32 -999 -999 -999 -999 +1 13 32 -999 -999 -999 -999 +1 44 32 -999 -999 -999 -999 +2 22 32 -999 -999 -999 -999 +1 30 32 -999 -999 -999 -999 +1 21 32 -999 -999 -999 -999 +1 17 32 -999 -999 -999 -999 +2 33 32 -999 -999 -999 -999 +1 41 32 -999 -999 -999 -999 +1 14 32 -999 -999 -999 -999 +1 46 32 -999 -999 -999 -999 +1 28 32 -999 -999 -999 -999 +1 42 32 -999 -999 -999 -999 +1 36 32 -999 -999 -999 -999 +3 29 31 -999 -999 -999 -999 +4 30 31 -999 -999 -999 -999 +4 31 31 -999 -999 -999 -999 +4 33 31 -999 -999 -999 -999 +4 28 31 -999 -999 -999 -999 +2 24 31 -999 -999 -999 -999 +2 32 31 -999 -999 -999 -999 +2 22 31 -999 -999 -999 -999 +2 35 31 -999 -999 -999 -999 +2 27 31 -999 -999 -999 -999 +2 26 31 -999 -999 -999 -999 +1 11 31 -999 -999 -999 -999 +2 21 31 -999 -999 -999 -999 +1 50 31 -999 -999 -999 -999 +1 46 31 -999 -999 -999 -999 +5 32 30 -999 -999 -999 -999 +1 29 30 -999 -999 -999 -999 +1 24 30 -999 -999 -999 -999 +2 25 30 -999 -999 -999 -999 +1 23 30 -999 -999 -999 -999 +3 27 30 -999 -999 -999 -999 +2 12 30 -999 -999 -999 -999 +3 26 30 -999 -999 -999 -999 +1 37 30 -999 -999 -999 -999 +1 33 30 -999 -999 -999 -999 +1 39 30 -999 -999 -999 -999 +1 30 30 -999 -999 -999 -999 +1 28 30 -999 -999 -999 -999 +1 22 30 -999 -999 -999 -999 +2 31 30 -999 -999 -999 -999 +1 18 30 -999 -999 -999 -999 +2 31 29 -999 -999 -999 -999 +2 35 29 -999 -999 -999 -999 +3 28 29 -999 -999 -999 -999 +4 27 29 -999 -999 -999 -999 +2 34 29 -999 -999 -999 -999 +1 29 29 -999 -999 -999 -999 +1 40 29 -999 -999 -999 -999 +1 32 29 -999 -999 -999 -999 +1 9 29 -999 -999 -999 -999 +1 53 29 -999 -999 -999 -999 +1 25 29 -999 -999 -999 -999 +2 36 29 -999 -999 -999 -999 +1 16 29 -999 -999 -999 -999 +1 23 29 -999 -999 -999 -999 +3 30 29 -999 -999 -999 -999 +1 33 29 -999 -999 -999 -999 +1 24 29 -999 -999 -999 -999 +2 26 29 -999 -999 -999 -999 +1 45 29 -999 -999 -999 -999 +1 39 29 -999 -999 -999 -999 +3 19 28 -999 -999 -999 -999 +1 36 28 -999 -999 -999 -999 +1 31 28 -999 -999 -999 -999 +2 23 28 -999 -999 -999 -999 +2 28 28 -999 -999 -999 -999 +5 29 28 -999 -999 -999 -999 +1 34 28 -999 -999 -999 -999 +1 40 28 -999 -999 -999 -999 +1 33 28 -999 -999 -999 -999 +2 15 28 -999 -999 -999 -999 +1 38 28 -999 -999 -999 -999 +4 20 28 -999 -999 -999 -999 +2 22 28 -999 -999 -999 -999 +1 12 28 -999 -999 -999 -999 +2 26 28 -999 -999 -999 -999 +5 25 28 -999 -999 -999 -999 +2 18 28 -999 -999 -999 -999 +2 27 28 -999 -999 -999 -999 +1 17 28 -999 -999 -999 -999 +1 24 28 -999 -999 -999 -999 +2 30 28 -999 -999 -999 -999 +1 39 28 -999 -999 -999 -999 +1 36 27 -999 -999 -999 -999 +2 31 27 -999 -999 -999 -999 +2 33 27 -999 -999 -999 -999 +4 25 27 -999 -999 -999 -999 +5 29 27 -999 -999 -999 -999 +2 17 27 -999 -999 -999 -999 +4 27 27 -999 -999 -999 -999 +1 24 27 -999 -999 -999 -999 +2 21 27 -999 -999 -999 -999 +2 22 27 -999 -999 -999 -999 +3 32 27 -999 -999 -999 -999 +2 20 27 -999 -999 -999 -999 +2 28 27 -999 -999 -999 -999 +2 30 27 -999 -999 -999 -999 +1 12 27 -999 -999 -999 -999 +1 19 27 -999 -999 -999 -999 +1 23 27 -999 -999 -999 -999 +2 26 27 -999 -999 -999 -999 +2 24 26 -999 -999 -999 -999 +2 34 26 -999 -999 -999 -999 +1 8 26 -999 -999 -999 -999 +4 23 26 -999 -999 -999 -999 +6 28 26 -999 -999 -999 -999 +4 29 26 -999 -999 -999 -999 +3 27 26 -999 -999 -999 -999 +2 13 26 -999 -999 -999 -999 +1 21 26 -999 -999 -999 -999 +1 15 26 -999 -999 -999 -999 +3 25 26 -999 -999 -999 -999 +1 37 26 -999 -999 -999 -999 +2 19 26 -999 -999 -999 -999 +3 22 26 -999 -999 -999 -999 +3 26 26 -999 -999 -999 -999 +1 14 26 -999 -999 -999 -999 +1 36 26 -999 -999 -999 -999 +2 30 26 -999 -999 -999 -999 +1 38 26 -999 -999 -999 -999 +1 61 26 -999 -999 -999 -999 +1 31 26 -999 -999 -999 -999 +1 32 26 -999 -999 -999 -999 +1 18 26 -999 -999 -999 -999 +1 33 26 -999 -999 -999 -999 +4 21 25 -999 -999 -999 -999 +2 30 25 -999 -999 -999 -999 +6 25 25 -999 -999 -999 -999 +5 26 25 -999 -999 -999 -999 +3 27 25 -999 -999 -999 -999 +2 37 25 -999 -999 -999 -999 +5 22 25 -999 -999 -999 -999 +3 23 25 -999 -999 -999 -999 +3 19 25 -999 -999 -999 -999 +3 20 25 -999 -999 -999 -999 +1 14 25 -999 -999 -999 -999 +2 31 25 -999 -999 -999 -999 +1 18 25 -999 -999 -999 -999 +3 24 25 -999 -999 -999 -999 +1 38 25 -999 -999 -999 -999 +1 49 25 -999 -999 -999 -999 +2 29 25 -999 -999 -999 -999 +3 28 25 -999 -999 -999 -999 +1 35 25 -999 -999 -999 -999 +1 39 25 -999 -999 -999 -999 +1 36 25 -999 -999 -999 -999 +2 32 24 -999 -999 -999 -999 +2 27 24 -999 -999 -999 -999 +14 24 24 -999 -999 -999 -999 +5 25 24 -999 -999 -999 -999 +1 34 24 -999 -999 -999 -999 +1 33 24 -999 -999 -999 -999 +2 35 24 -999 -999 -999 -999 +1 23 24 -999 -999 -999 -999 +4 18 24 -999 -999 -999 -999 +1 11 24 -999 -999 -999 -999 +3 28 24 -999 -999 -999 -999 +4 20 24 -999 -999 -999 -999 +2 17 24 -999 -999 -999 -999 +4 22 24 -999 -999 -999 -999 +2 29 24 -999 -999 -999 -999 +4 26 24 -999 -999 -999 -999 +2 19 24 -999 -999 -999 -999 +3 15 24 -999 -999 -999 -999 +1 16 24 -999 -999 -999 -999 +1 30 24 -999 -999 -999 -999 +1 36 24 -999 -999 -999 -999 +1 21 24 -999 -999 -999 -999 +1 14 24 -999 -999 -999 -999 +6 20 23 -999 -999 -999 -999 +6 23 23 -999 -999 -999 -999 +4 19 23 -999 -999 -999 -999 +8 21 23 -999 -999 -999 -999 +4 18 23 -999 -999 -999 -999 +3 22 23 -999 -999 -999 -999 +4 26 23 -999 -999 -999 -999 +2 28 23 -999 -999 -999 -999 +1 17 23 -999 -999 -999 -999 +1 14 23 -999 -999 -999 -999 +1 31 23 -999 -999 -999 -999 +1 42 23 -999 -999 -999 -999 +1 34 23 -999 -999 -999 -999 +2 24 23 -999 -999 -999 -999 +1 27 23 -999 -999 -999 -999 +2 13 23 -999 -999 -999 -999 +1 43 23 -999 -999 -999 -999 +1 29 23 -999 -999 -999 -999 +2 25 23 -999 -999 -999 -999 +5 21 22 -999 -999 -999 -999 +12 20 22 -999 -999 -999 -999 +6 18 22 -999 -999 -999 -999 +4 26 22 -999 -999 -999 -999 +5 17 22 -999 -999 -999 -999 +8 19 22 -999 -999 -999 -999 +2 16 22 -999 -999 -999 -999 +3 25 22 -999 -999 -999 -999 +1 34 22 -999 -999 -999 -999 +4 23 22 -999 -999 -999 -999 +1 30 22 -999 -999 -999 -999 +8 24 22 -999 -999 -999 -999 +2 15 22 -999 -999 -999 -999 +2 13 22 -999 -999 -999 -999 +2 31 22 -999 -999 -999 -999 +3 28 22 -999 -999 -999 -999 +1 36 22 -999 -999 -999 -999 +1 10 22 -999 -999 -999 -999 +9 22 22 -999 -999 -999 -999 +1 33 22 -999 -999 -999 -999 +2 14 22 -999 -999 -999 -999 +3 16 21 -999 -999 -999 -999 +6 20 21 -999 -999 -999 -999 +5 25 21 -999 -999 -999 -999 +5 17 21 -999 -999 -999 -999 +11 18 21 -999 -999 -999 -999 +6 14 21 -999 -999 -999 -999 +1 12 21 -999 -999 -999 -999 +7 22 21 -999 -999 -999 -999 +5 15 21 -999 -999 -999 -999 +2 29 21 -999 -999 -999 -999 +1 40 21 -999 -999 -999 -999 +12 21 21 -999 -999 -999 -999 +9 23 21 -999 -999 -999 -999 +13 19 21 -999 -999 -999 -999 +1 26 21 -999 -999 -999 -999 +1 30 21 -999 -999 -999 -999 +1 36 21 -999 -999 -999 -999 +1 28 21 -999 -999 -999 -999 +2 31 21 -999 -999 -999 -999 +1 11 21 -999 -999 -999 -999 +1 24 21 -999 -999 -999 -999 +1 27 21 -999 -999 -999 -999 +1 10 21 -999 -999 -999 -999 +9 18 20 -999 -999 -999 -999 +6 16 20 -999 -999 -999 -999 +5 17 20 -999 -999 -999 -999 +1 28 20 -999 -999 -999 -999 +14 20 20 -999 -999 -999 -999 +6 22 20 -999 -999 -999 -999 +2 8 20 -999 -999 -999 -999 +10 19 20 -999 -999 -999 -999 +8 21 20 -999 -999 -999 -999 +2 9 20 -999 -999 -999 -999 +3 14 20 -999 -999 -999 -999 +3 25 20 -999 -999 -999 -999 +5 24 20 -999 -999 -999 -999 +4 27 20 -999 -999 -999 -999 +1 15 20 -999 -999 -999 -999 +8 23 20 -999 -999 -999 -999 +2 26 20 -999 -999 -999 -999 +2 11 20 -999 -999 -999 -999 +1 12 20 -999 -999 -999 -999 +1 35 20 -999 -999 -999 -999 +2 13 20 -999 -999 -999 -999 +18 20 19 -999 -999 -999 -999 +12 18 19 -999 -999 -999 -999 +3 25 19 -999 -999 -999 -999 +8 16 19 -999 -999 -999 -999 +4 14 19 -999 -999 -999 -999 +8 15 19 -999 -999 -999 -999 +1 12 19 -999 -999 -999 -999 +6 13 19 -999 -999 -999 -999 +10 19 19 -999 -999 -999 -999 +9 17 19 -999 -999 -999 -999 +3 11 19 -999 -999 -999 -999 +4 22 19 -999 -999 -999 -999 +1 29 19 -999 -999 -999 -999 +2 24 19 -999 -999 -999 -999 +3 21 19 -999 -999 -999 -999 +1 9 19 -999 -999 -999 -999 +2 26 19 -999 -999 -999 -999 +2 27 19 -999 -999 -999 -999 +1 23 19 -999 -999 -999 -999 +1 8 19 -999 -999 -999 -999 +21 17 18 -999 -999 -999 -999 +11 19 18 -999 -999 -999 -999 +5 15 18 -999 -999 -999 -999 +4 23 18 -999 -999 -999 -999 +15 16 18 -999 -999 -999 -999 +4 9 18 -999 -999 -999 -999 +9 14 18 -999 -999 -999 -999 +13 18 18 -999 -999 -999 -999 +6 20 18 -999 -999 -999 -999 +11 13 18 -999 -999 -999 -999 +2 11 18 -999 -999 -999 -999 +5 12 18 -999 -999 -999 -999 +1 8 18 -999 -999 -999 -999 +7 21 18 -999 -999 -999 -999 +4 22 18 -999 -999 -999 -999 +1 29 18 -999 -999 -999 -999 +1 24 18 -999 -999 -999 -999 +1 25 18 -999 -999 -999 -999 +2 7 18 -999 -999 -999 -999 +1 36 18 -999 -999 -999 -999 +1 27 18 -999 -999 -999 -999 +3 10 18 -999 -999 -999 -999 +1 28 18 -999 -999 -999 -999 +1 40 18 -999 -999 -999 -999 +11 19 17 -999 -999 -999 -999 +21 16 17 -999 -999 -999 -999 +3 9 17 -999 -999 -999 -999 +10 15 17 -999 -999 -999 -999 +18 17 17 -999 -999 -999 -999 +1 39 17 -999 -999 -999 -999 +8 21 17 -999 -999 -999 -999 +10 14 17 -999 -999 -999 -999 +6 13 17 -999 -999 -999 -999 +16 18 17 -999 -999 -999 -999 +5 8 17 -999 -999 -999 -999 +7 12 17 -999 -999 -999 -999 +3 11 17 -999 -999 -999 -999 +4 24 17 -999 -999 -999 -999 +8 20 17 -999 -999 -999 -999 +2 28 17 -999 -999 -999 -999 +6 10 17 -999 -999 -999 -999 +5 22 17 -999 -999 -999 -999 +1 26 17 -999 -999 -999 -999 +1 23 17 -999 -999 -999 -999 +1 7 17 -999 -999 -999 -999 +1 30 17 -999 -999 -999 -999 +1 25 17 -999 -999 -999 -999 +10 19 16 -999 -999 -999 -999 +26 15 16 -999 -999 -999 -999 +26 17 16 -999 -999 -999 -999 +29 16 16 -999 -999 -999 -999 +10 11 16 -999 -999 -999 -999 +10 20 16 -999 -999 -999 -999 +14 14 16 -999 -999 -999 -999 +1 25 16 -999 -999 -999 -999 +14 18 16 -999 -999 -999 -999 +15 13 16 -999 -999 -999 -999 +8 12 16 -999 -999 -999 -999 +2 38 16 -999 -999 -999 -999 +3 10 16 -999 -999 -999 -999 +6 21 16 -999 -999 -999 -999 +4 9 16 -999 -999 -999 -999 +1 30 16 -999 -999 -999 -999 +3 24 16 -999 -999 -999 -999 +2 22 16 -999 -999 -999 -999 +1 7 16 -999 -999 -999 -999 +3 8 16 -999 -999 -999 -999 +2 23 16 -999 -999 -999 -999 +1 27 16 -999 -999 -999 -999 +12 19 15 -999 -999 -999 -999 +12 18 15 -999 -999 -999 -999 +30 15 15 -999 -999 -999 -999 +25 16 15 -999 -999 -999 -999 +19 13 15 -999 -999 -999 -999 +4 9 15 -999 -999 -999 -999 +1 26 15 -999 -999 -999 -999 +4 20 15 -999 -999 -999 -999 +10 17 15 -999 -999 -999 -999 +1 25 15 -999 -999 -999 -999 +7 11 15 -999 -999 -999 -999 +1 7 15 -999 -999 -999 -999 +16 14 15 -999 -999 -999 -999 +2 40 15 -999 -999 -999 -999 +10 12 15 -999 -999 -999 -999 +1 32 15 -999 -999 -999 -999 +4 22 15 -999 -999 -999 -999 +2 10 15 -999 -999 -999 -999 +1 23 15 -999 -999 -999 -999 +3 28 15 -999 -999 -999 -999 +1 24 15 -999 -999 -999 -999 +24 15 14 -999 -999 -999 -999 +20 16 14 -999 -999 -999 -999 +15 11 14 -999 -999 -999 -999 +8 17 14 -999 -999 -999 -999 +1 32 14 -999 -999 -999 -999 +17 13 14 -999 -999 -999 -999 +33 14 14 -999 -999 -999 -999 +24 12 14 -999 -999 -999 -999 +7 19 14 -999 -999 -999 -999 +8 10 14 -999 -999 -999 -999 +5 18 14 -999 -999 -999 -999 +3 20 14 -999 -999 -999 -999 +1 25 14 -999 -999 -999 -999 +5 9 14 -999 -999 -999 -999 +1 24 14 -999 -999 -999 -999 +1 6 14 -999 -999 -999 -999 +2 8 14 -999 -999 -999 -999 +1 28 14 -999 -999 -999 -999 +1 22 14 -999 -999 -999 -999 +39 14 13 -999 -999 -999 -999 +1 21 13 -999 -999 -999 -999 +4 20 13 -999 -999 -999 -999 +47 13 13 -999 -999 -999 -999 +18 10 13 -999 -999 -999 -999 +5 7 13 -999 -999 -999 -999 +24 12 13 -999 -999 -999 -999 +10 17 13 -999 -999 -999 -999 +21 15 13 -999 -999 -999 -999 +25 11 13 -999 -999 -999 -999 +14 9 13 -999 -999 -999 -999 +8 16 13 -999 -999 -999 -999 +2 19 13 -999 -999 -999 -999 +5 8 13 -999 -999 -999 -999 +4 18 13 -999 -999 -999 -999 +1 25 13 -999 -999 -999 -999 +1 31 13 -999 -999 -999 -999 +6 17 12 -999 -999 -999 -999 +52 12 12 -999 -999 -999 -999 +29 13 12 -999 -999 -999 -999 +13 15 12 -999 -999 -999 -999 +20 14 12 -999 -999 -999 -999 +33 10 12 -999 -999 -999 -999 +49 11 12 -999 -999 -999 -999 +11 8 12 -999 -999 -999 -999 +3 21 12 -999 -999 -999 -999 +28 9 12 -999 -999 -999 -999 +13 7 12 -999 -999 -999 -999 +3 24 12 -999 -999 -999 -999 +1 5 12 -999 -999 -999 -999 +3 16 12 -999 -999 -999 -999 +3 6 12 -999 -999 -999 -999 +1 19 12 -999 -999 -999 -999 +23 13 11 -999 -999 -999 -999 +61 12 11 -999 -999 -999 -999 +16 14 11 -999 -999 -999 -999 +69 11 11 -999 -999 -999 -999 +41 9 11 -999 -999 -999 -999 +69 10 11 -999 -999 -999 -999 +34 8 11 -999 -999 -999 -999 +3 19 11 -999 -999 -999 -999 +8 7 11 -999 -999 -999 -999 +6 17 11 -999 -999 -999 -999 +4 16 11 -999 -999 -999 -999 +3 15 11 -999 -999 -999 -999 +3 6 11 -999 -999 -999 -999 +3 18 11 -999 -999 -999 -999 +2 5 11 -999 -999 -999 -999 +4 17 10 -999 -999 -999 -999 +1 22 10 -999 -999 -999 -999 +15 14 10 -999 -999 -999 -999 +95 9 10 -999 -999 -999 -999 +63 8 10 -999 -999 -999 -999 +4 16 10 -999 -999 -999 -999 +18 13 10 -999 -999 -999 -999 +1 20 10 -999 -999 -999 -999 +108 10 10 -999 -999 -999 -999 +36 12 10 -999 -999 -999 -999 +7 15 10 -999 -999 -999 -999 +1 21 10 -999 -999 -999 -999 +66 11 10 -999 -999 -999 -999 +35 7 10 -999 -999 -999 -999 +14 6 10 -999 -999 -999 -999 +4 18 10 -999 -999 -999 -999 +1 5 10 -999 -999 -999 -999 +1 26 10 -999 -999 -999 -999 +26 12 9 -999 -999 -999 -999 +92 10 9 -999 -999 -999 -999 +23 13 9 -999 -999 -999 -999 +1 21 9 -999 -999 -999 -999 +167 8 9 -999 -999 -999 -999 +83 7 9 -999 -999 -999 -999 +244 9 9 -999 -999 -999 -999 +6 15 9 -999 -999 -999 -999 +21 6 9 -999 -999 -999 -999 +8 5 9 -999 -999 -999 -999 +60 11 9 -999 -999 -999 -999 +3 16 9 -999 -999 -999 -999 +11 14 9 -999 -999 -999 -999 +1 17 9 -999 -999 -999 -999 +1 4 9 -999 -999 -999 -999 +5 15 8 -999 -999 -999 -999 +23 11 8 -999 -999 -999 -999 +146 9 8 -999 -999 -999 -999 +325 8 8 -999 -999 -999 -999 +8 13 8 -999 -999 -999 -999 +1 20 8 -999 -999 -999 -999 +85 6 8 -999 -999 -999 -999 +193 7 8 -999 -999 -999 -999 +31 5 8 -999 -999 -999 -999 +2 14 8 -999 -999 -999 -999 +50 10 8 -999 -999 -999 -999 +14 12 8 -999 -999 -999 -999 +1 19 8 -999 -999 -999 -999 +2 16 8 -999 -999 -999 -999 +1 21 8 -999 -999 -999 -999 +4 17 8 -999 -999 -999 -999 +2 4 8 -999 -999 -999 -999 +72 9 7 -999 -999 -999 -999 +516 7 7 -999 -999 -999 -999 +30 10 7 -999 -999 -999 -999 +21 11 7 -999 -999 -999 -999 +200 8 7 -999 -999 -999 -999 +235 6 7 -999 -999 -999 -999 +60 5 7 -999 -999 -999 -999 +5 13 7 -999 -999 -999 -999 +8 12 7 -999 -999 -999 -999 +1 14 7 -999 -999 -999 -999 +1 15 7 -999 -999 -999 -999 +6 4 7 -999 -999 -999 -999 +3 15 6 -999 -999 -999 -999 +178 5 6 -999 -999 -999 -999 +4 14 6 -999 -999 -999 -999 +1 20 6 -999 -999 -999 -999 +670 6 6 -999 -999 -999 -999 +87 8 6 -999 -999 -999 -999 +3 12 6 -999 -999 -999 -999 +18 10 6 -999 -999 -999 -999 +198 7 6 -999 -999 -999 -999 +30 9 6 -999 -999 -999 -999 +13 4 6 -999 -999 -999 -999 +1 13 6 -999 -999 -999 -999 +2 3 6 -999 -999 -999 -999 +5 11 6 -999 -999 -999 -999 +490 5 5 -999 -999 -999 -999 +40 7 5 -999 -999 -999 -999 +15 8 5 -999 -999 -999 -999 +164 6 5 -999 -999 -999 -999 +58 4 5 -999 -999 -999 -999 +3 10 5 -999 -999 -999 -999 +3 3 5 -999 -999 -999 -999 +4 9 5 -999 -999 -999 -999 +1 13 5 -999 -999 -999 -999 +253 4 4 -999 -999 -999 -999 +31 3 4 -999 -999 -999 -999 +94 5 4 -999 -999 -999 -999 +2 10 4 -999 -999 -999 -999 +2 8 4 -999 -999 -999 -999 +8 7 4 -999 -999 -999 -999 +15 6 4 -999 -999 -999 -999 +143 3 3 -999 -999 -999 -999 +39 4 3 -999 -999 -999 -999 +3 2 3 -999 -999 -999 -999 +2 6 3 -999 -999 -999 -999 +2 5 3 -999 -999 -999 -999 +65 2 2 -999 -999 -999 -999 +3 3 2 -999 -999 -999 -999 +1 4 2 -999 -999 -999 -999 +3 -999 15 13 -999 -999 -999 +2 -999 10 10 -999 -999 -999 +7 -999 11 9 -999 -999 -999 +3 -999 4 2 -999 -999 -999 +5 -999 4 3 -999 -999 -999 +2 -999 9 11 -999 -999 -999 +1 -999 16 7 -999 -999 -999 +2 -999 18 16 -999 -999 -999 +1 -999 13 16 -999 -999 -999 +5 -999 7 8 -999 -999 -999 +4 -999 9 8 -999 -999 -999 +28 -999 4 4 -999 -999 -999 +1 -999 13 15 -999 -999 -999 +3 -999 7 4 -999 -999 -999 +12 -999 5 5 -999 -999 -999 +8 -999 8 7 -999 -999 -999 +2 -999 16 11 -999 -999 -999 +1 -999 18 15 -999 -999 -999 +2 -999 13 8 -999 -999 -999 +7 -999 7 7 -999 -999 -999 +6 -999 9 9 -999 -999 -999 +3 -999 13 10 -999 -999 -999 +4 -999 4 5 -999 -999 -999 +4 -999 8 8 -999 -999 -999 +1 -999 15 6 -999 -999 -999 +4 -999 10 9 -999 -999 -999 +1 -999 9 6 -999 -999 -999 +1 -999 16 10 -999 -999 -999 +2 -999 18 14 -999 -999 -999 +1 -999 13 7 -999 -999 -999 +3 -999 9 10 -999 -999 -999 +1 -999 13 23 -999 -999 -999 +3 -999 13 9 -999 -999 -999 +2 -999 16 9 -999 -999 -999 +4 -999 5 4 -999 -999 -999 +3 -999 17 12 -999 -999 -999 +1 -999 15 10 -999 -999 -999 +4 -999 11 11 -999 -999 -999 +3 -999 6 5 -999 -999 -999 +2 -999 7 5 -999 -999 -999 +2 -999 8 6 -999 -999 -999 +2 -999 8 9 -999 -999 -999 +6 -999 6 6 -999 -999 -999 +1 -999 7 10 -999 -999 -999 +9 -999 7 6 -999 -999 -999 +1 -999 21 16 -999 -999 -999 +3 -999 10 6 -999 -999 -999 +1 -999 31 25 -999 -999 -999 +1 -999 12 7 -999 -999 -999 +1 -999 14 14 -999 -999 -999 +1 -999 31 31 -999 -999 -999 +2 -999 10 8 -999 -999 -999 +1 -999 21 20 -999 -999 -999 +1 -999 16 15 -999 -999 -999 +2 -999 15 15 -999 -999 -999 +1 -999 24 16 -999 -999 -999 +1 -999 18 12 -999 -999 -999 +1 -999 12 8 -999 -999 -999 +1 -999 27 19 -999 -999 -999 +3 -999 10 13 -999 -999 -999 +3 -999 18 18 -999 -999 -999 +3 -999 13 13 -999 -999 -999 +5 -999 3 3 -999 -999 -999 +1 -999 15 19 -999 -999 -999 +1 -999 18 19 -999 -999 -999 +2 -999 2 2 -999 -999 -999 +3 -999 9 7 -999 -999 -999 +1 -999 34 31 -999 -999 -999 +1 -999 25 25 -999 -999 -999 +1 -999 18 13 -999 -999 -999 +2 -999 6 8 -999 -999 -999 +1 -999 24 23 -999 -999 -999 +1 -999 28 22 -999 -999 -999 +3 -999 26 28 -999 -999 -999 +1 -999 19 20 -999 -999 -999 +2 -999 15 14 -999 -999 -999 +2 -999 42 45 -999 -999 -999 +1 -999 27 24 -999 -999 -999 +2 -999 11 14 -999 -999 -999 +1 -999 10 11 -999 -999 -999 +1 -999 84 92 -999 -999 -999 +1 -999 11 13 -999 -999 -999 +1 -999 8 5 -999 -999 -999 +1 -999 18 22 -999 -999 -999 +1 -999 61 55 -999 -999 -999 +1 -999 30 25 -999 -999 -999 +1 -999 19 16 -999 -999 -999 +1 -999 49 43 -999 -999 -999 +1 -999 29 33 -999 -999 -999 +1 -999 12 10 -999 -999 -999 +1 -999 19 19 -999 -999 -999 +2 -999 12 11 -999 -999 -999 +1 -999 15 17 -999 -999 -999 +1 -999 3 4 -999 -999 -999 +1 -999 63 64 -999 -999 -999 +1 -999 18 17 -999 -999 -999 +1 -999 39 49 -999 -999 -999 +5 -999 6 4 -999 -999 -999 +1 -999 42 43 -999 -999 -999 +1 -999 4 10 -999 -999 -999 +1 -999 20 30 -999 -999 -999 +1 -999 9 19 -999 -999 -999 +1 -999 49 65 -999 -999 -999 +1 -999 22 18 -999 -999 -999 +3 -999 8 10 -999 -999 -999 +1 -999 18 10 -999 -999 -999 +1 -999 8 4 -999 -999 -999 +1 -999 6 3 -999 -999 -999 +1 -999 16 6 -999 -999 -999 +1 -999 11 6 -999 -999 -999 +1 -999 12 17 -999 -999 -999 +1 -999 10 14 -999 -999 -999 +1 -999 7 11 -999 -999 -999 +1 -999 14 17 -999 -999 -999 +1 -999 13 11 -999 -999 -999 +1 -999 10 16 -999 -999 -999 +1 -999 3 2 -999 -999 -999 +1 -999 11 12 -999 -999 -999 +1 -999 20 20 -999 -999 -999 +1 -999 10 15 -999 -999 -999 +1 -999 9 4 -999 -999 -999 +1 -999 16 16 -999 -999 -999 +1 -999 14 15 -999 -999 -999 +1 -999 24 22 -999 -999 -999 +1 -999 16 14 -999 -999 -999 +739 -999 -999 4 4 -999 -999 +129 -999 -999 4 3 -999 -999 +9 -999 -999 13 10 -999 -999 +155 -999 -999 3 4 -999 -999 +5 -999 -999 20 23 -999 -999 +311 -999 -999 6 6 -999 -999 +9 -999 -999 14 11 -999 -999 +184 -999 -999 7 7 -999 -999 +12 -999 -999 18 17 -999 -999 +2 -999 -999 49 44 -999 -999 +97 -999 -999 8 7 -999 -999 +8 -999 -999 13 16 -999 -999 +31 -999 -999 9 6 -999 -999 +176 -999 -999 5 4 -999 -999 +3 -999 -999 12 7 -999 -999 +1 -999 -999 17 30 -999 -999 +11 -999 -999 13 17 -999 -999 +400 -999 -999 2 2 -999 -999 +466 -999 -999 3 3 -999 -999 +35 -999 -999 8 5 -999 -999 +45 -999 -999 5 3 -999 -999 +120 -999 -999 7 6 -999 -999 +8 -999 -999 2 4 -999 -999 +2 -999 -999 38 40 -999 -999 +5 -999 -999 13 18 -999 -999 +182 -999 -999 4 5 -999 -999 +1 -999 -999 33 47 -999 -999 +13 -999 -999 8 11 -999 -999 +11 -999 -999 3 6 -999 -999 +52 -999 -999 4 6 -999 -999 +121 -999 -999 1 1 -999 -999 +1 -999 -999 30 28 -999 -999 +13 -999 -999 13 9 -999 -999 +1 -999 -999 27 38 -999 -999 +24 -999 -999 10 8 -999 -999 +14 -999 -999 14 12 -999 -999 +78 -999 -999 6 4 -999 -999 +1 -999 -999 60 57 -999 -999 +386 -999 -999 5 5 -999 -999 +131 -999 -999 6 5 -999 -999 +81 -999 -999 7 8 -999 -999 +33 -999 -999 3 5 -999 -999 +2 -999 -999 15 10 -999 -999 +19 -999 -999 6 9 -999 -999 +5 -999 -999 12 15 -999 -999 +45 -999 -999 9 10 -999 -999 +24 -999 -999 12 11 -999 -999 +1 -999 -999 72 75 -999 -999 +20 -999 -999 15 14 -999 -999 +186 -999 -999 8 8 -999 -999 +56 -999 -999 5 7 -999 -999 +27 -999 -999 13 14 -999 -999 +40 -999 -999 7 9 -999 -999 +2 -999 -999 3 8 -999 -999 +79 -999 -999 9 8 -999 -999 +77 -999 -999 2 3 -999 -999 +15 -999 -999 11 7 -999 -999 +1 -999 -999 28 34 -999 -999 +97 -999 -999 6 7 -999 -999 +36 -999 -999 6 8 -999 -999 +1 -999 -999 5 11 -999 -999 +27 -999 -999 15 15 -999 -999 +1 -999 -999 55 61 -999 -999 +6 -999 -999 18 20 -999 -999 +17 -999 -999 16 17 -999 -999 +1 -999 -999 46 52 -999 -999 +1 -999 -999 66 74 -999 -999 +99 -999 -999 3 2 -999 -999 +5 -999 -999 23 23 -999 -999 +25 -999 -999 5 8 -999 -999 +16 -999 -999 18 18 -999 -999 +5 -999 -999 31 31 -999 -999 +1 -999 -999 40 48 -999 -999 +6 -999 -999 13 15 -999 -999 +6 -999 -999 2 1 -999 -999 +6 -999 -999 24 25 -999 -999 +16 -999 -999 17 15 -999 -999 +2 -999 -999 50 55 -999 -999 +1 -999 -999 24 34 -999 -999 +6 -999 -999 9 4 -999 -999 +3 -999 -999 13 6 -999 -999 +4 -999 -999 26 25 -999 -999 +5 -999 -999 17 10 -999 -999 +3 -999 -999 10 3 -999 -999 +1 -999 -999 62 21 -999 -999 +4 -999 -999 13 7 -999 -999 +133 -999 -999 5 6 -999 -999 +5 -999 -999 23 19 -999 -999 +8 -999 -999 18 14 -999 -999 +2 -999 -999 14 6 -999 -999 +51 -999 -999 8 6 -999 -999 +2 -999 -999 13 5 -999 -999 +19 -999 -999 10 6 -999 -999 +1 -999 -999 67 57 -999 -999 +15 -999 -999 6 3 -999 -999 +71 -999 -999 7 5 -999 -999 +10 -999 -999 22 21 -999 -999 +2 -999 -999 39 45 -999 -999 +30 -999 -999 11 10 -999 -999 +2 -999 -999 30 32 -999 -999 +8 -999 -999 19 18 -999 -999 +1 -999 -999 29 11 -999 -999 +3 -999 -999 39 42 -999 -999 +1 -999 -999 15 20 -999 -999 +95 -999 -999 9 9 -999 -999 +1 -999 -999 4 14 -999 -999 +24 -999 -999 10 12 -999 -999 +3 -999 -999 17 13 -999 -999 +9 -999 -999 11 13 -999 -999 +4 -999 -999 22 26 -999 -999 +4 -999 -999 28 25 -999 -999 +1 -999 -999 36 44 -999 -999 +2 -999 -999 33 32 -999 -999 +14 -999 -999 9 12 -999 -999 +14 -999 -999 7 10 -999 -999 +5 -999 -999 16 19 -999 -999 +74 -999 -999 8 9 -999 -999 +5 -999 -999 45 43 -999 -999 +26 -999 -999 7 4 -999 -999 +3 -999 -999 33 38 -999 -999 +8 -999 -999 18 15 -999 -999 +45 -999 -999 12 12 -999 -999 +6 -999 -999 10 14 -999 -999 +3 -999 -999 19 23 -999 -999 +5 -999 -999 11 16 -999 -999 +7 -999 -999 6 12 -999 -999 +11 -999 -999 10 13 -999 -999 +1 -999 -999 21 29 -999 -999 +1 -999 -999 72 76 -999 -999 +1 -999 -999 54 63 -999 -999 +4 -999 -999 27 25 -999 -999 +13 -999 -999 10 5 -999 -999 +35 -999 -999 9 7 -999 -999 +1 -999 -999 26 52 -999 -999 +15 -999 -999 8 10 -999 -999 +1 -999 -999 36 30 -999 -999 +3 -999 -999 33 33 -999 -999 +2 -999 -999 34 31 -999 -999 +29 -999 -999 14 14 -999 -999 +6 -999 -999 7 12 -999 -999 +1 -999 -999 32 40 -999 -999 +2 -999 -999 59 60 -999 -999 +13 -999 -999 11 6 -999 -999 +11 -999 -999 15 17 -999 -999 +6 -999 -999 1 2 -999 -999 +2 -999 -999 27 11 -999 -999 +1 -999 -999 39 44 -999 -999 +3 -999 -999 32 36 -999 -999 +2 -999 -999 31 22 -999 -999 +3 -999 -999 25 13 -999 -999 +18 -999 -999 12 13 -999 -999 +16 -999 -999 13 11 -999 -999 +1 -999 -999 50 50 -999 -999 +17 -999 -999 11 8 -999 -999 +12 -999 -999 19 20 -999 -999 +6 -999 -999 17 12 -999 -999 +3 -999 -999 7 3 -999 -999 +39 -999 -999 11 11 -999 -999 +19 -999 -999 4 7 -999 -999 +4 -999 -999 43 44 -999 -999 +4 -999 -999 33 29 -999 -999 +1 -999 -999 54 20 -999 -999 +2 -999 -999 46 45 -999 -999 +26 -999 -999 11 9 -999 -999 +30 -999 -999 9 5 -999 -999 +36 -999 -999 10 11 -999 -999 +1 -999 -999 45 58 -999 -999 +45 -999 -999 10 9 -999 -999 +3 -999 -999 39 38 -999 -999 +8 -999 -999 8 4 -999 -999 +11 -999 -999 17 19 -999 -999 +1 -999 -999 64 55 -999 -999 +3 -999 -999 17 22 -999 -999 +4 -999 -999 45 39 -999 -999 +1 -999 -999 49 33 -999 -999 +5 -999 -999 29 28 -999 -999 +1 -999 -999 69 66 -999 -999 +1 -999 -999 38 66 -999 -999 +1 -999 -999 54 40 -999 -999 +6 -999 -999 29 25 -999 -999 +2 -999 -999 31 38 -999 -999 +4 -999 -999 9 13 -999 -999 +54 -999 -999 10 10 -999 -999 +19 -999 -999 16 15 -999 -999 +2 -999 -999 62 40 -999 -999 +8 -999 -999 7 11 -999 -999 +14 -999 -999 12 14 -999 -999 +1 -999 -999 50 48 -999 -999 +2 -999 -999 20 13 -999 -999 +7 -999 -999 11 15 -999 -999 +43 -999 -999 13 13 -999 -999 +1 -999 -999 57 64 -999 -999 +14 -999 -999 6 10 -999 -999 +2 -999 -999 27 33 -999 -999 +1 -999 -999 55 52 -999 -999 +6 -999 -999 20 18 -999 -999 +13 -999 -999 4 2 -999 -999 +4 -999 -999 8 13 -999 -999 +2 -999 -999 16 24 -999 -999 +4 -999 -999 39 36 -999 -999 +4 -999 -999 28 30 -999 -999 +2 -999 -999 34 30 -999 -999 +1 -999 -999 61 45 -999 -999 +2 -999 -999 34 22 -999 -999 +1 -999 -999 31 18 -999 -999 +4 -999 -999 17 20 -999 -999 +20 -999 -999 17 16 -999 -999 +1 -999 -999 66 54 -999 -999 +3 -999 -999 49 27 -999 -999 +2 -999 -999 21 21 -999 -999 +1 -999 -999 59 63 -999 -999 +3 -999 -999 34 29 -999 -999 +24 -999 -999 9 11 -999 -999 +1 -999 -999 21 16 -999 -999 +16 -999 -999 12 10 -999 -999 +2 -999 -999 57 59 -999 -999 +5 -999 -999 32 35 -999 -999 +1 -999 -999 52 47 -999 -999 +1 -999 -999 68 58 -999 -999 +5 -999 -999 20 16 -999 -999 +6 -999 -999 12 8 -999 -999 +1 -999 -999 43 33 -999 -999 +1 -999 -999 65 64 -999 -999 +5 -999 -999 27 28 -999 -999 +2 -999 -999 34 28 -999 -999 +1 -999 -999 36 46 -999 -999 +5 -999 -999 22 22 -999 -999 +2 -999 -999 33 30 -999 -999 +4 -999 -999 18 21 -999 -999 +7 -999 -999 24 24 -999 -999 +3 -999 -999 19 13 -999 -999 +9 -999 -999 27 24 -999 -999 +23 -999 -999 14 13 -999 -999 +16 -999 -999 15 16 -999 -999 +2 -999 -999 6 11 -999 -999 +6 -999 -999 22 17 -999 -999 +2 -999 -999 21 17 -999 -999 +1 -999 -999 39 23 -999 -999 +1 -999 -999 35 32 -999 -999 +2 -999 -999 42 42 -999 -999 +2 -999 -999 45 40 -999 -999 +5 -999 -999 16 13 -999 -999 +1 -999 -999 37 19 -999 -999 +1 -999 -999 43 36 -999 -999 +1 -999 -999 52 21 -999 -999 +1 -999 -999 30 18 -999 -999 +7 -999 -999 4 11 -999 -999 +1 -999 -999 8 21 -999 -999 +1 -999 -999 4 13 -999 -999 +1 -999 -999 6 20 -999 -999 +1 -999 -999 11 24 -999 -999 +6 -999 -999 4 8 -999 -999 +1 -999 -999 11 18 -999 -999 +1 -999 -999 7 28 -999 -999 +7 -999 -999 14 17 -999 -999 +17 -999 -999 5 9 -999 -999 +4 -999 -999 4 9 -999 -999 +2 -999 -999 19 8 -999 -999 +6 -999 -999 15 11 -999 -999 +1 -999 -999 49 36 -999 -999 +2 -999 -999 45 46 -999 -999 +3 -999 -999 31 32 -999 -999 +1 -999 -999 44 37 -999 -999 +7 -999 -999 5 10 -999 -999 +3 -999 -999 45 42 -999 -999 +6 -999 -999 10 16 -999 -999 +2 -999 -999 10 15 -999 -999 +2 -999 -999 37 30 -999 -999 +1 -999 -999 34 44 -999 -999 +2 -999 -999 36 39 -999 -999 +2 -999 -999 40 38 -999 -999 +2 -999 -999 23 21 -999 -999 +2 -999 -999 37 41 -999 -999 +2 -999 -999 23 30 -999 -999 +6 -999 -999 22 18 -999 -999 +2 -999 -999 30 39 -999 -999 +9 -999 -999 28 28 -999 -999 +9 -999 -999 15 12 -999 -999 +3 -999 -999 12 18 -999 -999 +5 -999 -999 29 26 -999 -999 +2 -999 -999 26 23 -999 -999 +4 -999 -999 16 18 -999 -999 +1 -999 -999 29 16 -999 -999 +12 -999 -999 13 8 -999 -999 +5 -999 -999 34 33 -999 -999 +3 -999 -999 14 10 -999 -999 +5 -999 -999 18 16 -999 -999 +12 -999 -999 15 13 -999 -999 +1 -999 -999 21 9 -999 -999 +19 -999 -999 10 7 -999 -999 +1 -999 -999 18 11 -999 -999 +6 -999 -999 22 19 -999 -999 +2 -999 -999 45 41 -999 -999 +4 -999 -999 22 27 -999 -999 +14 -999 -999 19 19 -999 -999 +12 -999 -999 12 9 -999 -999 +1 -999 -999 35 39 -999 -999 +2 -999 -999 20 24 -999 -999 +9 -999 -999 29 31 -999 -999 +3 -999 -999 32 34 -999 -999 +6 -999 -999 25 22 -999 -999 +5 -999 -999 29 27 -999 -999 +1 -999 -999 17 5 -999 -999 +7 -999 -999 14 15 -999 -999 +3 -999 -999 7 13 -999 -999 +3 -999 -999 24 22 -999 -999 +4 -999 -999 28 24 -999 -999 +2 -999 -999 13 22 -999 -999 +3 -999 -999 31 33 -999 -999 +5 -999 -999 31 34 -999 -999 +7 -999 -999 27 26 -999 -999 +2 -999 -999 10 20 -999 -999 +1 -999 -999 32 23 -999 -999 +3 -999 -999 26 15 -999 -999 +1 -999 -999 2 9 -999 -999 +1 -999 -999 2 16 -999 -999 +1 -999 -999 10 27 -999 -999 +4 -999 -999 11 14 -999 -999 +4 -999 -999 25 19 -999 -999 +9 -999 -999 21 22 -999 -999 +2 -999 -999 28 15 -999 -999 +2 -999 -999 30 21 -999 -999 +1 -999 -999 39 29 -999 -999 +2 -999 -999 29 20 -999 -999 +3 -999 -999 40 35 -999 -999 +1 -999 -999 19 15 -999 -999 +20 -999 -999 11 12 -999 -999 +1 -999 -999 18 10 -999 -999 +2 -999 -999 37 21 -999 -999 +1 -999 -999 42 23 -999 -999 +6 -999 -999 20 22 -999 -999 +2 -999 -999 28 21 -999 -999 +3 -999 -999 11 5 -999 -999 +2 -999 -999 19 12 -999 -999 +2 -999 -999 34 37 -999 -999 +1 -999 -999 30 19 -999 -999 +2 -999 -999 23 17 -999 -999 +11 -999 -999 10 4 -999 -999 +4 -999 -999 24 26 -999 -999 +5 -999 -999 24 28 -999 -999 +2 -999 -999 16 22 -999 -999 +1 -999 -999 10 26 -999 -999 +6 -999 -999 12 16 -999 -999 +3 -999 -999 24 20 -999 -999 +2 -999 -999 31 36 -999 -999 +1 -999 -999 15 21 -999 -999 +1 -999 -999 14 19 -999 -999 +2 -999 -999 24 12 -999 -999 +1 -999 -999 23 15 -999 -999 +1 -999 -999 22 8 -999 -999 +1 -999 -999 35 19 -999 -999 +2 -999 -999 22 13 -999 -999 +6 -999 -999 17 11 -999 -999 +3 -999 -999 25 23 -999 -999 +1 -999 -999 38 29 -999 -999 +1 -999 -999 38 22 -999 -999 +2 -999 -999 12 6 -999 -999 +3 -999 -999 23 24 -999 -999 +2 -999 -999 39 35 -999 -999 +13 -999 -999 17 14 -999 -999 +4 -999 -999 28 27 -999 -999 +5 -999 -999 36 37 -999 -999 +1 -999 -999 27 19 -999 -999 +2 -999 -999 35 30 -999 -999 +1 -999 -999 37 35 -999 -999 +2 -999 -999 30 27 -999 -999 +3 -999 -999 22 23 -999 -999 +2 -999 -999 22 14 -999 -999 +2 -999 -999 29 38 -999 -999 +2 -999 -999 50 47 -999 -999 +2 -999 -999 28 19 -999 -999 +7 -999 -999 20 21 -999 -999 +3 -999 -999 37 36 -999 -999 +3 -999 -999 38 31 -999 -999 +4 -999 -999 14 18 -999 -999 +7 -999 -999 19 21 -999 -999 +23 -999 -999 13 12 -999 -999 +6 -999 -999 30 30 -999 -999 +2 -999 -999 14 8 -999 -999 +4 -999 -999 22 20 -999 -999 +2 -999 -999 42 45 -999 -999 +2 -999 -999 48 29 -999 -999 +21 -999 -999 16 16 -999 -999 +2 -999 -999 35 36 -999 -999 +2 -999 -999 24 15 -999 -999 +1 -999 -999 39 33 -999 -999 +1 -999 -999 64 42 -999 -999 +1 -999 -999 16 7 -999 -999 +1 -999 -999 67 68 -999 -999 +1 -999 -999 29 40 -999 -999 +2 -999 -999 37 37 -999 -999 +2 -999 -999 25 24 -999 -999 +2 -999 -999 31 23 -999 -999 +1 -999 -999 29 43 -999 -999 +2 -999 -999 21 14 -999 -999 +1 -999 -999 19 38 -999 -999 +1 -999 -999 29 24 -999 -999 +2 -999 -999 17 21 -999 -999 +3 -999 -999 29 30 -999 -999 +1 -999 -999 55 50 -999 -999 +5 -999 -999 23 22 -999 -999 +6 -999 -999 21 19 -999 -999 +4 -999 -999 32 30 -999 -999 +2 -999 -999 22 15 -999 -999 +1 -999 -999 24 16 -999 -999 +1 -999 -999 58 46 -999 -999 +2 -999 -999 45 33 -999 -999 +1 -999 -999 58 53 -999 -999 +2 -999 -999 12 5 -999 -999 +1 -999 -999 50 43 -999 -999 +1 -999 -999 50 31 -999 -999 +3 -999 -999 32 32 -999 -999 +4 -999 -999 26 26 -999 -999 +4 -999 -999 22 24 -999 -999 +3 -999 -999 28 26 -999 -999 +1 -999 -999 36 38 -999 -999 +3 -999 -999 33 28 -999 -999 +1 -999 -999 16 26 -999 -999 +2 -999 -999 33 35 -999 -999 +4 -999 -999 9 14 -999 -999 +1 -999 -999 72 68 -999 -999 +2 -999 -999 54 54 -999 -999 +2 -999 -999 26 30 -999 -999 +1 -999 -999 36 33 -999 -999 +2 -999 -999 34 38 -999 -999 +1 -999 -999 32 43 -999 -999 +1 -999 -999 59 59 -999 -999 +1 -999 -999 39 40 -999 -999 +2 -999 -999 25 17 -999 -999 +3 -999 -999 50 53 -999 -999 +10 -999 -999 19 17 -999 -999 +2 -999 -999 3 11 -999 -999 +1 -999 -999 54 30 -999 -999 +1 -999 -999 46 39 -999 -999 +15 -999 -999 17 18 -999 -999 +1 -999 -999 36 24 -999 -999 +1 -999 -999 21 32 -999 -999 +1 -999 -999 46 49 -999 -999 +1 -999 -999 40 43 -999 -999 +3 -999 -999 29 21 -999 -999 +1 -999 -999 25 35 -999 -999 +4 -999 -999 31 28 -999 -999 +3 -999 -999 29 32 -999 -999 +1 -999 -999 69 58 -999 -999 +3 -999 -999 5 13 -999 -999 +1 -999 -999 54 48 -999 -999 +1 -999 -999 29 34 -999 -999 +3 -999 -999 31 29 -999 -999 +1 -999 -999 16 30 -999 -999 +1 -999 -999 8 14 -999 -999 +1 -999 -999 45 23 -999 -999 +1 -999 -999 62 34 -999 -999 +2 -999 -999 50 51 -999 -999 +1 -999 -999 20 14 -999 -999 +3 -999 -999 13 19 -999 -999 +1 -999 -999 57 43 -999 -999 +4 -999 -999 27 27 -999 -999 +1 -999 -999 55 53 -999 -999 +12 -999 -999 20 20 -999 -999 +3 -999 -999 39 32 -999 -999 +2 -999 -999 34 26 -999 -999 +1 -999 -999 61 48 -999 -999 +1 -999 -999 34 18 -999 -999 +2 -999 -999 31 25 -999 -999 +2 -999 -999 42 37 -999 -999 +2 -999 -999 66 73 -999 -999 +5 -999 -999 21 23 -999 -999 +1 -999 -999 59 61 -999 -999 +1 -999 -999 34 35 -999 -999 +2 -999 -999 21 15 -999 -999 +1 -999 -999 57 62 -999 -999 +1 -999 -999 52 35 -999 -999 +1 -999 -999 68 60 -999 -999 +1 -999 -999 43 31 -999 -999 +22 -999 -999 17 17 -999 -999 +1 -999 -999 65 66 -999 -999 +6 -999 -999 24 27 -999 -999 +2 -999 -999 38 39 -999 -999 +4 -999 -999 5 2 -999 -999 +1 -999 -999 36 43 -999 -999 +4 -999 -999 18 22 -999 -999 +1 -999 -999 24 30 -999 -999 +1 -999 -999 13 23 -999 -999 +1 -999 -999 27 35 -999 -999 +1 -999 -999 34 47 -999 -999 +1 -999 -999 15 26 -999 -999 +6 -999 -999 4 10 -999 -999 +2 -999 -999 6 17 -999 -999 +2 -999 -999 6 16 -999 -999 +3 -999 -999 6 13 -999 -999 +9 -999 -999 21 20 -999 -999 +1 -999 -999 39 28 -999 -999 +1 -999 -999 31 17 -999 -999 +1 -999 -999 35 25 -999 -999 +1 -999 -999 42 36 -999 -999 +3 -999 -999 16 10 -999 -999 +1 -999 -999 43 28 -999 -999 +1 -999 -999 52 23 -999 -999 +2 -999 -999 4 12 -999 -999 +1 -999 -999 7 23 -999 -999 +3 -999 -999 16 11 -999 -999 +1 -999 -999 45 45 -999 -999 +1 -999 -999 44 40 -999 -999 +2 -999 -999 45 44 -999 -999 +1 -999 -999 10 24 -999 -999 +1 -999 -999 10 29 -999 -999 +1 -999 -999 34 45 -999 -999 +2 -999 -999 40 44 -999 -999 +2 -999 -999 23 18 -999 -999 +1 -999 -999 37 28 -999 -999 +1 -999 -999 23 32 -999 -999 +2 -999 -999 22 25 -999 -999 +1 -999 -999 30 34 -999 -999 +3 -999 -999 28 23 -999 -999 +2 -999 -999 20 19 -999 -999 +5 -999 -999 34 32 -999 -999 +3 -999 -999 27 23 -999 -999 +1 -999 -999 18 29 -999 -999 +7 -999 -999 18 19 -999 -999 +3 -999 -999 35 33 -999 -999 +3 -999 -999 25 25 -999 -999 +1 -999 -999 11 17 -999 -999 +1 -999 -999 14 23 -999 -999 +3 -999 -999 31 26 -999 -999 +8 -999 -999 24 23 -999 -999 +2 -999 -999 27 20 -999 -999 +1 -999 -999 32 21 -999 -999 +1 -999 -999 19 11 -999 -999 +1 -999 -999 20 9 -999 -999 +1 -999 -999 26 20 -999 -999 +2 -999 -999 25 31 -999 -999 +1 -999 -999 30 23 -999 -999 +1 -999 -999 40 29 -999 -999 +4 -999 -999 25 18 -999 -999 +6 -999 -999 8 12 -999 -999 +1 -999 -999 37 26 -999 -999 +1 -999 -999 42 31 -999 -999 +1 -999 -999 8 3 -999 -999 +2 -999 -999 40 39 -999 -999 +1 -999 -999 19 26 -999 -999 +3 -999 -999 11 4 -999 -999 +2 -999 -999 19 14 -999 -999 +3 -999 -999 34 34 -999 -999 +2 -999 -999 23 16 -999 -999 +2 -999 -999 27 32 -999 -999 +1 -999 -999 10 19 -999 -999 +1 -999 -999 26 19 -999 -999 +1 -999 -999 35 37 -999 -999 +3 -999 -999 14 9 -999 -999 +1 -999 -999 38 23 -999 -999 +2 -999 -999 33 23 -999 -999 +1 -999 -999 34 20 -999 -999 +1 -999 -999 12 4 -999 -999 +5 -999 -999 39 39 -999 -999 +5 -999 -999 15 18 -999 -999 +1 -999 -999 36 32 -999 -999 +1 -999 -999 26 29 -999 -999 +3 -999 -999 21 24 -999 -999 +1 -999 -999 45 51 -999 -999 +1 -999 -999 28 16 -999 -999 +1 -999 -999 35 21 -999 -999 +1 -999 -999 30 42 -999 -999 +1 -999 -999 31 40 -999 -999 +1 -999 -999 26 22 -999 -999 +1 -999 -999 18 31 -999 -999 +3 -999 -999 7 14 -999 -999 +1 -999 -999 34 60 -999 -999 +2 -999 -999 30 44 -999 -999 +9 -999 -999 14 16 -999 -999 +2 -999 -999 26 27 -999 -999 +1 -999 -999 38 60 -999 -999 +1 -999 -999 32 51 -999 -999 +2 -999 -999 35 35 -999 -999 +1 -999 -999 25 32 -999 -999 +1 -999 -999 49 26 -999 -999 +2 -999 -999 50 57 -999 -999 +3 -999 -999 19 22 -999 -999 +5 -999 -999 35 38 -999 -999 +2 -999 -999 32 33 -999 -999 +1 -999 -999 18 24 -999 -999 +1 -999 -999 14 22 -999 -999 +4 -999 -999 42 39 -999 -999 +2 -999 -999 25 29 -999 -999 +1 -999 -999 26 32 -999 -999 +3 -999 -999 26 24 -999 -999 +2 -999 -999 38 35 -999 -999 +1 -999 -999 49 40 -999 -999 +1 -999 -999 47 47 -999 -999 +1 -999 -999 44 46 -999 -999 +1 -999 -999 48 50 -999 -999 +2 -999 -999 43 39 -999 -999 +1 -999 -999 46 51 -999 -999 +1 -999 -999 54 65 -999 -999 +1 -999 -999 60 36 -999 -999 +4 -999 -999 23 26 -999 -999 +3 -999 -999 46 48 -999 -999 +2 -999 -999 28 22 -999 -999 +1 -999 -999 42 44 -999 -999 +2 -999 -999 24 29 -999 -999 +2 -999 -999 53 48 -999 -999 +1 -999 -999 3 9 -999 -999 +5 -999 -999 3 7 -999 -999 +1 -999 -999 31 24 -999 -999 +1 -999 -999 33 25 -999 -999 +1 -999 -999 25 20 -999 -999 +1 -999 -999 24 19 -999 -999 +2 -999 -999 19 9 -999 -999 +2 -999 -999 6 14 -999 -999 +1 -999 -999 22 32 -999 -999 +1 -999 -999 21 30 -999 -999 +1 -999 -999 7 15 -999 -999 +3 -999 -999 42 46 -999 -999 +2 -999 -999 29 35 -999 -999 +2 -999 -999 37 29 -999 -999 +2 -999 -999 43 41 -999 -999 +1 -999 -999 52 32 -999 -999 +5 -999 -999 15 19 -999 -999 +2 -999 -999 8 20 -999 -999 +1 -999 -999 6 23 -999 -999 +1 -999 -999 11 32 -999 -999 +1 -999 -999 11 21 -999 -999 +1 -999 -999 7 27 -999 -999 +1 -999 -999 4 15 -999 -999 +4 -999 -999 16 20 -999 -999 +1 -999 -999 49 35 -999 -999 +2 -999 -999 31 27 -999 -999 +1 -999 -999 44 28 -999 -999 +1 -999 -999 45 32 -999 -999 +2 -999 -999 34 25 -999 -999 +2 -999 -999 40 40 -999 -999 +5 -999 -999 23 25 -999 -999 +1 -999 -999 37 31 -999 -999 +4 -999 -999 22 29 -999 -999 +1 -999 -999 30 36 -999 -999 +1 -999 -999 29 23 -999 -999 +1 -999 -999 29 19 -999 -999 +2 -999 -999 34 27 -999 -999 +1 -999 -999 21 11 -999 -999 +2 -999 -999 15 9 -999 -999 +1 -999 -999 45 38 -999 -999 +1 -999 -999 35 34 -999 -999 +1 -999 -999 20 17 -999 -999 +1 -999 -999 20 12 -999 -999 +1 -999 -999 32 38 -999 -999 +5 -999 -999 29 29 -999 -999 +1 -999 -999 27 14 -999 -999 +1 -999 -999 18 32 -999 -999 +2 -999 -999 17 8 -999 -999 +1 -999 -999 7 16 -999 -999 +2 -999 -999 28 37 -999 -999 +2 -999 -999 10 17 -999 -999 +3 -999 -999 12 19 -999 -999 +1 -999 -999 6 22 -999 -999 +1 -999 -999 13 29 -999 -999 +2 -999 -999 31 37 -999 -999 +1 -999 -999 17 26 -999 -999 +1 -999 -999 18 28 -999 -999 +1 -999 -999 27 31 -999 -999 +1 -999 -999 10 22 -999 -999 +1 -999 -999 20 11 -999 -999 +1 -999 -999 2 5 -999 -999 +2 -999 -999 25 27 -999 -999 +1 -999 -999 30 25 -999 -999 +2 -999 -999 42 40 -999 -999 +2 -999 -999 40 37 -999 -999 +1 -999 -999 22 31 -999 -999 +1 -999 -999 37 32 -999 -999 +1 -999 -999 19 25 -999 -999 +1 -999 -999 34 41 -999 -999 +2 -999 -999 38 41 -999 -999 +1 -999 -999 33 37 -999 -999 +2 -999 -999 39 37 -999 -999 +2 -999 -999 36 36 -999 -999 +2 -999 -999 48 40 -999 -999 +2 -999 -999 22 16 -999 -999 +1 -999 -999 8 17 -999 -999 +2 -999 -999 64 66 -999 -999 +1 -999 -999 16 5 -999 -999 +2 -999 -999 67 67 -999 -999 +1 -999 -999 37 56 -999 -999 +1 -999 -999 25 44 -999 -999 +1 -999 -999 29 52 -999 -999 +1 -999 -999 12 20 -999 -999 +2 -999 -999 29 33 -999 -999 +1 -999 -999 55 58 -999 -999 +1 -999 -999 32 31 -999 -999 +1 -999 -999 58 52 -999 -999 +1 -999 -999 58 56 -999 -999 +1 -999 -999 10 2 -999 -999 +1 -999 -999 30 33 -999 -999 +1 -999 -999 52 50 -999 -999 +1 -999 -999 32 16 -999 -999 +1 -999 -999 20 25 -999 -999 +1 -999 -999 49 50 -999 -999 +1 -999 -999 17 34 -999 -999 +1 -999 -999 13 25 -999 -999 +2 -999 -999 38 47 -999 -999 +1 -999 -999 33 68 -999 -999 +1 -999 -999 8 25 -999 -999 +1 -999 -999 30 43 -999 -999 +1 -999 -999 27 30 -999 -999 +1 -999 -999 60 69 -999 -999 +3 -999 -999 15 8 -999 -999 +1 -999 -999 72 61 -999 -999 +2 -999 -999 15 25 -999 -999 +1 -999 -999 55 56 -999 -999 +1 -999 -999 62 46 -999 -999 +2 -999 -999 30 31 -999 -999 +1 -999 -999 36 27 -999 -999 +7 -999 -999 16 14 -999 -999 +2 -999 -999 14 7 -999 -999 +3 -999 -999 16 21 -999 -999 +1 -999 -999 30 20 -999 -999 +1 -999 -999 32 29 -999 -999 +2 -999 -999 48 52 -999 -999 +3 -999 -999 20 15 -999 -999 +3 -999 -999 46 41 -999 -999 +1 -999 -999 28 29 -999 -999 +1 -999 -999 46 34 -999 -999 +2 -999 -999 33 27 -999 -999 +1 -999 -999 30 26 -999 -999 +1 -999 -999 29 15 -999 -999 +3 -999 -999 33 26 -999 -999 +2 -999 -999 39 31 -999 -999 +1 -999 -999 18 9 -999 -999 +1 -999 -999 43 43 -999 -999 +1 -999 -999 60 63 -999 -999 +2 -999 -999 25 33 -999 -999 +2 -999 -999 30 35 -999 -999 +2 -999 -999 43 38 -999 -999 +1 -999 -999 65 60 -999 -999 +1 -999 -999 18 25 -999 -999 +1 -999 -999 69 60 -999 -999 +1 -999 -999 38 64 -999 -999 +2 -999 -999 54 39 -999 -999 +1 -999 -999 62 53 -999 -999 +1 -999 -999 50 45 -999 -999 +1 -999 -999 57 52 -999 -999 +2 -999 -999 55 51 -999 -999 +1 -999 -999 39 34 -999 -999 +1 -999 -999 61 52 -999 -999 +1 -999 -999 66 36 -999 -999 +1 -999 -999 59 69 -999 -999 +1 -999 -999 21 18 -999 -999 +1 -999 -999 57 57 -999 -999 +2 -999 -999 32 37 -999 -999 +1 -999 -999 52 56 -999 -999 +1 -999 -999 68 62 -999 -999 +1 -999 -999 65 61 -999 -999 +1 -999 -999 23 27 -999 -999 +1 -999 -999 20 26 -999 -999 +1 -999 -999 19 24 -999 -999 +1 -999 -999 15 7 -999 -999 +1 -999 -999 16 28 -999 -999 +2 -999 -999 34 40 -999 -999 +1 -999 -999 16 8 -999 -999 +1 -999 -999 67 69 -999 -999 +1 -999 -999 37 53 -999 -999 +2 -999 -999 33 40 -999 -999 +1 -999 -999 31 35 -999 -999 +1 -999 -999 29 50 -999 -999 +2 -999 -999 29 37 -999 -999 +3 -999 -999 23 28 -999 -999 +1 -999 -999 58 50 -999 -999 +1 -999 -999 58 62 -999 -999 +1 -999 -999 20 10 -999 -999 +1 -999 -999 16 12 -999 -999 +1 -999 -999 64 67 -999 -999 +1 -999 -999 6 18 -999 -999 +2 -999 -999 65 49 -999 -999 +1 -999 -999 23 20 -999 -999 +3 -999 -999 25 26 -999 -999 +1 -999 -999 22 28 -999 -999 +1 -999 -999 28 35 -999 -999 +1 -999 -999 45 48 -999 -999 +1 -999 -999 17 28 -999 -999 +1 -999 -999 35 44 -999 -999 +1 -999 -999 31 43 -999 -999 +1 -999 -999 24 21 -999 -999 +1 -999 -999 41 43 -999 -999 +1 -999 -999 11 20 -999 -999 +1 -999 -999 49 46 -999 -999 +1 -999 -999 17 31 -999 -999 +1 -999 -999 13 24 -999 -999 +1 -999 -999 13 21 -999 -999 +1 -999 -999 33 43 -999 -999 +1 -999 -999 60 61 -999 -999 +1 -999 -999 72 72 -999 -999 +1 -999 -999 28 42 -999 -999 +1 -999 -999 55 47 -999 -999 +1 -999 -999 46 44 -999 -999 +1 -999 -999 66 70 -999 -999 +1 -999 -999 50 60 -999 -999 +1 -999 -999 67 73 -999 -999 +1 -999 -999 25 15 -999 -999 +1 -999 -999 35 40 -999 -999 +1 -999 -999 19 32 -999 -999 +1 -999 -999 12 28 -999 -999 +1 -999 -999 37 50 -999 -999 +1 -999 -999 37 34 -999 -999 +1 -999 -999 16 9 -999 -999 +1 -999 -999 51 49 -999 -999 +3 -999 -999 19 16 -999 -999 +1 -999 -999 44 36 -999 -999 +1 -999 -999 34 39 -999 -999 +1 -999 -999 47 37 -999 -999 +1 -999 -999 25 21 -999 -999 +1 -999 -999 68 57 -999 -999 +1 -999 -999 65 55 -999 -999 +1 -999 -999 12 17 -999 -999 +1 -999 -999 27 34 -999 -999 +1 -999 -999 41 47 -999 -999 +1 -999 -999 23 33 -999 -999 +1 -999 -999 23 40 -999 -999 +1 -999 -999 51 51 -999 -999 +1 -999 -999 37 42 -999 -999 +1 -999 -999 56 53 -999 -999 +1 -999 -999 17 9 -999 -999 +1 -999 -999 52 51 -999 -999 +1 -999 -999 17 6 -999 -999 +1 -999 -999 35 29 -999 -999 +1 -999 -999 9 18 -999 -999 +1 -999 -999 38 45 -999 -999 +2 -999 -999 36 35 -999 -999 +1 -999 -999 72 73 -999 -999 +1 -999 -999 54 57 -999 -999 +1 -999 -999 36 29 -999 -999 +1 -999 -999 59 55 -999 -999 +1 -999 -999 27 17 -999 -999 +1 -999 -999 39 46 -999 -999 +1 -999 -999 3 10 -999 -999 +1 -999 -999 32 25 -999 -999 +1 -999 -999 34 24 -999 -999 +1 -999 -999 34 36 -999 -999 +1 -999 -999 44 49 -999 -999 +1 -999 -999 32 50 -999 -999 +1 -999 -999 21 26 -999 -999 +1 -999 -999 33 39 -999 -999 +1 -999 -999 44 44 -999 -999 +1 -999 -999 38 37 -999 -999 +2 -999 -999 57 58 -999 -999 +1 -999 -999 48 49 -999 -999 +1 -999 -999 41 39 -999 -999 +1 -999 -999 25 28 -999 -999 +2 -999 -999 47 48 -999 -999 +1 -999 -999 41 40 -999 -999 +1 -999 -999 22 30 -999 -999 +1 -999 -999 49 56 -999 -999 +1 -999 -999 45 47 -999 -999 +1 -999 -999 29 39 -999 -999 +1 -999 -999 44 38 -999 -999 +1 -999 -999 39 30 -999 -999 +1 -999 -999 21 25 -999 -999 +1 -999 -999 49 48 -999 -999 +1 -999 -999 52 57 -999 -999 +1 -999 -999 49 52 -999 -999 +2 -999 -999 50 52 -999 -999 +1 -999 -999 36 41 -999 -999 +1 -999 -999 38 42 -999 -999 +1 -999 -999 44 43 -999 -999 +1 -999 -999 35 46 -999 -999 +1 -999 -999 55 57 -999 -999 +1 -999 -999 51 59 -999 -999 +1 -999 -999 45 49 -999 -999 +1 -999 -999 53 50 -999 -999 +1 -999 -999 57 56 -999 -999 +1 -999 -999 37 38 -999 -999 +1 -999 -999 46 27 -999 -999 +1 -999 -999 47 49 -999 -999 +1 -999 -999 45 35 -999 -999 +1 -999 -999 44 42 -999 -999 +1 -999 -999 32 22 -999 -999 +1 -999 -999 40 33 -999 -999 +1 -999 -999 38 30 -999 -999 +1 -999 -999 44 41 -999 -999 +1 -999 -999 45 34 -999 -999 +2 -999 -999 -999 28 29 -999 +1 -999 -999 -999 61 63 -999 +2 -999 -999 -999 40 42 -999 +6 -999 -999 -999 6 7 -999 +2 -999 -999 -999 11 15 -999 +7 -999 -999 -999 4 4 -999 +1 -999 -999 -999 16 17 -999 +1 -999 -999 -999 63 66 -999 +1 -999 -999 -999 24 26 -999 +1 -999 -999 -999 31 33 -999 +2 -999 -999 -999 46 49 -999 +1 -999 -999 -999 53 56 -999 +2 -999 -999 -999 39 39 -999 +1 -999 -999 -999 20 22 -999 +1 -999 -999 -999 33 51 -999 +1 -999 -999 -999 35 46 -999 +1 -999 -999 -999 11 12 -999 +13 -999 -999 -999 5 5 -999 +5 -999 -999 -999 8 8 -999 +1 -999 -999 -999 47 73 -999 +1 -999 -999 -999 22 33 -999 +1 -999 -999 -999 16 25 -999 +2 -999 -999 -999 8 12 -999 +3 -999 -999 -999 11 13 -999 +2 -999 -999 -999 9 16 -999 +2 -999 -999 -999 10 10 -999 +1 -999 -999 -999 9 15 -999 +1 -999 -999 -999 27 40 -999 +1 -999 -999 -999 13 21 -999 +1 -999 -999 -999 15 21 -999 +1 -999 -999 -999 5 7 -999 +2 -999 -999 -999 5 4 -999 +1 -999 -999 -999 7 11 -999 +2 -999 -999 -999 17 22 -999 +1 -999 -999 -999 24 54 -999 +1 -999 -999 -999 10 34 -999 +2 -999 -999 -999 27 29 -999 +1 -999 -999 -999 62 63 -999 +1 -999 -999 -999 34 40 -999 +1 -999 -999 -999 14 17 -999 +1 -999 -999 -999 64 66 -999 +1 -999 -999 -999 26 26 -999 +1 -999 -999 -999 33 33 -999 +1 -999 -999 -999 48 56 -999 +2 -999 -999 -999 21 22 -999 +1 -999 -999 -999 48 51 -999 +1 -999 -999 -999 45 46 -999 +1 -999 -999 -999 12 12 -999 +1 -999 -999 -999 6 5 -999 +2 -999 -999 -999 8 11 -999 +1 -999 -999 -999 38 40 -999 +1 -999 -999 -999 27 27 -999 +2 -999 -999 -999 8 7 -999 +1 -999 -999 -999 45 44 -999 +1 -999 -999 -999 4 8 -999 +1 -999 -999 -999 30 31 -999 +2 -999 -999 -999 11 16 -999 +2 -999 -999 -999 11 11 -999 +2 -999 -999 -999 17 17 -999 +1 -999 -999 -999 57 54 -999 +1 -999 -999 -999 56 49 -999 +1 -999 -999 -999 21 20 -999 +1 -999 -999 -999 63 60 -999 +1 -999 -999 -999 52 49 -999 +1 -999 -999 -999 14 16 -999 +1 -999 -999 -999 29 32 -999 +4 -999 -999 -999 9 9 -999 +1 -999 -999 -999 13 14 -999 +1 -999 -999 -999 58 59 -999 +1 -999 -999 -999 30 40 -999 +2 -999 -999 -999 24 28 -999 +1 -999 -999 -999 15 20 -999 +5 -999 -999 -999 3 3 -999 +1 -999 -999 -999 18 20 -999 +3 -999 -999 -999 6 8 -999 +1 -999 -999 -999 10 15 -999 +1 -999 -999 -999 9 12 -999 +1 -999 -999 -999 31 44 -999 +1 -999 -999 -999 14 18 -999 +1 -999 -999 -999 36 52 -999 +5 -999 -999 -999 6 6 -999 +1 -999 -999 -999 19 18 -999 +1 -999 -999 -999 19 21 -999 +2 -999 -999 -999 2 2 -999 +8 -999 -999 -999 7 7 -999 +1 -999 -999 -999 31 36 -999 +1 -999 -999 -999 25 33 -999 +3 -999 -999 -999 7 8 -999 +1 -999 -999 -999 13 33 -999 +1 -999 -999 -999 8 6 -999 +1 -999 -999 -999 23 24 -999 +1 -999 -999 -999 22 37 -999 +1 -999 -999 -999 28 37 -999 +1 -999 -999 -999 20 29 -999 +2 -999 -999 -999 14 14 -999 +1 -999 -999 -999 45 52 -999 +1 -999 -999 -999 9 8 -999 +2 -999 -999 -999 28 33 -999 +1 -999 -999 -999 14 12 -999 +2 -999 -999 -999 9 10 -999 +2 -999 -999 -999 11 14 -999 +1 -999 -999 -999 92 95 -999 +1 -999 -999 -999 13 23 -999 +4 -999 -999 -999 5 6 -999 +1 -999 -999 -999 12 15 -999 +1 -999 -999 -999 22 23 -999 +1 -999 -999 -999 55 64 -999 +1 -999 -999 -999 14 19 -999 +1 -999 -999 -999 16 24 -999 +1 -999 -999 -999 43 46 -999 +1 -999 -999 -999 33 39 -999 +1 -999 -999 -999 2 4 -999 +1 -999 -999 -999 10 14 -999 +1 -999 -999 -999 13 13 -999 +1 -999 -999 -999 19 20 -999 +1 -999 -999 -999 28 36 -999 +1 -999 -999 -999 17 18 -999 +1 -999 -999 -999 45 39 -999 +2 -999 -999 -999 4 5 -999 +2 -999 -999 -999 7 6 -999 +1 -999 -999 -999 6 4 -999 +3 -999 -999 -999 8 9 -999 +1 -999 -999 -999 64 53 -999 +1 -999 -999 -999 49 49 -999 +1 -999 -999 -999 4 6 -999 +1 -999 -999 -999 43 41 -999 +2 -999 -999 -999 10 9 -999 +1 -999 -999 -999 30 28 -999 +1 -999 -999 -999 19 17 -999 +1 -999 -999 -999 65 56 -999 +1 -999 -999 -999 18 27 -999 +1 -999 -999 -999 4 7 -999 +2 -999 -999 -999 13 19 -999 +1 -999 -999 -999 3 4 -999 +1 -999 -999 -999 16 19 -999 +1 -999 -999 -999 15 15 -999 +2 -999 -999 -999 9 11 -999 +1 -999 -999 -999 22 24 -999 +1 -999 -999 -999 14 23 -999 +1 -999 -999 -999 4 9 -999 +1 -999 -999 -999 35 48 -999 +1 -999 -999 -999 26 30 -999 +1 -999 13 -999 -999 10 -999 +2 -999 16 -999 -999 17 -999 +1 -999 5 -999 -999 4 -999 +1 -999 17 -999 -999 14 -999 +1 -999 15 -999 -999 13 -999 +1 -999 13 -999 -999 15 -999 +1 -999 11 -999 -999 11 -999 +1 -999 11 -999 -999 14 -999 +1 -999 6 -999 -999 5 -999 +3 -999 7 -999 -999 7 -999 +3 -999 11 -999 -999 10 -999 +1 -999 8 -999 -999 6 -999 +3 -999 8 -999 -999 8 -999 +2 -999 9 -999 -999 7 -999 +8 -999 4 -999 -999 4 -999 +3 -999 6 -999 -999 6 -999 +1 -999 7 -999 -999 6 -999 +1 -999 7 -999 -999 5 -999 +1 -999 18 -999 -999 26 -999 +1 -999 13 -999 -999 17 -999 +2 -999 7 -999 -999 12 -999 +4 -999 7 -999 -999 8 -999 +1 -999 21 -999 -999 35 -999 +1 -999 10 -999 -999 6 -999 +1 -999 31 -999 -999 52 -999 +2 -999 12 -999 -999 13 -999 +4 -999 5 -999 -999 5 -999 +2 -999 10 -999 -999 9 -999 +2 -999 14 -999 -999 14 -999 +3 -999 10 -999 -999 10 -999 +1 -999 31 -999 -999 34 -999 +2 -999 10 -999 -999 11 -999 +1 -999 21 -999 -999 21 -999 +3 -999 6 -999 -999 7 -999 +1 -999 16 -999 -999 19 -999 +1 -999 18 -999 -999 17 -999 +2 -999 15 -999 -999 15 -999 +2 -999 13 -999 -999 14 -999 +1 -999 16 -999 -999 14 -999 +1 -999 24 -999 -999 21 -999 +1 -999 18 -999 -999 19 -999 +1 -999 27 -999 -999 25 -999 +3 -999 10 -999 -999 12 -999 +1 -999 9 -999 -999 12 -999 +2 -999 16 -999 -999 16 -999 +2 -999 18 -999 -999 16 -999 +1 -999 13 -999 -999 7 -999 +1 -999 9 -999 -999 9 -999 +1 -999 13 -999 -999 22 -999 +1 -999 5 -999 -999 7 -999 +1 -999 8 -999 -999 10 -999 +2 -999 9 -999 -999 11 -999 +1 -999 24 -999 -999 29 -999 +1 -999 30 -999 -999 29 -999 +1 -999 32 -999 -999 40 -999 +1 -999 27 -999 -999 27 -999 +1 -999 41 -999 -999 44 -999 +1 -999 4 -999 -999 8 -999 +1 -999 29 -999 -999 31 -999 +1 -999 53 -999 -999 54 -999 +1 -999 53 -999 -999 49 -999 +2 -999 20 -999 -999 20 -999 +1 -999 59 -999 -999 60 -999 +1 -999 47 -999 -999 49 -999 +1 -999 15 -999 -999 16 -999 +1 -999 28 -999 -999 32 -999 +1 -999 7 -999 -999 9 -999 +1 -999 57 -999 -999 59 -999 +1 -999 44 -999 -999 40 -999 +1 -999 12 -999 -999 16 -999 +1 -999 11 -999 -999 12 -999 +1 -999 9 -999 -999 5 -999 +1 -999 29 -999 -999 28 -999 +1 -999 15 -999 -999 9 -999 +1 -999 25 -999 -999 17 -999 +1 -999 4 -999 -999 3 -999 +1 -999 21 -999 -999 20 -999 +1 -999 9 -999 -999 8 -999 +1 -999 12 -999 -999 15 -999 +1 -999 44 -999 -999 44 -999 +1 -999 8 -999 -999 5 -999 +1 -999 22 -999 -999 22 -999 +1 -999 17 -999 -999 18 -999 +1 -999 43 -999 -999 52 -999 +1 -999 43 -999 -999 73 -999 +1 -999 23 -999 -999 33 -999 +1 -999 20 -999 -999 25 -999 +1 -999 12 -999 -999 12 -999 +1 -999 11 -999 -999 13 -999 +1 -999 9 -999 -999 16 -999 +1 -999 14 -999 -999 15 -999 +1 -999 38 -999 -999 40 -999 +1 -999 14 -999 -999 21 -999 +1 -999 15 -999 -999 21 -999 +1 -999 6 -999 -999 4 -999 +1 -999 14 -999 -999 22 -999 +1 -999 41 -999 -999 54 -999 +1 -999 20 -999 -999 34 -999 +1 -999 -999 -999 -999 90 90 +1 -999 -999 -999 -999 89 89 +1 -999 -999 -999 -999 86 86 +1 -999 -999 -999 -999 85 85 +1 -999 -999 -999 -999 84 91 +1 -999 -999 -999 -999 83 72 +1 -999 -999 -999 -999 83 83 +1 -999 -999 -999 -999 82 82 +1 -999 -999 -999 -999 79 79 +1 -999 -999 -999 -999 78 78 +2 -999 -999 -999 -999 76 76 +1 -999 -999 -999 -999 75 75 +1 -999 -999 -999 -999 72 72 +3 -999 -999 -999 -999 71 71 +1 -999 -999 -999 -999 69 69 +1 -999 -999 -999 -999 69 77 +1 -999 -999 -999 -999 69 66 +1 -999 -999 -999 -999 68 69 +2 -999 -999 -999 -999 68 68 +1 -999 -999 -999 -999 67 67 +1 -999 -999 -999 -999 66 65 +1 -999 -999 -999 -999 66 66 +2 -999 -999 -999 -999 65 65 +2 -999 -999 -999 -999 64 64 +1 -999 -999 -999 -999 64 59 +1 -999 -999 -999 -999 64 61 +1 -999 -999 -999 -999 64 56 +1 -999 -999 -999 -999 63 63 +2 -999 -999 -999 -999 62 62 +5 -999 -999 -999 -999 61 61 +1 -999 -999 -999 -999 61 56 +1 -999 -999 -999 -999 61 57 +1 -999 -999 -999 -999 61 62 +1 -999 -999 -999 -999 60 57 +1 -999 -999 -999 -999 60 60 +1 -999 -999 -999 -999 59 58 +3 -999 -999 -999 -999 59 59 +1 -999 -999 -999 -999 59 53 +1 -999 -999 -999 -999 59 76 +4 -999 -999 -999 -999 58 58 +1 -999 -999 -999 -999 58 53 +1 -999 -999 -999 -999 58 68 +8 -999 -999 -999 -999 57 57 +1 -999 -999 -999 -999 57 66 +1 -999 -999 -999 -999 57 59 +1 -999 -999 -999 -999 57 64 +6 -999 -999 -999 -999 56 56 +1 -999 -999 -999 -999 56 60 +1 -999 -999 -999 -999 56 76 +1 -999 -999 -999 -999 55 50 +1 -999 -999 -999 -999 55 55 +1 -999 -999 -999 -999 55 57 +8 -999 -999 -999 -999 54 54 +1 -999 -999 -999 -999 54 55 +1 -999 -999 -999 -999 54 56 +1 -999 -999 -999 -999 54 62 +2 -999 -999 -999 -999 53 56 +9 -999 -999 -999 -999 53 53 +1 -999 -999 -999 -999 53 58 +1 -999 -999 -999 -999 53 47 +1 -999 -999 -999 -999 53 65 +6 -999 -999 -999 -999 52 52 +2 -999 -999 -999 -999 52 56 +1 -999 -999 -999 -999 52 59 +1 -999 -999 -999 -999 52 66 +1 -999 -999 -999 -999 52 55 +5 -999 -999 -999 -999 51 51 +1 -999 -999 -999 -999 51 46 +3 -999 -999 -999 -999 50 50 +1 -999 -999 -999 -999 50 60 +1 -999 -999 -999 -999 50 46 +1 -999 -999 -999 -999 49 46 +7 -999 -999 -999 -999 49 49 +1 -999 -999 -999 -999 49 53 +1 -999 -999 -999 -999 49 74 +1 -999 -999 -999 -999 48 54 +1 -999 -999 -999 -999 48 31 +1 -999 -999 -999 -999 48 52 +1 -999 -999 -999 -999 48 66 +1 -999 -999 -999 -999 48 35 +3 -999 -999 -999 -999 48 48 +1 -999 -999 -999 -999 47 45 +1 -999 -999 -999 -999 47 71 +6 -999 -999 -999 -999 47 47 +1 -999 -999 -999 -999 47 52 +1 -999 -999 -999 -999 46 57 +1 -999 -999 -999 -999 46 59 +6 -999 -999 -999 -999 46 46 +1 -999 -999 -999 -999 46 49 +1 -999 -999 -999 -999 46 53 +1 -999 -999 -999 -999 46 58 +1 -999 -999 -999 -999 45 49 +7 -999 -999 -999 -999 45 45 +1 -999 -999 -999 -999 44 46 +2 -999 -999 -999 -999 44 51 +1 -999 -999 -999 -999 44 47 +7 -999 -999 -999 -999 44 44 +1 -999 -999 -999 -999 44 49 +1 -999 -999 -999 -999 44 73 +2 -999 -999 -999 -999 43 43 +1 -999 -999 -999 -999 43 37 +1 -999 -999 -999 -999 43 47 +1 -999 -999 -999 -999 43 41 +3 -999 -999 -999 -999 42 42 +1 -999 -999 -999 -999 42 39 +1 -999 -999 -999 -999 42 46 +8 -999 -999 -999 -999 41 41 +2 -999 -999 -999 -999 41 45 +1 -999 -999 -999 -999 41 46 +1 -999 -999 -999 -999 41 33 +1 -999 -999 -999 -999 41 37 +1 -999 -999 -999 -999 41 49 +1 -999 -999 -999 -999 40 42 +1 -999 -999 -999 -999 40 20 +1 -999 -999 -999 -999 40 47 +1 -999 -999 -999 -999 40 40 +1 -999 -999 -999 -999 39 41 +9 -999 -999 -999 -999 39 39 +1 -999 -999 -999 -999 39 46 +1 -999 -999 -999 -999 38 48 +8 -999 -999 -999 -999 38 38 +1 -999 -999 -999 -999 38 44 +1 -999 -999 -999 -999 38 43 +1 -999 -999 -999 -999 38 82 +1 -999 -999 -999 -999 38 30 +1 -999 -999 -999 -999 37 41 +13 -999 -999 -999 -999 37 37 +2 -999 -999 -999 -999 37 33 +1 -999 -999 -999 -999 37 45 +1 -999 -999 -999 -999 37 43 +6 -999 -999 -999 -999 36 36 +1 -999 -999 -999 -999 36 71 +1 -999 -999 -999 -999 36 37 +1 -999 -999 -999 -999 36 63 +1 -999 -999 -999 -999 36 39 +1 -999 -999 -999 -999 36 43 +1 -999 -999 -999 -999 35 46 +11 -999 -999 -999 -999 35 35 +1 -999 -999 -999 -999 35 18 +1 -999 -999 -999 -999 35 31 +1 -999 -999 -999 -999 35 42 +1 -999 -999 -999 -999 35 37 +14 -999 -999 -999 -999 34 34 +1 -999 -999 -999 -999 34 38 +1 -999 -999 -999 -999 34 22 +1 -999 -999 -999 -999 34 28 +1 -999 -999 -999 -999 34 36 +1 -999 -999 -999 -999 34 30 +1 -999 -999 -999 -999 34 40 +17 -999 -999 -999 -999 33 33 +1 -999 -999 -999 -999 33 36 +2 -999 -999 -999 -999 33 31 +1 -999 -999 -999 -999 33 35 +1 -999 -999 -999 -999 33 49 +1 -999 -999 -999 -999 33 45 +1 -999 -999 -999 -999 32 28 +10 -999 -999 -999 -999 32 32 +1 -999 -999 -999 -999 31 39 +2 -999 -999 -999 -999 31 30 +1 -999 -999 -999 -999 31 32 +14 -999 -999 -999 -999 31 31 +1 -999 -999 -999 -999 31 29 +1 -999 -999 -999 -999 31 35 +1 -999 -999 -999 -999 31 33 +1 -999 -999 -999 -999 31 34 +1 -999 -999 -999 -999 31 56 +1 -999 -999 -999 -999 30 29 +10 -999 -999 -999 -999 30 30 +1 -999 -999 -999 -999 30 40 +1 -999 -999 -999 -999 30 33 +1 -999 -999 -999 -999 30 24 +1 -999 -999 -999 -999 30 27 +2 -999 -999 -999 -999 29 15 +11 -999 -999 -999 -999 29 29 +1 -999 -999 -999 -999 29 33 +1 -999 -999 -999 -999 29 34 +1 -999 -999 -999 -999 29 44 +1 -999 -999 -999 -999 29 25 +1 -999 -999 -999 -999 29 20 +1 -999 -999 -999 -999 29 31 +2 -999 -999 -999 -999 29 35 +1 -999 -999 -999 -999 29 24 +1 -999 -999 -999 -999 29 37 +2 -999 -999 -999 -999 29 38 +1 -999 -999 -999 -999 29 22 +14 -999 -999 -999 -999 28 28 +1 -999 -999 -999 -999 28 26 +1 -999 -999 -999 -999 28 29 +1 -999 -999 -999 -999 28 18 +1 -999 -999 -999 -999 28 34 +1 -999 -999 -999 -999 28 24 +1 -999 -999 -999 -999 27 26 +14 -999 -999 -999 -999 27 27 +1 -999 -999 -999 -999 27 22 +1 -999 -999 -999 -999 27 39 +1 -999 -999 -999 -999 27 11 +1 -999 -999 -999 -999 27 16 +2 -999 -999 -999 -999 27 31 +1 -999 -999 -999 -999 27 18 +16 -999 -999 -999 -999 26 26 +2 -999 -999 -999 -999 26 28 +1 -999 -999 -999 -999 26 30 +1 -999 -999 -999 -999 26 42 +1 -999 -999 -999 -999 26 15 +1 -999 -999 -999 -999 26 31 +2 -999 -999 -999 -999 26 19 +1 -999 -999 -999 -999 26 18 +1 -999 -999 -999 -999 26 33 +1 -999 -999 -999 -999 26 29 +17 -999 -999 -999 -999 25 25 +1 -999 -999 -999 -999 25 19 +2 -999 -999 -999 -999 25 30 +2 -999 -999 -999 -999 25 27 +1 -999 -999 -999 -999 25 21 +2 -999 -999 -999 -999 25 23 +1 -999 -999 -999 -999 25 34 +1 -999 -999 -999 -999 25 18 +1 -999 -999 -999 -999 25 35 +17 -999 -999 -999 -999 24 24 +1 -999 -999 -999 -999 24 48 +2 -999 -999 -999 -999 24 29 +1 -999 -999 -999 -999 24 21 +2 -999 -999 -999 -999 24 33 +2 -999 -999 -999 -999 24 16 +1 -999 -999 -999 -999 24 11 +1 -999 -999 -999 -999 24 28 +1 -999 -999 -999 -999 24 26 +1 -999 -999 -999 -999 24 14 +1 -999 -999 -999 -999 24 27 +1 -999 -999 -999 -999 24 22 +1 -999 -999 -999 -999 24 13 +1 -999 -999 -999 -999 23 20 +1 -999 -999 -999 -999 23 30 +1 -999 -999 -999 -999 23 32 +1 -999 -999 -999 -999 23 46 +14 -999 -999 -999 -999 23 23 +2 -999 -999 -999 -999 23 27 +2 -999 -999 -999 -999 23 18 +1 -999 -999 -999 -999 23 26 +1 -999 -999 -999 -999 23 28 +1 -999 -999 -999 -999 23 25 +1 -999 -999 -999 -999 23 31 +24 -999 -999 -999 -999 22 22 +1 -999 -999 -999 -999 22 25 +2 -999 -999 -999 -999 22 23 +2 -999 -999 -999 -999 22 31 +1 -999 -999 -999 -999 22 30 +2 -999 -999 -999 -999 22 19 +1 -999 -999 -999 -999 22 21 +1 -999 -999 -999 -999 22 17 +1 -999 -999 -999 -999 22 27 +1 -999 -999 -999 -999 22 20 +28 -999 -999 -999 -999 21 21 +2 -999 -999 -999 -999 21 23 +1 -999 -999 -999 -999 21 18 +1 -999 -999 -999 -999 21 25 +1 -999 -999 -999 -999 21 14 +1 -999 -999 -999 -999 21 12 +2 -999 -999 -999 -999 21 15 +2 -999 -999 -999 -999 21 22 +2 -999 -999 -999 -999 21 26 +1 -999 -999 -999 -999 21 17 +1 -999 -999 -999 -999 21 27 +25 -999 -999 -999 -999 20 20 +3 -999 -999 -999 -999 20 18 +4 -999 -999 -999 -999 20 23 +1 -999 -999 -999 -999 20 24 +2 -999 -999 -999 -999 20 22 +1 -999 -999 -999 -999 20 13 +2 -999 -999 -999 -999 20 12 +1 -999 -999 -999 -999 20 28 +1 -999 -999 -999 -999 20 41 +1 -999 -999 -999 -999 20 14 +1 -999 -999 -999 -999 20 25 +38 -999 -999 -999 -999 19 19 +2 -999 -999 -999 -999 19 16 +4 -999 -999 -999 -999 19 17 +1 -999 -999 -999 -999 19 14 +2 -999 -999 -999 -999 19 22 +3 -999 -999 -999 -999 19 23 +2 -999 -999 -999 -999 19 24 +2 -999 -999 -999 -999 19 13 +1 -999 -999 -999 -999 19 15 +2 -999 -999 -999 -999 19 21 +3 -999 -999 -999 -999 19 18 +1 -999 -999 -999 -999 19 26 +1 -999 -999 -999 -999 19 9 +32 -999 -999 -999 -999 18 18 +2 -999 -999 -999 -999 18 13 +3 -999 -999 -999 -999 18 20 +3 -999 -999 -999 -999 18 19 +2 -999 -999 -999 -999 18 17 +4 -999 -999 -999 -999 18 22 +2 -999 -999 -999 -999 18 8 +3 -999 -999 -999 -999 18 15 +2 -999 -999 -999 -999 18 12 +2 -999 -999 -999 -999 18 21 +6 -999 -999 -999 -999 18 16 +1 -999 -999 -999 -999 18 27 +1 -999 -999 -999 -999 18 14 +1 -999 -999 -999 -999 18 38 +54 -999 -999 -999 -999 17 17 +8 -999 -999 -999 -999 17 19 +3 -999 -999 -999 -999 17 13 +2 -999 -999 -999 -999 17 15 +4 -999 -999 -999 -999 17 16 +2 -999 -999 -999 -999 17 14 +2 -999 -999 -999 -999 17 12 +1 -999 -999 -999 -999 17 21 +1 -999 -999 -999 -999 17 9 +1 -999 -999 -999 -999 17 11 +1 -999 -999 -999 -999 17 20 +2 -999 -999 -999 -999 17 18 +1 -999 -999 -999 -999 17 24 +1 -999 -999 -999 -999 17 26 +1 -999 -999 -999 -999 17 31 +4 -999 -999 -999 -999 16 19 +62 -999 -999 -999 -999 16 16 +4 -999 -999 -999 -999 16 20 +3 -999 -999 -999 -999 16 15 +6 -999 -999 -999 -999 16 14 +1 -999 -999 -999 -999 16 4 +2 -999 -999 -999 -999 16 10 +3 -999 -999 -999 -999 16 12 +3 -999 -999 -999 -999 16 21 +5 -999 -999 -999 -999 16 13 +1 -999 -999 -999 -999 16 8 +2 -999 -999 -999 -999 16 18 +2 -999 -999 -999 -999 16 17 +1 -999 -999 -999 -999 16 11 +1 -999 -999 -999 -999 16 22 +1 -999 -999 -999 -999 16 23 +1 -999 -999 -999 -999 16 25 +83 -999 -999 -999 -999 15 15 +6 -999 -999 -999 -999 15 17 +6 -999 -999 -999 -999 15 16 +2 -999 -999 -999 -999 15 11 +4 -999 -999 -999 -999 15 12 +7 -999 -999 -999 -999 15 13 +1 -999 -999 -999 -999 15 23 +2 -999 -999 -999 -999 15 10 +1 -999 -999 -999 -999 15 19 +2 -999 -999 -999 -999 15 9 +1 -999 -999 -999 -999 15 8 +1 -999 -999 -999 -999 15 21 +85 -999 -999 -999 -999 14 14 +8 -999 -999 -999 -999 14 12 +3 -999 -999 -999 -999 14 9 +8 -999 -999 -999 -999 14 13 +8 -999 -999 -999 -999 14 19 +7 -999 -999 -999 -999 14 11 +1 -999 -999 -999 -999 14 21 +2 -999 -999 -999 -999 14 24 +1 -999 -999 -999 -999 14 50 +1 -999 -999 -999 -999 14 20 +6 -999 -999 -999 -999 14 10 +2 -999 -999 -999 -999 14 8 +3 -999 -999 -999 -999 14 16 +7 -999 -999 -999 -999 14 15 +1 -999 -999 -999 -999 14 18 +1 -999 -999 -999 -999 14 5 +94 -999 -999 -999 -999 13 13 +5 -999 -999 -999 -999 13 10 +3 -999 -999 -999 -999 13 19 +6 -999 -999 -999 -999 13 12 +2 -999 -999 -999 -999 13 21 +1 -999 -999 -999 -999 13 6 +3 -999 -999 -999 -999 13 14 +4 -999 -999 -999 -999 13 15 +1 -999 -999 -999 -999 13 26 +2 -999 -999 -999 -999 13 18 +5 -999 -999 -999 -999 13 9 +8 -999 -999 -999 -999 13 11 +1 -999 -999 -999 -999 13 17 +1 -999 -999 -999 -999 13 16 +6 -999 -999 -999 -999 13 8 +1 -999 -999 -999 -999 13 7 +90 -999 -999 -999 -999 12 12 +5 -999 -999 -999 -999 12 11 +8 -999 -999 -999 -999 12 13 +6 -999 -999 -999 -999 12 10 +1 -999 -999 -999 -999 12 4 +4 -999 -999 -999 -999 12 14 +6 -999 -999 -999 -999 12 9 +2 -999 -999 -999 -999 12 16 +2 -999 -999 -999 -999 12 17 +2 -999 -999 -999 -999 12 7 +1 -999 -999 -999 -999 12 8 +117 -999 -999 -999 -999 11 11 +8 -999 -999 -999 -999 11 10 +7 -999 -999 -999 -999 11 8 +12 -999 -999 -999 -999 11 12 +8 -999 -999 -999 -999 11 9 +4 -999 -999 -999 -999 11 14 +1 -999 -999 -999 -999 11 17 +7 -999 -999 -999 -999 11 13 +5 -999 -999 -999 -999 11 15 +2 -999 -999 -999 -999 11 7 +1 -999 -999 -999 -999 11 21 +1 -999 -999 -999 -999 11 5 +1 -999 -999 -999 -999 11 18 +1 -999 -999 -999 -999 11 6 +2 -999 -999 -999 -999 11 19 +16 -999 -999 -999 -999 10 9 +9 -999 -999 -999 -999 10 12 +110 -999 -999 -999 -999 10 10 +11 -999 -999 -999 -999 10 11 +10 -999 -999 -999 -999 10 8 +5 -999 -999 -999 -999 10 13 +3 -999 -999 -999 -999 10 14 +3 -999 -999 -999 -999 10 15 +4 -999 -999 -999 -999 10 6 +2 -999 -999 -999 -999 10 7 +1 -999 -999 -999 -999 10 3 +1 -999 -999 -999 -999 10 4 +1 -999 -999 -999 -999 10 18 +110 -999 -999 -999 -999 9 9 +17 -999 -999 -999 -999 9 8 +21 -999 -999 -999 -999 9 10 +5 -999 -999 -999 -999 9 7 +6 -999 -999 -999 -999 9 11 +1 -999 -999 -999 -999 9 15 +2 -999 -999 -999 -999 9 12 +2 -999 -999 -999 -999 9 5 +5 -999 -999 -999 -999 9 6 +1 -999 -999 -999 -999 9 3 +3 -999 -999 -999 -999 9 14 +2 -999 -999 -999 -999 9 16 +2 -999 -999 -999 -999 9 13 +128 -999 -999 -999 -999 8 8 +20 -999 -999 -999 -999 8 9 +23 -999 -999 -999 -999 8 7 +8 -999 -999 -999 -999 8 6 +8 -999 -999 -999 -999 8 10 +4 -999 -999 -999 -999 8 13 +5 -999 -999 -999 -999 8 11 +1 -999 -999 -999 -999 8 3 +2 -999 -999 -999 -999 8 4 +2 -999 -999 -999 -999 8 16 +4 -999 -999 -999 -999 8 5 +1 -999 -999 -999 -999 8 15 +1 -999 -999 -999 -999 8 12 +1 -999 -999 -999 -999 8 19 +129 -999 -999 -999 -999 7 7 +29 -999 -999 -999 -999 7 6 +16 -999 -999 -999 -999 7 8 +10 -999 -999 -999 -999 7 9 +4 -999 -999 -999 -999 7 4 +7 -999 -999 -999 -999 7 11 +11 -999 -999 -999 -999 7 5 +2 -999 -999 -999 -999 7 19 +4 -999 -999 -999 -999 7 10 +1 -999 -999 -999 -999 7 3 +6 -999 -999 -999 -999 6 9 +147 -999 -999 -999 -999 6 6 +34 -999 -999 -999 -999 6 7 +11 -999 -999 -999 -999 6 8 +17 -999 -999 -999 -999 6 5 +8 -999 -999 -999 -999 6 4 +2 -999 -999 -999 -999 6 13 +1 -999 -999 -999 -999 6 11 +2 -999 -999 -999 -999 6 10 +1 -999 -999 -999 -999 6 12 +11 -999 -999 -999 -999 5 7 +26 -999 -999 -999 -999 5 6 +118 -999 -999 -999 -999 5 5 +40 -999 -999 -999 -999 5 4 +3 -999 -999 -999 -999 5 11 +4 -999 -999 -999 -999 5 3 +1 -999 -999 -999 -999 5 13 +7 -999 -999 -999 -999 5 8 +2 -999 -999 -999 -999 5 9 +1 -999 -999 -999 -999 5 15 +2 -999 -999 -999 -999 5 10 +13 -999 -999 -999 -999 4 6 +115 -999 -999 -999 -999 4 4 +40 -999 -999 -999 -999 4 5 +5 -999 -999 -999 -999 4 7 +16 -999 -999 -999 -999 4 3 +3 -999 -999 -999 -999 4 8 +2 -999 -999 -999 -999 4 12 +3 -999 -999 -999 -999 4 9 +3 -999 -999 -999 -999 3 7 +72 -999 -999 -999 -999 3 3 +21 -999 -999 -999 -999 3 4 +5 -999 -999 -999 -999 3 5 +1 -999 -999 -999 -999 3 20 +6 -999 -999 -999 -999 3 6 +2 -999 -999 -999 -999 3 8 +1 -999 -999 -999 -999 3 12 +1 -999 -999 -999 -999 3 13 +7 -999 -999 -999 -999 2 3 +6 -999 -999 -999 -999 2 2 +-999 -999 -999 -999 -999 -999 + +Data_set_2 +2494 # data points +6 # readers +1 50 4 # minus group; plus group; reference age + 1 2 3 4 5 6 +1 65 66 -999 -999 -999 -999 +1 61 66 -999 -999 -999 -999 +1 72 65 -999 -999 -999 -999 +1 68 63 -999 -999 -999 -999 +1 58 61 -999 -999 -999 -999 +1 64 60 -999 -999 -999 -999 +1 59 60 -999 -999 -999 -999 +1 47 59 -999 -999 -999 -999 +1 51 58 -999 -999 -999 -999 +1 66 58 -999 -999 -999 -999 +1 64 57 -999 -999 -999 -999 +1 65 57 -999 -999 -999 -999 +1 57 57 -999 -999 -999 -999 +1 52 56 -999 -999 -999 -999 +1 45 55 -999 -999 -999 -999 +1 48 55 -999 -999 -999 -999 +1 60 54 -999 -999 -999 -999 +1 52 54 -999 -999 -999 -999 +1 58 53 -999 -999 -999 -999 +1 54 53 -999 -999 -999 -999 +1 42 53 -999 -999 -999 -999 +1 55 53 -999 -999 -999 -999 +1 48 52 -999 -999 -999 -999 +1 40 51 -999 -999 -999 -999 +3 49 51 -999 -999 -999 -999 +1 39 51 -999 -999 -999 -999 +1 43 51 -999 -999 -999 -999 +1 57 51 -999 -999 -999 -999 +1 43 50 -999 -999 -999 -999 +1 49 50 -999 -999 -999 -999 +1 48 50 -999 -999 -999 -999 +1 46 49 -999 -999 -999 -999 +1 53 49 -999 -999 -999 -999 +1 49 49 -999 -999 -999 -999 +1 41 49 -999 -999 -999 -999 +1 26 49 -999 -999 -999 -999 +1 20 49 -999 -999 -999 -999 +1 47 49 -999 -999 -999 -999 +1 51 49 -999 -999 -999 -999 +1 34 48 -999 -999 -999 -999 +2 37 48 -999 -999 -999 -999 +1 53 48 -999 -999 -999 -999 +1 25 48 -999 -999 -999 -999 +1 64 48 -999 -999 -999 -999 +1 42 48 -999 -999 -999 -999 +1 63 48 -999 -999 -999 -999 +2 48 48 -999 -999 -999 -999 +1 52 48 -999 -999 -999 -999 +1 50 48 -999 -999 -999 -999 +1 43 47 -999 -999 -999 -999 +2 40 47 -999 -999 -999 -999 +1 50 47 -999 -999 -999 -999 +2 48 47 -999 -999 -999 -999 +2 54 47 -999 -999 -999 -999 +1 44 47 -999 -999 -999 -999 +2 39 47 -999 -999 -999 -999 +2 51 47 -999 -999 -999 -999 +1 47 47 -999 -999 -999 -999 +1 32 47 -999 -999 -999 -999 +2 46 46 -999 -999 -999 -999 +1 47 46 -999 -999 -999 -999 +1 52 46 -999 -999 -999 -999 +1 37 46 -999 -999 -999 -999 +1 45 46 -999 -999 -999 -999 +1 48 46 -999 -999 -999 -999 +1 39 46 -999 -999 -999 -999 +1 49 45 -999 -999 -999 -999 +1 43 45 -999 -999 -999 -999 +1 44 45 -999 -999 -999 -999 +1 51 45 -999 -999 -999 -999 +1 39 44 -999 -999 -999 -999 +2 46 44 -999 -999 -999 -999 +1 36 44 -999 -999 -999 -999 +2 43 44 -999 -999 -999 -999 +1 38 44 -999 -999 -999 -999 +1 27 44 -999 -999 -999 -999 +1 47 44 -999 -999 -999 -999 +1 54 44 -999 -999 -999 -999 +1 50 44 -999 -999 -999 -999 +1 31 43 -999 -999 -999 -999 +1 43 43 -999 -999 -999 -999 +1 50 43 -999 -999 -999 -999 +1 46 43 -999 -999 -999 -999 +1 59 43 -999 -999 -999 -999 +1 47 43 -999 -999 -999 -999 +1 42 43 -999 -999 -999 -999 +2 43 42 -999 -999 -999 -999 +1 42 42 -999 -999 -999 -999 +1 41 42 -999 -999 -999 -999 +2 37 42 -999 -999 -999 -999 +1 39 42 -999 -999 -999 -999 +1 38 42 -999 -999 -999 -999 +1 32 42 -999 -999 -999 -999 +1 47 42 -999 -999 -999 -999 +1 44 42 -999 -999 -999 -999 +2 37 41 -999 -999 -999 -999 +2 39 41 -999 -999 -999 -999 +2 47 41 -999 -999 -999 -999 +1 22 41 -999 -999 -999 -999 +1 34 41 -999 -999 -999 -999 +1 45 41 -999 -999 -999 -999 +1 31 41 -999 -999 -999 -999 +1 44 41 -999 -999 -999 -999 +2 40 40 -999 -999 -999 -999 +1 33 40 -999 -999 -999 -999 +1 34 40 -999 -999 -999 -999 +1 42 40 -999 -999 -999 -999 +1 31 40 -999 -999 -999 -999 +1 45 40 -999 -999 -999 -999 +1 41 40 -999 -999 -999 -999 +1 36 40 -999 -999 -999 -999 +2 24 40 -999 -999 -999 -999 +1 43 40 -999 -999 -999 -999 +1 37 40 -999 -999 -999 -999 +1 28 40 -999 -999 -999 -999 +1 29 40 -999 -999 -999 -999 +2 36 39 -999 -999 -999 -999 +4 32 39 -999 -999 -999 -999 +2 31 39 -999 -999 -999 -999 +2 43 39 -999 -999 -999 -999 +1 33 39 -999 -999 -999 -999 +3 37 39 -999 -999 -999 -999 +1 29 39 -999 -999 -999 -999 +1 38 39 -999 -999 -999 -999 +1 35 39 -999 -999 -999 -999 +1 27 39 -999 -999 -999 -999 +1 45 39 -999 -999 -999 -999 +1 41 39 -999 -999 -999 -999 +1 30 38 -999 -999 -999 -999 +1 29 38 -999 -999 -999 -999 +2 26 38 -999 -999 -999 -999 +1 35 38 -999 -999 -999 -999 +1 41 38 -999 -999 -999 -999 +1 27 38 -999 -999 -999 -999 +1 38 38 -999 -999 -999 -999 +1 45 38 -999 -999 -999 -999 +1 31 38 -999 -999 -999 -999 +1 34 38 -999 -999 -999 -999 +1 43 38 -999 -999 -999 -999 +3 32 37 -999 -999 -999 -999 +1 30 37 -999 -999 -999 -999 +1 26 37 -999 -999 -999 -999 +3 34 37 -999 -999 -999 -999 +2 37 37 -999 -999 -999 -999 +1 48 37 -999 -999 -999 -999 +2 39 37 -999 -999 -999 -999 +2 33 37 -999 -999 -999 -999 +1 44 37 -999 -999 -999 -999 +1 35 37 -999 -999 -999 -999 +1 40 37 -999 -999 -999 -999 +1 18 37 -999 -999 -999 -999 +1 42 37 -999 -999 -999 -999 +1 46 37 -999 -999 -999 -999 +3 32 36 -999 -999 -999 -999 +1 35 36 -999 -999 -999 -999 +2 31 36 -999 -999 -999 -999 +1 30 36 -999 -999 -999 -999 +1 25 36 -999 -999 -999 -999 +1 40 36 -999 -999 -999 -999 +2 43 36 -999 -999 -999 -999 +2 36 36 -999 -999 -999 -999 +1 33 36 -999 -999 -999 -999 +1 27 36 -999 -999 -999 -999 +1 20 36 -999 -999 -999 -999 +2 39 36 -999 -999 -999 -999 +1 18 36 -999 -999 -999 -999 +1 28 36 -999 -999 -999 -999 +3 45 36 -999 -999 -999 -999 +1 38 36 -999 -999 -999 -999 +1 46 36 -999 -999 -999 -999 +1 49 36 -999 -999 -999 -999 +2 36 35 -999 -999 -999 -999 +1 43 35 -999 -999 -999 -999 +1 37 35 -999 -999 -999 -999 +1 29 35 -999 -999 -999 -999 +2 22 35 -999 -999 -999 -999 +1 30 35 -999 -999 -999 -999 +3 35 35 -999 -999 -999 -999 +1 42 35 -999 -999 -999 -999 +1 20 35 -999 -999 -999 -999 +1 38 35 -999 -999 -999 -999 +1 33 35 -999 -999 -999 -999 +1 31 35 -999 -999 -999 -999 +2 28 35 -999 -999 -999 -999 +1 39 35 -999 -999 -999 -999 +2 29 34 -999 -999 -999 -999 +2 40 34 -999 -999 -999 -999 +2 28 34 -999 -999 -999 -999 +2 35 34 -999 -999 -999 -999 +1 45 34 -999 -999 -999 -999 +1 23 34 -999 -999 -999 -999 +1 22 34 -999 -999 -999 -999 +1 19 34 -999 -999 -999 -999 +1 36 34 -999 -999 -999 -999 +2 31 34 -999 -999 -999 -999 +1 17 34 -999 -999 -999 -999 +1 38 34 -999 -999 -999 -999 +1 51 34 -999 -999 -999 -999 +1 18 34 -999 -999 -999 -999 +1 33 34 -999 -999 -999 -999 +1 30 34 -999 -999 -999 -999 +3 34 33 -999 -999 -999 -999 +2 36 33 -999 -999 -999 -999 +1 33 33 -999 -999 -999 -999 +4 31 33 -999 -999 -999 -999 +1 41 33 -999 -999 -999 -999 +1 35 33 -999 -999 -999 -999 +1 16 33 -999 -999 -999 -999 +1 40 33 -999 -999 -999 -999 +4 28 33 -999 -999 -999 -999 +1 38 33 -999 -999 -999 -999 +1 52 33 -999 -999 -999 -999 +1 17 33 -999 -999 -999 -999 +1 21 33 -999 -999 -999 -999 +1 37 33 -999 -999 -999 -999 +1 42 33 -999 -999 -999 -999 +1 39 33 -999 -999 -999 -999 +1 20 33 -999 -999 -999 -999 +2 38 32 -999 -999 -999 -999 +1 39 32 -999 -999 -999 -999 +2 29 32 -999 -999 -999 -999 +3 34 32 -999 -999 -999 -999 +5 32 32 -999 -999 -999 -999 +3 37 32 -999 -999 -999 -999 +3 35 32 -999 -999 -999 -999 +2 31 32 -999 -999 -999 -999 +2 16 32 -999 -999 -999 -999 +1 13 32 -999 -999 -999 -999 +1 44 32 -999 -999 -999 -999 +2 22 32 -999 -999 -999 -999 +1 30 32 -999 -999 -999 -999 +1 21 32 -999 -999 -999 -999 +1 17 32 -999 -999 -999 -999 +2 33 32 -999 -999 -999 -999 +1 41 32 -999 -999 -999 -999 +1 14 32 -999 -999 -999 -999 +1 46 32 -999 -999 -999 -999 +1 28 32 -999 -999 -999 -999 +1 42 32 -999 -999 -999 -999 +1 36 32 -999 -999 -999 -999 +3 29 31 -999 -999 -999 -999 +4 30 31 -999 -999 -999 -999 +4 31 31 -999 -999 -999 -999 +4 33 31 -999 -999 -999 -999 +4 28 31 -999 -999 -999 -999 +2 24 31 -999 -999 -999 -999 +2 32 31 -999 -999 -999 -999 +2 22 31 -999 -999 -999 -999 +2 35 31 -999 -999 -999 -999 +2 27 31 -999 -999 -999 -999 +2 26 31 -999 -999 -999 -999 +1 11 31 -999 -999 -999 -999 +2 21 31 -999 -999 -999 -999 +1 50 31 -999 -999 -999 -999 +1 46 31 -999 -999 -999 -999 +5 32 30 -999 -999 -999 -999 +1 29 30 -999 -999 -999 -999 +1 24 30 -999 -999 -999 -999 +2 25 30 -999 -999 -999 -999 +1 23 30 -999 -999 -999 -999 +3 27 30 -999 -999 -999 -999 +2 12 30 -999 -999 -999 -999 +3 26 30 -999 -999 -999 -999 +1 37 30 -999 -999 -999 -999 +1 33 30 -999 -999 -999 -999 +1 39 30 -999 -999 -999 -999 +1 30 30 -999 -999 -999 -999 +1 28 30 -999 -999 -999 -999 +1 22 30 -999 -999 -999 -999 +2 31 30 -999 -999 -999 -999 +1 18 30 -999 -999 -999 -999 +2 31 29 -999 -999 -999 -999 +2 35 29 -999 -999 -999 -999 +3 28 29 -999 -999 -999 -999 +4 27 29 -999 -999 -999 -999 +2 34 29 -999 -999 -999 -999 +1 29 29 -999 -999 -999 -999 +1 40 29 -999 -999 -999 -999 +1 32 29 -999 -999 -999 -999 +1 9 29 -999 -999 -999 -999 +1 53 29 -999 -999 -999 -999 +1 25 29 -999 -999 -999 -999 +2 36 29 -999 -999 -999 -999 +1 16 29 -999 -999 -999 -999 +1 23 29 -999 -999 -999 -999 +3 30 29 -999 -999 -999 -999 +1 33 29 -999 -999 -999 -999 +1 24 29 -999 -999 -999 -999 +2 26 29 -999 -999 -999 -999 +1 45 29 -999 -999 -999 -999 +1 39 29 -999 -999 -999 -999 +3 19 28 -999 -999 -999 -999 +1 36 28 -999 -999 -999 -999 +1 31 28 -999 -999 -999 -999 +2 23 28 -999 -999 -999 -999 +2 28 28 -999 -999 -999 -999 +5 29 28 -999 -999 -999 -999 +1 34 28 -999 -999 -999 -999 +1 40 28 -999 -999 -999 -999 +1 33 28 -999 -999 -999 -999 +2 15 28 -999 -999 -999 -999 +1 38 28 -999 -999 -999 -999 +4 20 28 -999 -999 -999 -999 +2 22 28 -999 -999 -999 -999 +1 12 28 -999 -999 -999 -999 +2 26 28 -999 -999 -999 -999 +5 25 28 -999 -999 -999 -999 +2 18 28 -999 -999 -999 -999 +2 27 28 -999 -999 -999 -999 +1 17 28 -999 -999 -999 -999 +1 24 28 -999 -999 -999 -999 +2 30 28 -999 -999 -999 -999 +1 39 28 -999 -999 -999 -999 +1 36 27 -999 -999 -999 -999 +2 31 27 -999 -999 -999 -999 +2 33 27 -999 -999 -999 -999 +4 25 27 -999 -999 -999 -999 +5 29 27 -999 -999 -999 -999 +2 17 27 -999 -999 -999 -999 +4 27 27 -999 -999 -999 -999 +1 24 27 -999 -999 -999 -999 +2 21 27 -999 -999 -999 -999 +2 22 27 -999 -999 -999 -999 +3 32 27 -999 -999 -999 -999 +2 20 27 -999 -999 -999 -999 +2 28 27 -999 -999 -999 -999 +2 30 27 -999 -999 -999 -999 +1 12 27 -999 -999 -999 -999 +1 19 27 -999 -999 -999 -999 +1 23 27 -999 -999 -999 -999 +2 26 27 -999 -999 -999 -999 +2 24 26 -999 -999 -999 -999 +2 34 26 -999 -999 -999 -999 +1 8 26 -999 -999 -999 -999 +4 23 26 -999 -999 -999 -999 +6 28 26 -999 -999 -999 -999 +4 29 26 -999 -999 -999 -999 +3 27 26 -999 -999 -999 -999 +2 13 26 -999 -999 -999 -999 +1 21 26 -999 -999 -999 -999 +1 15 26 -999 -999 -999 -999 +3 25 26 -999 -999 -999 -999 +1 37 26 -999 -999 -999 -999 +2 19 26 -999 -999 -999 -999 +3 22 26 -999 -999 -999 -999 +3 26 26 -999 -999 -999 -999 +1 14 26 -999 -999 -999 -999 +1 36 26 -999 -999 -999 -999 +2 30 26 -999 -999 -999 -999 +1 38 26 -999 -999 -999 -999 +1 61 26 -999 -999 -999 -999 +1 31 26 -999 -999 -999 -999 +1 32 26 -999 -999 -999 -999 +1 18 26 -999 -999 -999 -999 +1 33 26 -999 -999 -999 -999 +4 21 25 -999 -999 -999 -999 +2 30 25 -999 -999 -999 -999 +6 25 25 -999 -999 -999 -999 +5 26 25 -999 -999 -999 -999 +3 27 25 -999 -999 -999 -999 +2 37 25 -999 -999 -999 -999 +5 22 25 -999 -999 -999 -999 +3 23 25 -999 -999 -999 -999 +3 19 25 -999 -999 -999 -999 +3 20 25 -999 -999 -999 -999 +1 14 25 -999 -999 -999 -999 +2 31 25 -999 -999 -999 -999 +1 18 25 -999 -999 -999 -999 +3 24 25 -999 -999 -999 -999 +1 38 25 -999 -999 -999 -999 +1 49 25 -999 -999 -999 -999 +2 29 25 -999 -999 -999 -999 +3 28 25 -999 -999 -999 -999 +1 35 25 -999 -999 -999 -999 +1 39 25 -999 -999 -999 -999 +1 36 25 -999 -999 -999 -999 +2 32 24 -999 -999 -999 -999 +2 27 24 -999 -999 -999 -999 +14 24 24 -999 -999 -999 -999 +5 25 24 -999 -999 -999 -999 +1 34 24 -999 -999 -999 -999 +1 33 24 -999 -999 -999 -999 +2 35 24 -999 -999 -999 -999 +1 23 24 -999 -999 -999 -999 +4 18 24 -999 -999 -999 -999 +1 11 24 -999 -999 -999 -999 +3 28 24 -999 -999 -999 -999 +4 20 24 -999 -999 -999 -999 +2 17 24 -999 -999 -999 -999 +4 22 24 -999 -999 -999 -999 +2 29 24 -999 -999 -999 -999 +4 26 24 -999 -999 -999 -999 +2 19 24 -999 -999 -999 -999 +3 15 24 -999 -999 -999 -999 +1 16 24 -999 -999 -999 -999 +1 30 24 -999 -999 -999 -999 +1 36 24 -999 -999 -999 -999 +1 21 24 -999 -999 -999 -999 +1 14 24 -999 -999 -999 -999 +6 20 23 -999 -999 -999 -999 +6 23 23 -999 -999 -999 -999 +4 19 23 -999 -999 -999 -999 +8 21 23 -999 -999 -999 -999 +4 18 23 -999 -999 -999 -999 +3 22 23 -999 -999 -999 -999 +4 26 23 -999 -999 -999 -999 +2 28 23 -999 -999 -999 -999 +1 17 23 -999 -999 -999 -999 +1 14 23 -999 -999 -999 -999 +1 31 23 -999 -999 -999 -999 +1 42 23 -999 -999 -999 -999 +1 34 23 -999 -999 -999 -999 +2 24 23 -999 -999 -999 -999 +1 27 23 -999 -999 -999 -999 +2 13 23 -999 -999 -999 -999 +1 43 23 -999 -999 -999 -999 +1 29 23 -999 -999 -999 -999 +2 25 23 -999 -999 -999 -999 +5 21 22 -999 -999 -999 -999 +12 20 22 -999 -999 -999 -999 +6 18 22 -999 -999 -999 -999 +4 26 22 -999 -999 -999 -999 +5 17 22 -999 -999 -999 -999 +8 19 22 -999 -999 -999 -999 +2 16 22 -999 -999 -999 -999 +3 25 22 -999 -999 -999 -999 +1 34 22 -999 -999 -999 -999 +4 23 22 -999 -999 -999 -999 +1 30 22 -999 -999 -999 -999 +8 24 22 -999 -999 -999 -999 +2 15 22 -999 -999 -999 -999 +2 13 22 -999 -999 -999 -999 +2 31 22 -999 -999 -999 -999 +3 28 22 -999 -999 -999 -999 +1 36 22 -999 -999 -999 -999 +1 10 22 -999 -999 -999 -999 +9 22 22 -999 -999 -999 -999 +1 33 22 -999 -999 -999 -999 +2 14 22 -999 -999 -999 -999 +3 16 21 -999 -999 -999 -999 +6 20 21 -999 -999 -999 -999 +5 25 21 -999 -999 -999 -999 +5 17 21 -999 -999 -999 -999 +11 18 21 -999 -999 -999 -999 +6 14 21 -999 -999 -999 -999 +1 12 21 -999 -999 -999 -999 +7 22 21 -999 -999 -999 -999 +5 15 21 -999 -999 -999 -999 +2 29 21 -999 -999 -999 -999 +1 40 21 -999 -999 -999 -999 +12 21 21 -999 -999 -999 -999 +9 23 21 -999 -999 -999 -999 +13 19 21 -999 -999 -999 -999 +1 26 21 -999 -999 -999 -999 +1 30 21 -999 -999 -999 -999 +1 36 21 -999 -999 -999 -999 +1 28 21 -999 -999 -999 -999 +2 31 21 -999 -999 -999 -999 +1 11 21 -999 -999 -999 -999 +1 24 21 -999 -999 -999 -999 +1 27 21 -999 -999 -999 -999 +1 10 21 -999 -999 -999 -999 +9 18 20 -999 -999 -999 -999 +6 16 20 -999 -999 -999 -999 +5 17 20 -999 -999 -999 -999 +1 28 20 -999 -999 -999 -999 +14 20 20 -999 -999 -999 -999 +6 22 20 -999 -999 -999 -999 +2 8 20 -999 -999 -999 -999 +10 19 20 -999 -999 -999 -999 +8 21 20 -999 -999 -999 -999 +2 9 20 -999 -999 -999 -999 +3 14 20 -999 -999 -999 -999 +3 25 20 -999 -999 -999 -999 +5 24 20 -999 -999 -999 -999 +4 27 20 -999 -999 -999 -999 +1 15 20 -999 -999 -999 -999 +8 23 20 -999 -999 -999 -999 +2 26 20 -999 -999 -999 -999 +2 11 20 -999 -999 -999 -999 +1 12 20 -999 -999 -999 -999 +1 35 20 -999 -999 -999 -999 +2 13 20 -999 -999 -999 -999 +18 20 19 -999 -999 -999 -999 +12 18 19 -999 -999 -999 -999 +3 25 19 -999 -999 -999 -999 +8 16 19 -999 -999 -999 -999 +4 14 19 -999 -999 -999 -999 +8 15 19 -999 -999 -999 -999 +1 12 19 -999 -999 -999 -999 +6 13 19 -999 -999 -999 -999 +10 19 19 -999 -999 -999 -999 +9 17 19 -999 -999 -999 -999 +3 11 19 -999 -999 -999 -999 +4 22 19 -999 -999 -999 -999 +1 29 19 -999 -999 -999 -999 +2 24 19 -999 -999 -999 -999 +3 21 19 -999 -999 -999 -999 +1 9 19 -999 -999 -999 -999 +2 26 19 -999 -999 -999 -999 +2 27 19 -999 -999 -999 -999 +1 23 19 -999 -999 -999 -999 +1 8 19 -999 -999 -999 -999 +21 17 18 -999 -999 -999 -999 +11 19 18 -999 -999 -999 -999 +5 15 18 -999 -999 -999 -999 +4 23 18 -999 -999 -999 -999 +15 16 18 -999 -999 -999 -999 +4 9 18 -999 -999 -999 -999 +9 14 18 -999 -999 -999 -999 +13 18 18 -999 -999 -999 -999 +6 20 18 -999 -999 -999 -999 +11 13 18 -999 -999 -999 -999 +2 11 18 -999 -999 -999 -999 +5 12 18 -999 -999 -999 -999 +1 8 18 -999 -999 -999 -999 +7 21 18 -999 -999 -999 -999 +4 22 18 -999 -999 -999 -999 +1 29 18 -999 -999 -999 -999 +1 24 18 -999 -999 -999 -999 +1 25 18 -999 -999 -999 -999 +2 7 18 -999 -999 -999 -999 +1 36 18 -999 -999 -999 -999 +1 27 18 -999 -999 -999 -999 +3 10 18 -999 -999 -999 -999 +1 28 18 -999 -999 -999 -999 +1 40 18 -999 -999 -999 -999 +11 19 17 -999 -999 -999 -999 +21 16 17 -999 -999 -999 -999 +3 9 17 -999 -999 -999 -999 +10 15 17 -999 -999 -999 -999 +18 17 17 -999 -999 -999 -999 +1 39 17 -999 -999 -999 -999 +8 21 17 -999 -999 -999 -999 +10 14 17 -999 -999 -999 -999 +6 13 17 -999 -999 -999 -999 +16 18 17 -999 -999 -999 -999 +5 8 17 -999 -999 -999 -999 +7 12 17 -999 -999 -999 -999 +3 11 17 -999 -999 -999 -999 +4 24 17 -999 -999 -999 -999 +8 20 17 -999 -999 -999 -999 +2 28 17 -999 -999 -999 -999 +6 10 17 -999 -999 -999 -999 +5 22 17 -999 -999 -999 -999 +1 26 17 -999 -999 -999 -999 +1 23 17 -999 -999 -999 -999 +1 7 17 -999 -999 -999 -999 +1 30 17 -999 -999 -999 -999 +1 25 17 -999 -999 -999 -999 +10 19 16 -999 -999 -999 -999 +26 15 16 -999 -999 -999 -999 +26 17 16 -999 -999 -999 -999 +29 16 16 -999 -999 -999 -999 +10 11 16 -999 -999 -999 -999 +10 20 16 -999 -999 -999 -999 +14 14 16 -999 -999 -999 -999 +1 25 16 -999 -999 -999 -999 +14 18 16 -999 -999 -999 -999 +15 13 16 -999 -999 -999 -999 +8 12 16 -999 -999 -999 -999 +2 38 16 -999 -999 -999 -999 +3 10 16 -999 -999 -999 -999 +6 21 16 -999 -999 -999 -999 +4 9 16 -999 -999 -999 -999 +1 30 16 -999 -999 -999 -999 +3 24 16 -999 -999 -999 -999 +2 22 16 -999 -999 -999 -999 +1 7 16 -999 -999 -999 -999 +3 8 16 -999 -999 -999 -999 +2 23 16 -999 -999 -999 -999 +1 27 16 -999 -999 -999 -999 +12 19 15 -999 -999 -999 -999 +12 18 15 -999 -999 -999 -999 +30 15 15 -999 -999 -999 -999 +25 16 15 -999 -999 -999 -999 +19 13 15 -999 -999 -999 -999 +4 9 15 -999 -999 -999 -999 +1 26 15 -999 -999 -999 -999 +4 20 15 -999 -999 -999 -999 +10 17 15 -999 -999 -999 -999 +1 25 15 -999 -999 -999 -999 +7 11 15 -999 -999 -999 -999 +1 7 15 -999 -999 -999 -999 +16 14 15 -999 -999 -999 -999 +2 40 15 -999 -999 -999 -999 +10 12 15 -999 -999 -999 -999 +1 32 15 -999 -999 -999 -999 +4 22 15 -999 -999 -999 -999 +2 10 15 -999 -999 -999 -999 +1 23 15 -999 -999 -999 -999 +3 28 15 -999 -999 -999 -999 +1 24 15 -999 -999 -999 -999 +24 15 14 -999 -999 -999 -999 +20 16 14 -999 -999 -999 -999 +15 11 14 -999 -999 -999 -999 +8 17 14 -999 -999 -999 -999 +1 32 14 -999 -999 -999 -999 +17 13 14 -999 -999 -999 -999 +33 14 14 -999 -999 -999 -999 +24 12 14 -999 -999 -999 -999 +7 19 14 -999 -999 -999 -999 +8 10 14 -999 -999 -999 -999 +5 18 14 -999 -999 -999 -999 +3 20 14 -999 -999 -999 -999 +1 25 14 -999 -999 -999 -999 +5 9 14 -999 -999 -999 -999 +1 24 14 -999 -999 -999 -999 +1 6 14 -999 -999 -999 -999 +2 8 14 -999 -999 -999 -999 +1 28 14 -999 -999 -999 -999 +1 22 14 -999 -999 -999 -999 +39 14 13 -999 -999 -999 -999 +1 21 13 -999 -999 -999 -999 +4 20 13 -999 -999 -999 -999 +47 13 13 -999 -999 -999 -999 +18 10 13 -999 -999 -999 -999 +5 7 13 -999 -999 -999 -999 +24 12 13 -999 -999 -999 -999 +10 17 13 -999 -999 -999 -999 +21 15 13 -999 -999 -999 -999 +25 11 13 -999 -999 -999 -999 +14 9 13 -999 -999 -999 -999 +8 16 13 -999 -999 -999 -999 +2 19 13 -999 -999 -999 -999 +5 8 13 -999 -999 -999 -999 +4 18 13 -999 -999 -999 -999 +1 25 13 -999 -999 -999 -999 +1 31 13 -999 -999 -999 -999 +6 17 12 -999 -999 -999 -999 +52 12 12 -999 -999 -999 -999 +29 13 12 -999 -999 -999 -999 +13 15 12 -999 -999 -999 -999 +20 14 12 -999 -999 -999 -999 +33 10 12 -999 -999 -999 -999 +49 11 12 -999 -999 -999 -999 +11 8 12 -999 -999 -999 -999 +3 21 12 -999 -999 -999 -999 +28 9 12 -999 -999 -999 -999 +13 7 12 -999 -999 -999 -999 +3 24 12 -999 -999 -999 -999 +1 5 12 -999 -999 -999 -999 +3 16 12 -999 -999 -999 -999 +3 6 12 -999 -999 -999 -999 +1 19 12 -999 -999 -999 -999 +23 13 11 -999 -999 -999 -999 +61 12 11 -999 -999 -999 -999 +16 14 11 -999 -999 -999 -999 +69 11 11 -999 -999 -999 -999 +41 9 11 -999 -999 -999 -999 +69 10 11 -999 -999 -999 -999 +34 8 11 -999 -999 -999 -999 +3 19 11 -999 -999 -999 -999 +8 7 11 -999 -999 -999 -999 +6 17 11 -999 -999 -999 -999 +4 16 11 -999 -999 -999 -999 +3 15 11 -999 -999 -999 -999 +3 6 11 -999 -999 -999 -999 +3 18 11 -999 -999 -999 -999 +2 5 11 -999 -999 -999 -999 +4 17 10 -999 -999 -999 -999 +1 22 10 -999 -999 -999 -999 +15 14 10 -999 -999 -999 -999 +95 9 10 -999 -999 -999 -999 +63 8 10 -999 -999 -999 -999 +4 16 10 -999 -999 -999 -999 +18 13 10 -999 -999 -999 -999 +1 20 10 -999 -999 -999 -999 +108 10 10 -999 -999 -999 -999 +36 12 10 -999 -999 -999 -999 +7 15 10 -999 -999 -999 -999 +1 21 10 -999 -999 -999 -999 +66 11 10 -999 -999 -999 -999 +35 7 10 -999 -999 -999 -999 +14 6 10 -999 -999 -999 -999 +4 18 10 -999 -999 -999 -999 +1 5 10 -999 -999 -999 -999 +1 26 10 -999 -999 -999 -999 +26 12 9 -999 -999 -999 -999 +92 10 9 -999 -999 -999 -999 +23 13 9 -999 -999 -999 -999 +1 21 9 -999 -999 -999 -999 +167 8 9 -999 -999 -999 -999 +83 7 9 -999 -999 -999 -999 +244 9 9 -999 -999 -999 -999 +6 15 9 -999 -999 -999 -999 +21 6 9 -999 -999 -999 -999 +8 5 9 -999 -999 -999 -999 +60 11 9 -999 -999 -999 -999 +3 16 9 -999 -999 -999 -999 +11 14 9 -999 -999 -999 -999 +1 17 9 -999 -999 -999 -999 +1 4 9 -999 -999 -999 -999 +5 15 8 -999 -999 -999 -999 +23 11 8 -999 -999 -999 -999 +146 9 8 -999 -999 -999 -999 +325 8 8 -999 -999 -999 -999 +8 13 8 -999 -999 -999 -999 +1 20 8 -999 -999 -999 -999 +85 6 8 -999 -999 -999 -999 +193 7 8 -999 -999 -999 -999 +31 5 8 -999 -999 -999 -999 +2 14 8 -999 -999 -999 -999 +50 10 8 -999 -999 -999 -999 +14 12 8 -999 -999 -999 -999 +1 19 8 -999 -999 -999 -999 +2 16 8 -999 -999 -999 -999 +1 21 8 -999 -999 -999 -999 +4 17 8 -999 -999 -999 -999 +2 4 8 -999 -999 -999 -999 +72 9 7 -999 -999 -999 -999 +516 7 7 -999 -999 -999 -999 +30 10 7 -999 -999 -999 -999 +21 11 7 -999 -999 -999 -999 +200 8 7 -999 -999 -999 -999 +235 6 7 -999 -999 -999 -999 +60 5 7 -999 -999 -999 -999 +5 13 7 -999 -999 -999 -999 +8 12 7 -999 -999 -999 -999 +1 14 7 -999 -999 -999 -999 +1 15 7 -999 -999 -999 -999 +6 4 7 -999 -999 -999 -999 +3 15 6 -999 -999 -999 -999 +178 5 6 -999 -999 -999 -999 +4 14 6 -999 -999 -999 -999 +1 20 6 -999 -999 -999 -999 +670 6 6 -999 -999 -999 -999 +87 8 6 -999 -999 -999 -999 +3 12 6 -999 -999 -999 -999 +18 10 6 -999 -999 -999 -999 +198 7 6 -999 -999 -999 -999 +30 9 6 -999 -999 -999 -999 +13 4 6 -999 -999 -999 -999 +1 13 6 -999 -999 -999 -999 +2 3 6 -999 -999 -999 -999 +5 11 6 -999 -999 -999 -999 +490 5 5 -999 -999 -999 -999 +40 7 5 -999 -999 -999 -999 +15 8 5 -999 -999 -999 -999 +164 6 5 -999 -999 -999 -999 +58 4 5 -999 -999 -999 -999 +3 10 5 -999 -999 -999 -999 +3 3 5 -999 -999 -999 -999 +4 9 5 -999 -999 -999 -999 +1 13 5 -999 -999 -999 -999 +253 4 4 -999 -999 -999 -999 +31 3 4 -999 -999 -999 -999 +94 5 4 -999 -999 -999 -999 +2 10 4 -999 -999 -999 -999 +2 8 4 -999 -999 -999 -999 +8 7 4 -999 -999 -999 -999 +15 6 4 -999 -999 -999 -999 +143 3 3 -999 -999 -999 -999 +39 4 3 -999 -999 -999 -999 +3 2 3 -999 -999 -999 -999 +2 6 3 -999 -999 -999 -999 +2 5 3 -999 -999 -999 -999 +65 2 2 -999 -999 -999 -999 +3 3 2 -999 -999 -999 -999 +1 4 2 -999 -999 -999 -999 +3 -999 15 13 -999 -999 -999 +2 -999 10 10 -999 -999 -999 +7 -999 11 9 -999 -999 -999 +3 -999 4 2 -999 -999 -999 +5 -999 4 3 -999 -999 -999 +2 -999 9 11 -999 -999 -999 +1 -999 16 7 -999 -999 -999 +2 -999 18 16 -999 -999 -999 +1 -999 13 16 -999 -999 -999 +5 -999 7 8 -999 -999 -999 +4 -999 9 8 -999 -999 -999 +28 -999 4 4 -999 -999 -999 +1 -999 13 15 -999 -999 -999 +3 -999 7 4 -999 -999 -999 +12 -999 5 5 -999 -999 -999 +8 -999 8 7 -999 -999 -999 +2 -999 16 11 -999 -999 -999 +1 -999 18 15 -999 -999 -999 +2 -999 13 8 -999 -999 -999 +7 -999 7 7 -999 -999 -999 +6 -999 9 9 -999 -999 -999 +3 -999 13 10 -999 -999 -999 +4 -999 4 5 -999 -999 -999 +4 -999 8 8 -999 -999 -999 +1 -999 15 6 -999 -999 -999 +4 -999 10 9 -999 -999 -999 +1 -999 9 6 -999 -999 -999 +1 -999 16 10 -999 -999 -999 +2 -999 18 14 -999 -999 -999 +1 -999 13 7 -999 -999 -999 +3 -999 9 10 -999 -999 -999 +1 -999 13 23 -999 -999 -999 +3 -999 13 9 -999 -999 -999 +2 -999 16 9 -999 -999 -999 +4 -999 5 4 -999 -999 -999 +3 -999 17 12 -999 -999 -999 +1 -999 15 10 -999 -999 -999 +4 -999 11 11 -999 -999 -999 +3 -999 6 5 -999 -999 -999 +2 -999 7 5 -999 -999 -999 +2 -999 8 6 -999 -999 -999 +2 -999 8 9 -999 -999 -999 +6 -999 6 6 -999 -999 -999 +1 -999 7 10 -999 -999 -999 +9 -999 7 6 -999 -999 -999 +1 -999 21 16 -999 -999 -999 +3 -999 10 6 -999 -999 -999 +1 -999 31 25 -999 -999 -999 +1 -999 12 7 -999 -999 -999 +1 -999 14 14 -999 -999 -999 +1 -999 31 31 -999 -999 -999 +2 -999 10 8 -999 -999 -999 +1 -999 21 20 -999 -999 -999 +1 -999 16 15 -999 -999 -999 +2 -999 15 15 -999 -999 -999 +1 -999 24 16 -999 -999 -999 +1 -999 18 12 -999 -999 -999 +1 -999 12 8 -999 -999 -999 +1 -999 27 19 -999 -999 -999 +3 -999 10 13 -999 -999 -999 +3 -999 18 18 -999 -999 -999 +3 -999 13 13 -999 -999 -999 +5 -999 3 3 -999 -999 -999 +1 -999 15 19 -999 -999 -999 +1 -999 18 19 -999 -999 -999 +2 -999 2 2 -999 -999 -999 +3 -999 9 7 -999 -999 -999 +1 -999 34 31 -999 -999 -999 +1 -999 25 25 -999 -999 -999 +1 -999 18 13 -999 -999 -999 +2 -999 6 8 -999 -999 -999 +1 -999 24 23 -999 -999 -999 +1 -999 28 22 -999 -999 -999 +3 -999 26 28 -999 -999 -999 +1 -999 19 20 -999 -999 -999 +2 -999 15 14 -999 -999 -999 +2 -999 42 45 -999 -999 -999 +1 -999 27 24 -999 -999 -999 +2 -999 11 14 -999 -999 -999 +1 -999 10 11 -999 -999 -999 +1 -999 84 92 -999 -999 -999 +1 -999 11 13 -999 -999 -999 +1 -999 8 5 -999 -999 -999 +1 -999 18 22 -999 -999 -999 +1 -999 61 55 -999 -999 -999 +1 -999 30 25 -999 -999 -999 +1 -999 19 16 -999 -999 -999 +1 -999 49 43 -999 -999 -999 +1 -999 29 33 -999 -999 -999 +1 -999 12 10 -999 -999 -999 +1 -999 19 19 -999 -999 -999 +2 -999 12 11 -999 -999 -999 +1 -999 15 17 -999 -999 -999 +1 -999 3 4 -999 -999 -999 +1 -999 63 64 -999 -999 -999 +1 -999 18 17 -999 -999 -999 +1 -999 39 49 -999 -999 -999 +5 -999 6 4 -999 -999 -999 +1 -999 42 43 -999 -999 -999 +1 -999 4 10 -999 -999 -999 +1 -999 20 30 -999 -999 -999 +1 -999 9 19 -999 -999 -999 +1 -999 49 65 -999 -999 -999 +1 -999 22 18 -999 -999 -999 +3 -999 8 10 -999 -999 -999 +1 -999 18 10 -999 -999 -999 +1 -999 8 4 -999 -999 -999 +1 -999 6 3 -999 -999 -999 +1 -999 16 6 -999 -999 -999 +1 -999 11 6 -999 -999 -999 +1 -999 12 17 -999 -999 -999 +1 -999 10 14 -999 -999 -999 +1 -999 7 11 -999 -999 -999 +1 -999 14 17 -999 -999 -999 +1 -999 13 11 -999 -999 -999 +1 -999 10 16 -999 -999 -999 +1 -999 3 2 -999 -999 -999 +1 -999 11 12 -999 -999 -999 +1 -999 20 20 -999 -999 -999 +1 -999 10 15 -999 -999 -999 +1 -999 9 4 -999 -999 -999 +1 -999 16 16 -999 -999 -999 +1 -999 14 15 -999 -999 -999 +1 -999 24 22 -999 -999 -999 +1 -999 16 14 -999 -999 -999 +739 -999 -999 4 4 -999 -999 +129 -999 -999 4 3 -999 -999 +9 -999 -999 13 10 -999 -999 +155 -999 -999 3 4 -999 -999 +5 -999 -999 20 23 -999 -999 +311 -999 -999 6 6 -999 -999 +9 -999 -999 14 11 -999 -999 +184 -999 -999 7 7 -999 -999 +12 -999 -999 18 17 -999 -999 +2 -999 -999 49 44 -999 -999 +97 -999 -999 8 7 -999 -999 +8 -999 -999 13 16 -999 -999 +31 -999 -999 9 6 -999 -999 +176 -999 -999 5 4 -999 -999 +3 -999 -999 12 7 -999 -999 +1 -999 -999 17 30 -999 -999 +11 -999 -999 13 17 -999 -999 +400 -999 -999 2 2 -999 -999 +466 -999 -999 3 3 -999 -999 +35 -999 -999 8 5 -999 -999 +45 -999 -999 5 3 -999 -999 +120 -999 -999 7 6 -999 -999 +8 -999 -999 2 4 -999 -999 +2 -999 -999 38 40 -999 -999 +5 -999 -999 13 18 -999 -999 +182 -999 -999 4 5 -999 -999 +1 -999 -999 33 47 -999 -999 +13 -999 -999 8 11 -999 -999 +11 -999 -999 3 6 -999 -999 +52 -999 -999 4 6 -999 -999 +121 -999 -999 1 1 -999 -999 +1 -999 -999 30 28 -999 -999 +13 -999 -999 13 9 -999 -999 +1 -999 -999 27 38 -999 -999 +24 -999 -999 10 8 -999 -999 +14 -999 -999 14 12 -999 -999 +78 -999 -999 6 4 -999 -999 +1 -999 -999 60 57 -999 -999 +386 -999 -999 5 5 -999 -999 +131 -999 -999 6 5 -999 -999 +81 -999 -999 7 8 -999 -999 +33 -999 -999 3 5 -999 -999 +2 -999 -999 15 10 -999 -999 +19 -999 -999 6 9 -999 -999 +5 -999 -999 12 15 -999 -999 +45 -999 -999 9 10 -999 -999 +24 -999 -999 12 11 -999 -999 +1 -999 -999 72 75 -999 -999 +20 -999 -999 15 14 -999 -999 +186 -999 -999 8 8 -999 -999 +56 -999 -999 5 7 -999 -999 +27 -999 -999 13 14 -999 -999 +40 -999 -999 7 9 -999 -999 +2 -999 -999 3 8 -999 -999 +79 -999 -999 9 8 -999 -999 +77 -999 -999 2 3 -999 -999 +15 -999 -999 11 7 -999 -999 +1 -999 -999 28 34 -999 -999 +97 -999 -999 6 7 -999 -999 +36 -999 -999 6 8 -999 -999 +1 -999 -999 5 11 -999 -999 +27 -999 -999 15 15 -999 -999 +1 -999 -999 55 61 -999 -999 +6 -999 -999 18 20 -999 -999 +17 -999 -999 16 17 -999 -999 +1 -999 -999 46 52 -999 -999 +1 -999 -999 66 74 -999 -999 +99 -999 -999 3 2 -999 -999 +5 -999 -999 23 23 -999 -999 +25 -999 -999 5 8 -999 -999 +16 -999 -999 18 18 -999 -999 +5 -999 -999 31 31 -999 -999 +1 -999 -999 40 48 -999 -999 +6 -999 -999 13 15 -999 -999 +6 -999 -999 2 1 -999 -999 +6 -999 -999 24 25 -999 -999 +16 -999 -999 17 15 -999 -999 +2 -999 -999 50 55 -999 -999 +1 -999 -999 24 34 -999 -999 +6 -999 -999 9 4 -999 -999 +3 -999 -999 13 6 -999 -999 +4 -999 -999 26 25 -999 -999 +5 -999 -999 17 10 -999 -999 +3 -999 -999 10 3 -999 -999 +1 -999 -999 62 21 -999 -999 +4 -999 -999 13 7 -999 -999 +133 -999 -999 5 6 -999 -999 +5 -999 -999 23 19 -999 -999 +8 -999 -999 18 14 -999 -999 +2 -999 -999 14 6 -999 -999 +51 -999 -999 8 6 -999 -999 +2 -999 -999 13 5 -999 -999 +19 -999 -999 10 6 -999 -999 +1 -999 -999 67 57 -999 -999 +15 -999 -999 6 3 -999 -999 +71 -999 -999 7 5 -999 -999 +10 -999 -999 22 21 -999 -999 +2 -999 -999 39 45 -999 -999 +30 -999 -999 11 10 -999 -999 +2 -999 -999 30 32 -999 -999 +8 -999 -999 19 18 -999 -999 +1 -999 -999 29 11 -999 -999 +3 -999 -999 39 42 -999 -999 +1 -999 -999 15 20 -999 -999 +95 -999 -999 9 9 -999 -999 +1 -999 -999 4 14 -999 -999 +24 -999 -999 10 12 -999 -999 +3 -999 -999 17 13 -999 -999 +9 -999 -999 11 13 -999 -999 +4 -999 -999 22 26 -999 -999 +4 -999 -999 28 25 -999 -999 +1 -999 -999 36 44 -999 -999 +2 -999 -999 33 32 -999 -999 +14 -999 -999 9 12 -999 -999 +14 -999 -999 7 10 -999 -999 +5 -999 -999 16 19 -999 -999 +74 -999 -999 8 9 -999 -999 +5 -999 -999 45 43 -999 -999 +26 -999 -999 7 4 -999 -999 +3 -999 -999 33 38 -999 -999 +8 -999 -999 18 15 -999 -999 +45 -999 -999 12 12 -999 -999 +6 -999 -999 10 14 -999 -999 +3 -999 -999 19 23 -999 -999 +5 -999 -999 11 16 -999 -999 +7 -999 -999 6 12 -999 -999 +11 -999 -999 10 13 -999 -999 +1 -999 -999 21 29 -999 -999 +1 -999 -999 72 76 -999 -999 +1 -999 -999 54 63 -999 -999 +4 -999 -999 27 25 -999 -999 +13 -999 -999 10 5 -999 -999 +35 -999 -999 9 7 -999 -999 +1 -999 -999 26 52 -999 -999 +15 -999 -999 8 10 -999 -999 +1 -999 -999 36 30 -999 -999 +3 -999 -999 33 33 -999 -999 +2 -999 -999 34 31 -999 -999 +29 -999 -999 14 14 -999 -999 +6 -999 -999 7 12 -999 -999 +1 -999 -999 32 40 -999 -999 +2 -999 -999 59 60 -999 -999 +13 -999 -999 11 6 -999 -999 +11 -999 -999 15 17 -999 -999 +6 -999 -999 1 2 -999 -999 +2 -999 -999 27 11 -999 -999 +1 -999 -999 39 44 -999 -999 +3 -999 -999 32 36 -999 -999 +2 -999 -999 31 22 -999 -999 +3 -999 -999 25 13 -999 -999 +18 -999 -999 12 13 -999 -999 +16 -999 -999 13 11 -999 -999 +1 -999 -999 50 50 -999 -999 +17 -999 -999 11 8 -999 -999 +12 -999 -999 19 20 -999 -999 +6 -999 -999 17 12 -999 -999 +3 -999 -999 7 3 -999 -999 +39 -999 -999 11 11 -999 -999 +19 -999 -999 4 7 -999 -999 +4 -999 -999 43 44 -999 -999 +4 -999 -999 33 29 -999 -999 +1 -999 -999 54 20 -999 -999 +2 -999 -999 46 45 -999 -999 +26 -999 -999 11 9 -999 -999 +30 -999 -999 9 5 -999 -999 +36 -999 -999 10 11 -999 -999 +1 -999 -999 45 58 -999 -999 +45 -999 -999 10 9 -999 -999 +3 -999 -999 39 38 -999 -999 +8 -999 -999 8 4 -999 -999 +11 -999 -999 17 19 -999 -999 +1 -999 -999 64 55 -999 -999 +3 -999 -999 17 22 -999 -999 +4 -999 -999 45 39 -999 -999 +1 -999 -999 49 33 -999 -999 +5 -999 -999 29 28 -999 -999 +1 -999 -999 69 66 -999 -999 +1 -999 -999 38 66 -999 -999 +1 -999 -999 54 40 -999 -999 +6 -999 -999 29 25 -999 -999 +2 -999 -999 31 38 -999 -999 +4 -999 -999 9 13 -999 -999 +54 -999 -999 10 10 -999 -999 +19 -999 -999 16 15 -999 -999 +2 -999 -999 62 40 -999 -999 +8 -999 -999 7 11 -999 -999 +14 -999 -999 12 14 -999 -999 +1 -999 -999 50 48 -999 -999 +2 -999 -999 20 13 -999 -999 +7 -999 -999 11 15 -999 -999 +43 -999 -999 13 13 -999 -999 +1 -999 -999 57 64 -999 -999 +14 -999 -999 6 10 -999 -999 +2 -999 -999 27 33 -999 -999 +1 -999 -999 55 52 -999 -999 +6 -999 -999 20 18 -999 -999 +13 -999 -999 4 2 -999 -999 +4 -999 -999 8 13 -999 -999 +2 -999 -999 16 24 -999 -999 +4 -999 -999 39 36 -999 -999 +4 -999 -999 28 30 -999 -999 +2 -999 -999 34 30 -999 -999 +1 -999 -999 61 45 -999 -999 +2 -999 -999 34 22 -999 -999 +1 -999 -999 31 18 -999 -999 +4 -999 -999 17 20 -999 -999 +20 -999 -999 17 16 -999 -999 +1 -999 -999 66 54 -999 -999 +3 -999 -999 49 27 -999 -999 +2 -999 -999 21 21 -999 -999 +1 -999 -999 59 63 -999 -999 +3 -999 -999 34 29 -999 -999 +24 -999 -999 9 11 -999 -999 +1 -999 -999 21 16 -999 -999 +16 -999 -999 12 10 -999 -999 +2 -999 -999 57 59 -999 -999 +5 -999 -999 32 35 -999 -999 +1 -999 -999 52 47 -999 -999 +1 -999 -999 68 58 -999 -999 +5 -999 -999 20 16 -999 -999 +6 -999 -999 12 8 -999 -999 +1 -999 -999 43 33 -999 -999 +1 -999 -999 65 64 -999 -999 +5 -999 -999 27 28 -999 -999 +2 -999 -999 34 28 -999 -999 +1 -999 -999 36 46 -999 -999 +5 -999 -999 22 22 -999 -999 +2 -999 -999 33 30 -999 -999 +4 -999 -999 18 21 -999 -999 +7 -999 -999 24 24 -999 -999 +3 -999 -999 19 13 -999 -999 +9 -999 -999 27 24 -999 -999 +23 -999 -999 14 13 -999 -999 +16 -999 -999 15 16 -999 -999 +2 -999 -999 6 11 -999 -999 +6 -999 -999 22 17 -999 -999 +2 -999 -999 21 17 -999 -999 +1 -999 -999 39 23 -999 -999 +1 -999 -999 35 32 -999 -999 +2 -999 -999 42 42 -999 -999 +2 -999 -999 45 40 -999 -999 +5 -999 -999 16 13 -999 -999 +1 -999 -999 37 19 -999 -999 +1 -999 -999 43 36 -999 -999 +1 -999 -999 52 21 -999 -999 +1 -999 -999 30 18 -999 -999 +7 -999 -999 4 11 -999 -999 +1 -999 -999 8 21 -999 -999 +1 -999 -999 4 13 -999 -999 +1 -999 -999 6 20 -999 -999 +1 -999 -999 11 24 -999 -999 +6 -999 -999 4 8 -999 -999 +1 -999 -999 11 18 -999 -999 +1 -999 -999 7 28 -999 -999 +7 -999 -999 14 17 -999 -999 +17 -999 -999 5 9 -999 -999 +4 -999 -999 4 9 -999 -999 +2 -999 -999 19 8 -999 -999 +6 -999 -999 15 11 -999 -999 +1 -999 -999 49 36 -999 -999 +2 -999 -999 45 46 -999 -999 +3 -999 -999 31 32 -999 -999 +1 -999 -999 44 37 -999 -999 +7 -999 -999 5 10 -999 -999 +3 -999 -999 45 42 -999 -999 +6 -999 -999 10 16 -999 -999 +2 -999 -999 10 15 -999 -999 +2 -999 -999 37 30 -999 -999 +1 -999 -999 34 44 -999 -999 +2 -999 -999 36 39 -999 -999 +2 -999 -999 40 38 -999 -999 +2 -999 -999 23 21 -999 -999 +2 -999 -999 37 41 -999 -999 +2 -999 -999 23 30 -999 -999 +6 -999 -999 22 18 -999 -999 +2 -999 -999 30 39 -999 -999 +9 -999 -999 28 28 -999 -999 +9 -999 -999 15 12 -999 -999 +3 -999 -999 12 18 -999 -999 +5 -999 -999 29 26 -999 -999 +2 -999 -999 26 23 -999 -999 +4 -999 -999 16 18 -999 -999 +1 -999 -999 29 16 -999 -999 +12 -999 -999 13 8 -999 -999 +5 -999 -999 34 33 -999 -999 +3 -999 -999 14 10 -999 -999 +5 -999 -999 18 16 -999 -999 +12 -999 -999 15 13 -999 -999 +1 -999 -999 21 9 -999 -999 +19 -999 -999 10 7 -999 -999 +1 -999 -999 18 11 -999 -999 +6 -999 -999 22 19 -999 -999 +2 -999 -999 45 41 -999 -999 +4 -999 -999 22 27 -999 -999 +14 -999 -999 19 19 -999 -999 +12 -999 -999 12 9 -999 -999 +1 -999 -999 35 39 -999 -999 +2 -999 -999 20 24 -999 -999 +9 -999 -999 29 31 -999 -999 +3 -999 -999 32 34 -999 -999 +6 -999 -999 25 22 -999 -999 +5 -999 -999 29 27 -999 -999 +1 -999 -999 17 5 -999 -999 +7 -999 -999 14 15 -999 -999 +3 -999 -999 7 13 -999 -999 +3 -999 -999 24 22 -999 -999 +4 -999 -999 28 24 -999 -999 +2 -999 -999 13 22 -999 -999 +3 -999 -999 31 33 -999 -999 +5 -999 -999 31 34 -999 -999 +7 -999 -999 27 26 -999 -999 +2 -999 -999 10 20 -999 -999 +1 -999 -999 32 23 -999 -999 +3 -999 -999 26 15 -999 -999 +1 -999 -999 2 9 -999 -999 +1 -999 -999 2 16 -999 -999 +1 -999 -999 10 27 -999 -999 +4 -999 -999 11 14 -999 -999 +4 -999 -999 25 19 -999 -999 +9 -999 -999 21 22 -999 -999 +2 -999 -999 28 15 -999 -999 +2 -999 -999 30 21 -999 -999 +1 -999 -999 39 29 -999 -999 +2 -999 -999 29 20 -999 -999 +3 -999 -999 40 35 -999 -999 +1 -999 -999 19 15 -999 -999 +20 -999 -999 11 12 -999 -999 +1 -999 -999 18 10 -999 -999 +2 -999 -999 37 21 -999 -999 +1 -999 -999 42 23 -999 -999 +6 -999 -999 20 22 -999 -999 +2 -999 -999 28 21 -999 -999 +3 -999 -999 11 5 -999 -999 +2 -999 -999 19 12 -999 -999 +2 -999 -999 34 37 -999 -999 +1 -999 -999 30 19 -999 -999 +2 -999 -999 23 17 -999 -999 +11 -999 -999 10 4 -999 -999 +4 -999 -999 24 26 -999 -999 +5 -999 -999 24 28 -999 -999 +2 -999 -999 16 22 -999 -999 +1 -999 -999 10 26 -999 -999 +6 -999 -999 12 16 -999 -999 +3 -999 -999 24 20 -999 -999 +2 -999 -999 31 36 -999 -999 +1 -999 -999 15 21 -999 -999 +1 -999 -999 14 19 -999 -999 +2 -999 -999 24 12 -999 -999 +1 -999 -999 23 15 -999 -999 +1 -999 -999 22 8 -999 -999 +1 -999 -999 35 19 -999 -999 +2 -999 -999 22 13 -999 -999 +6 -999 -999 17 11 -999 -999 +3 -999 -999 25 23 -999 -999 +1 -999 -999 38 29 -999 -999 +1 -999 -999 38 22 -999 -999 +2 -999 -999 12 6 -999 -999 +3 -999 -999 23 24 -999 -999 +2 -999 -999 39 35 -999 -999 +13 -999 -999 17 14 -999 -999 +4 -999 -999 28 27 -999 -999 +5 -999 -999 36 37 -999 -999 +1 -999 -999 27 19 -999 -999 +2 -999 -999 35 30 -999 -999 +1 -999 -999 37 35 -999 -999 +2 -999 -999 30 27 -999 -999 +3 -999 -999 22 23 -999 -999 +2 -999 -999 22 14 -999 -999 +2 -999 -999 29 38 -999 -999 +2 -999 -999 50 47 -999 -999 +2 -999 -999 28 19 -999 -999 +7 -999 -999 20 21 -999 -999 +3 -999 -999 37 36 -999 -999 +3 -999 -999 38 31 -999 -999 +4 -999 -999 14 18 -999 -999 +7 -999 -999 19 21 -999 -999 +23 -999 -999 13 12 -999 -999 +6 -999 -999 30 30 -999 -999 +2 -999 -999 14 8 -999 -999 +4 -999 -999 22 20 -999 -999 +2 -999 -999 42 45 -999 -999 +2 -999 -999 48 29 -999 -999 +21 -999 -999 16 16 -999 -999 +2 -999 -999 35 36 -999 -999 +2 -999 -999 24 15 -999 -999 +1 -999 -999 39 33 -999 -999 +1 -999 -999 64 42 -999 -999 +1 -999 -999 16 7 -999 -999 +1 -999 -999 67 68 -999 -999 +1 -999 -999 29 40 -999 -999 +2 -999 -999 37 37 -999 -999 +2 -999 -999 25 24 -999 -999 +2 -999 -999 31 23 -999 -999 +1 -999 -999 29 43 -999 -999 +2 -999 -999 21 14 -999 -999 +1 -999 -999 19 38 -999 -999 +1 -999 -999 29 24 -999 -999 +2 -999 -999 17 21 -999 -999 +3 -999 -999 29 30 -999 -999 +1 -999 -999 55 50 -999 -999 +5 -999 -999 23 22 -999 -999 +6 -999 -999 21 19 -999 -999 +4 -999 -999 32 30 -999 -999 +2 -999 -999 22 15 -999 -999 +1 -999 -999 24 16 -999 -999 +1 -999 -999 58 46 -999 -999 +2 -999 -999 45 33 -999 -999 +1 -999 -999 58 53 -999 -999 +2 -999 -999 12 5 -999 -999 +1 -999 -999 50 43 -999 -999 +1 -999 -999 50 31 -999 -999 +3 -999 -999 32 32 -999 -999 +4 -999 -999 26 26 -999 -999 +4 -999 -999 22 24 -999 -999 +3 -999 -999 28 26 -999 -999 +1 -999 -999 36 38 -999 -999 +3 -999 -999 33 28 -999 -999 +1 -999 -999 16 26 -999 -999 +2 -999 -999 33 35 -999 -999 +4 -999 -999 9 14 -999 -999 +1 -999 -999 72 68 -999 -999 +2 -999 -999 54 54 -999 -999 +2 -999 -999 26 30 -999 -999 +1 -999 -999 36 33 -999 -999 +2 -999 -999 34 38 -999 -999 +1 -999 -999 32 43 -999 -999 +1 -999 -999 59 59 -999 -999 +1 -999 -999 39 40 -999 -999 +2 -999 -999 25 17 -999 -999 +3 -999 -999 50 53 -999 -999 +10 -999 -999 19 17 -999 -999 +2 -999 -999 3 11 -999 -999 +1 -999 -999 54 30 -999 -999 +1 -999 -999 46 39 -999 -999 +15 -999 -999 17 18 -999 -999 +1 -999 -999 36 24 -999 -999 +1 -999 -999 21 32 -999 -999 +1 -999 -999 46 49 -999 -999 +1 -999 -999 40 43 -999 -999 +3 -999 -999 29 21 -999 -999 +1 -999 -999 25 35 -999 -999 +4 -999 -999 31 28 -999 -999 +3 -999 -999 29 32 -999 -999 +1 -999 -999 69 58 -999 -999 +3 -999 -999 5 13 -999 -999 +1 -999 -999 54 48 -999 -999 +1 -999 -999 29 34 -999 -999 +3 -999 -999 31 29 -999 -999 +1 -999 -999 16 30 -999 -999 +1 -999 -999 8 14 -999 -999 +1 -999 -999 45 23 -999 -999 +1 -999 -999 62 34 -999 -999 +2 -999 -999 50 51 -999 -999 +1 -999 -999 20 14 -999 -999 +3 -999 -999 13 19 -999 -999 +1 -999 -999 57 43 -999 -999 +4 -999 -999 27 27 -999 -999 +1 -999 -999 55 53 -999 -999 +12 -999 -999 20 20 -999 -999 +3 -999 -999 39 32 -999 -999 +2 -999 -999 34 26 -999 -999 +1 -999 -999 61 48 -999 -999 +1 -999 -999 34 18 -999 -999 +2 -999 -999 31 25 -999 -999 +2 -999 -999 42 37 -999 -999 +2 -999 -999 66 73 -999 -999 +5 -999 -999 21 23 -999 -999 +1 -999 -999 59 61 -999 -999 +1 -999 -999 34 35 -999 -999 +2 -999 -999 21 15 -999 -999 +1 -999 -999 57 62 -999 -999 +1 -999 -999 52 35 -999 -999 +1 -999 -999 68 60 -999 -999 +1 -999 -999 43 31 -999 -999 +22 -999 -999 17 17 -999 -999 +1 -999 -999 65 66 -999 -999 +6 -999 -999 24 27 -999 -999 +2 -999 -999 38 39 -999 -999 +4 -999 -999 5 2 -999 -999 +1 -999 -999 36 43 -999 -999 +4 -999 -999 18 22 -999 -999 +1 -999 -999 24 30 -999 -999 +1 -999 -999 13 23 -999 -999 +1 -999 -999 27 35 -999 -999 +1 -999 -999 34 47 -999 -999 +1 -999 -999 15 26 -999 -999 +6 -999 -999 4 10 -999 -999 +2 -999 -999 6 17 -999 -999 +2 -999 -999 6 16 -999 -999 +3 -999 -999 6 13 -999 -999 +9 -999 -999 21 20 -999 -999 +1 -999 -999 39 28 -999 -999 +1 -999 -999 31 17 -999 -999 +1 -999 -999 35 25 -999 -999 +1 -999 -999 42 36 -999 -999 +3 -999 -999 16 10 -999 -999 +1 -999 -999 43 28 -999 -999 +1 -999 -999 52 23 -999 -999 +2 -999 -999 4 12 -999 -999 +1 -999 -999 7 23 -999 -999 +3 -999 -999 16 11 -999 -999 +1 -999 -999 45 45 -999 -999 +1 -999 -999 44 40 -999 -999 +2 -999 -999 45 44 -999 -999 +1 -999 -999 10 24 -999 -999 +1 -999 -999 10 29 -999 -999 +1 -999 -999 34 45 -999 -999 +2 -999 -999 40 44 -999 -999 +2 -999 -999 23 18 -999 -999 +1 -999 -999 37 28 -999 -999 +1 -999 -999 23 32 -999 -999 +2 -999 -999 22 25 -999 -999 +1 -999 -999 30 34 -999 -999 +3 -999 -999 28 23 -999 -999 +2 -999 -999 20 19 -999 -999 +5 -999 -999 34 32 -999 -999 +3 -999 -999 27 23 -999 -999 +1 -999 -999 18 29 -999 -999 +7 -999 -999 18 19 -999 -999 +3 -999 -999 35 33 -999 -999 +3 -999 -999 25 25 -999 -999 +1 -999 -999 11 17 -999 -999 +1 -999 -999 14 23 -999 -999 +3 -999 -999 31 26 -999 -999 +8 -999 -999 24 23 -999 -999 +2 -999 -999 27 20 -999 -999 +1 -999 -999 32 21 -999 -999 +1 -999 -999 19 11 -999 -999 +1 -999 -999 20 9 -999 -999 +1 -999 -999 26 20 -999 -999 +2 -999 -999 25 31 -999 -999 +1 -999 -999 30 23 -999 -999 +1 -999 -999 40 29 -999 -999 +4 -999 -999 25 18 -999 -999 +6 -999 -999 8 12 -999 -999 +1 -999 -999 37 26 -999 -999 +1 -999 -999 42 31 -999 -999 +1 -999 -999 8 3 -999 -999 +2 -999 -999 40 39 -999 -999 +1 -999 -999 19 26 -999 -999 +3 -999 -999 11 4 -999 -999 +2 -999 -999 19 14 -999 -999 +3 -999 -999 34 34 -999 -999 +2 -999 -999 23 16 -999 -999 +2 -999 -999 27 32 -999 -999 +1 -999 -999 10 19 -999 -999 +1 -999 -999 26 19 -999 -999 +1 -999 -999 35 37 -999 -999 +3 -999 -999 14 9 -999 -999 +1 -999 -999 38 23 -999 -999 +2 -999 -999 33 23 -999 -999 +1 -999 -999 34 20 -999 -999 +1 -999 -999 12 4 -999 -999 +5 -999 -999 39 39 -999 -999 +5 -999 -999 15 18 -999 -999 +1 -999 -999 36 32 -999 -999 +1 -999 -999 26 29 -999 -999 +3 -999 -999 21 24 -999 -999 +1 -999 -999 45 51 -999 -999 +1 -999 -999 28 16 -999 -999 +1 -999 -999 35 21 -999 -999 +1 -999 -999 30 42 -999 -999 +1 -999 -999 31 40 -999 -999 +1 -999 -999 26 22 -999 -999 +1 -999 -999 18 31 -999 -999 +3 -999 -999 7 14 -999 -999 +1 -999 -999 34 60 -999 -999 +2 -999 -999 30 44 -999 -999 +9 -999 -999 14 16 -999 -999 +2 -999 -999 26 27 -999 -999 +1 -999 -999 38 60 -999 -999 +1 -999 -999 32 51 -999 -999 +2 -999 -999 35 35 -999 -999 +1 -999 -999 25 32 -999 -999 +1 -999 -999 49 26 -999 -999 +2 -999 -999 50 57 -999 -999 +3 -999 -999 19 22 -999 -999 +5 -999 -999 35 38 -999 -999 +2 -999 -999 32 33 -999 -999 +1 -999 -999 18 24 -999 -999 +1 -999 -999 14 22 -999 -999 +4 -999 -999 42 39 -999 -999 +2 -999 -999 25 29 -999 -999 +1 -999 -999 26 32 -999 -999 +3 -999 -999 26 24 -999 -999 +2 -999 -999 38 35 -999 -999 +1 -999 -999 49 40 -999 -999 +1 -999 -999 47 47 -999 -999 +1 -999 -999 44 46 -999 -999 +1 -999 -999 48 50 -999 -999 +2 -999 -999 43 39 -999 -999 +1 -999 -999 46 51 -999 -999 +1 -999 -999 54 65 -999 -999 +1 -999 -999 60 36 -999 -999 +4 -999 -999 23 26 -999 -999 +3 -999 -999 46 48 -999 -999 +2 -999 -999 28 22 -999 -999 +1 -999 -999 42 44 -999 -999 +2 -999 -999 24 29 -999 -999 +2 -999 -999 53 48 -999 -999 +1 -999 -999 3 9 -999 -999 +5 -999 -999 3 7 -999 -999 +1 -999 -999 31 24 -999 -999 +1 -999 -999 33 25 -999 -999 +1 -999 -999 25 20 -999 -999 +1 -999 -999 24 19 -999 -999 +2 -999 -999 19 9 -999 -999 +2 -999 -999 6 14 -999 -999 +1 -999 -999 22 32 -999 -999 +1 -999 -999 21 30 -999 -999 +1 -999 -999 7 15 -999 -999 +3 -999 -999 42 46 -999 -999 +2 -999 -999 29 35 -999 -999 +2 -999 -999 37 29 -999 -999 +2 -999 -999 43 41 -999 -999 +1 -999 -999 52 32 -999 -999 +5 -999 -999 15 19 -999 -999 +2 -999 -999 8 20 -999 -999 +1 -999 -999 6 23 -999 -999 +1 -999 -999 11 32 -999 -999 +1 -999 -999 11 21 -999 -999 +1 -999 -999 7 27 -999 -999 +1 -999 -999 4 15 -999 -999 +4 -999 -999 16 20 -999 -999 +1 -999 -999 49 35 -999 -999 +2 -999 -999 31 27 -999 -999 +1 -999 -999 44 28 -999 -999 +1 -999 -999 45 32 -999 -999 +2 -999 -999 34 25 -999 -999 +2 -999 -999 40 40 -999 -999 +5 -999 -999 23 25 -999 -999 +1 -999 -999 37 31 -999 -999 +4 -999 -999 22 29 -999 -999 +1 -999 -999 30 36 -999 -999 +1 -999 -999 29 23 -999 -999 +1 -999 -999 29 19 -999 -999 +2 -999 -999 34 27 -999 -999 +1 -999 -999 21 11 -999 -999 +2 -999 -999 15 9 -999 -999 +1 -999 -999 45 38 -999 -999 +1 -999 -999 35 34 -999 -999 +1 -999 -999 20 17 -999 -999 +1 -999 -999 20 12 -999 -999 +1 -999 -999 32 38 -999 -999 +5 -999 -999 29 29 -999 -999 +1 -999 -999 27 14 -999 -999 +1 -999 -999 18 32 -999 -999 +2 -999 -999 17 8 -999 -999 +1 -999 -999 7 16 -999 -999 +2 -999 -999 28 37 -999 -999 +2 -999 -999 10 17 -999 -999 +3 -999 -999 12 19 -999 -999 +1 -999 -999 6 22 -999 -999 +1 -999 -999 13 29 -999 -999 +2 -999 -999 31 37 -999 -999 +1 -999 -999 17 26 -999 -999 +1 -999 -999 18 28 -999 -999 +1 -999 -999 27 31 -999 -999 +1 -999 -999 10 22 -999 -999 +1 -999 -999 20 11 -999 -999 +1 -999 -999 2 5 -999 -999 +2 -999 -999 25 27 -999 -999 +1 -999 -999 30 25 -999 -999 +2 -999 -999 42 40 -999 -999 +2 -999 -999 40 37 -999 -999 +1 -999 -999 22 31 -999 -999 +1 -999 -999 37 32 -999 -999 +1 -999 -999 19 25 -999 -999 +1 -999 -999 34 41 -999 -999 +2 -999 -999 38 41 -999 -999 +1 -999 -999 33 37 -999 -999 +2 -999 -999 39 37 -999 -999 +2 -999 -999 36 36 -999 -999 +2 -999 -999 48 40 -999 -999 +2 -999 -999 22 16 -999 -999 +1 -999 -999 8 17 -999 -999 +2 -999 -999 64 66 -999 -999 +1 -999 -999 16 5 -999 -999 +2 -999 -999 67 67 -999 -999 +1 -999 -999 37 56 -999 -999 +1 -999 -999 25 44 -999 -999 +1 -999 -999 29 52 -999 -999 +1 -999 -999 12 20 -999 -999 +2 -999 -999 29 33 -999 -999 +1 -999 -999 55 58 -999 -999 +1 -999 -999 32 31 -999 -999 +1 -999 -999 58 52 -999 -999 +1 -999 -999 58 56 -999 -999 +1 -999 -999 10 2 -999 -999 +1 -999 -999 30 33 -999 -999 +1 -999 -999 52 50 -999 -999 +1 -999 -999 32 16 -999 -999 +1 -999 -999 20 25 -999 -999 +1 -999 -999 49 50 -999 -999 +1 -999 -999 17 34 -999 -999 +1 -999 -999 13 25 -999 -999 +2 -999 -999 38 47 -999 -999 +1 -999 -999 33 68 -999 -999 +1 -999 -999 8 25 -999 -999 +1 -999 -999 30 43 -999 -999 +1 -999 -999 27 30 -999 -999 +1 -999 -999 60 69 -999 -999 +3 -999 -999 15 8 -999 -999 +1 -999 -999 72 61 -999 -999 +2 -999 -999 15 25 -999 -999 +1 -999 -999 55 56 -999 -999 +1 -999 -999 62 46 -999 -999 +2 -999 -999 30 31 -999 -999 +1 -999 -999 36 27 -999 -999 +7 -999 -999 16 14 -999 -999 +2 -999 -999 14 7 -999 -999 +3 -999 -999 16 21 -999 -999 +1 -999 -999 30 20 -999 -999 +1 -999 -999 32 29 -999 -999 +2 -999 -999 48 52 -999 -999 +3 -999 -999 20 15 -999 -999 +3 -999 -999 46 41 -999 -999 +1 -999 -999 28 29 -999 -999 +1 -999 -999 46 34 -999 -999 +2 -999 -999 33 27 -999 -999 +1 -999 -999 30 26 -999 -999 +1 -999 -999 29 15 -999 -999 +3 -999 -999 33 26 -999 -999 +2 -999 -999 39 31 -999 -999 +1 -999 -999 18 9 -999 -999 +1 -999 -999 43 43 -999 -999 +1 -999 -999 60 63 -999 -999 +2 -999 -999 25 33 -999 -999 +2 -999 -999 30 35 -999 -999 +2 -999 -999 43 38 -999 -999 +1 -999 -999 65 60 -999 -999 +1 -999 -999 18 25 -999 -999 +1 -999 -999 69 60 -999 -999 +1 -999 -999 38 64 -999 -999 +2 -999 -999 54 39 -999 -999 +1 -999 -999 62 53 -999 -999 +1 -999 -999 50 45 -999 -999 +1 -999 -999 57 52 -999 -999 +2 -999 -999 55 51 -999 -999 +1 -999 -999 39 34 -999 -999 +1 -999 -999 61 52 -999 -999 +1 -999 -999 66 36 -999 -999 +1 -999 -999 59 69 -999 -999 +1 -999 -999 21 18 -999 -999 +1 -999 -999 57 57 -999 -999 +2 -999 -999 32 37 -999 -999 +1 -999 -999 52 56 -999 -999 +1 -999 -999 68 62 -999 -999 +1 -999 -999 65 61 -999 -999 +1 -999 -999 23 27 -999 -999 +1 -999 -999 20 26 -999 -999 +1 -999 -999 19 24 -999 -999 +1 -999 -999 15 7 -999 -999 +1 -999 -999 16 28 -999 -999 +2 -999 -999 34 40 -999 -999 +1 -999 -999 16 8 -999 -999 +1 -999 -999 67 69 -999 -999 +1 -999 -999 37 53 -999 -999 +2 -999 -999 33 40 -999 -999 +1 -999 -999 31 35 -999 -999 +1 -999 -999 29 50 -999 -999 +2 -999 -999 29 37 -999 -999 +3 -999 -999 23 28 -999 -999 +1 -999 -999 58 50 -999 -999 +1 -999 -999 58 62 -999 -999 +1 -999 -999 20 10 -999 -999 +1 -999 -999 16 12 -999 -999 +1 -999 -999 64 67 -999 -999 +1 -999 -999 6 18 -999 -999 +2 -999 -999 65 49 -999 -999 +1 -999 -999 23 20 -999 -999 +3 -999 -999 25 26 -999 -999 +1 -999 -999 22 28 -999 -999 +1 -999 -999 28 35 -999 -999 +1 -999 -999 45 48 -999 -999 +1 -999 -999 17 28 -999 -999 +1 -999 -999 35 44 -999 -999 +1 -999 -999 31 43 -999 -999 +1 -999 -999 24 21 -999 -999 +1 -999 -999 41 43 -999 -999 +1 -999 -999 11 20 -999 -999 +1 -999 -999 49 46 -999 -999 +1 -999 -999 17 31 -999 -999 +1 -999 -999 13 24 -999 -999 +1 -999 -999 13 21 -999 -999 +1 -999 -999 33 43 -999 -999 +1 -999 -999 60 61 -999 -999 +1 -999 -999 72 72 -999 -999 +1 -999 -999 28 42 -999 -999 +1 -999 -999 55 47 -999 -999 +1 -999 -999 46 44 -999 -999 +1 -999 -999 66 70 -999 -999 +1 -999 -999 50 60 -999 -999 +1 -999 -999 67 73 -999 -999 +1 -999 -999 25 15 -999 -999 +1 -999 -999 35 40 -999 -999 +1 -999 -999 19 32 -999 -999 +1 -999 -999 12 28 -999 -999 +1 -999 -999 37 50 -999 -999 +1 -999 -999 37 34 -999 -999 +1 -999 -999 16 9 -999 -999 +1 -999 -999 51 49 -999 -999 +3 -999 -999 19 16 -999 -999 +1 -999 -999 44 36 -999 -999 +1 -999 -999 34 39 -999 -999 +1 -999 -999 47 37 -999 -999 +1 -999 -999 25 21 -999 -999 +1 -999 -999 68 57 -999 -999 +1 -999 -999 65 55 -999 -999 +1 -999 -999 12 17 -999 -999 +1 -999 -999 27 34 -999 -999 +1 -999 -999 41 47 -999 -999 +1 -999 -999 23 33 -999 -999 +1 -999 -999 23 40 -999 -999 +1 -999 -999 51 51 -999 -999 +1 -999 -999 37 42 -999 -999 +1 -999 -999 56 53 -999 -999 +1 -999 -999 17 9 -999 -999 +1 -999 -999 52 51 -999 -999 +1 -999 -999 17 6 -999 -999 +1 -999 -999 35 29 -999 -999 +1 -999 -999 9 18 -999 -999 +1 -999 -999 38 45 -999 -999 +2 -999 -999 36 35 -999 -999 +1 -999 -999 72 73 -999 -999 +1 -999 -999 54 57 -999 -999 +1 -999 -999 36 29 -999 -999 +1 -999 -999 59 55 -999 -999 +1 -999 -999 27 17 -999 -999 +1 -999 -999 39 46 -999 -999 +1 -999 -999 3 10 -999 -999 +1 -999 -999 32 25 -999 -999 +1 -999 -999 34 24 -999 -999 +1 -999 -999 34 36 -999 -999 +1 -999 -999 44 49 -999 -999 +1 -999 -999 32 50 -999 -999 +1 -999 -999 21 26 -999 -999 +1 -999 -999 33 39 -999 -999 +1 -999 -999 44 44 -999 -999 +1 -999 -999 38 37 -999 -999 +2 -999 -999 57 58 -999 -999 +1 -999 -999 48 49 -999 -999 +1 -999 -999 41 39 -999 -999 +1 -999 -999 25 28 -999 -999 +2 -999 -999 47 48 -999 -999 +1 -999 -999 41 40 -999 -999 +1 -999 -999 22 30 -999 -999 +1 -999 -999 49 56 -999 -999 +1 -999 -999 45 47 -999 -999 +1 -999 -999 29 39 -999 -999 +1 -999 -999 44 38 -999 -999 +1 -999 -999 39 30 -999 -999 +1 -999 -999 21 25 -999 -999 +1 -999 -999 49 48 -999 -999 +1 -999 -999 52 57 -999 -999 +1 -999 -999 49 52 -999 -999 +2 -999 -999 50 52 -999 -999 +1 -999 -999 36 41 -999 -999 +1 -999 -999 38 42 -999 -999 +1 -999 -999 44 43 -999 -999 +1 -999 -999 35 46 -999 -999 +1 -999 -999 55 57 -999 -999 +1 -999 -999 51 59 -999 -999 +1 -999 -999 45 49 -999 -999 +1 -999 -999 53 50 -999 -999 +1 -999 -999 57 56 -999 -999 +1 -999 -999 37 38 -999 -999 +1 -999 -999 46 27 -999 -999 +1 -999 -999 47 49 -999 -999 +1 -999 -999 45 35 -999 -999 +1 -999 -999 44 42 -999 -999 +1 -999 -999 32 22 -999 -999 +1 -999 -999 40 33 -999 -999 +1 -999 -999 38 30 -999 -999 +1 -999 -999 44 41 -999 -999 +1 -999 -999 45 34 -999 -999 +2 -999 -999 -999 28 29 -999 +1 -999 -999 -999 61 63 -999 +2 -999 -999 -999 40 42 -999 +6 -999 -999 -999 6 7 -999 +2 -999 -999 -999 11 15 -999 +7 -999 -999 -999 4 4 -999 +1 -999 -999 -999 16 17 -999 +1 -999 -999 -999 63 66 -999 +1 -999 -999 -999 24 26 -999 +1 -999 -999 -999 31 33 -999 +2 -999 -999 -999 46 49 -999 +1 -999 -999 -999 53 56 -999 +2 -999 -999 -999 39 39 -999 +1 -999 -999 -999 20 22 -999 +1 -999 -999 -999 33 51 -999 +1 -999 -999 -999 35 46 -999 +1 -999 -999 -999 11 12 -999 +13 -999 -999 -999 5 5 -999 +5 -999 -999 -999 8 8 -999 +1 -999 -999 -999 47 73 -999 +1 -999 -999 -999 22 33 -999 +1 -999 -999 -999 16 25 -999 +2 -999 -999 -999 8 12 -999 +3 -999 -999 -999 11 13 -999 +2 -999 -999 -999 9 16 -999 +2 -999 -999 -999 10 10 -999 +1 -999 -999 -999 9 15 -999 +1 -999 -999 -999 27 40 -999 +1 -999 -999 -999 13 21 -999 +1 -999 -999 -999 15 21 -999 +1 -999 -999 -999 5 7 -999 +2 -999 -999 -999 5 4 -999 +1 -999 -999 -999 7 11 -999 +2 -999 -999 -999 17 22 -999 +1 -999 -999 -999 24 54 -999 +1 -999 -999 -999 10 34 -999 +2 -999 -999 -999 27 29 -999 +1 -999 -999 -999 62 63 -999 +1 -999 -999 -999 34 40 -999 +1 -999 -999 -999 14 17 -999 +1 -999 -999 -999 64 66 -999 +1 -999 -999 -999 26 26 -999 +1 -999 -999 -999 33 33 -999 +1 -999 -999 -999 48 56 -999 +2 -999 -999 -999 21 22 -999 +1 -999 -999 -999 48 51 -999 +1 -999 -999 -999 45 46 -999 +1 -999 -999 -999 12 12 -999 +1 -999 -999 -999 6 5 -999 +2 -999 -999 -999 8 11 -999 +1 -999 -999 -999 38 40 -999 +1 -999 -999 -999 27 27 -999 +2 -999 -999 -999 8 7 -999 +1 -999 -999 -999 45 44 -999 +1 -999 -999 -999 4 8 -999 +1 -999 -999 -999 30 31 -999 +2 -999 -999 -999 11 16 -999 +2 -999 -999 -999 11 11 -999 +2 -999 -999 -999 17 17 -999 +1 -999 -999 -999 57 54 -999 +1 -999 -999 -999 56 49 -999 +1 -999 -999 -999 21 20 -999 +1 -999 -999 -999 63 60 -999 +1 -999 -999 -999 52 49 -999 +1 -999 -999 -999 14 16 -999 +1 -999 -999 -999 29 32 -999 +4 -999 -999 -999 9 9 -999 +1 -999 -999 -999 13 14 -999 +1 -999 -999 -999 58 59 -999 +1 -999 -999 -999 30 40 -999 +2 -999 -999 -999 24 28 -999 +1 -999 -999 -999 15 20 -999 +5 -999 -999 -999 3 3 -999 +1 -999 -999 -999 18 20 -999 +3 -999 -999 -999 6 8 -999 +1 -999 -999 -999 10 15 -999 +1 -999 -999 -999 9 12 -999 +1 -999 -999 -999 31 44 -999 +1 -999 -999 -999 14 18 -999 +1 -999 -999 -999 36 52 -999 +5 -999 -999 -999 6 6 -999 +1 -999 -999 -999 19 18 -999 +1 -999 -999 -999 19 21 -999 +2 -999 -999 -999 2 2 -999 +8 -999 -999 -999 7 7 -999 +1 -999 -999 -999 31 36 -999 +1 -999 -999 -999 25 33 -999 +3 -999 -999 -999 7 8 -999 +1 -999 -999 -999 13 33 -999 +1 -999 -999 -999 8 6 -999 +1 -999 -999 -999 23 24 -999 +1 -999 -999 -999 22 37 -999 +1 -999 -999 -999 28 37 -999 +1 -999 -999 -999 20 29 -999 +2 -999 -999 -999 14 14 -999 +1 -999 -999 -999 45 52 -999 +1 -999 -999 -999 9 8 -999 +2 -999 -999 -999 28 33 -999 +1 -999 -999 -999 14 12 -999 +2 -999 -999 -999 9 10 -999 +2 -999 -999 -999 11 14 -999 +1 -999 -999 -999 92 95 -999 +1 -999 -999 -999 13 23 -999 +4 -999 -999 -999 5 6 -999 +1 -999 -999 -999 12 15 -999 +1 -999 -999 -999 22 23 -999 +1 -999 -999 -999 55 64 -999 +1 -999 -999 -999 14 19 -999 +1 -999 -999 -999 16 24 -999 +1 -999 -999 -999 43 46 -999 +1 -999 -999 -999 33 39 -999 +1 -999 -999 -999 2 4 -999 +1 -999 -999 -999 10 14 -999 +1 -999 -999 -999 13 13 -999 +1 -999 -999 -999 19 20 -999 +1 -999 -999 -999 28 36 -999 +1 -999 -999 -999 17 18 -999 +1 -999 -999 -999 45 39 -999 +2 -999 -999 -999 4 5 -999 +2 -999 -999 -999 7 6 -999 +1 -999 -999 -999 6 4 -999 +3 -999 -999 -999 8 9 -999 +1 -999 -999 -999 64 53 -999 +1 -999 -999 -999 49 49 -999 +1 -999 -999 -999 4 6 -999 +1 -999 -999 -999 43 41 -999 +2 -999 -999 -999 10 9 -999 +1 -999 -999 -999 30 28 -999 +1 -999 -999 -999 19 17 -999 +1 -999 -999 -999 65 56 -999 +1 -999 -999 -999 18 27 -999 +1 -999 -999 -999 4 7 -999 +2 -999 -999 -999 13 19 -999 +1 -999 -999 -999 3 4 -999 +1 -999 -999 -999 16 19 -999 +1 -999 -999 -999 15 15 -999 +2 -999 -999 -999 9 11 -999 +1 -999 -999 -999 22 24 -999 +1 -999 -999 -999 14 23 -999 +1 -999 -999 -999 4 9 -999 +1 -999 -999 -999 35 48 -999 +1 -999 -999 -999 26 30 -999 +1 -999 13 -999 -999 10 -999 +2 -999 16 -999 -999 17 -999 +1 -999 5 -999 -999 4 -999 +1 -999 17 -999 -999 14 -999 +1 -999 15 -999 -999 13 -999 +1 -999 13 -999 -999 15 -999 +1 -999 11 -999 -999 11 -999 +1 -999 11 -999 -999 14 -999 +1 -999 6 -999 -999 5 -999 +3 -999 7 -999 -999 7 -999 +3 -999 11 -999 -999 10 -999 +1 -999 8 -999 -999 6 -999 +3 -999 8 -999 -999 8 -999 +2 -999 9 -999 -999 7 -999 +8 -999 4 -999 -999 4 -999 +3 -999 6 -999 -999 6 -999 +1 -999 7 -999 -999 6 -999 +1 -999 7 -999 -999 5 -999 +1 -999 18 -999 -999 26 -999 +1 -999 13 -999 -999 17 -999 +2 -999 7 -999 -999 12 -999 +4 -999 7 -999 -999 8 -999 +1 -999 21 -999 -999 35 -999 +1 -999 10 -999 -999 6 -999 +1 -999 31 -999 -999 52 -999 +2 -999 12 -999 -999 13 -999 +4 -999 5 -999 -999 5 -999 +2 -999 10 -999 -999 9 -999 +2 -999 14 -999 -999 14 -999 +3 -999 10 -999 -999 10 -999 +1 -999 31 -999 -999 34 -999 +2 -999 10 -999 -999 11 -999 +1 -999 21 -999 -999 21 -999 +3 -999 6 -999 -999 7 -999 +1 -999 16 -999 -999 19 -999 +1 -999 18 -999 -999 17 -999 +2 -999 15 -999 -999 15 -999 +2 -999 13 -999 -999 14 -999 +1 -999 16 -999 -999 14 -999 +1 -999 24 -999 -999 21 -999 +1 -999 18 -999 -999 19 -999 +1 -999 27 -999 -999 25 -999 +3 -999 10 -999 -999 12 -999 +1 -999 9 -999 -999 12 -999 +2 -999 16 -999 -999 16 -999 +2 -999 18 -999 -999 16 -999 +1 -999 13 -999 -999 7 -999 +1 -999 9 -999 -999 9 -999 +1 -999 13 -999 -999 22 -999 +1 -999 5 -999 -999 7 -999 +1 -999 8 -999 -999 10 -999 +2 -999 9 -999 -999 11 -999 +1 -999 24 -999 -999 29 -999 +1 -999 30 -999 -999 29 -999 +1 -999 32 -999 -999 40 -999 +1 -999 27 -999 -999 27 -999 +1 -999 41 -999 -999 44 -999 +1 -999 4 -999 -999 8 -999 +1 -999 29 -999 -999 31 -999 +1 -999 53 -999 -999 54 -999 +1 -999 53 -999 -999 49 -999 +2 -999 20 -999 -999 20 -999 +1 -999 59 -999 -999 60 -999 +1 -999 47 -999 -999 49 -999 +1 -999 15 -999 -999 16 -999 +1 -999 28 -999 -999 32 -999 +1 -999 7 -999 -999 9 -999 +1 -999 57 -999 -999 59 -999 +1 -999 44 -999 -999 40 -999 +1 -999 12 -999 -999 16 -999 +1 -999 11 -999 -999 12 -999 +1 -999 9 -999 -999 5 -999 +1 -999 29 -999 -999 28 -999 +1 -999 15 -999 -999 9 -999 +1 -999 25 -999 -999 17 -999 +1 -999 4 -999 -999 3 -999 +1 -999 21 -999 -999 20 -999 +1 -999 9 -999 -999 8 -999 +1 -999 12 -999 -999 15 -999 +1 -999 44 -999 -999 44 -999 +1 -999 8 -999 -999 5 -999 +1 -999 22 -999 -999 22 -999 +1 -999 17 -999 -999 18 -999 +1 -999 43 -999 -999 52 -999 +1 -999 43 -999 -999 73 -999 +1 -999 23 -999 -999 33 -999 +1 -999 20 -999 -999 25 -999 +1 -999 12 -999 -999 12 -999 +1 -999 11 -999 -999 13 -999 +1 -999 9 -999 -999 16 -999 +1 -999 14 -999 -999 15 -999 +1 -999 38 -999 -999 40 -999 +1 -999 14 -999 -999 21 -999 +1 -999 15 -999 -999 21 -999 +1 -999 6 -999 -999 4 -999 +1 -999 14 -999 -999 22 -999 +1 -999 41 -999 -999 54 -999 +1 -999 20 -999 -999 34 -999 +1 -999 -999 -999 -999 90 90 +1 -999 -999 -999 -999 89 89 +1 -999 -999 -999 -999 86 86 +1 -999 -999 -999 -999 85 85 +1 -999 -999 -999 -999 84 91 +1 -999 -999 -999 -999 83 72 +1 -999 -999 -999 -999 83 83 +1 -999 -999 -999 -999 82 82 +1 -999 -999 -999 -999 79 79 +1 -999 -999 -999 -999 78 78 +2 -999 -999 -999 -999 76 76 +1 -999 -999 -999 -999 75 75 +1 -999 -999 -999 -999 72 72 +3 -999 -999 -999 -999 71 71 +1 -999 -999 -999 -999 69 69 +1 -999 -999 -999 -999 69 77 +1 -999 -999 -999 -999 69 66 +1 -999 -999 -999 -999 68 69 +2 -999 -999 -999 -999 68 68 +1 -999 -999 -999 -999 67 67 +1 -999 -999 -999 -999 66 65 +1 -999 -999 -999 -999 66 66 +2 -999 -999 -999 -999 65 65 +2 -999 -999 -999 -999 64 64 +1 -999 -999 -999 -999 64 59 +1 -999 -999 -999 -999 64 61 +1 -999 -999 -999 -999 64 56 +1 -999 -999 -999 -999 63 63 +2 -999 -999 -999 -999 62 62 +5 -999 -999 -999 -999 61 61 +1 -999 -999 -999 -999 61 56 +1 -999 -999 -999 -999 61 57 +1 -999 -999 -999 -999 61 62 +1 -999 -999 -999 -999 60 57 +1 -999 -999 -999 -999 60 60 +1 -999 -999 -999 -999 59 58 +3 -999 -999 -999 -999 59 59 +1 -999 -999 -999 -999 59 53 +1 -999 -999 -999 -999 59 76 +4 -999 -999 -999 -999 58 58 +1 -999 -999 -999 -999 58 53 +1 -999 -999 -999 -999 58 68 +8 -999 -999 -999 -999 57 57 +1 -999 -999 -999 -999 57 66 +1 -999 -999 -999 -999 57 59 +1 -999 -999 -999 -999 57 64 +6 -999 -999 -999 -999 56 56 +1 -999 -999 -999 -999 56 60 +1 -999 -999 -999 -999 56 76 +1 -999 -999 -999 -999 55 50 +1 -999 -999 -999 -999 55 55 +1 -999 -999 -999 -999 55 57 +8 -999 -999 -999 -999 54 54 +1 -999 -999 -999 -999 54 55 +1 -999 -999 -999 -999 54 56 +1 -999 -999 -999 -999 54 62 +2 -999 -999 -999 -999 53 56 +9 -999 -999 -999 -999 53 53 +1 -999 -999 -999 -999 53 58 +1 -999 -999 -999 -999 53 47 +1 -999 -999 -999 -999 53 65 +6 -999 -999 -999 -999 52 52 +2 -999 -999 -999 -999 52 56 +1 -999 -999 -999 -999 52 59 +1 -999 -999 -999 -999 52 66 +1 -999 -999 -999 -999 52 55 +5 -999 -999 -999 -999 51 51 +1 -999 -999 -999 -999 51 46 +3 -999 -999 -999 -999 50 50 +1 -999 -999 -999 -999 50 60 +1 -999 -999 -999 -999 50 46 +1 -999 -999 -999 -999 49 46 +7 -999 -999 -999 -999 49 49 +1 -999 -999 -999 -999 49 53 +1 -999 -999 -999 -999 49 74 +1 -999 -999 -999 -999 48 54 +1 -999 -999 -999 -999 48 31 +1 -999 -999 -999 -999 48 52 +1 -999 -999 -999 -999 48 66 +1 -999 -999 -999 -999 48 35 +3 -999 -999 -999 -999 48 48 +1 -999 -999 -999 -999 47 45 +1 -999 -999 -999 -999 47 71 +6 -999 -999 -999 -999 47 47 +1 -999 -999 -999 -999 47 52 +1 -999 -999 -999 -999 46 57 +1 -999 -999 -999 -999 46 59 +6 -999 -999 -999 -999 46 46 +1 -999 -999 -999 -999 46 49 +1 -999 -999 -999 -999 46 53 +1 -999 -999 -999 -999 46 58 +1 -999 -999 -999 -999 45 49 +7 -999 -999 -999 -999 45 45 +1 -999 -999 -999 -999 44 46 +2 -999 -999 -999 -999 44 51 +1 -999 -999 -999 -999 44 47 +7 -999 -999 -999 -999 44 44 +1 -999 -999 -999 -999 44 49 +1 -999 -999 -999 -999 44 73 +2 -999 -999 -999 -999 43 43 +1 -999 -999 -999 -999 43 37 +1 -999 -999 -999 -999 43 47 +1 -999 -999 -999 -999 43 41 +3 -999 -999 -999 -999 42 42 +1 -999 -999 -999 -999 42 39 +1 -999 -999 -999 -999 42 46 +8 -999 -999 -999 -999 41 41 +2 -999 -999 -999 -999 41 45 +1 -999 -999 -999 -999 41 46 +1 -999 -999 -999 -999 41 33 +1 -999 -999 -999 -999 41 37 +1 -999 -999 -999 -999 41 49 +1 -999 -999 -999 -999 40 42 +1 -999 -999 -999 -999 40 20 +1 -999 -999 -999 -999 40 47 +1 -999 -999 -999 -999 40 40 +1 -999 -999 -999 -999 39 41 +9 -999 -999 -999 -999 39 39 +1 -999 -999 -999 -999 39 46 +1 -999 -999 -999 -999 38 48 +8 -999 -999 -999 -999 38 38 +1 -999 -999 -999 -999 38 44 +1 -999 -999 -999 -999 38 43 +1 -999 -999 -999 -999 38 82 +1 -999 -999 -999 -999 38 30 +1 -999 -999 -999 -999 37 41 +13 -999 -999 -999 -999 37 37 +2 -999 -999 -999 -999 37 33 +1 -999 -999 -999 -999 37 45 +1 -999 -999 -999 -999 37 43 +6 -999 -999 -999 -999 36 36 +1 -999 -999 -999 -999 36 71 +1 -999 -999 -999 -999 36 37 +1 -999 -999 -999 -999 36 63 +1 -999 -999 -999 -999 36 39 +1 -999 -999 -999 -999 36 43 +1 -999 -999 -999 -999 35 46 +11 -999 -999 -999 -999 35 35 +1 -999 -999 -999 -999 35 18 +1 -999 -999 -999 -999 35 31 +1 -999 -999 -999 -999 35 42 +1 -999 -999 -999 -999 35 37 +14 -999 -999 -999 -999 34 34 +1 -999 -999 -999 -999 34 38 +1 -999 -999 -999 -999 34 22 +1 -999 -999 -999 -999 34 28 +1 -999 -999 -999 -999 34 36 +1 -999 -999 -999 -999 34 30 +1 -999 -999 -999 -999 34 40 +17 -999 -999 -999 -999 33 33 +1 -999 -999 -999 -999 33 36 +2 -999 -999 -999 -999 33 31 +1 -999 -999 -999 -999 33 35 +1 -999 -999 -999 -999 33 49 +1 -999 -999 -999 -999 33 45 +1 -999 -999 -999 -999 32 28 +10 -999 -999 -999 -999 32 32 +1 -999 -999 -999 -999 31 39 +2 -999 -999 -999 -999 31 30 +1 -999 -999 -999 -999 31 32 +14 -999 -999 -999 -999 31 31 +1 -999 -999 -999 -999 31 29 +1 -999 -999 -999 -999 31 35 +1 -999 -999 -999 -999 31 33 +1 -999 -999 -999 -999 31 34 +1 -999 -999 -999 -999 31 56 +1 -999 -999 -999 -999 30 29 +10 -999 -999 -999 -999 30 30 +1 -999 -999 -999 -999 30 40 +1 -999 -999 -999 -999 30 33 +1 -999 -999 -999 -999 30 24 +1 -999 -999 -999 -999 30 27 +2 -999 -999 -999 -999 29 15 +11 -999 -999 -999 -999 29 29 +1 -999 -999 -999 -999 29 33 +1 -999 -999 -999 -999 29 34 +1 -999 -999 -999 -999 29 44 +1 -999 -999 -999 -999 29 25 +1 -999 -999 -999 -999 29 20 +1 -999 -999 -999 -999 29 31 +2 -999 -999 -999 -999 29 35 +1 -999 -999 -999 -999 29 24 +1 -999 -999 -999 -999 29 37 +2 -999 -999 -999 -999 29 38 +1 -999 -999 -999 -999 29 22 +14 -999 -999 -999 -999 28 28 +1 -999 -999 -999 -999 28 26 +1 -999 -999 -999 -999 28 29 +1 -999 -999 -999 -999 28 18 +1 -999 -999 -999 -999 28 34 +1 -999 -999 -999 -999 28 24 +1 -999 -999 -999 -999 27 26 +14 -999 -999 -999 -999 27 27 +1 -999 -999 -999 -999 27 22 +1 -999 -999 -999 -999 27 39 +1 -999 -999 -999 -999 27 11 +1 -999 -999 -999 -999 27 16 +2 -999 -999 -999 -999 27 31 +1 -999 -999 -999 -999 27 18 +16 -999 -999 -999 -999 26 26 +2 -999 -999 -999 -999 26 28 +1 -999 -999 -999 -999 26 30 +1 -999 -999 -999 -999 26 42 +1 -999 -999 -999 -999 26 15 +1 -999 -999 -999 -999 26 31 +2 -999 -999 -999 -999 26 19 +1 -999 -999 -999 -999 26 18 +1 -999 -999 -999 -999 26 33 +1 -999 -999 -999 -999 26 29 +17 -999 -999 -999 -999 25 25 +1 -999 -999 -999 -999 25 19 +2 -999 -999 -999 -999 25 30 +2 -999 -999 -999 -999 25 27 +1 -999 -999 -999 -999 25 21 +2 -999 -999 -999 -999 25 23 +1 -999 -999 -999 -999 25 34 +1 -999 -999 -999 -999 25 18 +1 -999 -999 -999 -999 25 35 +17 -999 -999 -999 -999 24 24 +1 -999 -999 -999 -999 24 48 +2 -999 -999 -999 -999 24 29 +1 -999 -999 -999 -999 24 21 +2 -999 -999 -999 -999 24 33 +2 -999 -999 -999 -999 24 16 +1 -999 -999 -999 -999 24 11 +1 -999 -999 -999 -999 24 28 +1 -999 -999 -999 -999 24 26 +1 -999 -999 -999 -999 24 14 +1 -999 -999 -999 -999 24 27 +1 -999 -999 -999 -999 24 22 +1 -999 -999 -999 -999 24 13 +1 -999 -999 -999 -999 23 20 +1 -999 -999 -999 -999 23 30 +1 -999 -999 -999 -999 23 32 +1 -999 -999 -999 -999 23 46 +14 -999 -999 -999 -999 23 23 +2 -999 -999 -999 -999 23 27 +2 -999 -999 -999 -999 23 18 +1 -999 -999 -999 -999 23 26 +1 -999 -999 -999 -999 23 28 +1 -999 -999 -999 -999 23 25 +1 -999 -999 -999 -999 23 31 +24 -999 -999 -999 -999 22 22 +1 -999 -999 -999 -999 22 25 +2 -999 -999 -999 -999 22 23 +2 -999 -999 -999 -999 22 31 +1 -999 -999 -999 -999 22 30 +2 -999 -999 -999 -999 22 19 +1 -999 -999 -999 -999 22 21 +1 -999 -999 -999 -999 22 17 +1 -999 -999 -999 -999 22 27 +1 -999 -999 -999 -999 22 20 +28 -999 -999 -999 -999 21 21 +2 -999 -999 -999 -999 21 23 +1 -999 -999 -999 -999 21 18 +1 -999 -999 -999 -999 21 25 +1 -999 -999 -999 -999 21 14 +1 -999 -999 -999 -999 21 12 +2 -999 -999 -999 -999 21 15 +2 -999 -999 -999 -999 21 22 +2 -999 -999 -999 -999 21 26 +1 -999 -999 -999 -999 21 17 +1 -999 -999 -999 -999 21 27 +25 -999 -999 -999 -999 20 20 +3 -999 -999 -999 -999 20 18 +4 -999 -999 -999 -999 20 23 +1 -999 -999 -999 -999 20 24 +2 -999 -999 -999 -999 20 22 +1 -999 -999 -999 -999 20 13 +2 -999 -999 -999 -999 20 12 +1 -999 -999 -999 -999 20 28 +1 -999 -999 -999 -999 20 41 +1 -999 -999 -999 -999 20 14 +1 -999 -999 -999 -999 20 25 +38 -999 -999 -999 -999 19 19 +2 -999 -999 -999 -999 19 16 +4 -999 -999 -999 -999 19 17 +1 -999 -999 -999 -999 19 14 +2 -999 -999 -999 -999 19 22 +3 -999 -999 -999 -999 19 23 +2 -999 -999 -999 -999 19 24 +2 -999 -999 -999 -999 19 13 +1 -999 -999 -999 -999 19 15 +2 -999 -999 -999 -999 19 21 +3 -999 -999 -999 -999 19 18 +1 -999 -999 -999 -999 19 26 +1 -999 -999 -999 -999 19 9 +32 -999 -999 -999 -999 18 18 +2 -999 -999 -999 -999 18 13 +3 -999 -999 -999 -999 18 20 +3 -999 -999 -999 -999 18 19 +2 -999 -999 -999 -999 18 17 +4 -999 -999 -999 -999 18 22 +2 -999 -999 -999 -999 18 8 +3 -999 -999 -999 -999 18 15 +2 -999 -999 -999 -999 18 12 +2 -999 -999 -999 -999 18 21 +6 -999 -999 -999 -999 18 16 +1 -999 -999 -999 -999 18 27 +1 -999 -999 -999 -999 18 14 +1 -999 -999 -999 -999 18 38 +54 -999 -999 -999 -999 17 17 +8 -999 -999 -999 -999 17 19 +3 -999 -999 -999 -999 17 13 +2 -999 -999 -999 -999 17 15 +4 -999 -999 -999 -999 17 16 +2 -999 -999 -999 -999 17 14 +2 -999 -999 -999 -999 17 12 +1 -999 -999 -999 -999 17 21 +1 -999 -999 -999 -999 17 9 +1 -999 -999 -999 -999 17 11 +1 -999 -999 -999 -999 17 20 +2 -999 -999 -999 -999 17 18 +1 -999 -999 -999 -999 17 24 +1 -999 -999 -999 -999 17 26 +1 -999 -999 -999 -999 17 31 +4 -999 -999 -999 -999 16 19 +62 -999 -999 -999 -999 16 16 +4 -999 -999 -999 -999 16 20 +3 -999 -999 -999 -999 16 15 +6 -999 -999 -999 -999 16 14 +1 -999 -999 -999 -999 16 4 +2 -999 -999 -999 -999 16 10 +3 -999 -999 -999 -999 16 12 +3 -999 -999 -999 -999 16 21 +5 -999 -999 -999 -999 16 13 +1 -999 -999 -999 -999 16 8 +2 -999 -999 -999 -999 16 18 +2 -999 -999 -999 -999 16 17 +1 -999 -999 -999 -999 16 11 +1 -999 -999 -999 -999 16 22 +1 -999 -999 -999 -999 16 23 +1 -999 -999 -999 -999 16 25 +83 -999 -999 -999 -999 15 15 +6 -999 -999 -999 -999 15 17 +6 -999 -999 -999 -999 15 16 +2 -999 -999 -999 -999 15 11 +4 -999 -999 -999 -999 15 12 +7 -999 -999 -999 -999 15 13 +1 -999 -999 -999 -999 15 23 +2 -999 -999 -999 -999 15 10 +1 -999 -999 -999 -999 15 19 +2 -999 -999 -999 -999 15 9 +1 -999 -999 -999 -999 15 8 +1 -999 -999 -999 -999 15 21 +85 -999 -999 -999 -999 14 14 +8 -999 -999 -999 -999 14 12 +3 -999 -999 -999 -999 14 9 +8 -999 -999 -999 -999 14 13 +8 -999 -999 -999 -999 14 19 +7 -999 -999 -999 -999 14 11 +1 -999 -999 -999 -999 14 21 +2 -999 -999 -999 -999 14 24 +1 -999 -999 -999 -999 14 50 +1 -999 -999 -999 -999 14 20 +6 -999 -999 -999 -999 14 10 +2 -999 -999 -999 -999 14 8 +3 -999 -999 -999 -999 14 16 +7 -999 -999 -999 -999 14 15 +1 -999 -999 -999 -999 14 18 +1 -999 -999 -999 -999 14 5 +94 -999 -999 -999 -999 13 13 +5 -999 -999 -999 -999 13 10 +3 -999 -999 -999 -999 13 19 +6 -999 -999 -999 -999 13 12 +2 -999 -999 -999 -999 13 21 +1 -999 -999 -999 -999 13 6 +3 -999 -999 -999 -999 13 14 +4 -999 -999 -999 -999 13 15 +1 -999 -999 -999 -999 13 26 +2 -999 -999 -999 -999 13 18 +5 -999 -999 -999 -999 13 9 +8 -999 -999 -999 -999 13 11 +1 -999 -999 -999 -999 13 17 +1 -999 -999 -999 -999 13 16 +6 -999 -999 -999 -999 13 8 +1 -999 -999 -999 -999 13 7 +90 -999 -999 -999 -999 12 12 +5 -999 -999 -999 -999 12 11 +8 -999 -999 -999 -999 12 13 +6 -999 -999 -999 -999 12 10 +1 -999 -999 -999 -999 12 4 +4 -999 -999 -999 -999 12 14 +6 -999 -999 -999 -999 12 9 +2 -999 -999 -999 -999 12 16 +2 -999 -999 -999 -999 12 17 +2 -999 -999 -999 -999 12 7 +1 -999 -999 -999 -999 12 8 +117 -999 -999 -999 -999 11 11 +8 -999 -999 -999 -999 11 10 +7 -999 -999 -999 -999 11 8 +12 -999 -999 -999 -999 11 12 +8 -999 -999 -999 -999 11 9 +4 -999 -999 -999 -999 11 14 +1 -999 -999 -999 -999 11 17 +7 -999 -999 -999 -999 11 13 +5 -999 -999 -999 -999 11 15 +2 -999 -999 -999 -999 11 7 +1 -999 -999 -999 -999 11 21 +1 -999 -999 -999 -999 11 5 +1 -999 -999 -999 -999 11 18 +1 -999 -999 -999 -999 11 6 +2 -999 -999 -999 -999 11 19 +16 -999 -999 -999 -999 10 9 +9 -999 -999 -999 -999 10 12 +110 -999 -999 -999 -999 10 10 +11 -999 -999 -999 -999 10 11 +10 -999 -999 -999 -999 10 8 +5 -999 -999 -999 -999 10 13 +3 -999 -999 -999 -999 10 14 +3 -999 -999 -999 -999 10 15 +4 -999 -999 -999 -999 10 6 +2 -999 -999 -999 -999 10 7 +1 -999 -999 -999 -999 10 3 +1 -999 -999 -999 -999 10 4 +1 -999 -999 -999 -999 10 18 +110 -999 -999 -999 -999 9 9 +17 -999 -999 -999 -999 9 8 +21 -999 -999 -999 -999 9 10 +5 -999 -999 -999 -999 9 7 +6 -999 -999 -999 -999 9 11 +1 -999 -999 -999 -999 9 15 +2 -999 -999 -999 -999 9 12 +2 -999 -999 -999 -999 9 5 +5 -999 -999 -999 -999 9 6 +1 -999 -999 -999 -999 9 3 +3 -999 -999 -999 -999 9 14 +2 -999 -999 -999 -999 9 16 +2 -999 -999 -999 -999 9 13 +128 -999 -999 -999 -999 8 8 +20 -999 -999 -999 -999 8 9 +23 -999 -999 -999 -999 8 7 +8 -999 -999 -999 -999 8 6 +8 -999 -999 -999 -999 8 10 +4 -999 -999 -999 -999 8 13 +5 -999 -999 -999 -999 8 11 +1 -999 -999 -999 -999 8 3 +2 -999 -999 -999 -999 8 4 +2 -999 -999 -999 -999 8 16 +4 -999 -999 -999 -999 8 5 +1 -999 -999 -999 -999 8 15 +1 -999 -999 -999 -999 8 12 +1 -999 -999 -999 -999 8 19 +129 -999 -999 -999 -999 7 7 +29 -999 -999 -999 -999 7 6 +16 -999 -999 -999 -999 7 8 +10 -999 -999 -999 -999 7 9 +4 -999 -999 -999 -999 7 4 +7 -999 -999 -999 -999 7 11 +11 -999 -999 -999 -999 7 5 +2 -999 -999 -999 -999 7 19 +4 -999 -999 -999 -999 7 10 +1 -999 -999 -999 -999 7 3 +6 -999 -999 -999 -999 6 9 +147 -999 -999 -999 -999 6 6 +34 -999 -999 -999 -999 6 7 +11 -999 -999 -999 -999 6 8 +17 -999 -999 -999 -999 6 5 +8 -999 -999 -999 -999 6 4 +2 -999 -999 -999 -999 6 13 +1 -999 -999 -999 -999 6 11 +2 -999 -999 -999 -999 6 10 +1 -999 -999 -999 -999 6 12 +11 -999 -999 -999 -999 5 7 +26 -999 -999 -999 -999 5 6 +118 -999 -999 -999 -999 5 5 +40 -999 -999 -999 -999 5 4 +3 -999 -999 -999 -999 5 11 +4 -999 -999 -999 -999 5 3 +1 -999 -999 -999 -999 5 13 +7 -999 -999 -999 -999 5 8 +2 -999 -999 -999 -999 5 9 +1 -999 -999 -999 -999 5 15 +2 -999 -999 -999 -999 5 10 +13 -999 -999 -999 -999 4 6 +115 -999 -999 -999 -999 4 4 +40 -999 -999 -999 -999 4 5 +5 -999 -999 -999 -999 4 7 +16 -999 -999 -999 -999 4 3 +3 -999 -999 -999 -999 4 8 +2 -999 -999 -999 -999 4 12 +3 -999 -999 -999 -999 4 9 +3 -999 -999 -999 -999 3 7 +72 -999 -999 -999 -999 3 3 +21 -999 -999 -999 -999 3 4 +5 -999 -999 -999 -999 3 5 +1 -999 -999 -999 -999 3 20 +6 -999 -999 -999 -999 3 6 +2 -999 -999 -999 -999 3 8 +1 -999 -999 -999 -999 3 12 +1 -999 -999 -999 -999 3 13 +7 -999 -999 -999 -999 2 3 +6 -999 -999 -999 -999 2 2 +-999 -999 -999 -999 -999 -999 diff --git a/inst/extdata/Sable.spc b/inst/extdata/Sable.spc new file mode 100644 index 0000000..7cc3cba --- /dev/null +++ b/inst/extdata/Sable.spc @@ -0,0 +1,21 @@ +# reader BiasOpt SigmaOpt + 1 1 1 + 2 -1 -1 + 3 2 2 + 4 -3 -3 + 5 0 1 + 6 1 -5 + +Bias_Pars (low high init, on/off) +0.001 3 1 1 +0.001 10 1 1 +-10 1 0.01 1 +0.001 200 100 1 +0.001 3 1 1 + +Sigma_Pars (low high init, on/off) +0.001 100 1 1 +0.001 100 1 1 +-10 1 0.01 1 +0.001 100 10 1 +0.001 100 1 1 diff --git a/inst/extdata/WHS2.dat b/inst/extdata/WHS2.dat new file mode 100644 index 0000000..aba5b3e --- /dev/null +++ b/inst/extdata/WHS2.dat @@ -0,0 +1,93 @@ +Range_of_ages +0 9 + +Data_set_1 +27 +2 +0 9 5 # minus group; plus group; reference age + 1 2 3 4 5 6 +1 0 0 -999 -999 -999 -999 +112 1 1 -999 -999 -999 -999 +22 1 2 -999 -999 -999 -999 +1 1 4 -999 -999 -999 -999 +13 2 1 -999 -999 -999 -999 +689 2 2 -999 -999 -999 -999 +33 2 3 -999 -999 -999 -999 +74 3 2 -999 -999 -999 -999 +560 3 3 -999 -999 -999 -999 +27 3 4 -999 -999 -999 -999 +1 4 2 -999 -999 -999 -999 +26 4 3 -999 -999 -999 -999 +162 4 4 -999 -999 -999 -999 +13 4 5 -999 -999 -999 -999 +13 5 4 -999 -999 -999 -999 +74 5 5 -999 -999 -999 -999 +5 5 6 -999 -999 -999 -999 +1 6 4 -999 -999 -999 -999 +1 6 5 -999 -999 -999 -999 +32 6 6 -999 -999 -999 -999 +2 6 7 -999 -999 -999 -999 +1 7 6 -999 -999 -999 -999 +12 7 7 -999 -999 -999 -999 +1 7 8 -999 -999 -999 -999 +1 8 7 -999 -999 -999 -999 +4 8 8 -999 -999 -999 -999 +1 9 9 -999 -999 -999 -999 + + +Data_set_2 +23 +2 +0 9 5 # minus group; plus group; reference age + 3 4 1 2 5 6 +4 0 0 -999 -999 -999 -999 +1 1 0 -999 -999 -999 -999 +25 1 1 -999 -999 -999 -999 +2 1 2 -999 -999 -999 -999 +7 2 1 -999 -999 -999 -999 +108 2 2 -999 -999 -999 -999 +10 2 3 -999 -999 -999 -999 +15 3 2 -999 -999 -999 -999 +70 3 3 -999 -999 -999 -999 +2 3 4 -999 -999 -999 -999 +5 4 3 -999 -999 -999 -999 +46 4 4 -999 -999 -999 -999 +2 4 5 -999 -999 -999 -999 +3 5 4 -999 -999 -999 -999 +29 5 5 -999 -999 -999 -999 +1 5 6 -999 -999 -999 -999 +1 6 5 -999 -999 -999 -999 +15 6 6 -999 -999 -999 -999 +3 6 7 -999 -999 -999 -999 +1 7 6 -999 -999 -999 -999 +13 7 7 -999 -999 -999 -999 +1 8 7 -999 -999 -999 -999 +2 8 8 -999 -999 -999 -999 + +Data_set_3 +22 +2 +0 9 5 # minus group; plus group; reference age + 5 6 1 2 3 4 + 11 1 1 -999 -999 -999 -999 + 2 1 2 -999 -999 -999 -999 + 1 1 3 -999 -999 -999 -999 + 8 2 1 -999 -999 -999 -999 + 122 2 2 -999 -999 -999 -999 + 5 2 3 -999 -999 -999 -999 + 10 3 2 -999 -999 -999 -999 + 115 3 3 -999 -999 -999 -999 + 9 3 4 -999 -999 -999 -999 + 3 3 5 -999 -999 -999 -999 + 8 4 3 -999 -999 -999 -999 + 41 4 4 -999 -999 -999 -999 + 1 4 5 -999 -999 -999 -999 + 1 4 6 -999 -999 -999 -999 + 5 5 4 -999 -999 -999 -999 + 25 5 5 -999 -999 -999 -999 + 1 5 6 -999 -999 -999 -999 + 1 6 5 -999 -999 -999 -999 + 13 6 6 -999 -999 -999 -999 + 1 6 7 -999 -999 -999 -999 + 1 6 8 -999 -999 -999 -999 + 1 8 7 -999 -999 -999 -999 diff --git a/inst/extdata/WHS2.spc b/inst/extdata/WHS2.spc new file mode 100644 index 0000000..2efbfaf --- /dev/null +++ b/inst/extdata/WHS2.spc @@ -0,0 +1,25 @@ +# reader BiasOpt SigmaOpt + 1 0 5 + 2 0 -1 + 3 0 -1 + 4 0 -1 + 5 0 -1 + 6 0 -1 + +# Spline specifications +5 +0 3 5 7 9 + +# Linear specifications +5 +0 3 5 7 9 + + +Bias_Pars (low high init, on/off) + +Sigma_Pars (low high init, on/off) +-10 40 -2.3025851 1 +-10 40 -1.2039728 1 +-10 40 -0.6931472 1 +-10 40 -0.1053605 1 +-10 40 0.9 1 diff --git a/inst/extdata/agemat.dat b/inst/extdata/agemat.dat deleted file mode 100644 index 84ccce0..0000000 --- a/inst/extdata/agemat.dat +++ /dev/null @@ -1,2548 +0,0 @@ -# Maximum number of readers -6 -# Number of data sets -1 -# Number of points per data set -2494 -# Readers per data set -6 -# Which readers per data set -1 2 3 4 5 6 -# Minimum age -1 -# Maximum age -100 -# Reference age -4 -# Minus groups -1 -# Plus groups -50 -# Option for bias -1 -1 2 -3 0 1 -# Option for standard deviation -1 -1 2 -3 1 -5 -# Option for effective sample size -0 -# Use Par File (1=Yes) -0 - -# Number and location of knots for any splines - -# Min, Max, Init, Phase for Bias -0.001 3 1 2 -0.001 10 1 2 --10 1 0.01 2 -0.001 200 100 2 -0.001 3 1 2 - -# Min, Max, Init, Phase for Sigma -0.001 100 1 2 -0.001 100 1 2 --10 1 0.01 2 -0.001 100 10 2 -0.001 100 1 2 - -# Min, Max, Phase for Probs --20 20 2 - -# Min, Max, Init, Phase for slopes --10 0 0 1 - -# Data set -1 65 66 -999 -999 -999 -999 -1 61 66 -999 -999 -999 -999 -1 72 65 -999 -999 -999 -999 -1 68 63 -999 -999 -999 -999 -1 58 61 -999 -999 -999 -999 -1 64 60 -999 -999 -999 -999 -1 59 60 -999 -999 -999 -999 -1 47 59 -999 -999 -999 -999 -1 51 58 -999 -999 -999 -999 -1 66 58 -999 -999 -999 -999 -1 64 57 -999 -999 -999 -999 -1 65 57 -999 -999 -999 -999 -1 57 57 -999 -999 -999 -999 -1 52 56 -999 -999 -999 -999 -1 45 55 -999 -999 -999 -999 -1 48 55 -999 -999 -999 -999 -1 60 54 -999 -999 -999 -999 -1 52 54 -999 -999 -999 -999 -1 58 53 -999 -999 -999 -999 -1 54 53 -999 -999 -999 -999 -1 42 53 -999 -999 -999 -999 -1 55 53 -999 -999 -999 -999 -1 48 52 -999 -999 -999 -999 -1 40 51 -999 -999 -999 -999 -3 49 51 -999 -999 -999 -999 -1 39 51 -999 -999 -999 -999 -1 43 51 -999 -999 -999 -999 -1 57 51 -999 -999 -999 -999 -1 43 50 -999 -999 -999 -999 -1 49 50 -999 -999 -999 -999 -1 48 50 -999 -999 -999 -999 -1 46 49 -999 -999 -999 -999 -1 53 49 -999 -999 -999 -999 -1 49 49 -999 -999 -999 -999 -1 41 49 -999 -999 -999 -999 -1 26 49 -999 -999 -999 -999 -1 20 49 -999 -999 -999 -999 -1 47 49 -999 -999 -999 -999 -1 51 49 -999 -999 -999 -999 -1 34 48 -999 -999 -999 -999 -2 37 48 -999 -999 -999 -999 -1 53 48 -999 -999 -999 -999 -1 25 48 -999 -999 -999 -999 -1 64 48 -999 -999 -999 -999 -1 42 48 -999 -999 -999 -999 -1 63 48 -999 -999 -999 -999 -2 48 48 -999 -999 -999 -999 -1 52 48 -999 -999 -999 -999 -1 50 48 -999 -999 -999 -999 -1 43 47 -999 -999 -999 -999 -2 40 47 -999 -999 -999 -999 -1 50 47 -999 -999 -999 -999 -2 48 47 -999 -999 -999 -999 -2 54 47 -999 -999 -999 -999 -1 44 47 -999 -999 -999 -999 -2 39 47 -999 -999 -999 -999 -2 51 47 -999 -999 -999 -999 -1 47 47 -999 -999 -999 -999 -1 32 47 -999 -999 -999 -999 -2 46 46 -999 -999 -999 -999 -1 47 46 -999 -999 -999 -999 -1 52 46 -999 -999 -999 -999 -1 37 46 -999 -999 -999 -999 -1 45 46 -999 -999 -999 -999 -1 48 46 -999 -999 -999 -999 -1 39 46 -999 -999 -999 -999 -1 49 45 -999 -999 -999 -999 -1 43 45 -999 -999 -999 -999 -1 44 45 -999 -999 -999 -999 -1 51 45 -999 -999 -999 -999 -1 39 44 -999 -999 -999 -999 -2 46 44 -999 -999 -999 -999 -1 36 44 -999 -999 -999 -999 -2 43 44 -999 -999 -999 -999 -1 38 44 -999 -999 -999 -999 -1 27 44 -999 -999 -999 -999 -1 47 44 -999 -999 -999 -999 -1 54 44 -999 -999 -999 -999 -1 50 44 -999 -999 -999 -999 -1 31 43 -999 -999 -999 -999 -1 43 43 -999 -999 -999 -999 -1 50 43 -999 -999 -999 -999 -1 46 43 -999 -999 -999 -999 -1 59 43 -999 -999 -999 -999 -1 47 43 -999 -999 -999 -999 -1 42 43 -999 -999 -999 -999 -2 43 42 -999 -999 -999 -999 -1 42 42 -999 -999 -999 -999 -1 41 42 -999 -999 -999 -999 -2 37 42 -999 -999 -999 -999 -1 39 42 -999 -999 -999 -999 -1 38 42 -999 -999 -999 -999 -1 32 42 -999 -999 -999 -999 -1 47 42 -999 -999 -999 -999 -1 44 42 -999 -999 -999 -999 -2 37 41 -999 -999 -999 -999 -2 39 41 -999 -999 -999 -999 -2 47 41 -999 -999 -999 -999 -1 22 41 -999 -999 -999 -999 -1 34 41 -999 -999 -999 -999 -1 45 41 -999 -999 -999 -999 -1 31 41 -999 -999 -999 -999 -1 44 41 -999 -999 -999 -999 -2 40 40 -999 -999 -999 -999 -1 33 40 -999 -999 -999 -999 -1 34 40 -999 -999 -999 -999 -1 42 40 -999 -999 -999 -999 -1 31 40 -999 -999 -999 -999 -1 45 40 -999 -999 -999 -999 -1 41 40 -999 -999 -999 -999 -1 36 40 -999 -999 -999 -999 -2 24 40 -999 -999 -999 -999 -1 43 40 -999 -999 -999 -999 -1 37 40 -999 -999 -999 -999 -1 28 40 -999 -999 -999 -999 -1 29 40 -999 -999 -999 -999 -2 36 39 -999 -999 -999 -999 -4 32 39 -999 -999 -999 -999 -2 31 39 -999 -999 -999 -999 -2 43 39 -999 -999 -999 -999 -1 33 39 -999 -999 -999 -999 -3 37 39 -999 -999 -999 -999 -1 29 39 -999 -999 -999 -999 -1 38 39 -999 -999 -999 -999 -1 35 39 -999 -999 -999 -999 -1 27 39 -999 -999 -999 -999 -1 45 39 -999 -999 -999 -999 -1 41 39 -999 -999 -999 -999 -1 30 38 -999 -999 -999 -999 -1 29 38 -999 -999 -999 -999 -2 26 38 -999 -999 -999 -999 -1 35 38 -999 -999 -999 -999 -1 41 38 -999 -999 -999 -999 -1 27 38 -999 -999 -999 -999 -1 38 38 -999 -999 -999 -999 -1 45 38 -999 -999 -999 -999 -1 31 38 -999 -999 -999 -999 -1 34 38 -999 -999 -999 -999 -1 43 38 -999 -999 -999 -999 -3 32 37 -999 -999 -999 -999 -1 30 37 -999 -999 -999 -999 -1 26 37 -999 -999 -999 -999 -3 34 37 -999 -999 -999 -999 -2 37 37 -999 -999 -999 -999 -1 48 37 -999 -999 -999 -999 -2 39 37 -999 -999 -999 -999 -2 33 37 -999 -999 -999 -999 -1 44 37 -999 -999 -999 -999 -1 35 37 -999 -999 -999 -999 -1 40 37 -999 -999 -999 -999 -1 18 37 -999 -999 -999 -999 -1 42 37 -999 -999 -999 -999 -1 46 37 -999 -999 -999 -999 -3 32 36 -999 -999 -999 -999 -1 35 36 -999 -999 -999 -999 -2 31 36 -999 -999 -999 -999 -1 30 36 -999 -999 -999 -999 -1 25 36 -999 -999 -999 -999 -1 40 36 -999 -999 -999 -999 -2 43 36 -999 -999 -999 -999 -2 36 36 -999 -999 -999 -999 -1 33 36 -999 -999 -999 -999 -1 27 36 -999 -999 -999 -999 -1 20 36 -999 -999 -999 -999 -2 39 36 -999 -999 -999 -999 -1 18 36 -999 -999 -999 -999 -1 28 36 -999 -999 -999 -999 -3 45 36 -999 -999 -999 -999 -1 38 36 -999 -999 -999 -999 -1 46 36 -999 -999 -999 -999 -1 49 36 -999 -999 -999 -999 -2 36 35 -999 -999 -999 -999 -1 43 35 -999 -999 -999 -999 -1 37 35 -999 -999 -999 -999 -1 29 35 -999 -999 -999 -999 -2 22 35 -999 -999 -999 -999 -1 30 35 -999 -999 -999 -999 -3 35 35 -999 -999 -999 -999 -1 42 35 -999 -999 -999 -999 -1 20 35 -999 -999 -999 -999 -1 38 35 -999 -999 -999 -999 -1 33 35 -999 -999 -999 -999 -1 31 35 -999 -999 -999 -999 -2 28 35 -999 -999 -999 -999 -1 39 35 -999 -999 -999 -999 -2 29 34 -999 -999 -999 -999 -2 40 34 -999 -999 -999 -999 -2 28 34 -999 -999 -999 -999 -2 35 34 -999 -999 -999 -999 -1 45 34 -999 -999 -999 -999 -1 23 34 -999 -999 -999 -999 -1 22 34 -999 -999 -999 -999 -1 19 34 -999 -999 -999 -999 -1 36 34 -999 -999 -999 -999 -2 31 34 -999 -999 -999 -999 -1 17 34 -999 -999 -999 -999 -1 38 34 -999 -999 -999 -999 -1 51 34 -999 -999 -999 -999 -1 18 34 -999 -999 -999 -999 -1 33 34 -999 -999 -999 -999 -1 30 34 -999 -999 -999 -999 -3 34 33 -999 -999 -999 -999 -2 36 33 -999 -999 -999 -999 -1 33 33 -999 -999 -999 -999 -4 31 33 -999 -999 -999 -999 -1 41 33 -999 -999 -999 -999 -1 35 33 -999 -999 -999 -999 -1 16 33 -999 -999 -999 -999 -1 40 33 -999 -999 -999 -999 -4 28 33 -999 -999 -999 -999 -1 38 33 -999 -999 -999 -999 -1 52 33 -999 -999 -999 -999 -1 17 33 -999 -999 -999 -999 -1 21 33 -999 -999 -999 -999 -1 37 33 -999 -999 -999 -999 -1 42 33 -999 -999 -999 -999 -1 39 33 -999 -999 -999 -999 -1 20 33 -999 -999 -999 -999 -2 38 32 -999 -999 -999 -999 -1 39 32 -999 -999 -999 -999 -2 29 32 -999 -999 -999 -999 -3 34 32 -999 -999 -999 -999 -5 32 32 -999 -999 -999 -999 -3 37 32 -999 -999 -999 -999 -3 35 32 -999 -999 -999 -999 -2 31 32 -999 -999 -999 -999 -2 16 32 -999 -999 -999 -999 -1 13 32 -999 -999 -999 -999 -1 44 32 -999 -999 -999 -999 -2 22 32 -999 -999 -999 -999 -1 30 32 -999 -999 -999 -999 -1 21 32 -999 -999 -999 -999 -1 17 32 -999 -999 -999 -999 -2 33 32 -999 -999 -999 -999 -1 41 32 -999 -999 -999 -999 -1 14 32 -999 -999 -999 -999 -1 46 32 -999 -999 -999 -999 -1 28 32 -999 -999 -999 -999 -1 42 32 -999 -999 -999 -999 -1 36 32 -999 -999 -999 -999 -3 29 31 -999 -999 -999 -999 -4 30 31 -999 -999 -999 -999 -4 31 31 -999 -999 -999 -999 -4 33 31 -999 -999 -999 -999 -4 28 31 -999 -999 -999 -999 -2 24 31 -999 -999 -999 -999 -2 32 31 -999 -999 -999 -999 -2 22 31 -999 -999 -999 -999 -2 35 31 -999 -999 -999 -999 -2 27 31 -999 -999 -999 -999 -2 26 31 -999 -999 -999 -999 -1 11 31 -999 -999 -999 -999 -2 21 31 -999 -999 -999 -999 -1 50 31 -999 -999 -999 -999 -1 46 31 -999 -999 -999 -999 -5 32 30 -999 -999 -999 -999 -1 29 30 -999 -999 -999 -999 -1 24 30 -999 -999 -999 -999 -2 25 30 -999 -999 -999 -999 -1 23 30 -999 -999 -999 -999 -3 27 30 -999 -999 -999 -999 -2 12 30 -999 -999 -999 -999 -3 26 30 -999 -999 -999 -999 -1 37 30 -999 -999 -999 -999 -1 33 30 -999 -999 -999 -999 -1 39 30 -999 -999 -999 -999 -1 30 30 -999 -999 -999 -999 -1 28 30 -999 -999 -999 -999 -1 22 30 -999 -999 -999 -999 -2 31 30 -999 -999 -999 -999 -1 18 30 -999 -999 -999 -999 -2 31 29 -999 -999 -999 -999 -2 35 29 -999 -999 -999 -999 -3 28 29 -999 -999 -999 -999 -4 27 29 -999 -999 -999 -999 -2 34 29 -999 -999 -999 -999 -1 29 29 -999 -999 -999 -999 -1 40 29 -999 -999 -999 -999 -1 32 29 -999 -999 -999 -999 -1 9 29 -999 -999 -999 -999 -1 53 29 -999 -999 -999 -999 -1 25 29 -999 -999 -999 -999 -2 36 29 -999 -999 -999 -999 -1 16 29 -999 -999 -999 -999 -1 23 29 -999 -999 -999 -999 -3 30 29 -999 -999 -999 -999 -1 33 29 -999 -999 -999 -999 -1 24 29 -999 -999 -999 -999 -2 26 29 -999 -999 -999 -999 -1 45 29 -999 -999 -999 -999 -1 39 29 -999 -999 -999 -999 -3 19 28 -999 -999 -999 -999 -1 36 28 -999 -999 -999 -999 -1 31 28 -999 -999 -999 -999 -2 23 28 -999 -999 -999 -999 -2 28 28 -999 -999 -999 -999 -5 29 28 -999 -999 -999 -999 -1 34 28 -999 -999 -999 -999 -1 40 28 -999 -999 -999 -999 -1 33 28 -999 -999 -999 -999 -2 15 28 -999 -999 -999 -999 -1 38 28 -999 -999 -999 -999 -4 20 28 -999 -999 -999 -999 -2 22 28 -999 -999 -999 -999 -1 12 28 -999 -999 -999 -999 -2 26 28 -999 -999 -999 -999 -5 25 28 -999 -999 -999 -999 -2 18 28 -999 -999 -999 -999 -2 27 28 -999 -999 -999 -999 -1 17 28 -999 -999 -999 -999 -1 24 28 -999 -999 -999 -999 -2 30 28 -999 -999 -999 -999 -1 39 28 -999 -999 -999 -999 -1 36 27 -999 -999 -999 -999 -2 31 27 -999 -999 -999 -999 -2 33 27 -999 -999 -999 -999 -4 25 27 -999 -999 -999 -999 -5 29 27 -999 -999 -999 -999 -2 17 27 -999 -999 -999 -999 -4 27 27 -999 -999 -999 -999 -1 24 27 -999 -999 -999 -999 -2 21 27 -999 -999 -999 -999 -2 22 27 -999 -999 -999 -999 -3 32 27 -999 -999 -999 -999 -2 20 27 -999 -999 -999 -999 -2 28 27 -999 -999 -999 -999 -2 30 27 -999 -999 -999 -999 -1 12 27 -999 -999 -999 -999 -1 19 27 -999 -999 -999 -999 -1 23 27 -999 -999 -999 -999 -2 26 27 -999 -999 -999 -999 -2 24 26 -999 -999 -999 -999 -2 34 26 -999 -999 -999 -999 -1 8 26 -999 -999 -999 -999 -4 23 26 -999 -999 -999 -999 -6 28 26 -999 -999 -999 -999 -4 29 26 -999 -999 -999 -999 -3 27 26 -999 -999 -999 -999 -2 13 26 -999 -999 -999 -999 -1 21 26 -999 -999 -999 -999 -1 15 26 -999 -999 -999 -999 -3 25 26 -999 -999 -999 -999 -1 37 26 -999 -999 -999 -999 -2 19 26 -999 -999 -999 -999 -3 22 26 -999 -999 -999 -999 -3 26 26 -999 -999 -999 -999 -1 14 26 -999 -999 -999 -999 -1 36 26 -999 -999 -999 -999 -2 30 26 -999 -999 -999 -999 -1 38 26 -999 -999 -999 -999 -1 61 26 -999 -999 -999 -999 -1 31 26 -999 -999 -999 -999 -1 32 26 -999 -999 -999 -999 -1 18 26 -999 -999 -999 -999 -1 33 26 -999 -999 -999 -999 -4 21 25 -999 -999 -999 -999 -2 30 25 -999 -999 -999 -999 -6 25 25 -999 -999 -999 -999 -5 26 25 -999 -999 -999 -999 -3 27 25 -999 -999 -999 -999 -2 37 25 -999 -999 -999 -999 -5 22 25 -999 -999 -999 -999 -3 23 25 -999 -999 -999 -999 -3 19 25 -999 -999 -999 -999 -3 20 25 -999 -999 -999 -999 -1 14 25 -999 -999 -999 -999 -2 31 25 -999 -999 -999 -999 -1 18 25 -999 -999 -999 -999 -3 24 25 -999 -999 -999 -999 -1 38 25 -999 -999 -999 -999 -1 49 25 -999 -999 -999 -999 -2 29 25 -999 -999 -999 -999 -3 28 25 -999 -999 -999 -999 -1 35 25 -999 -999 -999 -999 -1 39 25 -999 -999 -999 -999 -1 36 25 -999 -999 -999 -999 -2 32 24 -999 -999 -999 -999 -2 27 24 -999 -999 -999 -999 -14 24 24 -999 -999 -999 -999 -5 25 24 -999 -999 -999 -999 -1 34 24 -999 -999 -999 -999 -1 33 24 -999 -999 -999 -999 -2 35 24 -999 -999 -999 -999 -1 23 24 -999 -999 -999 -999 -4 18 24 -999 -999 -999 -999 -1 11 24 -999 -999 -999 -999 -3 28 24 -999 -999 -999 -999 -4 20 24 -999 -999 -999 -999 -2 17 24 -999 -999 -999 -999 -4 22 24 -999 -999 -999 -999 -2 29 24 -999 -999 -999 -999 -4 26 24 -999 -999 -999 -999 -2 19 24 -999 -999 -999 -999 -3 15 24 -999 -999 -999 -999 -1 16 24 -999 -999 -999 -999 -1 30 24 -999 -999 -999 -999 -1 36 24 -999 -999 -999 -999 -1 21 24 -999 -999 -999 -999 -1 14 24 -999 -999 -999 -999 -6 20 23 -999 -999 -999 -999 -6 23 23 -999 -999 -999 -999 -4 19 23 -999 -999 -999 -999 -8 21 23 -999 -999 -999 -999 -4 18 23 -999 -999 -999 -999 -3 22 23 -999 -999 -999 -999 -4 26 23 -999 -999 -999 -999 -2 28 23 -999 -999 -999 -999 -1 17 23 -999 -999 -999 -999 -1 14 23 -999 -999 -999 -999 -1 31 23 -999 -999 -999 -999 -1 42 23 -999 -999 -999 -999 -1 34 23 -999 -999 -999 -999 -2 24 23 -999 -999 -999 -999 -1 27 23 -999 -999 -999 -999 -2 13 23 -999 -999 -999 -999 -1 43 23 -999 -999 -999 -999 -1 29 23 -999 -999 -999 -999 -2 25 23 -999 -999 -999 -999 -5 21 22 -999 -999 -999 -999 -12 20 22 -999 -999 -999 -999 -6 18 22 -999 -999 -999 -999 -4 26 22 -999 -999 -999 -999 -5 17 22 -999 -999 -999 -999 -8 19 22 -999 -999 -999 -999 -2 16 22 -999 -999 -999 -999 -3 25 22 -999 -999 -999 -999 -1 34 22 -999 -999 -999 -999 -4 23 22 -999 -999 -999 -999 -1 30 22 -999 -999 -999 -999 -8 24 22 -999 -999 -999 -999 -2 15 22 -999 -999 -999 -999 -2 13 22 -999 -999 -999 -999 -2 31 22 -999 -999 -999 -999 -3 28 22 -999 -999 -999 -999 -1 36 22 -999 -999 -999 -999 -1 10 22 -999 -999 -999 -999 -9 22 22 -999 -999 -999 -999 -1 33 22 -999 -999 -999 -999 -2 14 22 -999 -999 -999 -999 -3 16 21 -999 -999 -999 -999 -6 20 21 -999 -999 -999 -999 -5 25 21 -999 -999 -999 -999 -5 17 21 -999 -999 -999 -999 -11 18 21 -999 -999 -999 -999 -6 14 21 -999 -999 -999 -999 -1 12 21 -999 -999 -999 -999 -7 22 21 -999 -999 -999 -999 -5 15 21 -999 -999 -999 -999 -2 29 21 -999 -999 -999 -999 -1 40 21 -999 -999 -999 -999 -12 21 21 -999 -999 -999 -999 -9 23 21 -999 -999 -999 -999 -13 19 21 -999 -999 -999 -999 -1 26 21 -999 -999 -999 -999 -1 30 21 -999 -999 -999 -999 -1 36 21 -999 -999 -999 -999 -1 28 21 -999 -999 -999 -999 -2 31 21 -999 -999 -999 -999 -1 11 21 -999 -999 -999 -999 -1 24 21 -999 -999 -999 -999 -1 27 21 -999 -999 -999 -999 -1 10 21 -999 -999 -999 -999 -9 18 20 -999 -999 -999 -999 -6 16 20 -999 -999 -999 -999 -5 17 20 -999 -999 -999 -999 -1 28 20 -999 -999 -999 -999 -14 20 20 -999 -999 -999 -999 -6 22 20 -999 -999 -999 -999 -2 8 20 -999 -999 -999 -999 -10 19 20 -999 -999 -999 -999 -8 21 20 -999 -999 -999 -999 -2 9 20 -999 -999 -999 -999 -3 14 20 -999 -999 -999 -999 -3 25 20 -999 -999 -999 -999 -5 24 20 -999 -999 -999 -999 -4 27 20 -999 -999 -999 -999 -1 15 20 -999 -999 -999 -999 -8 23 20 -999 -999 -999 -999 -2 26 20 -999 -999 -999 -999 -2 11 20 -999 -999 -999 -999 -1 12 20 -999 -999 -999 -999 -1 35 20 -999 -999 -999 -999 -2 13 20 -999 -999 -999 -999 -18 20 19 -999 -999 -999 -999 -12 18 19 -999 -999 -999 -999 -3 25 19 -999 -999 -999 -999 -8 16 19 -999 -999 -999 -999 -4 14 19 -999 -999 -999 -999 -8 15 19 -999 -999 -999 -999 -1 12 19 -999 -999 -999 -999 -6 13 19 -999 -999 -999 -999 -10 19 19 -999 -999 -999 -999 -9 17 19 -999 -999 -999 -999 -3 11 19 -999 -999 -999 -999 -4 22 19 -999 -999 -999 -999 -1 29 19 -999 -999 -999 -999 -2 24 19 -999 -999 -999 -999 -3 21 19 -999 -999 -999 -999 -1 9 19 -999 -999 -999 -999 -2 26 19 -999 -999 -999 -999 -2 27 19 -999 -999 -999 -999 -1 23 19 -999 -999 -999 -999 -1 8 19 -999 -999 -999 -999 -21 17 18 -999 -999 -999 -999 -11 19 18 -999 -999 -999 -999 -5 15 18 -999 -999 -999 -999 -4 23 18 -999 -999 -999 -999 -15 16 18 -999 -999 -999 -999 -4 9 18 -999 -999 -999 -999 -9 14 18 -999 -999 -999 -999 -13 18 18 -999 -999 -999 -999 -6 20 18 -999 -999 -999 -999 -11 13 18 -999 -999 -999 -999 -2 11 18 -999 -999 -999 -999 -5 12 18 -999 -999 -999 -999 -1 8 18 -999 -999 -999 -999 -7 21 18 -999 -999 -999 -999 -4 22 18 -999 -999 -999 -999 -1 29 18 -999 -999 -999 -999 -1 24 18 -999 -999 -999 -999 -1 25 18 -999 -999 -999 -999 -2 7 18 -999 -999 -999 -999 -1 36 18 -999 -999 -999 -999 -1 27 18 -999 -999 -999 -999 -3 10 18 -999 -999 -999 -999 -1 28 18 -999 -999 -999 -999 -1 40 18 -999 -999 -999 -999 -11 19 17 -999 -999 -999 -999 -21 16 17 -999 -999 -999 -999 -3 9 17 -999 -999 -999 -999 -10 15 17 -999 -999 -999 -999 -18 17 17 -999 -999 -999 -999 -1 39 17 -999 -999 -999 -999 -8 21 17 -999 -999 -999 -999 -10 14 17 -999 -999 -999 -999 -6 13 17 -999 -999 -999 -999 -16 18 17 -999 -999 -999 -999 -5 8 17 -999 -999 -999 -999 -7 12 17 -999 -999 -999 -999 -3 11 17 -999 -999 -999 -999 -4 24 17 -999 -999 -999 -999 -8 20 17 -999 -999 -999 -999 -2 28 17 -999 -999 -999 -999 -6 10 17 -999 -999 -999 -999 -5 22 17 -999 -999 -999 -999 -1 26 17 -999 -999 -999 -999 -1 23 17 -999 -999 -999 -999 -1 7 17 -999 -999 -999 -999 -1 30 17 -999 -999 -999 -999 -1 25 17 -999 -999 -999 -999 -10 19 16 -999 -999 -999 -999 -26 15 16 -999 -999 -999 -999 -26 17 16 -999 -999 -999 -999 -29 16 16 -999 -999 -999 -999 -10 11 16 -999 -999 -999 -999 -10 20 16 -999 -999 -999 -999 -14 14 16 -999 -999 -999 -999 -1 25 16 -999 -999 -999 -999 -14 18 16 -999 -999 -999 -999 -15 13 16 -999 -999 -999 -999 -8 12 16 -999 -999 -999 -999 -2 38 16 -999 -999 -999 -999 -3 10 16 -999 -999 -999 -999 -6 21 16 -999 -999 -999 -999 -4 9 16 -999 -999 -999 -999 -1 30 16 -999 -999 -999 -999 -3 24 16 -999 -999 -999 -999 -2 22 16 -999 -999 -999 -999 -1 7 16 -999 -999 -999 -999 -3 8 16 -999 -999 -999 -999 -2 23 16 -999 -999 -999 -999 -1 27 16 -999 -999 -999 -999 -12 19 15 -999 -999 -999 -999 -12 18 15 -999 -999 -999 -999 -30 15 15 -999 -999 -999 -999 -25 16 15 -999 -999 -999 -999 -19 13 15 -999 -999 -999 -999 -4 9 15 -999 -999 -999 -999 -1 26 15 -999 -999 -999 -999 -4 20 15 -999 -999 -999 -999 -10 17 15 -999 -999 -999 -999 -1 25 15 -999 -999 -999 -999 -7 11 15 -999 -999 -999 -999 -1 7 15 -999 -999 -999 -999 -16 14 15 -999 -999 -999 -999 -2 40 15 -999 -999 -999 -999 -10 12 15 -999 -999 -999 -999 -1 32 15 -999 -999 -999 -999 -4 22 15 -999 -999 -999 -999 -2 10 15 -999 -999 -999 -999 -1 23 15 -999 -999 -999 -999 -3 28 15 -999 -999 -999 -999 -1 24 15 -999 -999 -999 -999 -24 15 14 -999 -999 -999 -999 -20 16 14 -999 -999 -999 -999 -15 11 14 -999 -999 -999 -999 -8 17 14 -999 -999 -999 -999 -1 32 14 -999 -999 -999 -999 -17 13 14 -999 -999 -999 -999 -33 14 14 -999 -999 -999 -999 -24 12 14 -999 -999 -999 -999 -7 19 14 -999 -999 -999 -999 -8 10 14 -999 -999 -999 -999 -5 18 14 -999 -999 -999 -999 -3 20 14 -999 -999 -999 -999 -1 25 14 -999 -999 -999 -999 -5 9 14 -999 -999 -999 -999 -1 24 14 -999 -999 -999 -999 -1 6 14 -999 -999 -999 -999 -2 8 14 -999 -999 -999 -999 -1 28 14 -999 -999 -999 -999 -1 22 14 -999 -999 -999 -999 -39 14 13 -999 -999 -999 -999 -1 21 13 -999 -999 -999 -999 -4 20 13 -999 -999 -999 -999 -47 13 13 -999 -999 -999 -999 -18 10 13 -999 -999 -999 -999 -5 7 13 -999 -999 -999 -999 -24 12 13 -999 -999 -999 -999 -10 17 13 -999 -999 -999 -999 -21 15 13 -999 -999 -999 -999 -25 11 13 -999 -999 -999 -999 -14 9 13 -999 -999 -999 -999 -8 16 13 -999 -999 -999 -999 -2 19 13 -999 -999 -999 -999 -5 8 13 -999 -999 -999 -999 -4 18 13 -999 -999 -999 -999 -1 25 13 -999 -999 -999 -999 -1 31 13 -999 -999 -999 -999 -6 17 12 -999 -999 -999 -999 -52 12 12 -999 -999 -999 -999 -29 13 12 -999 -999 -999 -999 -13 15 12 -999 -999 -999 -999 -20 14 12 -999 -999 -999 -999 -33 10 12 -999 -999 -999 -999 -49 11 12 -999 -999 -999 -999 -11 8 12 -999 -999 -999 -999 -3 21 12 -999 -999 -999 -999 -28 9 12 -999 -999 -999 -999 -13 7 12 -999 -999 -999 -999 -3 24 12 -999 -999 -999 -999 -1 5 12 -999 -999 -999 -999 -3 16 12 -999 -999 -999 -999 -3 6 12 -999 -999 -999 -999 -1 19 12 -999 -999 -999 -999 -23 13 11 -999 -999 -999 -999 -61 12 11 -999 -999 -999 -999 -16 14 11 -999 -999 -999 -999 -69 11 11 -999 -999 -999 -999 -41 9 11 -999 -999 -999 -999 -69 10 11 -999 -999 -999 -999 -34 8 11 -999 -999 -999 -999 -3 19 11 -999 -999 -999 -999 -8 7 11 -999 -999 -999 -999 -6 17 11 -999 -999 -999 -999 -4 16 11 -999 -999 -999 -999 -3 15 11 -999 -999 -999 -999 -3 6 11 -999 -999 -999 -999 -3 18 11 -999 -999 -999 -999 -2 5 11 -999 -999 -999 -999 -4 17 10 -999 -999 -999 -999 -1 22 10 -999 -999 -999 -999 -15 14 10 -999 -999 -999 -999 -95 9 10 -999 -999 -999 -999 -63 8 10 -999 -999 -999 -999 -4 16 10 -999 -999 -999 -999 -18 13 10 -999 -999 -999 -999 -1 20 10 -999 -999 -999 -999 -108 10 10 -999 -999 -999 -999 -36 12 10 -999 -999 -999 -999 -7 15 10 -999 -999 -999 -999 -1 21 10 -999 -999 -999 -999 -66 11 10 -999 -999 -999 -999 -35 7 10 -999 -999 -999 -999 -14 6 10 -999 -999 -999 -999 -4 18 10 -999 -999 -999 -999 -1 5 10 -999 -999 -999 -999 -1 26 10 -999 -999 -999 -999 -26 12 9 -999 -999 -999 -999 -92 10 9 -999 -999 -999 -999 -23 13 9 -999 -999 -999 -999 -1 21 9 -999 -999 -999 -999 -167 8 9 -999 -999 -999 -999 -83 7 9 -999 -999 -999 -999 -244 9 9 -999 -999 -999 -999 -6 15 9 -999 -999 -999 -999 -21 6 9 -999 -999 -999 -999 -8 5 9 -999 -999 -999 -999 -60 11 9 -999 -999 -999 -999 -3 16 9 -999 -999 -999 -999 -11 14 9 -999 -999 -999 -999 -1 17 9 -999 -999 -999 -999 -1 4 9 -999 -999 -999 -999 -5 15 8 -999 -999 -999 -999 -23 11 8 -999 -999 -999 -999 -146 9 8 -999 -999 -999 -999 -325 8 8 -999 -999 -999 -999 -8 13 8 -999 -999 -999 -999 -1 20 8 -999 -999 -999 -999 -85 6 8 -999 -999 -999 -999 -193 7 8 -999 -999 -999 -999 -31 5 8 -999 -999 -999 -999 -2 14 8 -999 -999 -999 -999 -50 10 8 -999 -999 -999 -999 -14 12 8 -999 -999 -999 -999 -1 19 8 -999 -999 -999 -999 -2 16 8 -999 -999 -999 -999 -1 21 8 -999 -999 -999 -999 -4 17 8 -999 -999 -999 -999 -2 4 8 -999 -999 -999 -999 -72 9 7 -999 -999 -999 -999 -516 7 7 -999 -999 -999 -999 -30 10 7 -999 -999 -999 -999 -21 11 7 -999 -999 -999 -999 -200 8 7 -999 -999 -999 -999 -235 6 7 -999 -999 -999 -999 -60 5 7 -999 -999 -999 -999 -5 13 7 -999 -999 -999 -999 -8 12 7 -999 -999 -999 -999 -1 14 7 -999 -999 -999 -999 -1 15 7 -999 -999 -999 -999 -6 4 7 -999 -999 -999 -999 -3 15 6 -999 -999 -999 -999 -178 5 6 -999 -999 -999 -999 -4 14 6 -999 -999 -999 -999 -1 20 6 -999 -999 -999 -999 -670 6 6 -999 -999 -999 -999 -87 8 6 -999 -999 -999 -999 -3 12 6 -999 -999 -999 -999 -18 10 6 -999 -999 -999 -999 -198 7 6 -999 -999 -999 -999 -30 9 6 -999 -999 -999 -999 -13 4 6 -999 -999 -999 -999 -1 13 6 -999 -999 -999 -999 -2 3 6 -999 -999 -999 -999 -5 11 6 -999 -999 -999 -999 -490 5 5 -999 -999 -999 -999 -40 7 5 -999 -999 -999 -999 -15 8 5 -999 -999 -999 -999 -164 6 5 -999 -999 -999 -999 -58 4 5 -999 -999 -999 -999 -3 10 5 -999 -999 -999 -999 -3 3 5 -999 -999 -999 -999 -4 9 5 -999 -999 -999 -999 -1 13 5 -999 -999 -999 -999 -253 4 4 -999 -999 -999 -999 -31 3 4 -999 -999 -999 -999 -94 5 4 -999 -999 -999 -999 -2 10 4 -999 -999 -999 -999 -2 8 4 -999 -999 -999 -999 -8 7 4 -999 -999 -999 -999 -15 6 4 -999 -999 -999 -999 -143 3 3 -999 -999 -999 -999 -39 4 3 -999 -999 -999 -999 -3 2 3 -999 -999 -999 -999 -2 6 3 -999 -999 -999 -999 -2 5 3 -999 -999 -999 -999 -65 2 2 -999 -999 -999 -999 -3 3 2 -999 -999 -999 -999 -1 4 2 -999 -999 -999 -999 -3 -999 15 13 -999 -999 -999 -2 -999 10 10 -999 -999 -999 -7 -999 11 9 -999 -999 -999 -3 -999 4 2 -999 -999 -999 -5 -999 4 3 -999 -999 -999 -2 -999 9 11 -999 -999 -999 -1 -999 16 7 -999 -999 -999 -2 -999 18 16 -999 -999 -999 -1 -999 13 16 -999 -999 -999 -5 -999 7 8 -999 -999 -999 -4 -999 9 8 -999 -999 -999 -28 -999 4 4 -999 -999 -999 -1 -999 13 15 -999 -999 -999 -3 -999 7 4 -999 -999 -999 -12 -999 5 5 -999 -999 -999 -8 -999 8 7 -999 -999 -999 -2 -999 16 11 -999 -999 -999 -1 -999 18 15 -999 -999 -999 -2 -999 13 8 -999 -999 -999 -7 -999 7 7 -999 -999 -999 -6 -999 9 9 -999 -999 -999 -3 -999 13 10 -999 -999 -999 -4 -999 4 5 -999 -999 -999 -4 -999 8 8 -999 -999 -999 -1 -999 15 6 -999 -999 -999 -4 -999 10 9 -999 -999 -999 -1 -999 9 6 -999 -999 -999 -1 -999 16 10 -999 -999 -999 -2 -999 18 14 -999 -999 -999 -1 -999 13 7 -999 -999 -999 -3 -999 9 10 -999 -999 -999 -1 -999 13 23 -999 -999 -999 -3 -999 13 9 -999 -999 -999 -2 -999 16 9 -999 -999 -999 -4 -999 5 4 -999 -999 -999 -3 -999 17 12 -999 -999 -999 -1 -999 15 10 -999 -999 -999 -4 -999 11 11 -999 -999 -999 -3 -999 6 5 -999 -999 -999 -2 -999 7 5 -999 -999 -999 -2 -999 8 6 -999 -999 -999 -2 -999 8 9 -999 -999 -999 -6 -999 6 6 -999 -999 -999 -1 -999 7 10 -999 -999 -999 -9 -999 7 6 -999 -999 -999 -1 -999 21 16 -999 -999 -999 -3 -999 10 6 -999 -999 -999 -1 -999 31 25 -999 -999 -999 -1 -999 12 7 -999 -999 -999 -1 -999 14 14 -999 -999 -999 -1 -999 31 31 -999 -999 -999 -2 -999 10 8 -999 -999 -999 -1 -999 21 20 -999 -999 -999 -1 -999 16 15 -999 -999 -999 -2 -999 15 15 -999 -999 -999 -1 -999 24 16 -999 -999 -999 -1 -999 18 12 -999 -999 -999 -1 -999 12 8 -999 -999 -999 -1 -999 27 19 -999 -999 -999 -3 -999 10 13 -999 -999 -999 -3 -999 18 18 -999 -999 -999 -3 -999 13 13 -999 -999 -999 -5 -999 3 3 -999 -999 -999 -1 -999 15 19 -999 -999 -999 -1 -999 18 19 -999 -999 -999 -2 -999 2 2 -999 -999 -999 -3 -999 9 7 -999 -999 -999 -1 -999 34 31 -999 -999 -999 -1 -999 25 25 -999 -999 -999 -1 -999 18 13 -999 -999 -999 -2 -999 6 8 -999 -999 -999 -1 -999 24 23 -999 -999 -999 -1 -999 28 22 -999 -999 -999 -3 -999 26 28 -999 -999 -999 -1 -999 19 20 -999 -999 -999 -2 -999 15 14 -999 -999 -999 -2 -999 42 45 -999 -999 -999 -1 -999 27 24 -999 -999 -999 -2 -999 11 14 -999 -999 -999 -1 -999 10 11 -999 -999 -999 -1 -999 84 92 -999 -999 -999 -1 -999 11 13 -999 -999 -999 -1 -999 8 5 -999 -999 -999 -1 -999 18 22 -999 -999 -999 -1 -999 61 55 -999 -999 -999 -1 -999 30 25 -999 -999 -999 -1 -999 19 16 -999 -999 -999 -1 -999 49 43 -999 -999 -999 -1 -999 29 33 -999 -999 -999 -1 -999 12 10 -999 -999 -999 -1 -999 19 19 -999 -999 -999 -2 -999 12 11 -999 -999 -999 -1 -999 15 17 -999 -999 -999 -1 -999 3 4 -999 -999 -999 -1 -999 63 64 -999 -999 -999 -1 -999 18 17 -999 -999 -999 -1 -999 39 49 -999 -999 -999 -5 -999 6 4 -999 -999 -999 -1 -999 42 43 -999 -999 -999 -1 -999 4 10 -999 -999 -999 -1 -999 20 30 -999 -999 -999 -1 -999 9 19 -999 -999 -999 -1 -999 49 65 -999 -999 -999 -1 -999 22 18 -999 -999 -999 -3 -999 8 10 -999 -999 -999 -1 -999 18 10 -999 -999 -999 -1 -999 8 4 -999 -999 -999 -1 -999 6 3 -999 -999 -999 -1 -999 16 6 -999 -999 -999 -1 -999 11 6 -999 -999 -999 -1 -999 12 17 -999 -999 -999 -1 -999 10 14 -999 -999 -999 -1 -999 7 11 -999 -999 -999 -1 -999 14 17 -999 -999 -999 -1 -999 13 11 -999 -999 -999 -1 -999 10 16 -999 -999 -999 -1 -999 3 2 -999 -999 -999 -1 -999 11 12 -999 -999 -999 -1 -999 20 20 -999 -999 -999 -1 -999 10 15 -999 -999 -999 -1 -999 9 4 -999 -999 -999 -1 -999 16 16 -999 -999 -999 -1 -999 14 15 -999 -999 -999 -1 -999 24 22 -999 -999 -999 -1 -999 16 14 -999 -999 -999 -739 -999 -999 4 4 -999 -999 -129 -999 -999 4 3 -999 -999 -9 -999 -999 13 10 -999 -999 -155 -999 -999 3 4 -999 -999 -5 -999 -999 20 23 -999 -999 -311 -999 -999 6 6 -999 -999 -9 -999 -999 14 11 -999 -999 -184 -999 -999 7 7 -999 -999 -12 -999 -999 18 17 -999 -999 -2 -999 -999 49 44 -999 -999 -97 -999 -999 8 7 -999 -999 -8 -999 -999 13 16 -999 -999 -31 -999 -999 9 6 -999 -999 -176 -999 -999 5 4 -999 -999 -3 -999 -999 12 7 -999 -999 -1 -999 -999 17 30 -999 -999 -11 -999 -999 13 17 -999 -999 -400 -999 -999 2 2 -999 -999 -466 -999 -999 3 3 -999 -999 -35 -999 -999 8 5 -999 -999 -45 -999 -999 5 3 -999 -999 -120 -999 -999 7 6 -999 -999 -8 -999 -999 2 4 -999 -999 -2 -999 -999 38 40 -999 -999 -5 -999 -999 13 18 -999 -999 -182 -999 -999 4 5 -999 -999 -1 -999 -999 33 47 -999 -999 -13 -999 -999 8 11 -999 -999 -11 -999 -999 3 6 -999 -999 -52 -999 -999 4 6 -999 -999 -121 -999 -999 1 1 -999 -999 -1 -999 -999 30 28 -999 -999 -13 -999 -999 13 9 -999 -999 -1 -999 -999 27 38 -999 -999 -24 -999 -999 10 8 -999 -999 -14 -999 -999 14 12 -999 -999 -78 -999 -999 6 4 -999 -999 -1 -999 -999 60 57 -999 -999 -386 -999 -999 5 5 -999 -999 -131 -999 -999 6 5 -999 -999 -81 -999 -999 7 8 -999 -999 -33 -999 -999 3 5 -999 -999 -2 -999 -999 15 10 -999 -999 -19 -999 -999 6 9 -999 -999 -5 -999 -999 12 15 -999 -999 -45 -999 -999 9 10 -999 -999 -24 -999 -999 12 11 -999 -999 -1 -999 -999 72 75 -999 -999 -20 -999 -999 15 14 -999 -999 -186 -999 -999 8 8 -999 -999 -56 -999 -999 5 7 -999 -999 -27 -999 -999 13 14 -999 -999 -40 -999 -999 7 9 -999 -999 -2 -999 -999 3 8 -999 -999 -79 -999 -999 9 8 -999 -999 -77 -999 -999 2 3 -999 -999 -15 -999 -999 11 7 -999 -999 -1 -999 -999 28 34 -999 -999 -97 -999 -999 6 7 -999 -999 -36 -999 -999 6 8 -999 -999 -1 -999 -999 5 11 -999 -999 -27 -999 -999 15 15 -999 -999 -1 -999 -999 55 61 -999 -999 -6 -999 -999 18 20 -999 -999 -17 -999 -999 16 17 -999 -999 -1 -999 -999 46 52 -999 -999 -1 -999 -999 66 74 -999 -999 -99 -999 -999 3 2 -999 -999 -5 -999 -999 23 23 -999 -999 -25 -999 -999 5 8 -999 -999 -16 -999 -999 18 18 -999 -999 -5 -999 -999 31 31 -999 -999 -1 -999 -999 40 48 -999 -999 -6 -999 -999 13 15 -999 -999 -6 -999 -999 2 1 -999 -999 -6 -999 -999 24 25 -999 -999 -16 -999 -999 17 15 -999 -999 -2 -999 -999 50 55 -999 -999 -1 -999 -999 24 34 -999 -999 -6 -999 -999 9 4 -999 -999 -3 -999 -999 13 6 -999 -999 -4 -999 -999 26 25 -999 -999 -5 -999 -999 17 10 -999 -999 -3 -999 -999 10 3 -999 -999 -1 -999 -999 62 21 -999 -999 -4 -999 -999 13 7 -999 -999 -133 -999 -999 5 6 -999 -999 -5 -999 -999 23 19 -999 -999 -8 -999 -999 18 14 -999 -999 -2 -999 -999 14 6 -999 -999 -51 -999 -999 8 6 -999 -999 -2 -999 -999 13 5 -999 -999 -19 -999 -999 10 6 -999 -999 -1 -999 -999 67 57 -999 -999 -15 -999 -999 6 3 -999 -999 -71 -999 -999 7 5 -999 -999 -10 -999 -999 22 21 -999 -999 -2 -999 -999 39 45 -999 -999 -30 -999 -999 11 10 -999 -999 -2 -999 -999 30 32 -999 -999 -8 -999 -999 19 18 -999 -999 -1 -999 -999 29 11 -999 -999 -3 -999 -999 39 42 -999 -999 -1 -999 -999 15 20 -999 -999 -95 -999 -999 9 9 -999 -999 -1 -999 -999 4 14 -999 -999 -24 -999 -999 10 12 -999 -999 -3 -999 -999 17 13 -999 -999 -9 -999 -999 11 13 -999 -999 -4 -999 -999 22 26 -999 -999 -4 -999 -999 28 25 -999 -999 -1 -999 -999 36 44 -999 -999 -2 -999 -999 33 32 -999 -999 -14 -999 -999 9 12 -999 -999 -14 -999 -999 7 10 -999 -999 -5 -999 -999 16 19 -999 -999 -74 -999 -999 8 9 -999 -999 -5 -999 -999 45 43 -999 -999 -26 -999 -999 7 4 -999 -999 -3 -999 -999 33 38 -999 -999 -8 -999 -999 18 15 -999 -999 -45 -999 -999 12 12 -999 -999 -6 -999 -999 10 14 -999 -999 -3 -999 -999 19 23 -999 -999 -5 -999 -999 11 16 -999 -999 -7 -999 -999 6 12 -999 -999 -11 -999 -999 10 13 -999 -999 -1 -999 -999 21 29 -999 -999 -1 -999 -999 72 76 -999 -999 -1 -999 -999 54 63 -999 -999 -4 -999 -999 27 25 -999 -999 -13 -999 -999 10 5 -999 -999 -35 -999 -999 9 7 -999 -999 -1 -999 -999 26 52 -999 -999 -15 -999 -999 8 10 -999 -999 -1 -999 -999 36 30 -999 -999 -3 -999 -999 33 33 -999 -999 -2 -999 -999 34 31 -999 -999 -29 -999 -999 14 14 -999 -999 -6 -999 -999 7 12 -999 -999 -1 -999 -999 32 40 -999 -999 -2 -999 -999 59 60 -999 -999 -13 -999 -999 11 6 -999 -999 -11 -999 -999 15 17 -999 -999 -6 -999 -999 1 2 -999 -999 -2 -999 -999 27 11 -999 -999 -1 -999 -999 39 44 -999 -999 -3 -999 -999 32 36 -999 -999 -2 -999 -999 31 22 -999 -999 -3 -999 -999 25 13 -999 -999 -18 -999 -999 12 13 -999 -999 -16 -999 -999 13 11 -999 -999 -1 -999 -999 50 50 -999 -999 -17 -999 -999 11 8 -999 -999 -12 -999 -999 19 20 -999 -999 -6 -999 -999 17 12 -999 -999 -3 -999 -999 7 3 -999 -999 -39 -999 -999 11 11 -999 -999 -19 -999 -999 4 7 -999 -999 -4 -999 -999 43 44 -999 -999 -4 -999 -999 33 29 -999 -999 -1 -999 -999 54 20 -999 -999 -2 -999 -999 46 45 -999 -999 -26 -999 -999 11 9 -999 -999 -30 -999 -999 9 5 -999 -999 -36 -999 -999 10 11 -999 -999 -1 -999 -999 45 58 -999 -999 -45 -999 -999 10 9 -999 -999 -3 -999 -999 39 38 -999 -999 -8 -999 -999 8 4 -999 -999 -11 -999 -999 17 19 -999 -999 -1 -999 -999 64 55 -999 -999 -3 -999 -999 17 22 -999 -999 -4 -999 -999 45 39 -999 -999 -1 -999 -999 49 33 -999 -999 -5 -999 -999 29 28 -999 -999 -1 -999 -999 69 66 -999 -999 -1 -999 -999 38 66 -999 -999 -1 -999 -999 54 40 -999 -999 -6 -999 -999 29 25 -999 -999 -2 -999 -999 31 38 -999 -999 -4 -999 -999 9 13 -999 -999 -54 -999 -999 10 10 -999 -999 -19 -999 -999 16 15 -999 -999 -2 -999 -999 62 40 -999 -999 -8 -999 -999 7 11 -999 -999 -14 -999 -999 12 14 -999 -999 -1 -999 -999 50 48 -999 -999 -2 -999 -999 20 13 -999 -999 -7 -999 -999 11 15 -999 -999 -43 -999 -999 13 13 -999 -999 -1 -999 -999 57 64 -999 -999 -14 -999 -999 6 10 -999 -999 -2 -999 -999 27 33 -999 -999 -1 -999 -999 55 52 -999 -999 -6 -999 -999 20 18 -999 -999 -13 -999 -999 4 2 -999 -999 -4 -999 -999 8 13 -999 -999 -2 -999 -999 16 24 -999 -999 -4 -999 -999 39 36 -999 -999 -4 -999 -999 28 30 -999 -999 -2 -999 -999 34 30 -999 -999 -1 -999 -999 61 45 -999 -999 -2 -999 -999 34 22 -999 -999 -1 -999 -999 31 18 -999 -999 -4 -999 -999 17 20 -999 -999 -20 -999 -999 17 16 -999 -999 -1 -999 -999 66 54 -999 -999 -3 -999 -999 49 27 -999 -999 -2 -999 -999 21 21 -999 -999 -1 -999 -999 59 63 -999 -999 -3 -999 -999 34 29 -999 -999 -24 -999 -999 9 11 -999 -999 -1 -999 -999 21 16 -999 -999 -16 -999 -999 12 10 -999 -999 -2 -999 -999 57 59 -999 -999 -5 -999 -999 32 35 -999 -999 -1 -999 -999 52 47 -999 -999 -1 -999 -999 68 58 -999 -999 -5 -999 -999 20 16 -999 -999 -6 -999 -999 12 8 -999 -999 -1 -999 -999 43 33 -999 -999 -1 -999 -999 65 64 -999 -999 -5 -999 -999 27 28 -999 -999 -2 -999 -999 34 28 -999 -999 -1 -999 -999 36 46 -999 -999 -5 -999 -999 22 22 -999 -999 -2 -999 -999 33 30 -999 -999 -4 -999 -999 18 21 -999 -999 -7 -999 -999 24 24 -999 -999 -3 -999 -999 19 13 -999 -999 -9 -999 -999 27 24 -999 -999 -23 -999 -999 14 13 -999 -999 -16 -999 -999 15 16 -999 -999 -2 -999 -999 6 11 -999 -999 -6 -999 -999 22 17 -999 -999 -2 -999 -999 21 17 -999 -999 -1 -999 -999 39 23 -999 -999 -1 -999 -999 35 32 -999 -999 -2 -999 -999 42 42 -999 -999 -2 -999 -999 45 40 -999 -999 -5 -999 -999 16 13 -999 -999 -1 -999 -999 37 19 -999 -999 -1 -999 -999 43 36 -999 -999 -1 -999 -999 52 21 -999 -999 -1 -999 -999 30 18 -999 -999 -7 -999 -999 4 11 -999 -999 -1 -999 -999 8 21 -999 -999 -1 -999 -999 4 13 -999 -999 -1 -999 -999 6 20 -999 -999 -1 -999 -999 11 24 -999 -999 -6 -999 -999 4 8 -999 -999 -1 -999 -999 11 18 -999 -999 -1 -999 -999 7 28 -999 -999 -7 -999 -999 14 17 -999 -999 -17 -999 -999 5 9 -999 -999 -4 -999 -999 4 9 -999 -999 -2 -999 -999 19 8 -999 -999 -6 -999 -999 15 11 -999 -999 -1 -999 -999 49 36 -999 -999 -2 -999 -999 45 46 -999 -999 -3 -999 -999 31 32 -999 -999 -1 -999 -999 44 37 -999 -999 -7 -999 -999 5 10 -999 -999 -3 -999 -999 45 42 -999 -999 -6 -999 -999 10 16 -999 -999 -2 -999 -999 10 15 -999 -999 -2 -999 -999 37 30 -999 -999 -1 -999 -999 34 44 -999 -999 -2 -999 -999 36 39 -999 -999 -2 -999 -999 40 38 -999 -999 -2 -999 -999 23 21 -999 -999 -2 -999 -999 37 41 -999 -999 -2 -999 -999 23 30 -999 -999 -6 -999 -999 22 18 -999 -999 -2 -999 -999 30 39 -999 -999 -9 -999 -999 28 28 -999 -999 -9 -999 -999 15 12 -999 -999 -3 -999 -999 12 18 -999 -999 -5 -999 -999 29 26 -999 -999 -2 -999 -999 26 23 -999 -999 -4 -999 -999 16 18 -999 -999 -1 -999 -999 29 16 -999 -999 -12 -999 -999 13 8 -999 -999 -5 -999 -999 34 33 -999 -999 -3 -999 -999 14 10 -999 -999 -5 -999 -999 18 16 -999 -999 -12 -999 -999 15 13 -999 -999 -1 -999 -999 21 9 -999 -999 -19 -999 -999 10 7 -999 -999 -1 -999 -999 18 11 -999 -999 -6 -999 -999 22 19 -999 -999 -2 -999 -999 45 41 -999 -999 -4 -999 -999 22 27 -999 -999 -14 -999 -999 19 19 -999 -999 -12 -999 -999 12 9 -999 -999 -1 -999 -999 35 39 -999 -999 -2 -999 -999 20 24 -999 -999 -9 -999 -999 29 31 -999 -999 -3 -999 -999 32 34 -999 -999 -6 -999 -999 25 22 -999 -999 -5 -999 -999 29 27 -999 -999 -1 -999 -999 17 5 -999 -999 -7 -999 -999 14 15 -999 -999 -3 -999 -999 7 13 -999 -999 -3 -999 -999 24 22 -999 -999 -4 -999 -999 28 24 -999 -999 -2 -999 -999 13 22 -999 -999 -3 -999 -999 31 33 -999 -999 -5 -999 -999 31 34 -999 -999 -7 -999 -999 27 26 -999 -999 -2 -999 -999 10 20 -999 -999 -1 -999 -999 32 23 -999 -999 -3 -999 -999 26 15 -999 -999 -1 -999 -999 2 9 -999 -999 -1 -999 -999 2 16 -999 -999 -1 -999 -999 10 27 -999 -999 -4 -999 -999 11 14 -999 -999 -4 -999 -999 25 19 -999 -999 -9 -999 -999 21 22 -999 -999 -2 -999 -999 28 15 -999 -999 -2 -999 -999 30 21 -999 -999 -1 -999 -999 39 29 -999 -999 -2 -999 -999 29 20 -999 -999 -3 -999 -999 40 35 -999 -999 -1 -999 -999 19 15 -999 -999 -20 -999 -999 11 12 -999 -999 -1 -999 -999 18 10 -999 -999 -2 -999 -999 37 21 -999 -999 -1 -999 -999 42 23 -999 -999 -6 -999 -999 20 22 -999 -999 -2 -999 -999 28 21 -999 -999 -3 -999 -999 11 5 -999 -999 -2 -999 -999 19 12 -999 -999 -2 -999 -999 34 37 -999 -999 -1 -999 -999 30 19 -999 -999 -2 -999 -999 23 17 -999 -999 -11 -999 -999 10 4 -999 -999 -4 -999 -999 24 26 -999 -999 -5 -999 -999 24 28 -999 -999 -2 -999 -999 16 22 -999 -999 -1 -999 -999 10 26 -999 -999 -6 -999 -999 12 16 -999 -999 -3 -999 -999 24 20 -999 -999 -2 -999 -999 31 36 -999 -999 -1 -999 -999 15 21 -999 -999 -1 -999 -999 14 19 -999 -999 -2 -999 -999 24 12 -999 -999 -1 -999 -999 23 15 -999 -999 -1 -999 -999 22 8 -999 -999 -1 -999 -999 35 19 -999 -999 -2 -999 -999 22 13 -999 -999 -6 -999 -999 17 11 -999 -999 -3 -999 -999 25 23 -999 -999 -1 -999 -999 38 29 -999 -999 -1 -999 -999 38 22 -999 -999 -2 -999 -999 12 6 -999 -999 -3 -999 -999 23 24 -999 -999 -2 -999 -999 39 35 -999 -999 -13 -999 -999 17 14 -999 -999 -4 -999 -999 28 27 -999 -999 -5 -999 -999 36 37 -999 -999 -1 -999 -999 27 19 -999 -999 -2 -999 -999 35 30 -999 -999 -1 -999 -999 37 35 -999 -999 -2 -999 -999 30 27 -999 -999 -3 -999 -999 22 23 -999 -999 -2 -999 -999 22 14 -999 -999 -2 -999 -999 29 38 -999 -999 -2 -999 -999 50 47 -999 -999 -2 -999 -999 28 19 -999 -999 -7 -999 -999 20 21 -999 -999 -3 -999 -999 37 36 -999 -999 -3 -999 -999 38 31 -999 -999 -4 -999 -999 14 18 -999 -999 -7 -999 -999 19 21 -999 -999 -23 -999 -999 13 12 -999 -999 -6 -999 -999 30 30 -999 -999 -2 -999 -999 14 8 -999 -999 -4 -999 -999 22 20 -999 -999 -2 -999 -999 42 45 -999 -999 -2 -999 -999 48 29 -999 -999 -21 -999 -999 16 16 -999 -999 -2 -999 -999 35 36 -999 -999 -2 -999 -999 24 15 -999 -999 -1 -999 -999 39 33 -999 -999 -1 -999 -999 64 42 -999 -999 -1 -999 -999 16 7 -999 -999 -1 -999 -999 67 68 -999 -999 -1 -999 -999 29 40 -999 -999 -2 -999 -999 37 37 -999 -999 -2 -999 -999 25 24 -999 -999 -2 -999 -999 31 23 -999 -999 -1 -999 -999 29 43 -999 -999 -2 -999 -999 21 14 -999 -999 -1 -999 -999 19 38 -999 -999 -1 -999 -999 29 24 -999 -999 -2 -999 -999 17 21 -999 -999 -3 -999 -999 29 30 -999 -999 -1 -999 -999 55 50 -999 -999 -5 -999 -999 23 22 -999 -999 -6 -999 -999 21 19 -999 -999 -4 -999 -999 32 30 -999 -999 -2 -999 -999 22 15 -999 -999 -1 -999 -999 24 16 -999 -999 -1 -999 -999 58 46 -999 -999 -2 -999 -999 45 33 -999 -999 -1 -999 -999 58 53 -999 -999 -2 -999 -999 12 5 -999 -999 -1 -999 -999 50 43 -999 -999 -1 -999 -999 50 31 -999 -999 -3 -999 -999 32 32 -999 -999 -4 -999 -999 26 26 -999 -999 -4 -999 -999 22 24 -999 -999 -3 -999 -999 28 26 -999 -999 -1 -999 -999 36 38 -999 -999 -3 -999 -999 33 28 -999 -999 -1 -999 -999 16 26 -999 -999 -2 -999 -999 33 35 -999 -999 -4 -999 -999 9 14 -999 -999 -1 -999 -999 72 68 -999 -999 -2 -999 -999 54 54 -999 -999 -2 -999 -999 26 30 -999 -999 -1 -999 -999 36 33 -999 -999 -2 -999 -999 34 38 -999 -999 -1 -999 -999 32 43 -999 -999 -1 -999 -999 59 59 -999 -999 -1 -999 -999 39 40 -999 -999 -2 -999 -999 25 17 -999 -999 -3 -999 -999 50 53 -999 -999 -10 -999 -999 19 17 -999 -999 -2 -999 -999 3 11 -999 -999 -1 -999 -999 54 30 -999 -999 -1 -999 -999 46 39 -999 -999 -15 -999 -999 17 18 -999 -999 -1 -999 -999 36 24 -999 -999 -1 -999 -999 21 32 -999 -999 -1 -999 -999 46 49 -999 -999 -1 -999 -999 40 43 -999 -999 -3 -999 -999 29 21 -999 -999 -1 -999 -999 25 35 -999 -999 -4 -999 -999 31 28 -999 -999 -3 -999 -999 29 32 -999 -999 -1 -999 -999 69 58 -999 -999 -3 -999 -999 5 13 -999 -999 -1 -999 -999 54 48 -999 -999 -1 -999 -999 29 34 -999 -999 -3 -999 -999 31 29 -999 -999 -1 -999 -999 16 30 -999 -999 -1 -999 -999 8 14 -999 -999 -1 -999 -999 45 23 -999 -999 -1 -999 -999 62 34 -999 -999 -2 -999 -999 50 51 -999 -999 -1 -999 -999 20 14 -999 -999 -3 -999 -999 13 19 -999 -999 -1 -999 -999 57 43 -999 -999 -4 -999 -999 27 27 -999 -999 -1 -999 -999 55 53 -999 -999 -12 -999 -999 20 20 -999 -999 -3 -999 -999 39 32 -999 -999 -2 -999 -999 34 26 -999 -999 -1 -999 -999 61 48 -999 -999 -1 -999 -999 34 18 -999 -999 -2 -999 -999 31 25 -999 -999 -2 -999 -999 42 37 -999 -999 -2 -999 -999 66 73 -999 -999 -5 -999 -999 21 23 -999 -999 -1 -999 -999 59 61 -999 -999 -1 -999 -999 34 35 -999 -999 -2 -999 -999 21 15 -999 -999 -1 -999 -999 57 62 -999 -999 -1 -999 -999 52 35 -999 -999 -1 -999 -999 68 60 -999 -999 -1 -999 -999 43 31 -999 -999 -22 -999 -999 17 17 -999 -999 -1 -999 -999 65 66 -999 -999 -6 -999 -999 24 27 -999 -999 -2 -999 -999 38 39 -999 -999 -4 -999 -999 5 2 -999 -999 -1 -999 -999 36 43 -999 -999 -4 -999 -999 18 22 -999 -999 -1 -999 -999 24 30 -999 -999 -1 -999 -999 13 23 -999 -999 -1 -999 -999 27 35 -999 -999 -1 -999 -999 34 47 -999 -999 -1 -999 -999 15 26 -999 -999 -6 -999 -999 4 10 -999 -999 -2 -999 -999 6 17 -999 -999 -2 -999 -999 6 16 -999 -999 -3 -999 -999 6 13 -999 -999 -9 -999 -999 21 20 -999 -999 -1 -999 -999 39 28 -999 -999 -1 -999 -999 31 17 -999 -999 -1 -999 -999 35 25 -999 -999 -1 -999 -999 42 36 -999 -999 -3 -999 -999 16 10 -999 -999 -1 -999 -999 43 28 -999 -999 -1 -999 -999 52 23 -999 -999 -2 -999 -999 4 12 -999 -999 -1 -999 -999 7 23 -999 -999 -3 -999 -999 16 11 -999 -999 -1 -999 -999 45 45 -999 -999 -1 -999 -999 44 40 -999 -999 -2 -999 -999 45 44 -999 -999 -1 -999 -999 10 24 -999 -999 -1 -999 -999 10 29 -999 -999 -1 -999 -999 34 45 -999 -999 -2 -999 -999 40 44 -999 -999 -2 -999 -999 23 18 -999 -999 -1 -999 -999 37 28 -999 -999 -1 -999 -999 23 32 -999 -999 -2 -999 -999 22 25 -999 -999 -1 -999 -999 30 34 -999 -999 -3 -999 -999 28 23 -999 -999 -2 -999 -999 20 19 -999 -999 -5 -999 -999 34 32 -999 -999 -3 -999 -999 27 23 -999 -999 -1 -999 -999 18 29 -999 -999 -7 -999 -999 18 19 -999 -999 -3 -999 -999 35 33 -999 -999 -3 -999 -999 25 25 -999 -999 -1 -999 -999 11 17 -999 -999 -1 -999 -999 14 23 -999 -999 -3 -999 -999 31 26 -999 -999 -8 -999 -999 24 23 -999 -999 -2 -999 -999 27 20 -999 -999 -1 -999 -999 32 21 -999 -999 -1 -999 -999 19 11 -999 -999 -1 -999 -999 20 9 -999 -999 -1 -999 -999 26 20 -999 -999 -2 -999 -999 25 31 -999 -999 -1 -999 -999 30 23 -999 -999 -1 -999 -999 40 29 -999 -999 -4 -999 -999 25 18 -999 -999 -6 -999 -999 8 12 -999 -999 -1 -999 -999 37 26 -999 -999 -1 -999 -999 42 31 -999 -999 -1 -999 -999 8 3 -999 -999 -2 -999 -999 40 39 -999 -999 -1 -999 -999 19 26 -999 -999 -3 -999 -999 11 4 -999 -999 -2 -999 -999 19 14 -999 -999 -3 -999 -999 34 34 -999 -999 -2 -999 -999 23 16 -999 -999 -2 -999 -999 27 32 -999 -999 -1 -999 -999 10 19 -999 -999 -1 -999 -999 26 19 -999 -999 -1 -999 -999 35 37 -999 -999 -3 -999 -999 14 9 -999 -999 -1 -999 -999 38 23 -999 -999 -2 -999 -999 33 23 -999 -999 -1 -999 -999 34 20 -999 -999 -1 -999 -999 12 4 -999 -999 -5 -999 -999 39 39 -999 -999 -5 -999 -999 15 18 -999 -999 -1 -999 -999 36 32 -999 -999 -1 -999 -999 26 29 -999 -999 -3 -999 -999 21 24 -999 -999 -1 -999 -999 45 51 -999 -999 -1 -999 -999 28 16 -999 -999 -1 -999 -999 35 21 -999 -999 -1 -999 -999 30 42 -999 -999 -1 -999 -999 31 40 -999 -999 -1 -999 -999 26 22 -999 -999 -1 -999 -999 18 31 -999 -999 -3 -999 -999 7 14 -999 -999 -1 -999 -999 34 60 -999 -999 -2 -999 -999 30 44 -999 -999 -9 -999 -999 14 16 -999 -999 -2 -999 -999 26 27 -999 -999 -1 -999 -999 38 60 -999 -999 -1 -999 -999 32 51 -999 -999 -2 -999 -999 35 35 -999 -999 -1 -999 -999 25 32 -999 -999 -1 -999 -999 49 26 -999 -999 -2 -999 -999 50 57 -999 -999 -3 -999 -999 19 22 -999 -999 -5 -999 -999 35 38 -999 -999 -2 -999 -999 32 33 -999 -999 -1 -999 -999 18 24 -999 -999 -1 -999 -999 14 22 -999 -999 -4 -999 -999 42 39 -999 -999 -2 -999 -999 25 29 -999 -999 -1 -999 -999 26 32 -999 -999 -3 -999 -999 26 24 -999 -999 -2 -999 -999 38 35 -999 -999 -1 -999 -999 49 40 -999 -999 -1 -999 -999 47 47 -999 -999 -1 -999 -999 44 46 -999 -999 -1 -999 -999 48 50 -999 -999 -2 -999 -999 43 39 -999 -999 -1 -999 -999 46 51 -999 -999 -1 -999 -999 54 65 -999 -999 -1 -999 -999 60 36 -999 -999 -4 -999 -999 23 26 -999 -999 -3 -999 -999 46 48 -999 -999 -2 -999 -999 28 22 -999 -999 -1 -999 -999 42 44 -999 -999 -2 -999 -999 24 29 -999 -999 -2 -999 -999 53 48 -999 -999 -1 -999 -999 3 9 -999 -999 -5 -999 -999 3 7 -999 -999 -1 -999 -999 31 24 -999 -999 -1 -999 -999 33 25 -999 -999 -1 -999 -999 25 20 -999 -999 -1 -999 -999 24 19 -999 -999 -2 -999 -999 19 9 -999 -999 -2 -999 -999 6 14 -999 -999 -1 -999 -999 22 32 -999 -999 -1 -999 -999 21 30 -999 -999 -1 -999 -999 7 15 -999 -999 -3 -999 -999 42 46 -999 -999 -2 -999 -999 29 35 -999 -999 -2 -999 -999 37 29 -999 -999 -2 -999 -999 43 41 -999 -999 -1 -999 -999 52 32 -999 -999 -5 -999 -999 15 19 -999 -999 -2 -999 -999 8 20 -999 -999 -1 -999 -999 6 23 -999 -999 -1 -999 -999 11 32 -999 -999 -1 -999 -999 11 21 -999 -999 -1 -999 -999 7 27 -999 -999 -1 -999 -999 4 15 -999 -999 -4 -999 -999 16 20 -999 -999 -1 -999 -999 49 35 -999 -999 -2 -999 -999 31 27 -999 -999 -1 -999 -999 44 28 -999 -999 -1 -999 -999 45 32 -999 -999 -2 -999 -999 34 25 -999 -999 -2 -999 -999 40 40 -999 -999 -5 -999 -999 23 25 -999 -999 -1 -999 -999 37 31 -999 -999 -4 -999 -999 22 29 -999 -999 -1 -999 -999 30 36 -999 -999 -1 -999 -999 29 23 -999 -999 -1 -999 -999 29 19 -999 -999 -2 -999 -999 34 27 -999 -999 -1 -999 -999 21 11 -999 -999 -2 -999 -999 15 9 -999 -999 -1 -999 -999 45 38 -999 -999 -1 -999 -999 35 34 -999 -999 -1 -999 -999 20 17 -999 -999 -1 -999 -999 20 12 -999 -999 -1 -999 -999 32 38 -999 -999 -5 -999 -999 29 29 -999 -999 -1 -999 -999 27 14 -999 -999 -1 -999 -999 18 32 -999 -999 -2 -999 -999 17 8 -999 -999 -1 -999 -999 7 16 -999 -999 -2 -999 -999 28 37 -999 -999 -2 -999 -999 10 17 -999 -999 -3 -999 -999 12 19 -999 -999 -1 -999 -999 6 22 -999 -999 -1 -999 -999 13 29 -999 -999 -2 -999 -999 31 37 -999 -999 -1 -999 -999 17 26 -999 -999 -1 -999 -999 18 28 -999 -999 -1 -999 -999 27 31 -999 -999 -1 -999 -999 10 22 -999 -999 -1 -999 -999 20 11 -999 -999 -1 -999 -999 2 5 -999 -999 -2 -999 -999 25 27 -999 -999 -1 -999 -999 30 25 -999 -999 -2 -999 -999 42 40 -999 -999 -2 -999 -999 40 37 -999 -999 -1 -999 -999 22 31 -999 -999 -1 -999 -999 37 32 -999 -999 -1 -999 -999 19 25 -999 -999 -1 -999 -999 34 41 -999 -999 -2 -999 -999 38 41 -999 -999 -1 -999 -999 33 37 -999 -999 -2 -999 -999 39 37 -999 -999 -2 -999 -999 36 36 -999 -999 -2 -999 -999 48 40 -999 -999 -2 -999 -999 22 16 -999 -999 -1 -999 -999 8 17 -999 -999 -2 -999 -999 64 66 -999 -999 -1 -999 -999 16 5 -999 -999 -2 -999 -999 67 67 -999 -999 -1 -999 -999 37 56 -999 -999 -1 -999 -999 25 44 -999 -999 -1 -999 -999 29 52 -999 -999 -1 -999 -999 12 20 -999 -999 -2 -999 -999 29 33 -999 -999 -1 -999 -999 55 58 -999 -999 -1 -999 -999 32 31 -999 -999 -1 -999 -999 58 52 -999 -999 -1 -999 -999 58 56 -999 -999 -1 -999 -999 10 2 -999 -999 -1 -999 -999 30 33 -999 -999 -1 -999 -999 52 50 -999 -999 -1 -999 -999 32 16 -999 -999 -1 -999 -999 20 25 -999 -999 -1 -999 -999 49 50 -999 -999 -1 -999 -999 17 34 -999 -999 -1 -999 -999 13 25 -999 -999 -2 -999 -999 38 47 -999 -999 -1 -999 -999 33 68 -999 -999 -1 -999 -999 8 25 -999 -999 -1 -999 -999 30 43 -999 -999 -1 -999 -999 27 30 -999 -999 -1 -999 -999 60 69 -999 -999 -3 -999 -999 15 8 -999 -999 -1 -999 -999 72 61 -999 -999 -2 -999 -999 15 25 -999 -999 -1 -999 -999 55 56 -999 -999 -1 -999 -999 62 46 -999 -999 -2 -999 -999 30 31 -999 -999 -1 -999 -999 36 27 -999 -999 -7 -999 -999 16 14 -999 -999 -2 -999 -999 14 7 -999 -999 -3 -999 -999 16 21 -999 -999 -1 -999 -999 30 20 -999 -999 -1 -999 -999 32 29 -999 -999 -2 -999 -999 48 52 -999 -999 -3 -999 -999 20 15 -999 -999 -3 -999 -999 46 41 -999 -999 -1 -999 -999 28 29 -999 -999 -1 -999 -999 46 34 -999 -999 -2 -999 -999 33 27 -999 -999 -1 -999 -999 30 26 -999 -999 -1 -999 -999 29 15 -999 -999 -3 -999 -999 33 26 -999 -999 -2 -999 -999 39 31 -999 -999 -1 -999 -999 18 9 -999 -999 -1 -999 -999 43 43 -999 -999 -1 -999 -999 60 63 -999 -999 -2 -999 -999 25 33 -999 -999 -2 -999 -999 30 35 -999 -999 -2 -999 -999 43 38 -999 -999 -1 -999 -999 65 60 -999 -999 -1 -999 -999 18 25 -999 -999 -1 -999 -999 69 60 -999 -999 -1 -999 -999 38 64 -999 -999 -2 -999 -999 54 39 -999 -999 -1 -999 -999 62 53 -999 -999 -1 -999 -999 50 45 -999 -999 -1 -999 -999 57 52 -999 -999 -2 -999 -999 55 51 -999 -999 -1 -999 -999 39 34 -999 -999 -1 -999 -999 61 52 -999 -999 -1 -999 -999 66 36 -999 -999 -1 -999 -999 59 69 -999 -999 -1 -999 -999 21 18 -999 -999 -1 -999 -999 57 57 -999 -999 -2 -999 -999 32 37 -999 -999 -1 -999 -999 52 56 -999 -999 -1 -999 -999 68 62 -999 -999 -1 -999 -999 65 61 -999 -999 -1 -999 -999 23 27 -999 -999 -1 -999 -999 20 26 -999 -999 -1 -999 -999 19 24 -999 -999 -1 -999 -999 15 7 -999 -999 -1 -999 -999 16 28 -999 -999 -2 -999 -999 34 40 -999 -999 -1 -999 -999 16 8 -999 -999 -1 -999 -999 67 69 -999 -999 -1 -999 -999 37 53 -999 -999 -2 -999 -999 33 40 -999 -999 -1 -999 -999 31 35 -999 -999 -1 -999 -999 29 50 -999 -999 -2 -999 -999 29 37 -999 -999 -3 -999 -999 23 28 -999 -999 -1 -999 -999 58 50 -999 -999 -1 -999 -999 58 62 -999 -999 -1 -999 -999 20 10 -999 -999 -1 -999 -999 16 12 -999 -999 -1 -999 -999 64 67 -999 -999 -1 -999 -999 6 18 -999 -999 -2 -999 -999 65 49 -999 -999 -1 -999 -999 23 20 -999 -999 -3 -999 -999 25 26 -999 -999 -1 -999 -999 22 28 -999 -999 -1 -999 -999 28 35 -999 -999 -1 -999 -999 45 48 -999 -999 -1 -999 -999 17 28 -999 -999 -1 -999 -999 35 44 -999 -999 -1 -999 -999 31 43 -999 -999 -1 -999 -999 24 21 -999 -999 -1 -999 -999 41 43 -999 -999 -1 -999 -999 11 20 -999 -999 -1 -999 -999 49 46 -999 -999 -1 -999 -999 17 31 -999 -999 -1 -999 -999 13 24 -999 -999 -1 -999 -999 13 21 -999 -999 -1 -999 -999 33 43 -999 -999 -1 -999 -999 60 61 -999 -999 -1 -999 -999 72 72 -999 -999 -1 -999 -999 28 42 -999 -999 -1 -999 -999 55 47 -999 -999 -1 -999 -999 46 44 -999 -999 -1 -999 -999 66 70 -999 -999 -1 -999 -999 50 60 -999 -999 -1 -999 -999 67 73 -999 -999 -1 -999 -999 25 15 -999 -999 -1 -999 -999 35 40 -999 -999 -1 -999 -999 19 32 -999 -999 -1 -999 -999 12 28 -999 -999 -1 -999 -999 37 50 -999 -999 -1 -999 -999 37 34 -999 -999 -1 -999 -999 16 9 -999 -999 -1 -999 -999 51 49 -999 -999 -3 -999 -999 19 16 -999 -999 -1 -999 -999 44 36 -999 -999 -1 -999 -999 34 39 -999 -999 -1 -999 -999 47 37 -999 -999 -1 -999 -999 25 21 -999 -999 -1 -999 -999 68 57 -999 -999 -1 -999 -999 65 55 -999 -999 -1 -999 -999 12 17 -999 -999 -1 -999 -999 27 34 -999 -999 -1 -999 -999 41 47 -999 -999 -1 -999 -999 23 33 -999 -999 -1 -999 -999 23 40 -999 -999 -1 -999 -999 51 51 -999 -999 -1 -999 -999 37 42 -999 -999 -1 -999 -999 56 53 -999 -999 -1 -999 -999 17 9 -999 -999 -1 -999 -999 52 51 -999 -999 -1 -999 -999 17 6 -999 -999 -1 -999 -999 35 29 -999 -999 -1 -999 -999 9 18 -999 -999 -1 -999 -999 38 45 -999 -999 -2 -999 -999 36 35 -999 -999 -1 -999 -999 72 73 -999 -999 -1 -999 -999 54 57 -999 -999 -1 -999 -999 36 29 -999 -999 -1 -999 -999 59 55 -999 -999 -1 -999 -999 27 17 -999 -999 -1 -999 -999 39 46 -999 -999 -1 -999 -999 3 10 -999 -999 -1 -999 -999 32 25 -999 -999 -1 -999 -999 34 24 -999 -999 -1 -999 -999 34 36 -999 -999 -1 -999 -999 44 49 -999 -999 -1 -999 -999 32 50 -999 -999 -1 -999 -999 21 26 -999 -999 -1 -999 -999 33 39 -999 -999 -1 -999 -999 44 44 -999 -999 -1 -999 -999 38 37 -999 -999 -2 -999 -999 57 58 -999 -999 -1 -999 -999 48 49 -999 -999 -1 -999 -999 41 39 -999 -999 -1 -999 -999 25 28 -999 -999 -2 -999 -999 47 48 -999 -999 -1 -999 -999 41 40 -999 -999 -1 -999 -999 22 30 -999 -999 -1 -999 -999 49 56 -999 -999 -1 -999 -999 45 47 -999 -999 -1 -999 -999 29 39 -999 -999 -1 -999 -999 44 38 -999 -999 -1 -999 -999 39 30 -999 -999 -1 -999 -999 21 25 -999 -999 -1 -999 -999 49 48 -999 -999 -1 -999 -999 52 57 -999 -999 -1 -999 -999 49 52 -999 -999 -2 -999 -999 50 52 -999 -999 -1 -999 -999 36 41 -999 -999 -1 -999 -999 38 42 -999 -999 -1 -999 -999 44 43 -999 -999 -1 -999 -999 35 46 -999 -999 -1 -999 -999 55 57 -999 -999 -1 -999 -999 51 59 -999 -999 -1 -999 -999 45 49 -999 -999 -1 -999 -999 53 50 -999 -999 -1 -999 -999 57 56 -999 -999 -1 -999 -999 37 38 -999 -999 -1 -999 -999 46 27 -999 -999 -1 -999 -999 47 49 -999 -999 -1 -999 -999 45 35 -999 -999 -1 -999 -999 44 42 -999 -999 -1 -999 -999 32 22 -999 -999 -1 -999 -999 40 33 -999 -999 -1 -999 -999 38 30 -999 -999 -1 -999 -999 44 41 -999 -999 -1 -999 -999 45 34 -999 -999 -2 -999 -999 -999 28 29 -999 -1 -999 -999 -999 61 63 -999 -2 -999 -999 -999 40 42 -999 -6 -999 -999 -999 6 7 -999 -2 -999 -999 -999 11 15 -999 -7 -999 -999 -999 4 4 -999 -1 -999 -999 -999 16 17 -999 -1 -999 -999 -999 63 66 -999 -1 -999 -999 -999 24 26 -999 -1 -999 -999 -999 31 33 -999 -2 -999 -999 -999 46 49 -999 -1 -999 -999 -999 53 56 -999 -2 -999 -999 -999 39 39 -999 -1 -999 -999 -999 20 22 -999 -1 -999 -999 -999 33 51 -999 -1 -999 -999 -999 35 46 -999 -1 -999 -999 -999 11 12 -999 -13 -999 -999 -999 5 5 -999 -5 -999 -999 -999 8 8 -999 -1 -999 -999 -999 47 73 -999 -1 -999 -999 -999 22 33 -999 -1 -999 -999 -999 16 25 -999 -2 -999 -999 -999 8 12 -999 -3 -999 -999 -999 11 13 -999 -2 -999 -999 -999 9 16 -999 -2 -999 -999 -999 10 10 -999 -1 -999 -999 -999 9 15 -999 -1 -999 -999 -999 27 40 -999 -1 -999 -999 -999 13 21 -999 -1 -999 -999 -999 15 21 -999 -1 -999 -999 -999 5 7 -999 -2 -999 -999 -999 5 4 -999 -1 -999 -999 -999 7 11 -999 -2 -999 -999 -999 17 22 -999 -1 -999 -999 -999 24 54 -999 -1 -999 -999 -999 10 34 -999 -2 -999 -999 -999 27 29 -999 -1 -999 -999 -999 62 63 -999 -1 -999 -999 -999 34 40 -999 -1 -999 -999 -999 14 17 -999 -1 -999 -999 -999 64 66 -999 -1 -999 -999 -999 26 26 -999 -1 -999 -999 -999 33 33 -999 -1 -999 -999 -999 48 56 -999 -2 -999 -999 -999 21 22 -999 -1 -999 -999 -999 48 51 -999 -1 -999 -999 -999 45 46 -999 -1 -999 -999 -999 12 12 -999 -1 -999 -999 -999 6 5 -999 -2 -999 -999 -999 8 11 -999 -1 -999 -999 -999 38 40 -999 -1 -999 -999 -999 27 27 -999 -2 -999 -999 -999 8 7 -999 -1 -999 -999 -999 45 44 -999 -1 -999 -999 -999 4 8 -999 -1 -999 -999 -999 30 31 -999 -2 -999 -999 -999 11 16 -999 -2 -999 -999 -999 11 11 -999 -2 -999 -999 -999 17 17 -999 -1 -999 -999 -999 57 54 -999 -1 -999 -999 -999 56 49 -999 -1 -999 -999 -999 21 20 -999 -1 -999 -999 -999 63 60 -999 -1 -999 -999 -999 52 49 -999 -1 -999 -999 -999 14 16 -999 -1 -999 -999 -999 29 32 -999 -4 -999 -999 -999 9 9 -999 -1 -999 -999 -999 13 14 -999 -1 -999 -999 -999 58 59 -999 -1 -999 -999 -999 30 40 -999 -2 -999 -999 -999 24 28 -999 -1 -999 -999 -999 15 20 -999 -5 -999 -999 -999 3 3 -999 -1 -999 -999 -999 18 20 -999 -3 -999 -999 -999 6 8 -999 -1 -999 -999 -999 10 15 -999 -1 -999 -999 -999 9 12 -999 -1 -999 -999 -999 31 44 -999 -1 -999 -999 -999 14 18 -999 -1 -999 -999 -999 36 52 -999 -5 -999 -999 -999 6 6 -999 -1 -999 -999 -999 19 18 -999 -1 -999 -999 -999 19 21 -999 -2 -999 -999 -999 2 2 -999 -8 -999 -999 -999 7 7 -999 -1 -999 -999 -999 31 36 -999 -1 -999 -999 -999 25 33 -999 -3 -999 -999 -999 7 8 -999 -1 -999 -999 -999 13 33 -999 -1 -999 -999 -999 8 6 -999 -1 -999 -999 -999 23 24 -999 -1 -999 -999 -999 22 37 -999 -1 -999 -999 -999 28 37 -999 -1 -999 -999 -999 20 29 -999 -2 -999 -999 -999 14 14 -999 -1 -999 -999 -999 45 52 -999 -1 -999 -999 -999 9 8 -999 -2 -999 -999 -999 28 33 -999 -1 -999 -999 -999 14 12 -999 -2 -999 -999 -999 9 10 -999 -2 -999 -999 -999 11 14 -999 -1 -999 -999 -999 92 95 -999 -1 -999 -999 -999 13 23 -999 -4 -999 -999 -999 5 6 -999 -1 -999 -999 -999 12 15 -999 -1 -999 -999 -999 22 23 -999 -1 -999 -999 -999 55 64 -999 -1 -999 -999 -999 14 19 -999 -1 -999 -999 -999 16 24 -999 -1 -999 -999 -999 43 46 -999 -1 -999 -999 -999 33 39 -999 -1 -999 -999 -999 2 4 -999 -1 -999 -999 -999 10 14 -999 -1 -999 -999 -999 13 13 -999 -1 -999 -999 -999 19 20 -999 -1 -999 -999 -999 28 36 -999 -1 -999 -999 -999 17 18 -999 -1 -999 -999 -999 45 39 -999 -2 -999 -999 -999 4 5 -999 -2 -999 -999 -999 7 6 -999 -1 -999 -999 -999 6 4 -999 -3 -999 -999 -999 8 9 -999 -1 -999 -999 -999 64 53 -999 -1 -999 -999 -999 49 49 -999 -1 -999 -999 -999 4 6 -999 -1 -999 -999 -999 43 41 -999 -2 -999 -999 -999 10 9 -999 -1 -999 -999 -999 30 28 -999 -1 -999 -999 -999 19 17 -999 -1 -999 -999 -999 65 56 -999 -1 -999 -999 -999 18 27 -999 -1 -999 -999 -999 4 7 -999 -2 -999 -999 -999 13 19 -999 -1 -999 -999 -999 3 4 -999 -1 -999 -999 -999 16 19 -999 -1 -999 -999 -999 15 15 -999 -2 -999 -999 -999 9 11 -999 -1 -999 -999 -999 22 24 -999 -1 -999 -999 -999 14 23 -999 -1 -999 -999 -999 4 9 -999 -1 -999 -999 -999 35 48 -999 -1 -999 -999 -999 26 30 -999 -1 -999 13 -999 -999 10 -999 -2 -999 16 -999 -999 17 -999 -1 -999 5 -999 -999 4 -999 -1 -999 17 -999 -999 14 -999 -1 -999 15 -999 -999 13 -999 -1 -999 13 -999 -999 15 -999 -1 -999 11 -999 -999 11 -999 -1 -999 11 -999 -999 14 -999 -1 -999 6 -999 -999 5 -999 -3 -999 7 -999 -999 7 -999 -3 -999 11 -999 -999 10 -999 -1 -999 8 -999 -999 6 -999 -3 -999 8 -999 -999 8 -999 -2 -999 9 -999 -999 7 -999 -8 -999 4 -999 -999 4 -999 -3 -999 6 -999 -999 6 -999 -1 -999 7 -999 -999 6 -999 -1 -999 7 -999 -999 5 -999 -1 -999 18 -999 -999 26 -999 -1 -999 13 -999 -999 17 -999 -2 -999 7 -999 -999 12 -999 -4 -999 7 -999 -999 8 -999 -1 -999 21 -999 -999 35 -999 -1 -999 10 -999 -999 6 -999 -1 -999 31 -999 -999 52 -999 -2 -999 12 -999 -999 13 -999 -4 -999 5 -999 -999 5 -999 -2 -999 10 -999 -999 9 -999 -2 -999 14 -999 -999 14 -999 -3 -999 10 -999 -999 10 -999 -1 -999 31 -999 -999 34 -999 -2 -999 10 -999 -999 11 -999 -1 -999 21 -999 -999 21 -999 -3 -999 6 -999 -999 7 -999 -1 -999 16 -999 -999 19 -999 -1 -999 18 -999 -999 17 -999 -2 -999 15 -999 -999 15 -999 -2 -999 13 -999 -999 14 -999 -1 -999 16 -999 -999 14 -999 -1 -999 24 -999 -999 21 -999 -1 -999 18 -999 -999 19 -999 -1 -999 27 -999 -999 25 -999 -3 -999 10 -999 -999 12 -999 -1 -999 9 -999 -999 12 -999 -2 -999 16 -999 -999 16 -999 -2 -999 18 -999 -999 16 -999 -1 -999 13 -999 -999 7 -999 -1 -999 9 -999 -999 9 -999 -1 -999 13 -999 -999 22 -999 -1 -999 5 -999 -999 7 -999 -1 -999 8 -999 -999 10 -999 -2 -999 9 -999 -999 11 -999 -1 -999 24 -999 -999 29 -999 -1 -999 30 -999 -999 29 -999 -1 -999 32 -999 -999 40 -999 -1 -999 27 -999 -999 27 -999 -1 -999 41 -999 -999 44 -999 -1 -999 4 -999 -999 8 -999 -1 -999 29 -999 -999 31 -999 -1 -999 53 -999 -999 54 -999 -1 -999 53 -999 -999 49 -999 -2 -999 20 -999 -999 20 -999 -1 -999 59 -999 -999 60 -999 -1 -999 47 -999 -999 49 -999 -1 -999 15 -999 -999 16 -999 -1 -999 28 -999 -999 32 -999 -1 -999 7 -999 -999 9 -999 -1 -999 57 -999 -999 59 -999 -1 -999 44 -999 -999 40 -999 -1 -999 12 -999 -999 16 -999 -1 -999 11 -999 -999 12 -999 -1 -999 9 -999 -999 5 -999 -1 -999 29 -999 -999 28 -999 -1 -999 15 -999 -999 9 -999 -1 -999 25 -999 -999 17 -999 -1 -999 4 -999 -999 3 -999 -1 -999 21 -999 -999 20 -999 -1 -999 9 -999 -999 8 -999 -1 -999 12 -999 -999 15 -999 -1 -999 44 -999 -999 44 -999 -1 -999 8 -999 -999 5 -999 -1 -999 22 -999 -999 22 -999 -1 -999 17 -999 -999 18 -999 -1 -999 43 -999 -999 52 -999 -1 -999 43 -999 -999 73 -999 -1 -999 23 -999 -999 33 -999 -1 -999 20 -999 -999 25 -999 -1 -999 12 -999 -999 12 -999 -1 -999 11 -999 -999 13 -999 -1 -999 9 -999 -999 16 -999 -1 -999 14 -999 -999 15 -999 -1 -999 38 -999 -999 40 -999 -1 -999 14 -999 -999 21 -999 -1 -999 15 -999 -999 21 -999 -1 -999 6 -999 -999 4 -999 -1 -999 14 -999 -999 22 -999 -1 -999 41 -999 -999 54 -999 -1 -999 20 -999 -999 34 -999 -1 -999 -999 -999 -999 90 90 -1 -999 -999 -999 -999 89 89 -1 -999 -999 -999 -999 86 86 -1 -999 -999 -999 -999 85 85 -1 -999 -999 -999 -999 84 91 -1 -999 -999 -999 -999 83 72 -1 -999 -999 -999 -999 83 83 -1 -999 -999 -999 -999 82 82 -1 -999 -999 -999 -999 79 79 -1 -999 -999 -999 -999 78 78 -2 -999 -999 -999 -999 76 76 -1 -999 -999 -999 -999 75 75 -1 -999 -999 -999 -999 72 72 -3 -999 -999 -999 -999 71 71 -1 -999 -999 -999 -999 69 69 -1 -999 -999 -999 -999 69 77 -1 -999 -999 -999 -999 69 66 -1 -999 -999 -999 -999 68 69 -2 -999 -999 -999 -999 68 68 -1 -999 -999 -999 -999 67 67 -1 -999 -999 -999 -999 66 65 -1 -999 -999 -999 -999 66 66 -2 -999 -999 -999 -999 65 65 -2 -999 -999 -999 -999 64 64 -1 -999 -999 -999 -999 64 59 -1 -999 -999 -999 -999 64 61 -1 -999 -999 -999 -999 64 56 -1 -999 -999 -999 -999 63 63 -2 -999 -999 -999 -999 62 62 -5 -999 -999 -999 -999 61 61 -1 -999 -999 -999 -999 61 56 -1 -999 -999 -999 -999 61 57 -1 -999 -999 -999 -999 61 62 -1 -999 -999 -999 -999 60 57 -1 -999 -999 -999 -999 60 60 -1 -999 -999 -999 -999 59 58 -3 -999 -999 -999 -999 59 59 -1 -999 -999 -999 -999 59 53 -1 -999 -999 -999 -999 59 76 -4 -999 -999 -999 -999 58 58 -1 -999 -999 -999 -999 58 53 -1 -999 -999 -999 -999 58 68 -8 -999 -999 -999 -999 57 57 -1 -999 -999 -999 -999 57 66 -1 -999 -999 -999 -999 57 59 -1 -999 -999 -999 -999 57 64 -6 -999 -999 -999 -999 56 56 -1 -999 -999 -999 -999 56 60 -1 -999 -999 -999 -999 56 76 -1 -999 -999 -999 -999 55 50 -1 -999 -999 -999 -999 55 55 -1 -999 -999 -999 -999 55 57 -8 -999 -999 -999 -999 54 54 -1 -999 -999 -999 -999 54 55 -1 -999 -999 -999 -999 54 56 -1 -999 -999 -999 -999 54 62 -2 -999 -999 -999 -999 53 56 -9 -999 -999 -999 -999 53 53 -1 -999 -999 -999 -999 53 58 -1 -999 -999 -999 -999 53 47 -1 -999 -999 -999 -999 53 65 -6 -999 -999 -999 -999 52 52 -2 -999 -999 -999 -999 52 56 -1 -999 -999 -999 -999 52 59 -1 -999 -999 -999 -999 52 66 -1 -999 -999 -999 -999 52 55 -5 -999 -999 -999 -999 51 51 -1 -999 -999 -999 -999 51 46 -3 -999 -999 -999 -999 50 50 -1 -999 -999 -999 -999 50 60 -1 -999 -999 -999 -999 50 46 -1 -999 -999 -999 -999 49 46 -7 -999 -999 -999 -999 49 49 -1 -999 -999 -999 -999 49 53 -1 -999 -999 -999 -999 49 74 -1 -999 -999 -999 -999 48 54 -1 -999 -999 -999 -999 48 31 -1 -999 -999 -999 -999 48 52 -1 -999 -999 -999 -999 48 66 -1 -999 -999 -999 -999 48 35 -3 -999 -999 -999 -999 48 48 -1 -999 -999 -999 -999 47 45 -1 -999 -999 -999 -999 47 71 -6 -999 -999 -999 -999 47 47 -1 -999 -999 -999 -999 47 52 -1 -999 -999 -999 -999 46 57 -1 -999 -999 -999 -999 46 59 -6 -999 -999 -999 -999 46 46 -1 -999 -999 -999 -999 46 49 -1 -999 -999 -999 -999 46 53 -1 -999 -999 -999 -999 46 58 -1 -999 -999 -999 -999 45 49 -7 -999 -999 -999 -999 45 45 -1 -999 -999 -999 -999 44 46 -2 -999 -999 -999 -999 44 51 -1 -999 -999 -999 -999 44 47 -7 -999 -999 -999 -999 44 44 -1 -999 -999 -999 -999 44 49 -1 -999 -999 -999 -999 44 73 -2 -999 -999 -999 -999 43 43 -1 -999 -999 -999 -999 43 37 -1 -999 -999 -999 -999 43 47 -1 -999 -999 -999 -999 43 41 -3 -999 -999 -999 -999 42 42 -1 -999 -999 -999 -999 42 39 -1 -999 -999 -999 -999 42 46 -8 -999 -999 -999 -999 41 41 -2 -999 -999 -999 -999 41 45 -1 -999 -999 -999 -999 41 46 -1 -999 -999 -999 -999 41 33 -1 -999 -999 -999 -999 41 37 -1 -999 -999 -999 -999 41 49 -1 -999 -999 -999 -999 40 42 -1 -999 -999 -999 -999 40 20 -1 -999 -999 -999 -999 40 47 -1 -999 -999 -999 -999 40 40 -1 -999 -999 -999 -999 39 41 -9 -999 -999 -999 -999 39 39 -1 -999 -999 -999 -999 39 46 -1 -999 -999 -999 -999 38 48 -8 -999 -999 -999 -999 38 38 -1 -999 -999 -999 -999 38 44 -1 -999 -999 -999 -999 38 43 -1 -999 -999 -999 -999 38 82 -1 -999 -999 -999 -999 38 30 -1 -999 -999 -999 -999 37 41 -13 -999 -999 -999 -999 37 37 -2 -999 -999 -999 -999 37 33 -1 -999 -999 -999 -999 37 45 -1 -999 -999 -999 -999 37 43 -6 -999 -999 -999 -999 36 36 -1 -999 -999 -999 -999 36 71 -1 -999 -999 -999 -999 36 37 -1 -999 -999 -999 -999 36 63 -1 -999 -999 -999 -999 36 39 -1 -999 -999 -999 -999 36 43 -1 -999 -999 -999 -999 35 46 -11 -999 -999 -999 -999 35 35 -1 -999 -999 -999 -999 35 18 -1 -999 -999 -999 -999 35 31 -1 -999 -999 -999 -999 35 42 -1 -999 -999 -999 -999 35 37 -14 -999 -999 -999 -999 34 34 -1 -999 -999 -999 -999 34 38 -1 -999 -999 -999 -999 34 22 -1 -999 -999 -999 -999 34 28 -1 -999 -999 -999 -999 34 36 -1 -999 -999 -999 -999 34 30 -1 -999 -999 -999 -999 34 40 -17 -999 -999 -999 -999 33 33 -1 -999 -999 -999 -999 33 36 -2 -999 -999 -999 -999 33 31 -1 -999 -999 -999 -999 33 35 -1 -999 -999 -999 -999 33 49 -1 -999 -999 -999 -999 33 45 -1 -999 -999 -999 -999 32 28 -10 -999 -999 -999 -999 32 32 -1 -999 -999 -999 -999 31 39 -2 -999 -999 -999 -999 31 30 -1 -999 -999 -999 -999 31 32 -14 -999 -999 -999 -999 31 31 -1 -999 -999 -999 -999 31 29 -1 -999 -999 -999 -999 31 35 -1 -999 -999 -999 -999 31 33 -1 -999 -999 -999 -999 31 34 -1 -999 -999 -999 -999 31 56 -1 -999 -999 -999 -999 30 29 -10 -999 -999 -999 -999 30 30 -1 -999 -999 -999 -999 30 40 -1 -999 -999 -999 -999 30 33 -1 -999 -999 -999 -999 30 24 -1 -999 -999 -999 -999 30 27 -2 -999 -999 -999 -999 29 15 -11 -999 -999 -999 -999 29 29 -1 -999 -999 -999 -999 29 33 -1 -999 -999 -999 -999 29 34 -1 -999 -999 -999 -999 29 44 -1 -999 -999 -999 -999 29 25 -1 -999 -999 -999 -999 29 20 -1 -999 -999 -999 -999 29 31 -2 -999 -999 -999 -999 29 35 -1 -999 -999 -999 -999 29 24 -1 -999 -999 -999 -999 29 37 -2 -999 -999 -999 -999 29 38 -1 -999 -999 -999 -999 29 22 -14 -999 -999 -999 -999 28 28 -1 -999 -999 -999 -999 28 26 -1 -999 -999 -999 -999 28 29 -1 -999 -999 -999 -999 28 18 -1 -999 -999 -999 -999 28 34 -1 -999 -999 -999 -999 28 24 -1 -999 -999 -999 -999 27 26 -14 -999 -999 -999 -999 27 27 -1 -999 -999 -999 -999 27 22 -1 -999 -999 -999 -999 27 39 -1 -999 -999 -999 -999 27 11 -1 -999 -999 -999 -999 27 16 -2 -999 -999 -999 -999 27 31 -1 -999 -999 -999 -999 27 18 -16 -999 -999 -999 -999 26 26 -2 -999 -999 -999 -999 26 28 -1 -999 -999 -999 -999 26 30 -1 -999 -999 -999 -999 26 42 -1 -999 -999 -999 -999 26 15 -1 -999 -999 -999 -999 26 31 -2 -999 -999 -999 -999 26 19 -1 -999 -999 -999 -999 26 18 -1 -999 -999 -999 -999 26 33 -1 -999 -999 -999 -999 26 29 -17 -999 -999 -999 -999 25 25 -1 -999 -999 -999 -999 25 19 -2 -999 -999 -999 -999 25 30 -2 -999 -999 -999 -999 25 27 -1 -999 -999 -999 -999 25 21 -2 -999 -999 -999 -999 25 23 -1 -999 -999 -999 -999 25 34 -1 -999 -999 -999 -999 25 18 -1 -999 -999 -999 -999 25 35 -17 -999 -999 -999 -999 24 24 -1 -999 -999 -999 -999 24 48 -2 -999 -999 -999 -999 24 29 -1 -999 -999 -999 -999 24 21 -2 -999 -999 -999 -999 24 33 -2 -999 -999 -999 -999 24 16 -1 -999 -999 -999 -999 24 11 -1 -999 -999 -999 -999 24 28 -1 -999 -999 -999 -999 24 26 -1 -999 -999 -999 -999 24 14 -1 -999 -999 -999 -999 24 27 -1 -999 -999 -999 -999 24 22 -1 -999 -999 -999 -999 24 13 -1 -999 -999 -999 -999 23 20 -1 -999 -999 -999 -999 23 30 -1 -999 -999 -999 -999 23 32 -1 -999 -999 -999 -999 23 46 -14 -999 -999 -999 -999 23 23 -2 -999 -999 -999 -999 23 27 -2 -999 -999 -999 -999 23 18 -1 -999 -999 -999 -999 23 26 -1 -999 -999 -999 -999 23 28 -1 -999 -999 -999 -999 23 25 -1 -999 -999 -999 -999 23 31 -24 -999 -999 -999 -999 22 22 -1 -999 -999 -999 -999 22 25 -2 -999 -999 -999 -999 22 23 -2 -999 -999 -999 -999 22 31 -1 -999 -999 -999 -999 22 30 -2 -999 -999 -999 -999 22 19 -1 -999 -999 -999 -999 22 21 -1 -999 -999 -999 -999 22 17 -1 -999 -999 -999 -999 22 27 -1 -999 -999 -999 -999 22 20 -28 -999 -999 -999 -999 21 21 -2 -999 -999 -999 -999 21 23 -1 -999 -999 -999 -999 21 18 -1 -999 -999 -999 -999 21 25 -1 -999 -999 -999 -999 21 14 -1 -999 -999 -999 -999 21 12 -2 -999 -999 -999 -999 21 15 -2 -999 -999 -999 -999 21 22 -2 -999 -999 -999 -999 21 26 -1 -999 -999 -999 -999 21 17 -1 -999 -999 -999 -999 21 27 -25 -999 -999 -999 -999 20 20 -3 -999 -999 -999 -999 20 18 -4 -999 -999 -999 -999 20 23 -1 -999 -999 -999 -999 20 24 -2 -999 -999 -999 -999 20 22 -1 -999 -999 -999 -999 20 13 -2 -999 -999 -999 -999 20 12 -1 -999 -999 -999 -999 20 28 -1 -999 -999 -999 -999 20 41 -1 -999 -999 -999 -999 20 14 -1 -999 -999 -999 -999 20 25 -38 -999 -999 -999 -999 19 19 -2 -999 -999 -999 -999 19 16 -4 -999 -999 -999 -999 19 17 -1 -999 -999 -999 -999 19 14 -2 -999 -999 -999 -999 19 22 -3 -999 -999 -999 -999 19 23 -2 -999 -999 -999 -999 19 24 -2 -999 -999 -999 -999 19 13 -1 -999 -999 -999 -999 19 15 -2 -999 -999 -999 -999 19 21 -3 -999 -999 -999 -999 19 18 -1 -999 -999 -999 -999 19 26 -1 -999 -999 -999 -999 19 9 -32 -999 -999 -999 -999 18 18 -2 -999 -999 -999 -999 18 13 -3 -999 -999 -999 -999 18 20 -3 -999 -999 -999 -999 18 19 -2 -999 -999 -999 -999 18 17 -4 -999 -999 -999 -999 18 22 -2 -999 -999 -999 -999 18 8 -3 -999 -999 -999 -999 18 15 -2 -999 -999 -999 -999 18 12 -2 -999 -999 -999 -999 18 21 -6 -999 -999 -999 -999 18 16 -1 -999 -999 -999 -999 18 27 -1 -999 -999 -999 -999 18 14 -1 -999 -999 -999 -999 18 38 -54 -999 -999 -999 -999 17 17 -8 -999 -999 -999 -999 17 19 -3 -999 -999 -999 -999 17 13 -2 -999 -999 -999 -999 17 15 -4 -999 -999 -999 -999 17 16 -2 -999 -999 -999 -999 17 14 -2 -999 -999 -999 -999 17 12 -1 -999 -999 -999 -999 17 21 -1 -999 -999 -999 -999 17 9 -1 -999 -999 -999 -999 17 11 -1 -999 -999 -999 -999 17 20 -2 -999 -999 -999 -999 17 18 -1 -999 -999 -999 -999 17 24 -1 -999 -999 -999 -999 17 26 -1 -999 -999 -999 -999 17 31 -4 -999 -999 -999 -999 16 19 -62 -999 -999 -999 -999 16 16 -4 -999 -999 -999 -999 16 20 -3 -999 -999 -999 -999 16 15 -6 -999 -999 -999 -999 16 14 -1 -999 -999 -999 -999 16 4 -2 -999 -999 -999 -999 16 10 -3 -999 -999 -999 -999 16 12 -3 -999 -999 -999 -999 16 21 -5 -999 -999 -999 -999 16 13 -1 -999 -999 -999 -999 16 8 -2 -999 -999 -999 -999 16 18 -2 -999 -999 -999 -999 16 17 -1 -999 -999 -999 -999 16 11 -1 -999 -999 -999 -999 16 22 -1 -999 -999 -999 -999 16 23 -1 -999 -999 -999 -999 16 25 -83 -999 -999 -999 -999 15 15 -6 -999 -999 -999 -999 15 17 -6 -999 -999 -999 -999 15 16 -2 -999 -999 -999 -999 15 11 -4 -999 -999 -999 -999 15 12 -7 -999 -999 -999 -999 15 13 -1 -999 -999 -999 -999 15 23 -2 -999 -999 -999 -999 15 10 -1 -999 -999 -999 -999 15 19 -2 -999 -999 -999 -999 15 9 -1 -999 -999 -999 -999 15 8 -1 -999 -999 -999 -999 15 21 -85 -999 -999 -999 -999 14 14 -8 -999 -999 -999 -999 14 12 -3 -999 -999 -999 -999 14 9 -8 -999 -999 -999 -999 14 13 -8 -999 -999 -999 -999 14 19 -7 -999 -999 -999 -999 14 11 -1 -999 -999 -999 -999 14 21 -2 -999 -999 -999 -999 14 24 -1 -999 -999 -999 -999 14 50 -1 -999 -999 -999 -999 14 20 -6 -999 -999 -999 -999 14 10 -2 -999 -999 -999 -999 14 8 -3 -999 -999 -999 -999 14 16 -7 -999 -999 -999 -999 14 15 -1 -999 -999 -999 -999 14 18 -1 -999 -999 -999 -999 14 5 -94 -999 -999 -999 -999 13 13 -5 -999 -999 -999 -999 13 10 -3 -999 -999 -999 -999 13 19 -6 -999 -999 -999 -999 13 12 -2 -999 -999 -999 -999 13 21 -1 -999 -999 -999 -999 13 6 -3 -999 -999 -999 -999 13 14 -4 -999 -999 -999 -999 13 15 -1 -999 -999 -999 -999 13 26 -2 -999 -999 -999 -999 13 18 -5 -999 -999 -999 -999 13 9 -8 -999 -999 -999 -999 13 11 -1 -999 -999 -999 -999 13 17 -1 -999 -999 -999 -999 13 16 -6 -999 -999 -999 -999 13 8 -1 -999 -999 -999 -999 13 7 -90 -999 -999 -999 -999 12 12 -5 -999 -999 -999 -999 12 11 -8 -999 -999 -999 -999 12 13 -6 -999 -999 -999 -999 12 10 -1 -999 -999 -999 -999 12 4 -4 -999 -999 -999 -999 12 14 -6 -999 -999 -999 -999 12 9 -2 -999 -999 -999 -999 12 16 -2 -999 -999 -999 -999 12 17 -2 -999 -999 -999 -999 12 7 -1 -999 -999 -999 -999 12 8 -117 -999 -999 -999 -999 11 11 -8 -999 -999 -999 -999 11 10 -7 -999 -999 -999 -999 11 8 -12 -999 -999 -999 -999 11 12 -8 -999 -999 -999 -999 11 9 -4 -999 -999 -999 -999 11 14 -1 -999 -999 -999 -999 11 17 -7 -999 -999 -999 -999 11 13 -5 -999 -999 -999 -999 11 15 -2 -999 -999 -999 -999 11 7 -1 -999 -999 -999 -999 11 21 -1 -999 -999 -999 -999 11 5 -1 -999 -999 -999 -999 11 18 -1 -999 -999 -999 -999 11 6 -2 -999 -999 -999 -999 11 19 -16 -999 -999 -999 -999 10 9 -9 -999 -999 -999 -999 10 12 -110 -999 -999 -999 -999 10 10 -11 -999 -999 -999 -999 10 11 -10 -999 -999 -999 -999 10 8 -5 -999 -999 -999 -999 10 13 -3 -999 -999 -999 -999 10 14 -3 -999 -999 -999 -999 10 15 -4 -999 -999 -999 -999 10 6 -2 -999 -999 -999 -999 10 7 -1 -999 -999 -999 -999 10 3 -1 -999 -999 -999 -999 10 4 -1 -999 -999 -999 -999 10 18 -110 -999 -999 -999 -999 9 9 -17 -999 -999 -999 -999 9 8 -21 -999 -999 -999 -999 9 10 -5 -999 -999 -999 -999 9 7 -6 -999 -999 -999 -999 9 11 -1 -999 -999 -999 -999 9 15 -2 -999 -999 -999 -999 9 12 -2 -999 -999 -999 -999 9 5 -5 -999 -999 -999 -999 9 6 -1 -999 -999 -999 -999 9 3 -3 -999 -999 -999 -999 9 14 -2 -999 -999 -999 -999 9 16 -2 -999 -999 -999 -999 9 13 -128 -999 -999 -999 -999 8 8 -20 -999 -999 -999 -999 8 9 -23 -999 -999 -999 -999 8 7 -8 -999 -999 -999 -999 8 6 -8 -999 -999 -999 -999 8 10 -4 -999 -999 -999 -999 8 13 -5 -999 -999 -999 -999 8 11 -1 -999 -999 -999 -999 8 3 -2 -999 -999 -999 -999 8 4 -2 -999 -999 -999 -999 8 16 -4 -999 -999 -999 -999 8 5 -1 -999 -999 -999 -999 8 15 -1 -999 -999 -999 -999 8 12 -1 -999 -999 -999 -999 8 19 -129 -999 -999 -999 -999 7 7 -29 -999 -999 -999 -999 7 6 -16 -999 -999 -999 -999 7 8 -10 -999 -999 -999 -999 7 9 -4 -999 -999 -999 -999 7 4 -7 -999 -999 -999 -999 7 11 -11 -999 -999 -999 -999 7 5 -2 -999 -999 -999 -999 7 19 -4 -999 -999 -999 -999 7 10 -1 -999 -999 -999 -999 7 3 -6 -999 -999 -999 -999 6 9 -147 -999 -999 -999 -999 6 6 -34 -999 -999 -999 -999 6 7 -11 -999 -999 -999 -999 6 8 -17 -999 -999 -999 -999 6 5 -8 -999 -999 -999 -999 6 4 -2 -999 -999 -999 -999 6 13 -1 -999 -999 -999 -999 6 11 -2 -999 -999 -999 -999 6 10 -1 -999 -999 -999 -999 6 12 -11 -999 -999 -999 -999 5 7 -26 -999 -999 -999 -999 5 6 -118 -999 -999 -999 -999 5 5 -40 -999 -999 -999 -999 5 4 -3 -999 -999 -999 -999 5 11 -4 -999 -999 -999 -999 5 3 -1 -999 -999 -999 -999 5 13 -7 -999 -999 -999 -999 5 8 -2 -999 -999 -999 -999 5 9 -1 -999 -999 -999 -999 5 15 -2 -999 -999 -999 -999 5 10 -13 -999 -999 -999 -999 4 6 -115 -999 -999 -999 -999 4 4 -40 -999 -999 -999 -999 4 5 -5 -999 -999 -999 -999 4 7 -16 -999 -999 -999 -999 4 3 -3 -999 -999 -999 -999 4 8 -2 -999 -999 -999 -999 4 12 -3 -999 -999 -999 -999 4 9 -3 -999 -999 -999 -999 3 7 -72 -999 -999 -999 -999 3 3 -21 -999 -999 -999 -999 3 4 -5 -999 -999 -999 -999 3 5 -1 -999 -999 -999 -999 3 20 -6 -999 -999 -999 -999 3 6 -2 -999 -999 -999 -999 3 8 -1 -999 -999 -999 -999 3 12 -1 -999 -999 -999 -999 3 13 -7 -999 -999 -999 -999 2 3 -6 -999 -999 -999 -999 2 2 -# Test number -123456 diff --git a/man/AgeingError-package.Rd b/man/AgeingError-package.Rd new file mode 100644 index 0000000..65d0bf0 --- /dev/null +++ b/man/AgeingError-package.Rd @@ -0,0 +1,45 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/nwfscAgeingError.R +\docType{package} +\name{AgeingError-package} +\alias{AgeingError} +\alias{AgeingError-package} +\title{Ageing error software} +\description{ +R package to support the Punt et al. (2008) ageing error model +} +\references{ +Punt, A.E., Smith, D.C., KrusicGolub, K., and Robertson, S. 2008. +Quantifying age-reading error for use in fisheries stock assessments, +with application to species in Australias southern and eastern scalefish and shark fishery. +Canadian Journal of Fisheries and Aquatic Sciences 65: 1991-2005. +} +\seealso{ +Useful links: +\itemize{ + \item \url{https://pfmc-assessments.github.io/AgeingError/index.html} + \item \url{https://pfmc-assessments.github.io/AgeingError/} + \item \url{http://pfmc-assessments.github.io/nwfscAgeingError/} + \item Report bugs at \url{https://github.com/pfmc-assessments/AgeingError/issues} +} + +} +\author{ +\strong{Maintainer}: Ian G. Taylor \email{ian.taylor@noaa.gov} (\href{https://orcid.org/0000-0001-8489-2488}{ORCID}) + +Authors: +\itemize{ + \item Andre E. Punt (\href{https://orcid.org/0000-0001-8489-2488}{ORCID}) + \item Kelli F. Johnson (\href{https://orcid.org/0000-0001-9563-1937}{ORCID}) + \item Paul Burch (\href{https://orcid.org/0000-0002-9853-462X}{ORCID}) +} + +Other contributors: +\itemize{ + \item James T. Thorson (\href{https://orcid.org/0000-0001-7415-1010}{ORCID}) [contributor, copyright holder] + \item Ian J. Stewart [contributor] + \item Melissa A. Haltuch (\href{https://orcid.org/0000-0003-2821-1267}{ORCID}) [contributor] +} + +} +\keyword{internal} diff --git a/man/CreateData.Rd b/man/CreateData.Rd new file mode 100644 index 0000000..cf3f89d --- /dev/null +++ b/man/CreateData.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateData.R +\name{CreateData} +\alias{CreateData} +\title{Read the ageing error data} +\usage{ +CreateData(DataFile = "data.dat", NDataSet = 1, verbose = FALSE, EchoFile = "") +} +\arguments{ +\item{DataFile}{Filename for input data} + +\item{NDataSet}{Number of data sets within \code{DataFile}} + +\item{verbose}{Return messages to the console (in addition to any output to +\code{EchoFile})} + +\item{EchoFile}{A file path to a file that will be created or appended to if +it already exists to store information about your data inputs. The default +is \code{''}, which leads to output being printed to the screen rather than +saved in a file. An example of a user-defined input would be +\code{'EchoTMB.out'}.} +} +\description{ +Read the ageing error data +} +\author{ +Andre E. Punt +} diff --git a/man/CreateSpecs.Rd b/man/CreateSpecs.Rd new file mode 100644 index 0000000..d3b5439 --- /dev/null +++ b/man/CreateSpecs.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/CreateSpecs.R +\name{CreateSpecs} +\alias{CreateSpecs} +\title{Read the ageing error specifications} +\usage{ +CreateSpecs(SpecsFile = "data.spc", DataSpecs, verbose = FALSE) +} +\arguments{ +\item{SpecsFile}{Filename for input specifications.} + +\item{DataSpecs}{The output from CreateData()} + +\item{verbose}{Return messages to the console (TRUE/FALSE)} +} +\description{ +Read the ageing error specifications +} +\author{ +Andre E. Punt +} diff --git a/man/DoApplyAgeError.Rd b/man/DoApplyAgeError.Rd new file mode 100644 index 0000000..c044828 --- /dev/null +++ b/man/DoApplyAgeError.Rd @@ -0,0 +1,44 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/DoApplyAgeError.R +\name{DoApplyAgeError} +\alias{DoApplyAgeError} +\title{Run the ageing error optimization routine} +\usage{ +DoApplyAgeError( + Species = "AgeingError", + DataSpecs, + ModelSpecsInp, + AprobWght = 1e-06, + SlopeWght = 0.01, + SaveDir = getwd(), + verbose = FALSE +) +} +\arguments{ +\item{Species}{A string that will be used to create file names. Typically, +users will use the common name for the species of interest, especially if +you are saving files from multiple species in a single directory. Though, +the default is \code{"AgeingError"}.} + +\item{DataSpecs}{A data object returned from \code{\link[=CreateData]{CreateData()}}.} + +\item{ModelSpecsInp}{A specification object returned from \code{\link[=CreateSpecs]{CreateSpecs()}}.} + +\item{AprobWght, SlopeWght}{Numeric values passed to the model. The defaults +are 1e-06 and 0.01. Andre originally had these hard coded from his +workspace. TODO: decide if they should be passed in the specifications or +data files.} + +\item{SaveDir}{A path, relative or absolute, to a directory where the +results will be saved. The directory need not exist currently as it will +be created dynamically.} + +\item{verbose}{A logical specifying if messages should be printed. The +default is to \strong{NOT} print, i.e., \code{verbose = FALSE}.} +} +\description{ +Run the ageing error optimization routine +} +\author{ +Andre E. Punt +} diff --git a/man/ProcessResults.Rd b/man/ProcessResults.Rd new file mode 100644 index 0000000..ca8df68 --- /dev/null +++ b/man/ProcessResults.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ProcessResults.R +\name{ProcessResults} +\alias{ProcessResults} +\title{Process results of the ageing error estimation} +\usage{ +ProcessResults( + Species = "AgeingError", + SaveDir = getwd(), + CalcEff = FALSE, + verbose = FALSE +) +} +\arguments{ +\item{Species}{A string that will be used to create file names. Typically, +users will use the common name for the species of interest, especially if +you are saving files from multiple species in a single directory. Though, +the default is \code{"AgeingError"}.} + +\item{SaveDir}{A path, relative or absolute, to a directory where the +results will be saved. The directory need not exist currently as it will +be created dynamically.} + +\item{CalcEff}{Calculate effective sample sizes (TRUE/FALSE)} + +\item{verbose}{A logical specifying if messages should be printed. The +default is to \strong{NOT} print, i.e., \code{verbose = FALSE}.} +} +\description{ +Process results of the ageing error estimation +} +\author{ +Andre E. Punt +} diff --git a/man/determine_n_sets.Rd b/man/determine_n_sets.Rd new file mode 100644 index 0000000..32061e2 --- /dev/null +++ b/man/determine_n_sets.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/determine-.R +\name{determine_n_sets} +\alias{determine_n_sets} +\title{Determine the number of data sets in a data file} +\usage{ +determine_n_sets(file) +} +\arguments{ +\item{file}{A file path to a data file.} +} +\value{ +An integer giving the number of data sets in the file. +} +\description{ +Determine the number of data sets in a data file +} +\author{ +Kelli F. Johnson +} diff --git a/man/fit.Rd b/man/fit.Rd new file mode 100644 index 0000000..6aef4e4 --- /dev/null +++ b/man/fit.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fit.R +\name{fit} +\alias{fit} +\title{Fit an ageing error model using TMB} +\usage{ +fit() +} +\description{ +Fit an ageing error model using TMB +} +\author{ +Kelli F. Johnson +} diff --git a/man/minimizer.Rd b/man/minimizer.Rd new file mode 100644 index 0000000..8a03f60 --- /dev/null +++ b/man/minimizer.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/minimizer.R +\name{minimizer} +\alias{minimizer} +\title{Minimize the negative log likelihood} +\usage{ +minimizer( + model, + method = c("optim", "nlmimb", "both"), + lower, + upper, + verbose = FALSE +) +} +\arguments{ +\item{model}{A model to be optimized.} + +\item{method}{A string specifying the desired method to be used for the +optimization routine. The options are listed in the function call, where +the default is to use \code{"optim"}. Using both routines is an option, via +\code{"both"}, and will lead to first optimizing the model using \code{"nlminb"} +and then re-optimization of the model with \code{"optim"}. Note that when using +\code{\link[stats:optim]{stats::optim()}}, the \code{"L-BFGS-B"} method is used rather than the default +method of \code{"Nelder-Mead"}.} + +\item{lower, upper}{Vectors of parameter bounds of the same length as the +number of parameters in the model.} + +\item{verbose}{A logical specifying if messages should be printed. The +default is to \strong{NOT} print, i.e., \code{verbose = FALSE}.} +} +\description{ +Minimize the negative log likelihood using \code{"nlmimb"} and/or \code{"optim"}. +} +\author{ +Andre E. Punt +} diff --git a/man/nwfscAgeingError.Rd b/man/nwfscAgeingError.Rd deleted file mode 100644 index fa2988f..0000000 --- a/man/nwfscAgeingError.Rd +++ /dev/null @@ -1,245 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/nwfscAgeingError.R -\docType{package} -\name{nwfscAgeingError} -\alias{nwfscAgeingError} -\title{Ageing error software} -\description{ -Data input and stepwise model selection in R for the -Punt et al. (2008) ageing error model -James T. Thorson, Ian Stewart, and André E. Punt -} -\details{ -Function name: RunFn() - -Background: - -\if{html}{\out{
}}\preformatted{The Punt et al. (2008) model calculates the likelihood of model parameters given an observed dataset that includes age reads (henceforth 'reads') provided by multiple readers for a set of otoliths. For each reader, two sets of parameters are estimated that define the standard deviation and bias of the reads provided by that reader. Specifically, the model has parameters that approximate the expected age of each read given the true age of an otolith, and the standard deviation of a normally distributed reading error given the true age of an otolith. Each of these functional forms can be either linear or curvilinear, and each is conditioned on an unobserved 'True' age for each otolith. This 'True' age for each otolith can be considered a random-effect, and the software computes the resulting likelihood while summing across all possible discrete values for this 'True' age for each otolith. -}\if{html}{\out{
}} - -This summation across all possible values for a 'True' age for each otolith also requires a hyperdistribution representing the 'prior' probability that an otolith is any given age; this prior is parameterized using a set of hyperparameters in addition to the parameters that govern the SD and bias for each reader. Specifically, one hyperparameter is estimated for every age between (and including) a MinusAge and a PlusAge, which are defined exogenously for every model run. Ages above the PlusAge or below the MinusAge have a prior Proportion-at-Age defined as a loglinear deviation from the Proportion-at-Age for the PlusAge and MinusAge. The slope of these loglinear deviations thus constitutes an additional 1 or 2 fixed effect parameter to estimate. The 'True' proportion-at-age is then calculated from these fixed effect and log-linear slope parameters by normalizing the resulting distribution so that it sums to one. - -Necessary Inputs: - -\if{html}{\out{
}}\preformatted{Format data: Data should be formatted with unique reading records as rows and readers/labs as columns (exampling in Table 1). Specifically, each column corresponds to a reader, readers, lab or labs with a unique reading error and bias; the Punt (2008) model allows for approximately 15 unique columns, so the number of 'readers' must be less than this. Additionally, an additional column inserted on the left-hand side of the data matrix indicates the number of otoliths with that unique read record; this cell is generally '1', but any instances where two or more otoliths have identical reads for all readers are combined and this cell is incremented. Any missing entries (i.e., where a reader has not read anything for a given otolith) are indicated with a '-999' in that cell. The model can be configured such that a given column (i.e. reader) has parameter values that 'mirror' the parameter values for a reader to it's left. This can allow estimation of a model where readers within the same lab are estimated to -}\if{html}{\out{
}} - -have the same reading error and bias. Any instance where a particular reader (or lab) provides multiple reads for a single otolith can be dealt with by creating a 2nd column for that reader, and configuring the model so that parameters for that 2nd column mirror the parameters for the 1st column for that reader. Select inputs: The call-function 'FnRun()' in R writes data in the necessary format and then calls the Punt (2008) model. This model requires several inputs, which are listed and explained below: - -Data: This is the data set as previously formatted. If the data has multiple rows with identical reads, this will cause an error and the 'XXX.rep' file will have a properly formatted data matrix which can be cut-pasted into a 'XXX.dat' file for use. - -SigOpt: This a vector with one entry for each reader (i.e. Ncol-1 entries). Each entry specifies the functional form of reading error as a function of true age. Possible entries include: -'-1', '-2', '-3', etc: This will make this reader mirror the estimated SD from another reader to it's left. '-1' causes it to mirror the estimated SD for the first reader, etc. This number has to be lower than the current entry number. - -'1' : Constant CV, i.e., a 1 parameter linear relationship of SD with true age. - -'2': Curvilinear SD, i.e., a 3 parameter Hollings-form relationship of SD with true age - -'3': Curvilinear with CV, i.e., a 3-parameter Hollings-form relationship of CV with true age - -'4': No error (but potentially bias) - -BiasOpt: This is a vector with one entry for each reader: - -'-1', '-2', '-3': See SigOpt - -'0': Unbiased - -'1': Constant CV, i.e., a 1-parameter linear relationship of bias with true age - -'2': Curvilinear, i.e., a 2-parameter Hollings-form relationship of bias with true age - -NDataSets: This is generally '1' and other values are not implemented in the current R-code. - -MinAge: The minimum possible 'True' age - -MaxAge: The maximum possible 'True' age - -RefAge: An arbitrarily chosen age from which 'true' age-composition fixed-effects are calculated as an offset. This has no effect on the answer, but could potentially effect estimation speed. - -MinusAge: The minimum age for which an age-specific age-composition is estimated. Ages below this MinusAge have 'true' proportion-at-age (Pa) estimated as P_a=P_MinusAge?e^(?(MinusAge-a)), where ? is an estimated log-linear trend in the 'true' proportion-at-age. If MinusAge = MinAge, ? is not estimated. - -PlusAge: Identical to MinusAge except defining the age above with age-specific age-composition is not estimated. - -MaxSd: An upper bound on possible values for the standard deviation of reading error - -MaxExpectedAge: Set to MaxAge - -SaveFile: Directory where 'agemat.exe' is located and where all ADMB intermediate and output files should be located. - -EffSampleSize: Indicating whether effective sample size should be calculated. Missing values in the data matrix will cause this to be ineffective, in which case this should be set to '0' - -Intern: 'TRUE' indicates that ADMB output should be displayed in R; 'FALSE' does not. - -Stepwise model selection in R - -Function name: StepwiseFn() - -Background: - -\if{html}{\out{
}}\preformatted{Stepwise model selection allows many different model configurations to be explored: in this code, I have used AIC as the metric for comparison among model structures, although BIC or other criteria could be used. AIC seems appropriate to select among possible PlusAge values, because this parameter determines the number of estimated fixed effect hyperparameters that are used to define the true 'Proportion-at-age' hyperdistribution. This hyperdistribution in turn is used as a 'prior' when integrating across a 'True Age' associated with each otolith. This 'True Age' latent effect can be interpreted as a random effect (one for each observation), so the use of AIC to select among parameterizations of the fixed effects defining this hyperdistribution is customary (Pinheiro and Bates 2009). Additionally, the use of AIC to select the value of the PlusAge parameter appears (in preliminary analysis using Sablefish ageing error data) to lead to a 'True' proportion-at-age that is biologically plausible. -}\if{html}{\out{
}} - -Necessary Inputs: - -\if{html}{\out{
}}\preformatted{Format data: Same as for a single-run -}\if{html}{\out{
}} - -Select inputs: Most inputs are the same as for a single-run. However, the 'SigOpt' 'BiasOpt' and 'PlusAge' are now specified using a matrix called 'PossibleMat', which has 2*Nreaders+2 rows and as many columns as necessary. Row #1-#Nreaders specify the SigOpt for each reader; Next are the BiasOpt for each reader, followed by the PlusAge. The first entry in each row specifies the starting value for that parameter in the search algorithm; a value must be specified in the first column for each parameter. Any parameter for which the search algorithm should search across possible values has other possible values in the 2nd, 3rd, and subsequent cells in that row. An example is given in Table 2. - -Diagnostic figures in R - -Function name: PlotOutputFn() - -Background: - -\if{html}{\out{
}}\preformatted{There are many ways to visualize the results that are provided by the Punt et al. (2008) model. Some of these allow comparison with observed data. However, any comparison with observed data is a little problematic, as comparisons must generally be conditioned on a 'True' age that is not observed. In place of a 'True' age, the diagnostic plots that we present generally condition on an 'Estimated' age, which is fixed as the mode of the conditional probability-at-age for each otolith. -}\if{html}{\out{
}} - -Diagnostic plots include: - -Error and bias by reader: A panel graph where each panel shows the expected and standard deviation in age reads for that reader. This is displayed against a scatterplot of the 'Read' and 'Estimated' ages for each otolith that was read by that reader. - -Proportion-at-age histogram: The estimated 'Proportion-at-age' can be plotted as a histogram, and is displayed against the 'observed' distribution of read ages. This is useful to determine if the estimated 'proportion-at-age' is generally plausible, e.g., whether it has too many ages where the estimated proportion-at-age approaches zero (which is unlikely in a composite sample with moderate effective sample sizes). This plot can also be used as a diagnostic to confirm that AIC has selected reasonable values for the MinusAge and PlusAge parameters. - -Necessary Inputs: - -The plotting function reads the 'XXX.rep' and 'XXX.par' files that are located in the directory that is provided. It also requires specifying the MaxAge and Data, as formatted and defined earlier. -} -\examples{ -\dontrun{ - # File for Punt et al. (2008) model (pre-compiled in ADMB) - SourceFile = paste0( - system.file(package='AgeingErrorPackage'),'/executables/' - ) - - # This is where all runs will be located - DateFile = paste(getwd(),'/',Sys.Date(),'/',sep='') - dir.create(DateFile) - - ############################# - # - # Generate and run with an artificial dataset - # - # SimulatorFn() generates the data and has the following settings - # Nreaders is the number of readers - # ReadsMat is a matrix where each row specifies how many reads - # (in the first column) have a particular pattern of double reads - # (in the second through Nreaders+1 columns) - # SelexForm is the selectivity-at-age form - # (logistic selex-at-age is the only one that is implemented) - # SelexParams are standard to the logistic equation - # BiasParams b in the following equation: - # E[AgeRead] = b*TrueAge - # ErrorParams are CV in the following equation: - # Var[AgeRead] = (CV*TrueAge)^2 - # RecCV is the is the CV in recruitment - # (and recruitment is assumed stationary over time) - # RecAR1 is first-order autoregressive coefficient in recruitment - # Amax is the maximum allowable age - # - ############################# - - ##### Parameters for generating data - # This represents 2 unique readers - # Row 1 -- Otoliths read only once by reader - # Row 2 -- Otoliths read twice by reader 1 - # Row 2 -- Otoliths read only once by reader 2 - # Row 4 -- Otoliths read twice by reader 2 - # Row 5 -- Otoliths read once by reader 1 and once by reader 2 - Nreaders = 4 - ReadsMat = cbind(NumberOfReads=rep(100,5), - Reader1=c(1,1,0,0,1), Reader1_DoubleReads=c(0,1,0,0,0), - Reader2=c(0,0,1,1,1), Reader2_DoubleReads=c(0,0,0,1,0) - ) - rownames(ReadsMat) = c("Reader1_Only", "Reader1_DoubleReads", - "Reader2_Only", "Reader2_DoubleReads", "Reader1_&_Reader2" - ) - - # Generate data - AgeReads = SimulatorFn(Nreaders = Nreaders, M = 0.2, - SelexForm = "Logistic", SelexParams = c(5,0.2), - BiasParams = c(1,1,1.1,1.1), ErrorParams = c(0.2,0.2,0.2,0.2), - ReadsMat = ReadsMat, RecCv = 0.6, RecAr1 = 0.8, Amax = 100 - ) - utils::write.csv(AgeReads, - file = paste0(DateFile,"Simulated_data_example.csv") - ) - - ##### Format data - Nreaders = ncol(AgeReads) - AgeReads = ifelse(is.na(AgeReads),-999,AgeReads) - # Change NA to -999 (which the Punt software considers missing data) - - # Potentially eliminate rows that are only read once - # These rows have no information about reading error, - # but are potentially informative about latent age-structure - # It is unknown whether eliminating these rows degrades - # estimation of error and bias, and is currently recommended - # to speed up computation - # KeepRow = ifelse(rowSums(ifelse(AgeReads==-999,0,1),na.rm=TRUE)<=1, - # FALSE,TRUE - # ) - # AgeReads = AgeReads[KeepRow,] - # Combine duplicate rows - AgeReads2 = rMx(c(1, AgeReads[1,])) # correctly formatted data object - for(RowI in 2:nrow(AgeReads)){ - DupRow = NA - for(PreviousRowJ in 1:nrow(AgeReads2)){ - if(all(AgeReads[RowI,1:Nreaders]==AgeReads2[PreviousRowJ,1:Nreaders+1])) DupRow = PreviousRowJ - } - if(is.na(DupRow)) AgeReads2 = rbind(AgeReads2, c(1, AgeReads[RowI,])) - # Add new row to AgeReads2 - if(!is.na(DupRow)) AgeReads2[DupRow,1] = AgeReads2[DupRow,1] + 1 - # Increment number of samples for the previous duplicate - } - - ######## Determine settings for ADMB - - # Generate vector with settings for Bias - # One entry for each reader - # -X = Mirror the parameters for reader X - # 0 = Unbiased (at least 1 reader has to be) - # 1 = Linear bias - # 2 = Curvilinear bias (3 param) - BiasOpt = c(0,-1,2,-3) - - # Generate vector with settings for SD - # One entry for each reader - # -X = Mirror the parameters for reader X - # 0 = No error - # 1 = Constant coefficient of variation - # 2 = Curvilinear standard deviation (3 param) - # 3 = Curvilinear coefficient of variation (3 param) - SigOpt = c(3,-1,3,-3) - - # Define minimum and maximum ages for integral across unobserved ages - MinAge = 1 - MaxAge = ceiling(max(AgeReads2)/10)*10 - - # Run the model - # Data=AgeReads2; SigOpt=SigOpt; BiasOpt=BiasOpt; - # NDataSets=1; MinAge=MinAge; MaxAge=MaxAge; - # RefAge=10; MinusAge=1; PlusAge=30; MaxSd=40; - # MaxExpectedAge=MaxAge+10; SaveFile=DateFile; - # AdmbFile=SourceFile; EffSampleSize=0; Intern=TRUE - RunFn(Data = AgeReads2, SigOpt = SigOpt, BiasOpt = BiasOpt, - NDataSets = 1, MinAge = MinAge, MaxAge = MaxAge, RefAge = 10, - MinusAge = 1, PlusAge = 30, SaveFile = DateFile, AdmbFile = SourceFile, - EffSampleSize = 0, Intern = FALSE, JustWrite = FALSE - ) - - # Plot output - # Data = AgeReads2; MaxAge = MaxAge; SaveFile = DateFile; PlotType = "PDF" - PlotOutputFn(Data = AgeReads2, MaxAge = MaxAge, SaveFile = DateFile, - PlotType = "PDF" - ) -} - -} -\references{ -Punt, A.E., Smith, D.C., KrusicGolub, K., and Robertson, S. 2008. -Quantifying age-reading error for use in fisheries stock assessments, -with application to species in Australias southern and eastern scalefish and shark fishery. -Canadian Journal of Fisheries and Aquatic Sciences 65: 1991-2005. -} diff --git a/man/plot_output.Rd b/man/plot_output.Rd new file mode 100644 index 0000000..b5c7e2c --- /dev/null +++ b/man/plot_output.Rd @@ -0,0 +1,52 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/plot_output.R +\name{plot_output} +\alias{plot_output} +\title{Plot output} +\usage{ +plot_output( + Data, + IDataSet, + MaxAge, + Report, + subplot = 1:3, + Nparameters = 0, + LogLike = 0, + ReaderNames = NULL, + Species = "AgeingError", + SaveDir = getwd(), + verbose = FALSE, + ... +) +} +\arguments{ +\item{Data}{Input data matrix} + +\item{MaxAge}{Maximum estimated age} + +\item{subplot}{Vector of which plots to create.} + +\item{ReaderNames}{Vector with names of each reader, defaults to +'Reader1', 'Reader2', etc. if left at the default argument of \code{NULL}. +If you pass a vector of strings, the vector must be the same length as +\code{NCOL(Data) - 1}.} + +\item{...}{Additional arguments passed to \code{\link[=ageing_comparison]{ageing_comparison()}}.} + +\item{SaveFile}{Directory for fitted model} +} +\value{ +Returns AIC, AICc, and BIC for fitted model. +} +\description{ +Plots age comparisons and results from the fitted Ageing Error model +} +\references{ +Punt, A.E., Smith, D.C., KrusicGolub, K., and Robertson, S. 2008. +Quantifying age-reading error for use in fisheries stock assessments, +with application to species in Australias southern and eastern scalefish +and shark fishery. Can. J. Fish. Aquat. Sci. 65: 1991-2005. +} +\author{ +James T. Thorson, Ian G. Taylor +} diff --git a/man/run.Rd b/man/run.Rd new file mode 100644 index 0000000..8e20037 --- /dev/null +++ b/man/run.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/run.R +\name{run} +\alias{run} +\title{Run ageing error routine} +\usage{ +run(file_data, file_specs, directory) +} +\arguments{ +\item{file_data}{A string specifying the file path to a data file.} + +\item{file_specs}{A string specifying the file path to the specifications +file.} + +\item{directory}{A string specifying a file path to a directory where you +would like to save the results.} +} +\value{ +Invisibly return model output. +} +\description{ +A wrapper for running a TMB model to estimate ageing error for a given data +set and specification file. +} +\author{ +Kelli F. Johnson +} diff --git a/src/AgeingError.cpp b/src/AgeingError.cpp new file mode 100644 index 0000000..6750754 --- /dev/null +++ b/src/AgeingError.cpp @@ -0,0 +1,422 @@ +#define TMB_LIB_INIT R_init_AgeingError +#include + +template +struct general{ + vector BiasOpt; // Bias specifications by reader + vector SigOpt; // SD specifications by reader + vector RefAge; // Reference age by data set + vector MinusA; // Minus group + vector PlusA; // Plus group + vector Iperfect; // Is the current reader perfect (1) or not (0) + matrix xvals; // x-values for spline model + vector nknots; // number of knots (spline model) + matrix xvalsL; // x-values for linear model + vector nknotsL; // number of knots (linear model) + int NDataSet; + int MaxReader; + int MaxAge; + int MinAge; +}; + + + +//============================================================================================= + +template + Type Create_Bias_and_CV(general &gen, vector BiasPar, vector SDPar, matrix &TheBias, matrix &TheSD) { + int Ioff, BiasOption, SigOption, AgeA; + Type Mult, Par1, Par2, Par3, Temp; + + // Specify the year-specific sigmas bias + Ioff = 0; + for (int Ireader=0;Ireader x(gen.nknots(Ireader)); + vector VyI(gen.nknots(Ireader)); + for (int II = 0; II spline(x,VyI,3); + for (int Age1=0;Age1<=gen.MaxAge;Age1++) + { + if (Age1 == 0) AgeA = 1; else AgeA = Age1; + Temp2 = float(AgeA); + Temp2 = spline(Temp2); + TheSD(Ireader,Age1) = sqrt(Temp2*Temp2); + } + } + + // Linear interpolation + if (SigOption == 6) + { + Type Par1; Type Par2; + vector x(gen.nknotsL(Ireader)); + vector VyI(gen.nknotsL(Ireader)); + for (int II = 0; II + Type Determine_Relative_Prob(general &gen, vector Probs, vector Slope, matrix &Aprob, Type &Penal) { + int Ioff, Joff; + Type Total, Temp; + + Ioff = 0; Joff = 0; + Aprob.setZero(); + Penal = 0; + for (int IDataSet=0;IDataSet gen.MinAge) Joff += 1; + for (int Age1=gen.PlusA(IDataSet)+1;Age1<=gen.MaxAge;Age1++) + { + Temp = Slope(Joff)*(Age1-gen.PlusA(IDataSet)); + Aprob(IDataSet,Age1) = Aprob(IDataSet,gen.PlusA(IDataSet))*exp(Temp); + Total += Aprob(IDataSet,Age1); + } + if (gen.PlusA(IDataSet) < gen.MaxAge) Joff += 1; + + // Normalize + for (int Age1=0;Age1<=gen.MaxAge;Age1++) Aprob(IDataSet,Age1) /= Total; + } + } + + Type XX; + XX = 5.0; + return XX; + } + +// ----------------------------------------------------------------------------- + +template + Type Create_Error_Mats(general &gen, array &AgeErrOut,matrix &TheBias, matrix &TheSD, matrix &Aprob) { + vector tmp1(gen.MaxAge+1); + Type tot,SDD1,Diff,PassOut,Total,PassIn,tmp; + + // Matrices are constructed to match Synthesis + for (int Ireader=0;Ireader +Type objective_function::operator() () +{ + general General; + DATA_INTEGER(NDataSet); General.NDataSet = NDataSet; + DATA_INTEGER(MinAge); General.MinAge = MinAge; + DATA_INTEGER(MaxAge); General.MaxAge = MaxAge; + DATA_IVECTOR(BiasOpt); General.BiasOpt = BiasOpt; + DATA_IVECTOR(SigOpt); General.SigOpt = SigOpt; + DATA_INTEGER(MaxReader); General.MaxReader = MaxReader; + DATA_IVECTOR(MinusA); General.MinusA = MinusA; + DATA_IVECTOR(PlusA); General.PlusA = PlusA; + DATA_IVECTOR(RefAge); General.RefAge = RefAge; + DATA_IVECTOR(Iperfect); General.Iperfect = Iperfect; + DATA_IVECTOR(nknots); General.nknots = nknots; + DATA_IMATRIX(xvals); General.xvals = xvals; + DATA_IVECTOR(nknotsL); General.nknotsL = nknotsL; + DATA_IMATRIX(xvalsL); General.xvalsL = xvalsL; + DATA_IARRAY(TheData); + DATA_IVECTOR(Npnt); + DATA_IVECTOR(Nread); + DATA_INTEGER(MaxNpnt); + DATA_IMATRIX(ReadPnt); + DATA_SCALAR(AprobWght); + DATA_SCALAR(SlopeWght); + + PARAMETER_VECTOR(BiasPar); + PARAMETER_VECTOR(SDPar); + PARAMETER_VECTOR(Slope); + PARAMETER_VECTOR(Probs); + PARAMETER(Dummy); + + matrix TheBias(MaxReader,MaxAge+1); // Bias (note MaxAge+1 because we start at age zero) + TheBias.setZero(); + matrix TheSD(MaxReader,MaxAge+1); // Standard deviation (note MaxAge+1 because we start at age zero) + TheSD.setZero(); + matrix Aprob(NDataSet,MaxAge+1); // Relative probabilities + Aprob.setZero(); + arrayAgeErrOut(MaxReader,MaxAge+1,MaxAge+1); // Ageing error matrix + AgeErrOut.setZero(); + + matrix Resu(NDataSet,MaxNpnt); // Results matrix + vector Obj_fun(NDataSet); // Objective function by data set + Type Weight,Prob1,Prob2; // Temps + Type f; // Objective function + Type Penal,PenalSlope; // Penalty function + Type XX; // Passing variable + int AgeA,AgeTrue,Jreader; + + + // Get the bias and age-reading error CVs + XX = Create_Bias_and_CV(General,BiasPar,SDPar,TheBias,TheSD); + + // Determine the relative probability by age-class + XX = Determine_Relative_Prob(General, Probs, Slope, Aprob, Penal); + + // Compute the error matrices + XX = Create_Error_Mats(General,AgeErrOut,TheBias,TheSD,Aprob); + + // Loop over all data sets + f = 0; + Obj_fun.setZero(); + for (int IDataSet=0;IDataSet= 0) + { + AgeA = TheData(IDataSet,Ipnt,Ireader); + Jreader = ReadPnt(IDataSet,Ireader-1); + Prob2 *= AgeErrOut(Jreader-1,Age1,AgeA); + } + Prob1 += Prob2; + } + } + + // Probability associated observed data (a perfect reader) + if (Iperfect(IDataSet) != 0) + { + // True age of this ageing structure + AgeTrue = TheData(IDataSet,Ipnt,Iperfect(IDataSet)); + + // Prior probability * product over readers + Prob1 = 1; + for (int Ireader=1;Ireader<=Nread(IDataSet);Ireader++) + if (TheData(IDataSet,Ipnt,Ireader) >= 0 & Iperfect(IDataSet) != Ireader) + { + AgeA = TheData(IDataSet,Ipnt,Ireader); + Jreader = ReadPnt(IDataSet,Ireader-1); + Prob1 *= AgeErrOut(Jreader-1,AgeTrue,AgeA); + } + } + Resu(IDataSet,Ipnt) = Prob1; + Obj_fun(IDataSet) += Weight*log(Prob1+1.0e-100); + } + f += Obj_fun(IDataSet); + //std::cout << Obj_fun(IDataSet) << " " << f << std::endl; + } + + // Penaly of slopes + PenalSlope = 0; + for (int II=0;II - #include - #include - dvar_vector spline(const dvector &_x,const dvar_vector&_y,dvariable yp1, - dvariable ypn); - time_t start,finish; - long hour,minute,second; - double elapsed_time; - ofstream EchoFile; - -// ===================================================================== - -TOP_OF_MAIN_SECTION - arrmblsize = 500000000; - gradient_structure::set_GRADSTACK_BUFFER_SIZE(20000000); - gradient_structure::set_CMPDIF_BUFFER_SIZE(15000000); - gradient_structure::set_MAX_NVAR_OFFSET(2000); - gradient_structure::set_NUM_DEPENDENT_VARIABLES(2000); - time(&start); - - EchoFile.open("Echo.Out"); - -// ===================================================================== - -DATA_SECTION - int Ireader; - int IDataSet; - int IDataS; - int IDcnt; - int MaxCells - - !! cout << "Age-reading estimation; August 2020" << endl; - - init_int MaxReader; - !! EchoFile << "# Maximum readers: " << MaxReader << endl; - init_int NDataSet; - !! EchoFile << "# Number of data sets: " << NDataSet << endl; - init_ivector Npnt(1,NDataSet); - vector TotalN(1,NDataSet); - vector EffN(1,NDataSet); - !! EchoFile << "# Number of points per data file: " << Npnt << endl; - init_ivector Nread(1,NDataSet); - !! EchoFile << "# Number of readers per data file: " << Nread << endl; - init_imatrix ReadPnt(1,NDataSet,1,Nread) - !! EchoFile << "# Readers per data set: " << endl << ReadPnt << endl; - init_int MinAge; - !! EchoFile << "# Lowest age: " << MinAge << endl; - init_int MaxAge; - !! EchoFile << "# Maxage age: " << MaxAge << endl; - init_ivector RefAge(1,NDataSet); - !! EchoFile << "# RefAge (by data set): " << RefAge << endl; - init_ivector MinusA(1,NDataSet); - !! EchoFile << "# First age with estimated proportion (by data set): " << MinusA << endl; - init_ivector PlusA(1,NDataSet); - !! EchoFile << "# Last age with estimated proportion (by data set): " << PlusA << endl; - init_ivector BiasOpt(1,MaxReader); - !! EchoFile << "# Bias options (by READER): " << BiasOpt << endl; - init_ivector SigOpt(1,MaxReader); - !! EchoFile << "# Sigma options (by READER): " << SigOpt << endl; - init_vector EffNOpt(1,NDataSet) - !! EchoFile << "# Effective sample size by data set (<0 ignore): " << EffNOpt << endl; - init_int UseParFile; - !! EchoFile << "# Use PIN file (1 = Yes): " << UseParFile << endl; - - ivector Nreads(1,NDataSet) - int NDataSetWithoutPerfect; // Number of data sets for which the answer is not known - ivector Iperfect(1,NDataSet); // one if there is no perfect reading in this dataset - !! NDataSetWithoutPerfect = 0; - !! for (IDataS=1;IDataS<=NDataSet;IDataS++) - !! { - !! Nreads(IDataS) = 0; Iperfect(IDataS) = 0; - !! for (int II=1; II<=Nread(IDataS);II++) - !! { - !! if (ReadPnt(IDataS,II) > 0) - !! { - !! Nreads(IDataS) += 1; - !! if (SigOpt(ReadPnt(IDataS,II)) == 4) Iperfect(IDataS) = II; - !! } - !! } - !! if (Iperfect(IDataS) == 0) NDataSetWithoutPerfect += 1; else cout << "Age reader " << Iperfect(IDataS) << " is known age" << endl; - !! - !! } - - - // Set up bias estimation - int NumBias; - !! NumBias = 0; - !! for (Ireader=1;Ireader<=MaxReader;Ireader++) - !! { - !! if (BiasOpt(Ireader) == 1) NumBias += 1; - !! if (BiasOpt(Ireader) == 2) NumBias += 3; - !! } - !! EchoFile << "Number of bias parameters " << NumBias << endl; - - // Parameters defining Bias - vector Bias_LO(1,NumBias); - vector Bias_HI(1,NumBias); - vector Bias_INIT(1,NumBias); - ivector Bias_Phase(1,NumBias); - !! for (IDcnt=1;IDcnt<= NumBias;IDcnt++) - !! *(ad_comm::global_datafile) >> Bias_LO(IDcnt) >> Bias_HI(IDcnt) >> Bias_INIT(IDcnt) >> Bias_Phase(IDcnt); - - // Set up Sigma estimation - int NumSig; - !! NumSig = 0; - !! for (Ireader=1;Ireader<=MaxReader;Ireader++) - !! { - !! if (SigOpt(Ireader) == 1) NumSig += 1; - !! if (SigOpt(Ireader) == 2) NumSig += 3; - !! if (SigOpt(Ireader) == 3) NumSig += 3; - !! } - - // parameters defining Sigmas (Spline) - matrix xvals(1,MaxReader,1,100); - ivector nknots(1,MaxReader); - !! for (Ireader = 1; Ireader <=MaxReader; Ireader++) - !! if (SigOpt(Ireader) == 5) - !! { - !! *(ad_comm::global_datafile) >> nknots(Ireader); - !! NumSig = NumSig + nknots(Ireader) + 2; - !! for (IDcnt=1;IDcnt<=nknots(Ireader);IDcnt++) *(ad_comm::global_datafile) >> xvals(Ireader,IDcnt); - !! EchoFile << "Spline used to define SD for reader " << Ireader << endl; - !! EchoFile << "Selected knots are located at "; - !! for (IDcnt=1;IDcnt<=nknots(Ireader);IDcnt++) EchoFile << xvals(Ireader,IDcnt) << " "; - !! EchoFile << endl; - !! } - - // parameters defining Sigmas (Linear Interpolation) - imatrix xvalsL(1,MaxReader,1,100); - ivector nknotsL(1,MaxReader); - !! for (Ireader = 1; Ireader <=MaxReader; Ireader++) - !! if (SigOpt(Ireader) == 6) - !! { - !! *(ad_comm::global_datafile) >> nknotsL(Ireader); - !! NumSig = NumSig + nknotsL(Ireader); - !! for (IDcnt=1;IDcnt<=nknotsL(Ireader);IDcnt++) *(ad_comm::global_datafile) >> xvalsL(Ireader,IDcnt); - !! if (xvalsL(Ireader,1) != 1) { cout << "First age must be 1" << endl; exit(1); } - !! if (xvalsL(Ireader,nknotsL(Ireader)) != MaxAge) { cout << "last age must be MaxAge" << endl; exit(1); } - !! EchoFile << "Linear interpolation used to define SD for reader " << Ireader << endl; - !! EchoFile << "Selected knots are located at "; - !! for (IDcnt=1;IDcnt<=nknotsL(Ireader);IDcnt++) EchoFile << xvalsL(Ireader,IDcnt) << " "; - !! EchoFile << endl; - !! } - - !! EchoFile << "Number of variance parameters " << NumSig << endl; - - // Parameters defining Sigmas - vector Sigma_LO(1,NumSig); - vector Sigma_HI(1,NumSig); - vector Sigma_INIT(1,NumSig); - ivector Sigma_Phase(1,NumSig); - !! for (IDcnt=1;IDcnt<= NumSig;IDcnt++) - !! *(ad_comm::global_datafile) >> Sigma_LO(IDcnt) >> Sigma_HI(IDcnt) >> Sigma_INIT(IDcnt) >> Sigma_Phase(IDcnt); - - // Bounds and phases for the probability parameters - init_number Prob_Low; - init_number Prob_Hi; - init_number Prob_Phase; - - // Determine the number of parameters that should be estimated - int Nprobs; - int Nslops; - !! Nprobs = 0; Nslops = 0; - !! for (IDataS = 1; IDataS <=NDataSet; IDataS++) - !! if (Iperfect(IDataS) == 0) - !! { - !! Nprobs += PlusA(IDataS) - MinusA(IDataS); - !! if (MaxAge > PlusA(IDataS)) Nslops += 1; - !! if (MinAge < MinusA(IDataS)) Nslops += 1; - !! } - - // Parameters defining Slopes - vector Slope_LO(1,Nslops); - vector Slope_HI(1,Nslops); - vector Slope_INIT(1,Nslops); - ivector Slope_Phase(1,Nslops); - !! for (IDcnt=1;IDcnt<= Nslops;IDcnt++) - !! *(ad_comm::global_datafile) >> Slope_LO(IDcnt) >> Slope_HI(IDcnt) >> Slope_INIT(IDcnt) >> Slope_Phase(IDcnt); - - init_3darray TheData(1,NDataSet,1,Npnt,0,Nread) - !! EchoFile << endl << "The data" << endl << TheData << endl; - - // ----------------------------------------------------------------------------- - - // Find minimum and maximum ages in the data sets - number MiAge; - number MaAge; - int NegVals - !! MaAge = -1;MiAge = 1000; - !! NegVals = 0; - !! for (IDataS=1;IDataS<=NDataSet;IDataS++) - !! for (int Ipnt=1;Ipnt<=Npnt(IDataS);Ipnt++) - !! for (Ireader=1;Ireader<=Nread(IDataS);Ireader++) - !! if (TheData(IDataS,Ipnt,Ireader) >= 0) - !! { - !! if (TheData(IDataS,Ipnt,Ireader) > MaAge) MaAge = TheData(IDataS,Ipnt,Ireader); - !! if (TheData(IDataS,Ipnt,Ireader) < MiAge) MiAge = TheData(IDataS,Ipnt,Ireader); - !! } - !! else - !! NegVals = 1; - !! if (NegVals == 1) cout << "Warning - there are some missing data; the effective sample size calculation may be dubious" << endl; - - // Storage requirements - int NOutVal; - !! NOutVal = (MaxReader + NumBias)*(MaxAge+1); - - int Nfunction; - !! Nfunction = 0; - - ivector Ages(1,MaxReader); - vector AgesR(1,MaxReader); - vector x(1,10); - int PhaseDummy; - !! PhaseDummy = -1; - - init_int TestVal; - !! if (TestVal != 123456) { cout << "Test Number is not 123456; it is " << TestVal << endl; exit(1); } - !! EchoFile << TestVal << endl; - - !! EchoFile << "Structure of the data set" << endl; - !! EchoFile << "Data set # Entries Reader boolean" << endl; - imatrix ReaderStruc(1,1000,-1,MaxReader); - !! ReaderStruc.initialize(); - ivector Presense(1,MaxReader); - int NrowStruc; - int Ifound; int Jfound; - imatrix ReaderSumm(1,NDataSet,1,3); - !! ReaderSumm.initialize(); - !! NrowStruc = 0; - !! for (IDataS=1;IDataS<=NDataSet;IDataS++) - !! for (int II=1; II<=Npnt(IDataS);II++) - !! { - !! Presense.initialize(); - !! for (Ireader=1;Ireader<=Nread(IDataS);Ireader++) - !! if (TheData(IDataS,II,Ireader) >= 0) Presense(Ireader) = ReadPnt(IDataS,Ireader); - !! Ifound = 0; - !! for (int JJ=1;JJ<=NrowStruc;JJ++) - !! if (ReaderStruc(JJ,-1) == IDataS) - !! { - !! Jfound = 1; - !! for (Ireader=1;Ireader<=Nread(IDataS);Ireader++) - !! if (Presense(Ireader) != ReaderStruc(JJ,Ireader)) Jfound = 0; - !! if (Jfound==1) Ifound = JJ; - !! } - !! if (Ifound==0) - !! { - !! NrowStruc += 1; - !! ReaderStruc(NrowStruc,-1) = IDataS; - !! ReaderStruc(NrowStruc,0) = 1; - !! ReaderSumm(IDataS,3) += 1; - !! for (Ireader=1;Ireader<=Nread(IDataS);Ireader++) ReaderStruc(NrowStruc,Ireader) = Presense(Ireader); - !! } - !! else - !! { - !! ReaderStruc(Ifound,0) += 1; - !! } - !! } - !! for (int II=1;II<=NrowStruc;II++) EchoFile << ReaderStruc(II) << endl; - int MaxReaderOpt; - !! for (int II=1;II<=NrowStruc;II++) - !! { - !! IDataS = ReaderStruc(NrowStruc,-1); - !! ReaderSumm(IDataS,1) = IDataS; - !! MaxReaderOpt = 0; - !! for (Ireader=1;Ireader<=Nread(IDataS);Ireader++) if (ReaderStruc(NrowStruc,Ireader) >0) MaxReaderOpt += 1; - !! if (MaxReaderOpt > ReaderSumm(IDataS,2)) ReaderSumm(IDataS,2) = MaxReaderOpt; - !! } - !! - !! EchoFile << "ReaderSumm" << endl; - !! EchoFile << ReaderSumm << endl; - - !! cout << "Number of reads by data set: " << Nreads << endl; - !! cout << "Data sets without perfect readers: " << NDataSetWithoutPerfect << endl; - !! cout << "Minimum and Maximum Ages: " << MiAge << " " << MaAge << endl; - -// ========================================================================= -// ========================================================================= - -PARAMETER_SECTION - init_bounded_number_vector SDPar(1,NumSig,Sigma_LO,Sigma_HI,Sigma_Phase); - init_bounded_number_vector BiasPar(1,NumBias,Bias_LO,Bias_HI,Bias_Phase); - init_bounded_vector Probs(1,Nprobs,Prob_Low,Prob_Hi,Prob_Phase) - init_bounded_number_vector Slope(1,Nslops,Slope_LO,Slope_HI,Slope_Phase); - init_number dummy(PhaseDummy); - - vector Obj_fun(1,NDataSet); - objective_function_value obj_f; - - matrix Aprob(1,NDataSet,0,MaxAge) - matrix TheBias(1,MaxReader,0,MaxAge) - matrix TheSD(1,MaxReader,0,MaxAge) - matrix Resu(1,NDataSet,1,Npnt) - number Penal; - - 3darray AgeErrOut(1,MaxReader,0,MaxAge,0,MaxAge) - - number PassIn; - number PassOut; - - sdreport_vector AllOut(1,NOutVal); - -// ========================================================================= -// ========================================================================= - -PRELIMINARY_CALCS_SECTION - dvector AgFreq(0,MaxAge); - float Normal,Weight; - int Age,Ipnt,AgeA,AgeB,AgeC,IDataSet,Jpnt,Iread,II; - int JJ,Problem,OneProblem,Ifound,NLineOut,Ncells; - - // Set initial values to the values in the DAT file - if (UseParFile != 1) - { - - // Copy initial values - for (JJ=1;JJ<=NumSig;JJ++) SDPar(JJ) = Sigma_INIT(JJ); - for (JJ=1;JJ<=NumBias;JJ++) BiasPar(JJ) = Bias_INIT(JJ); - for (JJ=1;JJ<=Nslops;JJ++) Slope(JJ) = Slope_INIT(JJ); - - // Initialize the proportion parameters - Jpnt = 0; - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - if (Iperfect(IDataSet) == 0) - { - AgFreq.initialize(); - for (Ipnt=1;Ipnt<=Npnt(IDataSet);Ipnt++) - for (Iread=1;Iread<=Nread(IDataSet);Iread++) - if (TheData(IDataSet,Ipnt,Iread) >= 0) - AgFreq(TheData(IDataSet,Ipnt,Iread)) += float(TheData(IDataSet,Ipnt,0)); - Normal = AgFreq(RefAge(IDataSet)); - for (Age=MinusA(IDataSet);Age<=PlusA(IDataSet);Age++) - AgFreq(Age) = log( (AgFreq(Age)+0.1)/Normal); - - for (Age=MinusA(IDataSet);Age<=RefAge(IDataSet)-1;Age++) { Jpnt++; Probs(Jpnt) = AgFreq(Age); } - for (Age=RefAge(IDataSet)+1;Age<=PlusA(IDataSet);Age++) { Jpnt++; Probs(Jpnt) = AgFreq(Age); } - } - } - - // Record total sample size and specify effective Ns - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - { - TotalN(IDataSet) = 0; - for (Ipnt=1;Ipnt<=Npnt(IDataSet);Ipnt++) TotalN(IDataSet) += TheData(IDataSet,Ipnt,0); - } - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - if (EffNOpt(IDataSet) <= 0) EffN(IDataSet) = TotalN(IDataSet); else EffN(IDataSet) = EffNOpt(IDataSet); - - // Check for duplicates and condense as needed - OneProblem = 0; - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - { - Problem = 0; - for (II=1;II<=Npnt(IDataSet);II++) - { - for (JJ=1;JJ<=(II-1);JJ++) - if (TheData(IDataSet,JJ,0) > 0) - { - Ifound = 0; - for (Iread=1;Iread<=Nread(IDataSet);Iread++) if (TheData(IDataSet,JJ,Iread) != TheData(IDataSet,II,Iread)) Ifound = 1; - if (Ifound == 0) - { - cout << "Warning: Lines " << II << " and " << JJ << " have the same ages" << endl; - TheData(IDataSet,JJ,0) += TheData(IDataSet,II,0); - TheData(IDataSet,II,0) = -1; - Problem = 1; - } - } - } - if (Problem == 1) - { - cout << "Duplicate entries found for data set " << IDataSet << "; corrected data set in Echo.Out" << endl; - EchoFile << "Duplicate entries found for data set " << IDataSet << "; corrected data set follows" << endl; - NLineOut = 0; - for (II=1;II<=Npnt(IDataSet);II++) - if (TheData(IDataSet,II,0) > 0) { NLineOut++; EchoFile << TheData(IDataSet,II) << endl; } - EchoFile << "New lines" << NLineOut << endl; - OneProblem = 1; - } - } - if (OneProblem == 1) exit(1); - - // Counter for storage - MaxCells = 1; - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - { - Ncells = 1; for (Ireader=1;Ireader<=ReaderSumm(IDataS,2);Ireader++) { Ncells *= (MaxAge+1); } - if (Ncells > MaxCells) MaxCells = Ncells; - } - cout << "total cells " << MaxCells << endl; - - cout << "Done Preliminary Calcs" << endl; - -// ========================================================================= -// ========================================================================= - -PROCEDURE_SECTION - int Ipnt,AgeA,Age1,IDataSet,Jreader; - dvariable Term1,Weight,Prob1,Prob2; - - Nfunction += 1; - - // Initialize - Aprob.initialize(); - Penal.initialize(); - - // Get Bias and age-reading error CVs - Create_Bias_and_CV(); - - // Get Relative numbers by age - Determine_Relative_Prob(); - - // Create the age-reading error matrices - Create_Error_Mats(); - - // Create the aging error matrices - obj_f = 0; - Obj_fun.initialize(); - Resu.initialize(); - - // Loop over all data sets - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - { - - // Loop over points within data sets - for (Ipnt=1;Ipnt<=Npnt(IDataSet);Ipnt++) - { - Weight = TheData(IDataSet,Ipnt,0)*EffN(IDataSet)/TotalN(IDataSet); - - // Probability associated observed data (no perfect reader) - if (Iperfect(IDataSet) == 0) - { - Prob1 = 0; - for (Age1=MinAge;Age1<=MaxAge;Age1++) - { - // Prior probability * product over readers - Prob2 = Aprob(IDataSet,Age1); - for (Ireader=1;Ireader<=Nread(IDataSet);Ireader++) - if (int(TheData(IDataSet,Ipnt,Ireader)) >= 0) - { - AgeA = int(TheData(IDataSet,Ipnt,Ireader)); - Jreader = ReadPnt(IDataSet,Ireader); - Prob2 *= AgeErrOut(Jreader,Age1,AgeA); - } - Prob1 += Prob2; - } - } - - // Probability associated observed data (a perfect reader) - if (Iperfect(IDataSet) != 0) - { - // True age of this ageing structure - Age1 = int(TheData(IDataSet,Ipnt,Iperfect(IDataSet))); - - // Prior probability * product over readers - Prob1 = 1; - for (Ireader=1;Ireader<=Nread(IDataSet);Ireader++) - if (int(TheData(IDataSet,Ipnt,Ireader)) >= 0 & Iperfect(IDataSet) != Ireader) - { - AgeA = int(TheData(IDataSet,Ipnt,Ireader)); - Jreader = ReadPnt(IDataSet,Ireader); - Prob1 *= AgeErrOut(Jreader,Age1,AgeA); - } - } - Resu(IDataSet,Ipnt) = Prob1; - Obj_fun(IDataSet) += Weight*log(Prob1+1.0e-100); - } - obj_f += Obj_fun(IDataSet); - } - obj_f = -1*obj_f+0.0001*Penal + 0.01*sum(square(Slope)); - obj_f += dummy*dummy; - - cout << current_phase() << " " << Nfunction << " " << obj_f << " " << Obj_fun << endl; - -// =========================================================================== - -FUNCTION Create_Bias_and_CV - int Ireader,Ioff,Ioff3,Ioff4,IestRead,II,Iknot; - int Age1,AgeA,BiasOption,SigOption; - dvariable Temp,Par1,Par2,Par3,Mult,ypn,yp1; - - // Specify the year-specific biases - Ioff = 1; IestRead = MaxReader-1; - for (Ireader=1;Ireader<=MaxReader;Ireader++) - { - BiasOption = BiasOpt(Ireader); - - if (BiasOption == 1) - { Mult = BiasPar(Ioff); Ioff++; } - if (BiasOption == 2) - { - Par1 = BiasPar(Ioff); - Par2 = BiasPar(Ioff+1); - Par3 = BiasPar(Ioff+2); - Temp = (Par3-Par1)/(1.0-mfexp(-Par2*(float(MaxAge)-1))); - Ioff += 3; - } - for (Age1=0;Age1<=MaxAge;Age1++) - { - if (BiasOption == 0) TheBias(Ireader,Age1) = float(Age1)+0.5; - if (BiasOption == 1) TheBias(Ireader,Age1) = Mult*(0.5+Age1); - if (BiasOption == 2) TheBias(Ireader,Age1) = 0.5+Par1 + Temp*(1.0-mfexp(-Par2*(float(Age1)-1))); - if (BiasOption == 4) TheBias(Ireader,Age1) = float(Age1)+0.5; - if (BiasOption == 5) TheBias(Ireader,Age1) = float(Age1)+0.5; - if (BiasOption < 0) TheBias(Ireader,Age1) = TheBias(-1*BiasOption,Age1); - } - // Record the estimated bias value - if (BiasOption > 0) - { - IestRead += 1; - for (Age1=0;Age1<=MaxAge;Age1++) - AllOut(IestRead*(MaxAge+1)+Age1+1) = TheBias(Ireader,Age1); - } - } - - // Specify the year-specific sigmas - Ioff = 1; - for (Ireader=1;Ireader<=MaxReader;Ireader++) - { - SigOption = SigOpt(Ireader); - - // Use the pattern for another reader - if (SigOption < 0) - { - for (Age1=0;Age1<=MaxAge;Age1++) - TheSD(Ireader,Age1) = TheSD(-1*SigOption,Age1); - } - - // Parameters relate to the SD (constant CV) - if (SigOption == 1) - { - Mult = SDPar(Ioff); - for (Age1=0;Age1<=MaxAge;Age1++) - { - if (Age1 == 0) AgeA = 1; else AgeA = Age1; - TheSD(Ireader,Age1) = Mult*float(AgeA); - } - Ioff += 1; - } - - // Parameters relate to the SD (Holling Type II) - if (SigOption == 2) - { - Par1 = SDPar(Ioff); - Par2 = SDPar(Ioff+1); - Par3 = SDPar(Ioff+2); - Temp = (Par3-Par1)/(1.0-mfexp(-Par2*(float(MaxAge)-1))); - for (Age1=0;Age1<=MaxAge;Age1++) - { - if (Age1 == 0) AgeA = 1; else AgeA = Age1; - TheSD(Ireader,Age1) = Par1 + Temp*(1.0-mfexp(-Par2*(float(AgeA)-1))); - } - Ioff += 3; - } - - // Parameters relate to the CV - if (SigOption == 3) - { - Par1 = SDPar(Ioff); - Par2 = SDPar(Ioff+1); - Par3 = SDPar(Ioff+2); - Temp = (Par3-Par1)/(1.0-mfexp(-Par2*(float(MaxAge)-1))); - for (Age1=0;Age1<=MaxAge;Age1++) - { - if (Age1 == 0) AgeA = 1; else AgeA = Age1; - TheSD(Ireader,Age1) = (Par1 + Temp*(1.0-mfexp(-Par2*(float(AgeA)-1))))*AgeA; - } - Ioff += 3; - } - - // No error - if (SigOption == 4) - for (Age1=0;Age1<=MaxAge;Age1++) TheSD(Ireader,Age1) = 0; - - // Spline Parameters relate to the CV - if (SigOption == 5) - { - cout << "Spline" << endl; - dvector x(1,nknots(Ireader)); - dvar_vector VyI(1,nknots(Ireader)); - for (II = 1; II<=nknots(Ireader);II++) - { x(II) = xvals(Ireader,II); VyI(II) = mfexp(SDPar(Ioff+II-1)); } - Ioff += nknots(Ireader); - yp1 = SDPar(Ioff); - ypn = SDPar(Ioff+1); - Ioff += 2; - dvar_vector ders = spline(x,VyI,yp1,ypn); - for (Age1=0;Age1<=MaxAge;Age1++) - { - if (Age1 == 0) AgeA = 1; else AgeA = Age1; - TheSD(Ireader,Age1) = sqrt(square(splint(x,VyI,ders,float(AgeA)))); - } - } - - // Linear interpolation - if (SigOption == 6) - { - dvector x(1,nknotsL(Ireader)); - dvar_vector VyI(1,nknotsL(Ireader)); - for (II = 1; II<=nknotsL(Ireader);II++) - { x(II) = float(xvalsL(Ireader,II)); VyI(II) = mfexp(SDPar(Ioff+II-1)); } - Ioff += nknotsL(Ireader); - for (Iknot=1;Iknot<=nknotsL(Ireader)-1;Iknot++) - { - Par1 = (VyI(Iknot+1)-VyI(Iknot))/(x(Iknot+1)-x(Iknot)); - Par2 = VyI(Iknot) - Par1*x(Iknot); - for (Age1=xvalsL(Ireader,Iknot);Age1 20.0) -// PassOut = 1; -// else -// PassOut = cumd_norm(PassIn); - tmp = -20 + 40/(1+mfexp(-0.1*PassIn)); - PassOut = cumd_norm(tmp); - -// =========================================================================== -// =========================================================================== - -FUNCTION Determine_Relative_Prob - dvariable Term1,AllTotal,Total,Temp; - int Age1,Ioff,Joff,AgeA,AgeB,AgeC,IDataSet; - int Alow,Ahi,Alow1,Ahi1,Alow2,Ahi2,Alow3,Ahi3; - int Iread1, Iread2, Iread3; - - Ioff = 1; Joff = 1; - Aprob.initialize(); - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - { - - // Only deal with this for cases where this no perfect reader - if (Iperfect(IDataSet) == 0) - { - Total = 0; - for (Age1=MinusA(IDataSet);Age1<=PlusA(IDataSet);Age1++) - { - if (Age1 != RefAge(IDataSet)) - { - Aprob(IDataSet,Age1) = mfexp(Probs(Ioff)); - Penal += Probs(Ioff)*Probs(Ioff); - Total += Aprob(IDataSet,Age1); - Ioff++; - } - else - { - Aprob(IDataSet,RefAge(IDataSet)) = 1.0; - Total += 1.0; - } - } - for (Age1=MinAge;Age1 MinAge) Joff += 1; - for (Age1=PlusA(IDataSet)+1;Age1<=MaxAge;Age1++) - { - Temp = Slope(Joff)*(Age1-PlusA(IDataSet)); - Aprob(IDataSet,Age1) = Aprob(IDataSet,PlusA(IDataSet))*mfexp(Temp); - Total += Aprob(IDataSet,Age1); - } - if (PlusA(IDataSet) < MaxAge) Joff += 1; - - // Normalize - for (Age1=0;Age1<=MaxAge;Age1++) Aprob(IDataSet,Age1) /= Total; - } - - } - -// =========================================================================== - -FUNCTION Create_Error_Mats - int Ireader,Age1,Age2; - dvariable Temp, Diff,Total, SDD1,Prop,tot; - dvar_vector tmp1(0,MaxAge); - - // Matrices are constructed to match Synthesis - for (Ireader=1;Ireader<=MaxReader;Ireader++) - for (Age1=0;Age1<=MaxAge;Age1++) - { - tmp1.initialize(); tot=0; - SDD1 = TheSD(Ireader,Age1)+1.0e-30; - for (Age2=1;Age2<=MaxAge;Age2++) - { - Diff = float(Age2) - TheBias(Ireader,Age1); - PassIn = Diff/SDD1; cumd_norm2(); tmp1(Age2-1) = PassOut-tot; - tot = PassOut; - } - tmp1(MaxAge) = 1.0 - tot; - Total = 0; - for (Age2=0;Age2<=MaxAge;Age2++) - { - AgeErrOut(Ireader,Age1,Age2) = tmp1(Age2); - Total += tmp1(Age2); - } - for (Age2=0;Age2<=MaxAge;Age2++) AgeErrOut(Ireader,Age1,Age2) /= Total; - } - -// =========================================================================== - -FINAL_SECTION - time(&finish); - elapsed_time = difftime(finish,start); - hour = long(elapsed_time)/3600; - minute = long(elapsed_time)%3600/60; - second = (long(elapsed_time)%3600)%60; - cout << endl << endl << "Starting time: " << ctime(&start); - cout << "Finishing time: " << ctime(&finish); - cout << "This run took: " << hour << " hours, " << minute << " minutes, " << second << " seconds." << endl << endl; - -// =========================================================================== - -REPORT_SECTION - int Age,Ipnt,IDataSet,Ireader,AgeA,AgeB,AgeC,Iread,Jread,Incc; - int Ncells,Ndiv,DivI,DivJ,Age1,II,JJ,KK,Ifound,Jfound,Jreader; - dvariable CVV,EffPred,Nages,TotalProb,Prob1,Prob2,Pobs,Pest,Top,Bot; - dvar_vector ProbStore(1,MaxCells); - - report << obj_f << " " << Obj_fun << endl; - report << "Total number of readers: " << MaxReader << endl; - report << "Number of data sets: " << NDataSet << endl; - report << "Bias options by reader: " << BiasOpt << endl; - report << "Sigma options by reader: " << SigOpt << endl; - - report << "Total objective function: " << obj_f << endl; - report << "Number of readers: " << MaxReader << endl; - report << "Range of ages: " << MinAge << " - " << MaxAge << endl; - for (Ireader=1;Ireader<=NDataSet;Ireader++) - report << "Reader #" << Ireader << " Minus/Plus ages: " << MinusA(Ireader) << " / " << PlusA(Ireader) << endl; - report << "Number of data sets: " << NDataSet << endl; - report << "Number of lines of data per data set: " << Npnt << endl; - report << "Number of data points per data set:" << TotalN << endl; - report << endl; - report << "Reader BiasType SigmaType" << endl; - for (Ireader=1;Ireader<=MaxReader;Ireader++) - report << Ireader << " " << BiasOpt(Ireader) << " " << SigOpt(Ireader) << endl; - report << endl; - - // Bias and variance - report << "Reader Age CV SD Expected age" << endl; - for (Ireader=1;Ireader<=MaxReader;Ireader++) - for (Age=0;Age<=MaxAge;Age++) - { - if (Age > 1) - CVV = TheSD(Ireader,Age)/float(Age); - else - CVV = TheSD(Ireader,Age); - report << Ireader << " " << Age << " " << CVV << " " << TheSD(Ireader,Age) << " " << TheBias(Ireader,Age) << endl; - } - report << endl; - - // Estimated age-structure - report << "Estimated age-structure by data set" << endl; - report << "===================================" << endl; - report << "Age "; for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) report << "Data set#" << IDataSet << " "; report << endl; - for (Age=0;Age<=MaxAge;Age++) - { - report << Age << " "; - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - report << Aprob(IDataSet,Age) << " "; - report << endl; - } - report << endl; - - report << "Final age-reading error matrices" << endl; - for (Ireader=1;Ireader<=MaxReader;Ireader++) - { - report << "Matrix for reader# " << Ireader << endl; - report << AgeErrOut(Ireader) << endl; - } - report << endl; - - // find the effective sample sizes - report << "Compute the effective sample sizes" << endl; - report << "==================================" << endl; - int GroupPointer; - GroupPointer = 0; - if (last_phase()) - for (IDataSet=1;IDataSet<=NDataSet;IDataSet++) - { - report << "Data set: " << IDataSet << endl; - report << "Data_set Group Group Line Readers Obs Obs_probability Pred_Probability" << endl; - Top = 0; Bot = 0; - - for (int Kgroup=1;Kgroup<=ReaderSumm(IDataSet,3);Kgroup++) - { - GroupPointer += 1; - - // Find the total number of combinations of ages (MaxAge+1)**number_of_readers - Ncells = 1; for (Iread=1;Iread<=ReaderSumm(IDataS,2);Iread++) Ncells *= (MaxAge+1); - - // Move through each possible combination of ages between 0 and MaxAge - TotalProb = 0; - for (II=1;II<=Ncells;II++) - { - - // Find the ages for this "cell" - Ndiv = II; - for (Iread=1;Iread<=Nread(IDataSet);Iread++) Ages(Iread) = -1; - for (Iread=1;Iread<=Nread(IDataSet);Iread++) - if (ReaderStruc(GroupPointer,Iread) > 0) - { - DivJ = 1; - for (Jread=Nread(IDataSet);Jread>=Iread+1;Jread--) - if (ReaderStruc(GroupPointer,Jread) > 0) DivJ *= (MaxAge+1); - DivI = (Ndiv-1)/DivJ; - Ages(Iread) = DivI; - Ndiv = Ndiv - DivI*DivJ; - } - - // Find the probability for this cell, i.e. the probability of an ageing reading of Ages(1)&Ages(2)&... - if (Iperfect(IDataSet) == 0) - { - Prob1 = 0; - for (Age1=MinAge;Age1<=MaxAge;Age1++) - { - // Prior probability * product over readers - Prob2 = Aprob(IDataSet,Age1); - for (Ireader=1;Ireader<=Nread(IDataSet);Ireader++) - { - Jreader = ReadPnt(IDataSet,Ireader); - AgeA = Ages(Ireader); - if (AgeA >= 0) Prob2 *= AgeErrOut(Jreader,Age1,AgeA); - } - Prob1 += Prob2; - } - ProbStore(II) = Prob1; - TotalProb += Prob1; - } - else - { - // Product over readers - Age1 = Ages(1); - Prob1 = 1; - for (Ireader=2;Ireader<=Nread(IDataSet);Ireader++) - { - Jreader = ReadPnt(IDataSet,Ireader); - AgeA = Ages(Ireader); - if (Age1 >=0 & AgeA >= 0) Prob1 *= AgeErrOut(Ireader,Age1,AgeA); - } - ProbStore(II) = Prob1; - TotalProb += Prob1; - } - } - - // Now complute - for (II=1;II<=Ncells;II++) - { - - // Find the ages for this "cell" - Ndiv = II; - for (Iread=1;Iread<=Nread(IDataSet);Iread++) Ages(Iread) = -1; - for (Iread=1;Iread<=Nread(IDataSet);Iread++) - if (ReaderStruc(GroupPointer,Iread) > 0) - { - DivJ = 1; - for (Jread=Nread(IDataSet);Jread>=Iread+1;Jread--) - if (ReaderStruc(GroupPointer,Jread) > 0) DivJ *= (MaxAge+1); - DivI = (Ndiv-1)/DivJ; - Ages(Iread) = DivI; - Ndiv = Ndiv - DivI*DivJ; - } - - // Check for a match - Jfound = 0; Pobs = 0; - for (JJ=1;JJ<=Npnt(IDataSet);JJ++) - { - // Set Ifound to 1 if the ages don't match properly - Ifound = 0; - for (Iread=1;Iread<=Nread(IDataSet);Iread++) - if (Ages(Iread) != int(TheData(IDataSet,JJ,Iread)) & int(TheData(IDataSet,JJ,Iread)) >=0) Ifound = 1; - // We have a match so store the results - if (Ifound == 0) - { Pobs = TheData(IDataSet,JJ,0)/ReaderStruc(GroupPointer,0); Jfound = 1; KK = JJ; } - } - - // Find the probability for this cell - Pest = ProbStore(II) / TotalProb+1.0e-190; - if (Jfound == 1) - { - report << "Data Point: " << IDataSet << " " << GroupPointer << " " << Kgroup << " " << KK << " "; - for (Iread=1;Iread<=Nread(IDataSet); Iread++) report << Ages(Iread) << " "; - report << TheData(IDataSet,KK,0) << " " << Pobs << " " << Pest << " " << ReaderStruc(GroupPointer,0) << endl; - } - - // Compute the effective sample size muliplier - Top += Pest*(1-Pest)/float(ReaderStruc(GroupPointer,0)); - Bot += square(Pest-Pobs); - - } - } - EffPred = Top/Bot*TotalN(IDataSet); - report << "Data_Set Predicted_EFF Assumed_Eff Sample_size" << endl; - report << IDataSet << " " << EffPred << " " << EffN(IDataSet) << " " << TotalN(IDataSet) << endl; - if (EffNOpt(IDataSet) < 0) EffN(IDataSet) = value(EffPred); - report << endl; - } - cout << "Completed the Report Section" << endl; - - -// =========================================================================== - -RUNTIME_SECTION - convergence_criteria 1.e-3,1.e-6,1.e-9 - maximum_function_evaluations 1000, 50000 diff --git a/vignettes/getting_started.Rmd b/vignettes/getting_started.Rmd new file mode 100644 index 0000000..ffe11f7 --- /dev/null +++ b/vignettes/getting_started.Rmd @@ -0,0 +1,746 @@ +--- +title: "Estimating ageing error using the TMB model written by André Punt" +author: "Paul Burch based on documentation written by André Punt" +date: "8 September 2023" +output: + html_document: default + word_document: default +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + + +# Introduction + +Uncertainty in age estimates needs to be accounted for when undertaking stock +assessments. Punt et al. (2008) provides methods for estimating ageing error +matrices that account for both ageing bias and imprecision. We provide some +documentation and examples of the Template Model Builder (TMB) implementation +these methods, incorporating documentation written by André Punt. + +This vignette is illustrated using data and settings associated with three stocks in the Australian Southern and Eastern Scalefish and Shark Fishery (SESSF) fishery (Blue Grenadier, Bight Redfish, and School Whiting), as well as sablefish from the U.S. west coast. + +# Software + +The current implementation of the software was written by André Punt in 2020 and +subsequently updated in 2022. There are several slightly different versions of +the source code in circulation, we use the version maintained by Kelli Johnson +(NOAA NWFSC). We have consulted with André Punt and agreed that future +development of the ageing error code should be done through the NWFSC GitHub +repository. + +## Ageing Error R package + +The NOAA Northwest Fisheries Science Center (NWFSC) GitHub site hosts the +`AgeingError` package. The newer TMB version of the software replaced the ADMB +version in the main branch of the repository in May 2024. The ADMB version is +still available via the git history. + +You can install the TMB branch directly from Github using the code below. Note +both TMB and Rtools need to be installed to do this. + +```{r, echo=TRUE, eval=FALSE} +remotes::install_github("pfmc-assessments/AgeingError") +``` + +The package can then be loaded. + +```{r} +library(AgeingError) +``` + +The software requires the data and model are specified using input files which +are described below. + +# Input files + +There are two input files needed to run the software the data file (.dat +extension) and the specifications file (.spc extension). These are described +below using Blue Grenadier (BG2022) as the example. + +## Data file + +The data file (.dat extension) contains the age comparison data by pair of +readers and specifies the range of ages permitted in the data, the minus and +plus groups and the reference age. The data file comprises two or more sections +(the age range then one section for each data pair of reader comparisons) + +The age range is simply specified by providing the minimum and maximum ages. +The data can't fall outside the specified age range or the code will generate +an error. + +The input files are parsed by the software using keywords that need to match +exactly what is expected, so the text "Range_of_ages" is part of the input and +not just a comment to help the user keep track of the format. + +````{verbatim} +Range_of_ages +0 25 +```` + +The data can be entered with a separate data set for each pair of readers, or +a single data set for all pairs of readers. Both these options are described +below. + +### Separate Data Sets + +For each pair of readers (often the first and second reads by the same reader) +there is one section with the header `Data_set_x` (x=1, 2, etc). The four lines +immediately below the header are + +* The number of rows of paired age determinations (described below) +* The number of readers in this data set (always 2 for the SESSF) +* The minus group, plus group, and reference age +* The reader numbers + +The remainder of the data set comprises one row of data for each pair of age +determinations with the following format. The columns for each reader (1-6) +represent an age, while the left most column represents the number of times +that pair of ages were assigned by the two readers. The columns for the other +readers (if any) need to be filled with `-999`. + +````{verbatim} +Data_set_1 +141 # number of lines +2 # Number of readers +1 20 5 # minus group; plus group; reference age + 1 2 3 4 # Which readers +9 0 0 -999 -999 +1 0 10 -999 -999 +153 1 1 -999 -999 +25 1 2 -999 -999 +... +2 23 23 -999 -999 +1 24 23 -999 -999 +2 24 24 -999 -999 +1 25 24 -999 -999 + +```` + +A second (and potentially a third) data set follow the same format as the first +data set, with the data being associated with the next pair of readers (see +below). The headers for each data set need to have headers numbered from 1 to +`NDataSet` which is an input to `CreateData()`. That is, if `NDataSet=3`, the +data file needs to have sections with header `Data_set_1`, `Data_set_2`, and +`Data_set_3`. + +````{verbatim} +Data_set_2 +123 # number of lines +2 # Number of readers +1 20 5 # minus group; plus group; reference age + 3 4 1 2 # which readers +27 1 1 -999 -999 +13 1 2 -999 -999 +3 2 1 -999 -999 +227 2 2 -999 -999 +... +2 22 20 -999 -999 +1 22 21 -999 -999 +1 23 21 -999 -999 +1 23 22 -999 -999 +```` + +### Combined Data Set + +The alternative to having separate data sets for each pair of readers is to +combine multiple pairs of readers in a single data set as shown below. For this +format the number of readers is now 4 and the data for the second pair of readers +follows on from the end of the first pair. + +````{verbatim} +Data_set_1 +264 # number of lines +4 # Number of readers +0 25 5 # minus group; plus group; reference age + 1 2 3 4 # Which readers +9 0 0 -999 -999 +1 0 10 -999 -999 +153 1 1 -999 -999 +30 1 2 -999 -999 +... +1 24 23 -999 -999 +2 24 24 -999 -999 +1 25 24 -999 -999 +27 -999 -999 1 1 +13 -999 -999 1 2 +3 -999 -999 2 1 +... +2 -999 -999 22 20 +1 -999 -999 22 21 +1 -999 -999 23 21 +1 -999 -999 23 22 +```` + +### Other Considerations + +Note that the ages need to be whole numbers in the data file. The C++ code adds +0.5 to each age so the model it fitting to the midpoint of an age bin. + +Different agencies have created R code specific to the format of their ageing +comparison data to format it for this package. For instance CSIRO +uses the R package `SESSFdataproc` and hosts examples are in the assessment +repository `SESSFassessments`. A version of this code is available from CSIRO. +They usually create the data file in Excel (using the summarised output from the +R code) and then paste into a text file. + +The data file is read into R +using the function `CreateData()` which is described in the examples below. + +## Specifications file + +The age-estimates for at least one of the age-readers must be assumed to be +unbiased (sensitivity to the choice of this age-reader should be examined if +there is uncertainty about which age-reader is most likely to be unbiased). +The options for bias and precision are described below and entered into the +specifications file (.spc extension), an example of which is provided after the +description of the model options. + +### Bias options + +The available options for bias are: + +* `-x` Assume that the relationship between expected age and true age is the same as that for reader x. [Note that the ''x'' must be lower than the number of the reader for which bias is being defined. Reader 2 can have `BiasOpt=-1` to match reader 1]. + +* `0` Age-estimates are unbiased. + +* `1` The expected age of an animal of age $a$, $E_a$, is a linear function of its true age, i.e. $E_a =\alpha a$ (constant coefficient of variation). + +* `2` The expected age of an animal of age $a$, $E_a$, is a given by: + +$$E_a = E_L + (E_H - E_L)\frac{1-\text{exp}(-\beta(a-1))}{1-\text{exp}(-\beta(a_{max}-1))}$$. + +The C++ code (`AgeingError.cpp`) also has conditional (if) statements for Bias +options 4 and 5 but these are identical to option 0 (unbiased) and therefore presumably placeholders for some future options. + +In the SESSF we typically assume that all readers are unbiased (`BiasOpt=0`), +however, it is important to check this assumption using the residual plots +(André Punt pers. comm.) + +### Sigma options + +The available options for random ageing precision are: + +* `-x`. Assume that the relationship between the variance of age-reading error and true age is the same as that for reader x [note that ''x'' must be lower than the number of the reader for which bias is being defined]. + +* `1` This option assumes a constant coefficient of variation, it has one parameter that needs to be specified for each pair of independent readers in the specification (.spc) file. The standard deviation of random age-reading error, $\sigma_a$, is a linear function of true age, i.e.: + +$$ + \sigma_a = + \begin{cases} + \gamma & \text{if } a=0 \\ + \gamma a & \text{otherwise} \\ + \end{cases} + $$ + +* `2` The parameters relate to the standard deviation (Michaelis-Menton equation). This option has three parameters that need to be specified for each pair of independent readers in the specification (.spc) file. The standard deviation of random age-reading error, $\sigma_a$, is given by: + +$$ + \sigma_a = + \begin{cases} + \sigma_L + (\sigma_H - \sigma_L)\frac{1}{1-exp(-\delta(a_{max}-1))} & \text{if } a=0 \\ + \sigma_L + (\sigma_H - \sigma_L)\frac{1-exp(-\delta(a-1))}{1-exp(-\delta(a_{max}-1))} & \text{otherwise} \\ + \end{cases} +$$ + + +* `3` The parameters relate to the coefficient of variation (Michaelis-Menton equation). This option has three parameters that need to be specified for each pair of independent readers in the specification (.spc) file. The coefficient of variation of random age-reading error, $CV_a$, is given by: + +$$ + CV_a = + \begin{cases} + CV_L + (CV_H - CV_L)\frac{1}{1-\text{exp}(-\delta(a_{max}-1))} & \text{if } a=0 \\ + CV_L + (CV_H - CV_L)\frac{1-\text{exp}(-\delta(a-1))}{1-\text{exp}(-\delta(a_{max}-1))} & \text{otherwise} \\ + \end{cases} + $$ + +* `4` The estimates of age are exact (use this option for ''known age'' individuals). This option returns a vector of zeroes (or perhaps just a single zero). + +* `5` The standard deviation of random age-reading error, $\sigma_a$, is a spline function of age (a Forsythe, Malcolm, and Moler type spline as implemented by `tmbutils::splinefun()`). The number and location (ages) of the knots must be specified, with the number of parameters equal to the number of knots. Bounds and initial parameters need to be specified in log space. + +* `6` The standard deviation of random age-reading error, $\sigma_a$, is a piecewise linear function of age. The number and location (ages) of the knots must be specified, with the number of parameters equal to the number of knots. Boounds and initial parameters need to be specified in log space. + +* `7` A linear change in the standard deviation of random age-reading error, $\sigma_a$, with age. This option has two parameters that need to be specified for each pair of independent readers in the specifications (.spc) file. + +* `8` A linear change in the coefficient of variation of random age-reading error, $CV_a$ , with age. This option has two parameters that need to be specified for each pair of independent readers in the specifications (.spc) file. + +### Example Specifications file + +The .spc file contains three or four sections: +1. reader specification, +2. knots for splines or breakpoints for piecewise linear functions (if used), +3. bias parameters, and +4. the sigma parameters. + +The first section specifies the Bias and Sigma options for each reader. For each +reader, one line specifies their Bias and Sigma options. `SigmaOpt=-x` is used +to assume the relationship between expected age and true age is the same as that +for reader x [note that the `x` must be lower than the number of the reader +for which bias is being defined]. + +The example below (from Blue Grenadier) shows two pairs of readers (1-2 & 3-4) +who are all specified to be unbiased (`BiasOpt=0`) with readers 1 and 2 having +the same ageing precision `SigmaOpt=2`. This model requires three parameters to +be specified (presumably $\sigma_L$, $\sigma_H$, and $\delta$) for each pair of +readers (in the case of Blue Grenadier the first and second reads from two readers). + +````{verbatim} +# reader BiasOpt SigmaOpt + 1 0 2 + 2 0 -1 + 3 0 2 + 4 0 -3 +```` + +The second (optional) section species the knots for the spline and linear +interpolation models. The example below is taken from School Whiting (`WHS2.spc`). +It specifies five knots with the first and last knots being the minimum and +maximum ages. Note that the text "# Spline specifications" or "# Linear specifications" are required by the code if SigmaOpt options 5 or 6 are used. + +````{verbatim} +# Spline specifications +5 +0 3 5 7 9 + +# Linear specifications +5 +0 3 5 7 9 + +```` + +The next section specifies conditions under which the Bias parameters are +estimated. We need to provide the bounds, initial values and whether the +parameter should be estimated (1) or pre-specified (0) at the initial value. +If `Bias=0` (the case for SESSF stocks) this section is blank (NULL), although +we retain the heading (not sure if the heading is needed). The Sablefish example +(Sable.spc) provides an example of how to implement bias within ageing error +estimation. + +````{verbatim} +Bias_Pars (low high init, on/off) +```` + +The final section specifies conditions under which the Sigma parameters are +estimated. Like above, we need to provide the bounds, initial values and whether +the parameter should be estimated (1). One set of parameter bounds, initial +values and on/off needs to be provide for each group of readers that assume the +same ageing uncertainty (group of `x/-x`). In the example below +(`SigmaOpt=2`) there are three parameters for each pair of readers. + +````{verbatim} +Sigma_Pars (low high init, on/off) + 0 1 0.2 1 # Readers 1 & 2 + 0.01 1 0.2 1 + 0 2 0.5 1 + + 0 1 0.2 1 # Readers 3 & 4 + 0.01 1 0.2 1 + 0 2 0.5 1 +```` + +# Examples + +For the examples we focus on SESSF species, which all specify (`BiasOpt=0`). If +bias in the age readings is suspected, an example of how to implement bias +within ageing error estimation is provided in the Sablefish example (Sable.spc). + +## Blue Grenadier + +Blue Grenadier (_Macruronus novaezelandiae_) is deep water species caught by +trawl in south eastern Australia (Tuck and Bessell-Browne 2022). It has age +readings from two separate +readers who have each re-read their own reads (i.e. there are no inter-reader +comparisons in the production data). In 2022, estimating ageing error for Blue +Grenadier was challenging, requiring removal of problematic data, different +models for each reader and improvements to the model source code. We work +through this example below. + +The function to load the data file into R isn't currently exported from the +ageing error R package so we need to use `:::` to access it. Note we are using +the data file with a single data set so we set `NDataSet=1`. + +```{r} +data_dir <- system.file("extdata", package = "AgeingError") +BG2022_dat <- AgeingError:::CreateData(file.path(data_dir, "BG2022.dat"), NDataSet=1, + verbose=TRUE, EchoFile="BG2022echo.out") +``` +When we set `verbose=TRUE` a summary of the loaded data is printed to the console. +Check that the this matches with the input file, some things that are worth +checking include, + +* The last line of each data set. + +* The total number reads for each reader pair. + +* The number of readers and their order. + +* The plus, minus and reference ages. + +There's a warning about potentially missing data, this occurs when there are +ages below the minimum age and above the maximum age, however, the warning does +not appear to be correct in this case. Possibly the `-999` values in the data are +causing the warning because they are <0. + +Next we load the model specifications using the `CreateSpecs` function. This +function is not exported either so again we need to call the package name and +`:::` to access it. + +```{r} +BG2022_spc <- AgeingError:::CreateSpecs(file.path(data_dir, "BG2022.spc"), DataSpecs=BG2022_dat, + verbose=TRUE) +``` + +The function creates a nested list with one list element for each reader in the +data. By setting `verbose=TRUE`, the list will print to the console and you can +check that the inputs have been read in correctly. Note a reader that has a `-x` +for the Sigma option (i.e. the relationship between expected age and true age +is the same as that for reader x) will not have parameter values. The output from +this function varies with the model that is specified (i.e. the knots will all be +zero unless a spline or piecewise linear model is specified - sigma options 5 and +6). + +Ageing error is the estimated using the function `DoApplyAgeError`. This +function is exported from the R package so can be called directly. We need to +provide a name (`Species` argument), the data, model specs, specify the weights +(`AprobWght` and `SlopeWght`) and the name of a subdirectory to save the output +(it gets created if it doesn't exist). We set `verbose=FALSE` in this example as +a large amount of output is printed to the screen. + + +```{r, results="hide"} +BG2022_mod <- AgeingError::DoApplyAgeError(Species = "BG2022", + DataSpecs = BG2022_dat, + ModelSpecsInp = BG2022_spc, + AprobWght = 1e-06, + SlopeWght = 0.01, + SaveDir = "Results", + verbose = FALSE) + +``` + +The model is stored as a list in the object `BG2022_mod` and this +information along with the data and model specifications is saved in the output +directory as an lda file with name `Species` (in this case "BG2022.lda"). + +Examine the structure of the model object + +```{r} +str(BG2022_mod) +``` + +We then save the model output using the `ProcessResults` function, again using +`:::` as this function also isn't exported. We want to specify that the effective +sample size is estimated (`CalcEff = TRUE`) as this produces the fits to the +individual data points which can be used to identify outliers that may be +impacting model convergence. The model creates several output files that contain +the ageing error estimates and the information we need to assess the fit so we +set `verbose = FALSE`. + +This following files in the output subdirectory (in this case `Results`). + +* The report file (.rpt extension) which contains the convergence criteria, model specifications, parameter estimates with their uncertainty and ageing error matrices for each reader (note readers with bias or sigma option `-x` will be identical to reader `x`). + +* An LDA file (.lda extension) containing the data and model specifications. + +* One csv file (.csv extension) for each reader that contains the estimated standard deviation and coefficient of variation for each age (note readers with bias or sigma option `-x` will be identical to reader `x`). + +* A series png file (.png extension) that contain plots of the data and model residuals. + +```{r} +BG2022_out <- AgeingError:::ProcessResults(Species = "BG2022", SaveDir = "Results", CalcEff = TRUE, verbose = FALSE) +``` + +An examination of the report file (`BG2022.rpt`) shows the maximum gradient is +-93.96, indicating the model has not converged. Ideally the gradient should be +between $\pm \text{1e-4}$ and zero, however, in practice achieving this for some models +can be very time consuming and involves removing progressively more data so we +sometimes accept a gradient ~$\pm \text{1e-3}$. + +The residual plots show a large number of outliers exceeding the 95% +confidence interval and the table of fits to the individual data points (bottom +of the report file (only present when `CalcEff = TRUE`) shows a number of +data points with predicted values of 0 (or very close to zero e.g. 10e-10), see +line 2 below (extracted from the report file). + +````{verbatim} +Data set: 1 +Data_set Group Group Line Readers Obs Obs_Numbers Pred_Numbers +Data Point: 1 1 1 1 0 0 -1 -1 9 15.6581407 9.241041710732 +Data Point: 1 1 1 2 0 10 -1 -1 1 1.7397934 0 +Data Point: 1 1 1 3 1 1 -1 -1 153 266.1883915 186.217154197499 + +```` + +To get closer to a converged model it was necessary to undertake data trimming +(removing observations values with predicted values of 0), specify a +different ageing error model for the second reader and prespecify (i.e. fix) +one of the parameters for the second reader. This was done in a stepwise manner, +with small changes being made, the model run and the results examined before more +changes were made until we achieved a final model we considered acceptable. + +We refit the final model (`BG2022_trim_8_1`). + +Load the data file. + +```{r} +BG2022final_dat <- AgeingError:::CreateData(file.path(data_dir, "BG2022_trim_8_1.dat"), + NDataSet=1, verbose=TRUE, + EchoFile="BG2022finalecho.out") +``` + +Note the number of lines of data has been reduced from 264 to 252. + +Next we load the model specifications. For the second reader (3 and 4 in the +data) we have specified a linear change in the standard deviation of random +age-reading error (`SigmaOpt=7`) and fixed the first parameter at 0.2. + + +```{r} +BG2022final_spc <- AgeingError:::CreateSpecs(file.path(data_dir, "BG2022_trim_8_1.spc"), + DataSpecs=BG2022final_dat, + verbose=TRUE) +``` + +We run the final model. + + +```{r, results="hide"} +BG2022final_mod <- AgeingError::DoApplyAgeError(Species = "BG2022_trim_8_1", + DataSpecs = BG2022final_dat, + ModelSpecsInp = BG2022final_spc, + AprobWght = 1e-06, + SlopeWght = 0.01, + SaveDir = "Results", + verbose = FALSE) +``` + +As with the earlier model we save the results. + +```{r} +BG2022final_out <- AgeingError:::ProcessResults(Species = "BG2022_trim_8_1", SaveDir = "Results", CalcEff = TRUE, verbose = FALSE) +``` + +This model is now close to convergence (gradient = -0.00143) and residual plots +do not show any concerning features and the estimates of ageing error standard +deviation are increasing with age. + +## Bight Redfish + +Bight Redfish (_Centroberyx gerrardi_) is a long-lived species caught by +trawl in the Great Australian Bight (Curin-Osorio and Burch 2022). It has age +readings from three separate readers who have each re-read their own reads (i.e. +there are no inter-reader comparisons in the data). + +```{r} +REB2022_dat <- AgeingError:::CreateData(file.path(data_dir, "REB2022.dat"), NDataSet=1, + verbose=TRUE, EchoFile="REB2022echo.out") +``` + +We check the summary above against the information in the data file. There don't +appear to be any problems, however, we are still getting the warning about +missing data. + +Next we load the model specifications using the `CreateSpecs` function. + +```{r} +REB2022_spc <- AgeingError:::CreateSpecs(file.path(data_dir, "REB2022.spc"), + DataSpecs=REB2022_dat, verbose=TRUE) +``` + +For Bight Redfish we fit a one parameter model assuming the expected age is a +linear function of the true age. We assume there is no inter-reader variability +(all readers have the same ageing uncertainty as reader 1). Note that because we +have specified all readers have the same ageing uncertainty (readers 2--6 have +`SigmaOpt=-1`), we only need to provide one line of sigma parameters. + +We estimate ageing error for Bight Redfish. + + +```{r, results="hide"} +REB2022_mod <- AgeingError::DoApplyAgeError(Species = "REB2022", + DataSpecs = REB2022_dat, + ModelSpecsInp = REB2022_spc, + AprobWght = 1e-06, + SlopeWght = 0.01, + SaveDir = "Results", + verbose = FALSE) + +``` + +We then save the Bight Redfish model output. + +```{r} +REB2022_out <- AgeingError:::ProcessResults(Species = "REB2022", SaveDir = "Results", CalcEff = TRUE, verbose = FALSE) +``` + +An examination of the report file (`REB2022.rpt`) shows the maximum gradient is +0.0221, indicating the model has not quite converged. + +We remove four outliers with probability <1e-5 and also start the model at the +estimated value of the CV (0.0413288). We save the revised data and model +specifications as (`REB2022_trim.dat` and `REB2022_trim.spc`) and rerun the +model (note we suppress the creation of output in this document). + + +```{r, results="hide"} +REB2022_dat2 <- AgeingError:::CreateData(file.path(data_dir, "REB2022_trim.dat"), NDataSet=1, + verbose=FALSE, EchoFile="REB2022_trimecho.out") +REB2022_spc2 <- AgeingError:::CreateSpecs(file.path(data_dir, "REB2022_trim.spc"), + DataSpecs=REB2022_dat2, verbose=FALSE) +REB2022_mod2 <- AgeingError::DoApplyAgeError(Species = "REB2022_final", + DataSpecs = REB2022_dat2, ModelSpecsInp = REB2022_spc2, + AprobWght = 1e-06, SlopeWght = 0.01, SaveDir = "Results", + verbose = FALSE) +REB2022_out2 <- AgeingError:::ProcessResults(Species = "REB2022_final", + SaveDir = "Results", CalcEff = TRUE, verbose = FALSE) + +``` + + +The final gradient is -0.001973, close to convergence. + +## School Whiting + +School Whiting (_Sillago flindersi_) is a short-lived species caught by Danish +seine and trawl in south eastern Australia (Day et al. 2020). This species +provides an example of a data file with three separate data sets and a spline +model. + +Load the School Whiting data file, make sure to set the number of data sets to +three (`NDataSet=3`). + +```{r} +WHS2_dat <- AgeingError:::CreateData(file.path(data_dir, "WHS2.dat"), NDataSet=3, + verbose=TRUE, EchoFile="WHS2echo.out") +``` + +Make sure to check the summary above against the values in the data file. + +Load the specifications for School Whiting. + +```{r} +WHS2_spc <- AgeingError:::CreateSpecs(file.path(data_dir, "WHS2.spc"), + DataSpecs=WHS2_dat, verbose=TRUE) +``` + +For School Whiting we fit a spline function (`SigmaOption=5`) with five knots +(0, 3, 5, 7, and 9). Note the initial parameter values are in log space. + +Fit the ageing error model and save the results + + +```{r, results="hide"} +WHS2_mod <- AgeingError::DoApplyAgeError(Species = "WHS2", + DataSpecs = WHS2_dat, ModelSpecsInp = WHS2_spc, + AprobWght = 1e-06, SlopeWght = 0.01, SaveDir = "Results", + verbose = FALSE) +WHS2_out <- AgeingError:::ProcessResults(Species = "WHS2", + SaveDir = "Results", CalcEff = TRUE, verbose = FALSE) +``` + + +The maximum gradient is ~2.3-05 indicating the model has converged. The estimated +standard deviation by age shows the ageing uncertainty increasing from age 0 +to age 4, then declining for ages 5 and 6 before increasing substantially for +ages 7--9. The fits at the far right hand side of the age distribution are +poor and there is little data to inform the model in this region. The +appropriateness of this model should be discussed with the ageing technicians. + +## Sablefish + +Sablefish (_Anoplopoma fimbria_) provides an example of using the bias option. + +```{r} +Sable_dat <- AgeingError:::CreateData(file.path(data_dir, "Sable.dat"), NDataSet=1, + verbose=TRUE, EchoFile="SableEcho.out") +``` + +We check the summary above against the information in the data file. This data +set has several inter-reader comparisons. + +We load the model specifications using the `CreateSpecs` function. + +```{r} +Sable_spc <- AgeingError:::CreateSpecs(file.path(data_dir, "Sable.spc"), + DataSpecs=Sable_dat, verbose=TRUE) +``` + +The Sablefish example fits three separate series (1-2, 3-4 & 5-6). The model +assumes the following: + +Bias Options: Reader 5 is unbiased, readers 1 & 2 have the same constant bias, +reader 6 has a separate constant bias while the bias of readers 3 & 4 is the +same and follows a Michaelis-Menten relationship. In the specifications file +the first list relates to the constant bias of readers 1 & 2, the next three +lines readers 3 & 4, while the final line specifies the constant bias of reader +6. Reader 5 is assumed to be unbiased and therefore doesn't require parameters +to be specified. + +Sigma Options: Readers 1 & 2 assume the same linear relationship (constant CV), +while readers 5 & 6 have a separate linear relationship. Readers 3 & 4 assume +ageing uncertainty follows a Michaelis-Menten relationship. The parameters are +specified in the same manner as for the bias option (above). + +The code below can be used to fit the Sablefish ageing error model. We don't +run it because this particular model is very slow. + + +```{r, eval=FALSE} +## run the Sablefish model +Sable_mod <- AgeingError::DoApplyAgeError(Species = "Sable", + DataSpecs = Sable_dat, + ModelSpecsInp = Sable_spc, + AprobWght = 1e-06, + SlopeWght = 0.01, + SaveDir = "Results", + verbose = FALSE) +## save the model results +Sable_out <- AgeingError:::ProcessResults(Species = "Sable", SaveDir = "Results", CalcEff = TRUE, verbose = FALSE) +``` + +# Trouble Shooting + +Some suggestions for getting to a converged model are provided below. + +* Vary the initial values of the parameters in the specifications file. + +* For models that are close to convergence, re-run the model using the estimated parameters as the initial values. + +* Problematic data can be identified from the residual plots and at the bottom of the report file with prediction probabilities <1e-5. Removing data with low probability can improve the fit. + +* There may not be sufficient data to estimate ageing error for multiple combinations of readers, the data can be pooled to estimate fewer parameters (bias / sigma option `-x`) + +* The model may not be appropriate, select a different model based on the residual plots. + +* Prespecify (fix) one or more parameters for a pair of readers. + + +# Acknowledgements +Fish Ageing Services https://www.fishageingservices.com/ provided the data for Blue Grenadier, Bight Redfish, and School Whiting and the Australian Fisheries Management Authority (AFMA) provided funding for the data collection and otolith reading. + +The sablefish age data are provided by the NWFSC. + +This document is prepared from documentation and examples written by André Punt. +Pia Bessell-Browne provided helpful comments that improved this document. + +# References + +Day, J., Hall, K., Bessell-Browne, P., and Sporcic, M. (2020) School +Whiting (_Sillago flindersi_) stock assessment based on data up to 2019. For +discussion at SERAG, December 2020. + +Curin-Osorio, S., and Burch, P. (2022). Bight Redfish (_Centroberyx gerrardi_) stock +assessment based on data up to 2021-22. Technical paper presented to the GABRAG, +22 November 2022, Hobart, Tasmania. + +Punt, A.E., Smith, D.C., KrusicGolub, K., and Robertson, S. (2008). +Quantifying age-reading error for use in fisheries stock assessments, +with application to species in Australia's southern and eastern scalefish and +shark fishery. _Canadian Journal of Fisheries and Aquatic Sciences_ 65: +1991--2005. https://doi.org/10.1139/F08-111 + +Tuck, G.N., Bessell-Browne, P. (2022). Blue Grenadier (_Macruronus novaezelandiae_) +stock assessment based on data up to 2021. Technical paper presented to theSERAG2, +29–-30$^{th}$ November 2022, Melbourne, Victoria. 99pp.