summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml15
-rw-r--r--LICENSE30
-rw-r--r--README.md5
-rw-r--r--build.sbt74
-rw-r--r--doc/README4
-rw-r--r--docs/TODO90
-rw-r--r--docs/development/jvm.txt124
-rw-r--r--docs/development/scala.tools.nsc/nscNodes.dot104
-rw-r--r--docs/development/scala.tools.nsc/nscTypes.dot102
-rw-r--r--docs/examples/swing/ColorChooserDemo.scala61
-rw-r--r--docs/examples/swing/PopupDemo.scala33
-rw-r--r--docs/svn-to-sha1-map.txt14907
-rw-r--r--docs/svn-to-sha1-missing.txt140
-rw-r--r--project/VersionUtil.scala6
-rw-r--r--project/build.properties2
-rw-r--r--project/plugins.sbt2
-rw-r--r--scripts/common6
-rwxr-xr-x[-rw-r--r--]scripts/jobs/integrate/bootstrap20
-rw-r--r--spec/01-lexical-syntax.md2
-rw-r--r--spec/05-classes-and-objects.md64
-rw-r--r--spec/06-expressions.md109
-rw-r--r--spec/08-pattern-matching.md26
-rw-r--r--spec/10-xml-expressions-and-patterns.md4
-rw-r--r--spec/13-syntax-summary.md26
-rw-r--r--spec/README.md2
-rw-r--r--spec/_config.yml2
-rw-r--r--spec/_layouts/default.yml2
-rw-r--r--spec/_layouts/toc.yml4
-rw-r--r--spec/id_dsa_travis.enc83
-rw-r--r--src/compiler/scala/tools/nsc/CompilerCommand.scala10
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala14
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala10
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BCodeSyncAndTry.scala4
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala6
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/opt/CallGraph.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/opt/ClosureOptimizer.scala3
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala2
-rw-r--r--src/compiler/scala/tools/nsc/settings/MutableSettings.scala18
-rw-r--r--src/compiler/scala/tools/nsc/settings/ScalaSettings.scala11
-rw-r--r--src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala8
-rw-r--r--src/compiler/scala/tools/nsc/transform/AccessorSynthesis.scala66
-rw-r--r--src/compiler/scala/tools/nsc/transform/Constructors.scala22
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala6
-rw-r--r--src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala2
-rw-r--r--src/compiler/scala/tools/nsc/transform/Fields.scala204
-rw-r--r--src/compiler/scala/tools/nsc/transform/LambdaLift.scala53
-rw-r--r--src/compiler/scala/tools/nsc/transform/Mixin.scala86
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/ConstantFolder.scala6
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala11
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala4
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala9
-rw-r--r--src/compiler/scala/tools/nsc/util/StackTracing.scala44
-rw-r--r--src/eclipse/README.md4
-rw-r--r--src/ensime/.ensime.SAMPLE17
-rw-r--r--src/ensime/README.md11
-rw-r--r--src/interactive/scala/tools/nsc/interactive/CompilerControl.scala4
-rw-r--r--src/library/scala/collection/GenTraversableLike.scala2
-rw-r--r--src/library/scala/collection/GenTraversableOnce.scala2
-rw-r--r--src/library/scala/collection/SeqLike.scala2
-rw-r--r--src/library/scala/collection/TraversableLike.scala71
-rw-r--r--src/library/scala/collection/immutable/Set.scala1
-rw-r--r--src/library/scala/collection/immutable/StringLike.scala1
-rw-r--r--src/library/scala/collection/mutable/ListBuffer.scala19
-rw-r--r--src/library/scala/concurrent/Future.scala6
-rw-r--r--src/library/scala/inline.scala2
-rw-r--r--src/library/scala/noinline.scala2
-rw-r--r--src/library/scala/reflect/ClassManifestDeprecatedApis.scala20
-rw-r--r--src/library/scala/reflect/ClassTag.scala1
-rw-r--r--src/library/scala/reflect/Manifest.scala20
-rw-r--r--src/library/scala/reflect/NameTransformer.scala19
-rw-r--r--src/library/scala/sys/process/ProcessBuilder.scala8
-rw-r--r--src/library/scala/sys/process/package.scala10
-rw-r--r--src/library/scala/util/Either.scala66
-rw-r--r--src/library/scala/util/Properties.scala68
-rw-r--r--src/manual/scala/man1/scala.scala7
-rw-r--r--src/reflect/scala/reflect/internal/Definitions.scala4
-rw-r--r--src/reflect/scala/reflect/internal/StdNames.scala19
-rw-r--r--src/reflect/scala/reflect/internal/Symbols.scala1
-rw-r--r--src/reflect/scala/reflect/internal/TypeDebugging.scala2
-rw-r--r--src/repl-jline/scala/tools/nsc/interpreter/jline/JLineReader.scala19
-rw-r--r--src/repl/scala/tools/nsc/MainGenericRunner.scala6
-rw-r--r--src/repl/scala/tools/nsc/interpreter/IMain.scala2
-rw-r--r--test/benchmarks/project/plugins.sbt2
-rw-r--r--test/files/neg/t1960.check11
-rw-r--r--test/files/neg/t1960.scala7
-rw-r--r--test/files/neg/t4749.check2
-rw-r--r--test/files/neg/t5148.check16
-rw-r--r--test/files/neg/t5148.scala (renamed from test/files/pos/t5148.scala)0
-rw-r--r--test/files/neg/t6446-additional.check2
-rw-r--r--test/files/neg/t6446-missing.check2
-rw-r--r--test/files/neg/t6446-show-phases.check2
-rw-r--r--test/files/neg/t7494-no-options.check2
-rw-r--r--test/files/pos/issue244.scala2
-rw-r--r--test/files/pos/sd219.scala11
-rw-r--r--test/files/pos/shapeless-regression.scala16
-rw-r--r--test/files/pos/t9020.scala6
-rw-r--r--test/files/pos/t9918/package.scala1
-rw-r--r--test/files/pos/t9918/t9918.scala3
-rw-r--r--test/files/pos/t9920.scala6
-rw-r--r--test/files/pos/t9943.scala9
-rw-r--r--test/files/presentation/t8085.check1
-rw-r--r--test/files/presentation/t8085b.check1
-rw-r--r--test/files/run/SD-235.scala39
-rw-r--r--test/files/run/delambdafy_t6028.check16
-rw-r--r--test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala4
-rw-r--r--test/files/run/indy-via-macro/macro_1.scala4
-rw-r--r--test/files/run/local_obj.scala9
-rw-r--r--test/files/run/mixin-signatures.check21
-rw-r--r--test/files/run/programmatic-main.check2
-rw-r--r--test/files/run/sd242.scala13
-rw-r--r--test/files/run/t5293-map.scala88
-rw-r--r--test/files/run/t5293.scala83
-rw-r--r--test/files/run/t5652.check1
-rw-r--r--test/files/run/t6028.check16
-rw-r--r--test/files/run/t8549.scala26
-rw-r--r--test/files/run/t9697.check1
-rw-r--r--test/files/run/t9697.scala204
-rw-r--r--test/files/run/t9920.scala17
-rw-r--r--test/files/run/t9920b.scala17
-rw-r--r--test/files/run/t9920c.scala21
-rw-r--r--test/files/run/t9920d.scala14
-rw-r--r--test/files/run/t9946a.scala14
-rw-r--r--test/files/run/t9946b.scala12
-rw-r--r--test/files/run/t9946c.scala10
-rw-r--r--test/files/run/trait-super-calls.scala127
-rw-r--r--test/junit/scala/collection/SeqLikeTest.scala19
-rw-r--r--test/junit/scala/collection/TraversableLikeTest.scala46
-rw-r--r--test/junit/scala/collection/mutable/BitSetTest.scala2
-rw-r--r--test/junit/scala/collection/mutable/OpenHashMapTest.scala7
-rw-r--r--test/junit/scala/lang/primitives/BoxUnboxTest.scala391
-rw-r--r--test/junit/scala/lang/traits/BytecodeTest.scala217
-rw-r--r--test/junit/scala/runtime/ScalaRunTimeTest.scala2
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala8
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala4
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala6
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala4
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala2
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala8
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala16
-rw-r--r--test/junit/scala/tools/nsc/settings/SettingsTest.scala67
-rw-r--r--test/junit/scala/tools/nsc/symtab/StdNamesTest.scala7
-rw-r--r--test/junit/scala/util/SpecVersionTest.scala102
-rwxr-xr-xtools/get-scala-commit-date9
-rwxr-xr-xtools/get-scala-commit-sha14
-rw-r--r--versions.properties36
146 files changed, 2190 insertions, 16706 deletions
diff --git a/.travis.yml b/.travis.yml
index 236e002a5e..c27b362a6c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,15 +9,20 @@ rvm:
script: bundle exec jekyll build -s spec/ -d build/spec
install: bundle install
-# https://gist.github.com/kzap/5819745, http://docs.travis-ci.com/user/travis-pro/
+# cat /dev/urandom | head -c 10000 | openssl sha1 > ./secret
+# openssl aes-256-cbc -pass "file:./secret" -in id_dsa_spec212_b4096 -out spec/id_dsa_travis.enc -a
+# travis encrypt "PRIV_KEY_SECRET=`cat ./secret`"
env:
- - secure: "WWU490z7DWAI8MidMyTE+i+Ppgjg46mdr7PviF6P6ulrPlRRKOtKXpLvzgJoQmluwzEK6/+iH7D5ybCUYMLdKkQM9kSqaXJ0jeqjOelaaa1LmuOQ8IbuT8O9DwHzjjp/n4Lj/KRvvN4nGxCMI7HLla4gunvPA7M6WK7FA+YKCOU=" # set PRIV_KEY_SECRET to password used to encrypt spec/id_dsa_travis.enc
+ - secure: "TuJOUtALynPd+MV1AuMeIpVb8BUBHr7Ul7FS48XhS2PyuTRpEBkSWybYcNg3AXyzmWDAuOjUxbaNMQBvP8vvehTbIYls5H5wTGKvj0D0TNVaPIXjF8bA8KyNat9xGNzhnWm2/2BMaWpKBJWRF7Jb+zHhijMYCJEbkMtoiE5R/mY="
+
+# ^^^ set PRIV_KEY_SECRET to password used to encrypt spec/id_dsa_travis.enc
-# using S3 would be simpler, but we want to upload to scala-lang.org
-# after_success: bundle exec s3_website push --headless
# the key is restricted using forced commands so that it can only upload to the directory we need here
after_success:
- openssl aes-256-cbc -pass "pass:$PRIV_KEY_SECRET" -in spec/id_dsa_travis.enc -out spec/id_dsa_travis -d -a
- chmod 600 spec/id_dsa_travis
- eval "$(ssh-agent)"
- - '[ "${TRAVIS_PULL_REQUEST}" = "false" ] && ssh-add -D && ssh-add spec/id_dsa_travis && rsync -e "ssh -o StrictHostKeyChecking=no" -rzv build/spec/ scalatest@chara.epfl.ch:/home/linuxsoft/archives/scala/spec/2.11/'
+ - '[ "${TRAVIS_PULL_REQUEST}" = "false" ] && ssh-add -D && ssh-add spec/id_dsa_travis && rsync -e "ssh -o StrictHostKeyChecking=no" -rzv build/spec/ scalatest@chara.epfl.ch:/home/linuxsoft/archives/scala/spec/2.12/'
+
+# using S3 would be simpler, but we want to upload to scala-lang.org
+# after_success: bundle exec s3_website push --headless
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000..fc50adef0f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+This software includes projects with other licenses -- see `doc/LICENSE.md`.
+
+Copyright (c) 2002-2016 EPFL
+Copyright (c) 2011-2016 Lightbend, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the EPFL nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
index ea28ba7497..3ffd419aa9 100644
--- a/README.md
+++ b/README.md
@@ -156,8 +156,9 @@ be easily executed locally.
### IDE Setup
-You may use IntelliJ IDEA ([src/intellij/README.md](src/intellij/README.md)) or the
-Scala IDE for Eclipse (see [src/eclipse/README.md](src/eclipse/README.md)).
+You may use IntelliJ IDEA (see [src/intellij/README.md](src/intellij/README.md)),
+the Scala IDE for Eclipse (see [src/eclipse/README.md](src/eclipse/README.md)),
+or ENSIME (see [this page on the ENSIME site](http://ensime.github.io//contributing/scalac/)).
In order to use IntelliJ's incremental compiler:
- run `dist/mkBin` in sbt to get a build and the runner scripts in `build/quick/bin`
diff --git a/build.sbt b/build.sbt
index 0d27038a9f..786311e77c 100644
--- a/build.sbt
+++ b/build.sbt
@@ -88,7 +88,7 @@ lazy val publishSettings : Seq[Setting[_]] = Seq(
globalVersionSettings
baseVersion in Global := "2.12.0"
baseVersionSuffix in Global := "SNAPSHOT"
-mimaReferenceVersion in Global := None
+mimaReferenceVersion in Global := Some("2.12.0-RC1")
lazy val commonSettings = clearSourceAndResourceDirectories ++ publishSettings ++ Seq[Setting[_]](
organization := "org.scala-lang",
@@ -109,6 +109,11 @@ lazy val commonSettings = clearSourceAndResourceDirectories ++ publishSettings +
}
},
scalaVersion := (scalaVersion in bootstrap).value,
+ // As of sbt 0.13.12 (sbt/sbt#2634) sbt endeavours to align both scalaOrganization and scalaVersion
+ // in the Scala artefacts, for example scala-library and scala-compiler.
+ // This doesn't work in the scala/scala build because the version of scala-library and the scalaVersion of
+ // scala-library are correct to be different. So disable overriding.
+ ivyScala ~= (_ map (_ copy (overrideScalaVersion = false))),
// we always assume that Java classes are standalone and do not have any dependency
// on Scala classes
compileOrder := CompileOrder.JavaThenScala,
@@ -160,7 +165,7 @@ lazy val commonSettings = clearSourceAndResourceDirectories ++ publishSettings +
<developers>
<developer>
<id>lamp</id>
- <name>EPFL LAMP</name>
+ <name>LAMP/EPFL</name>
</developer>
<developer>
<id>Lightbend</id>
@@ -190,7 +195,7 @@ lazy val commonSettings = clearSourceAndResourceDirectories ++ publishSettings +
// directly to stdout
outputStrategy in run := Some(StdoutOutput),
Quiet.silenceScalaBinaryVersionWarning
-)
+) ++ removePomDependencies
/** Extra post-processing for the published POM files. These are needed to create POMs that
* are equivalent to the ones from the Ant build. In the long term this should be removed and
@@ -219,10 +224,16 @@ def fixPom(extra: (String, scala.xml.Node)*): Setting[_] = {
) ++ extra) }
}
+val pomDependencyExclusions =
+ settingKey[Seq[(String, String)]]("List of (groupId, artifactId) pairs to exclude from the POM and ivy.xml")
+
+pomDependencyExclusions in Global := Nil
+
/** Remove unwanted dependencies from the POM and ivy.xml. */
-def removePomDependencies(deps: (String, String)*): Seq[Setting[_]] = Seq(
+lazy val removePomDependencies: Seq[Setting[_]] = Seq(
pomPostProcess := { n =>
val n2 = pomPostProcess.value.apply(n)
+ val deps = pomDependencyExclusions.value
import scala.xml._
import scala.xml.transform._
new RuleTransformer(new RewriteRule {
@@ -240,6 +251,7 @@ def removePomDependencies(deps: (String, String)*): Seq[Setting[_]] = Seq(
import scala.xml._
import scala.xml.transform._
val f = deliverLocal.value
+ val deps = pomDependencyExclusions.value
val e = new RuleTransformer(new RewriteRule {
override def transform(node: Node) = node match {
case e: Elem if e.label == "dependency" && {
@@ -332,7 +344,9 @@ lazy val library = configureAsSubproject(project)
"/project/name" -> <name>Scala Library</name>,
"/project/description" -> <description>Standard library for the Scala Programming Language</description>,
"/project/packaging" -> <packaging>jar</packaging>
- )
+ ),
+ // Remove the dependency on "forkjoin" from the POM because it is included in the JAR:
+ pomDependencyExclusions += ((organization.value, "forkjoin"))
)
.settings(filterDocSources("*.scala" -- (regexFileFilter(".*/runtime/.*\\$\\.scala") ||
regexFileFilter(".*/runtime/ScalaRunTime\\.scala") ||
@@ -409,19 +423,16 @@ lazy val compiler = configureAsSubproject(project)
),
// Generate the ScriptEngineFactory service definition. The Ant build does this when building
// the JAR but sbt has no support for it and it is easier to do as a resource generator:
- generateServiceProviderResources("javax.script.ScriptEngineFactory" -> "scala.tools.nsc.interpreter.IMain$Factory"),
+ generateServiceProviderResources("javax.script.ScriptEngineFactory" -> "scala.tools.nsc.interpreter.Scripted$Factory"),
managedResourceDirectories in Compile := Seq((resourceManaged in Compile).value),
fixPom(
"/project/name" -> <name>Scala Compiler</name>,
"/project/description" -> <description>Compiler for the Scala Programming Language</description>,
"/project/packaging" -> <packaging>jar</packaging>
),
- apiURL := None
+ apiURL := None,
+ pomDependencyExclusions ++= List(("org.apache.ant", "ant"), ("org.scala-lang.modules", "scala-asm"))
)
- .settings(removePomDependencies(
- ("org.apache.ant", "ant"),
- ("org.scala-lang.modules", "scala-asm")
- ): _*)
.dependsOn(library, reflect)
lazy val interactive = configureAsSubproject(project)
@@ -466,7 +477,7 @@ lazy val replJlineEmbedded = Project("repl-jline-embedded", file(".") / "target"
import collection.JavaConverters._
val inputs: Iterator[JarJar.Entry] = {
val repljlineClasses = (products in Compile in replJline).value.flatMap(base => Path.allSubpaths(base).map(x => (base, x._1)))
- val jlineJAR = (dependencyClasspath in Compile).value.find(_.get(moduleID.key) == Some(jlineDep)).get.data
+ val jlineJAR = findJar((dependencyClasspath in Compile).value, jlineDep).get.data
val jarFile = new JarFile(jlineJAR)
val jarEntries = jarFile.entries.asScala.filterNot(_.isDirectory).map(entry => JarJar.JarEntryInput(jarFile, entry))
def compiledClasses = repljlineClasses.iterator.map { case (base, file) => JarJar.FileInput(base, file) }
@@ -513,8 +524,10 @@ lazy val scalap = configureAsSubproject(project)
)
.dependsOn(compiler)
-lazy val partestExtras = configureAsSubproject(Project("partest-extras", file(".") / "src" / "partest-extras"))
+lazy val partestExtras = Project("partest-extras", file(".") / "src" / "partest-extras")
.dependsOn(replJlineEmbedded)
+ .settings(commonSettings: _*)
+ .settings(generatePropertiesFileSettings: _*)
.settings(clearSourceAndResourceDirectories: _*)
.settings(disableDocs: _*)
.settings(disablePublishing: _*)
@@ -600,8 +613,6 @@ lazy val partestJavaAgent = Project("partest-javaagent", file(".") / "src" / "pa
// Setting name to "scala-partest-javaagent" so that the jar file gets that name, which the Runner relies on
name := "scala-partest-javaagent",
description := "Scala Compiler Testing Tool (compiler-specific java agent)",
- // writing jar file to $buildDirectory/pack/lib because that's where it's expected to be found
- setJarLocation,
// add required manifest entry - previously included from file
packageOptions in (Compile, packageBin) +=
Package.ManifestAttributes( "Premain-Class" -> "scala.tools.partest.javaagent.ProfilingAgent" ),
@@ -635,7 +646,7 @@ lazy val test = project
javaOptions in IntegrationTest += "-Xmx2G",
testFrameworks += new TestFramework("scala.tools.partest.sbt.Framework"),
testFrameworks -= new TestFramework("org.scalacheck.ScalaCheckFramework"),
- testOptions in IntegrationTest += Tests.Argument("-Dpartest.java_opts=-Xmx1024M -Xms64M -XX:MaxPermSize=128M"),
+ testOptions in IntegrationTest += Tests.Argument("-Dpartest.java_opts=-Xmx1024M -Xms64M"),
testOptions in IntegrationTest += Tests.Argument("-Dpartest.scalac_opts=" + (scalacOptions in Compile).value.mkString(" ")),
testOptions in IntegrationTest += Tests.Setup { () =>
val cp = (dependencyClasspath in Test).value
@@ -810,25 +821,30 @@ lazy val root: Project = (project in file("."))
k.scope.config.toOption.map(_.name + ":"),
k.scope.task.toOption.map(_.label + "::")
).flatten.mkString + k.key
- def logIncomplete(i: Incomplete, prefix: String): Unit = {
+ val loggedThis, loggedAny = new scala.collection.mutable.HashSet[String]
+ def findRootCauses(i: Incomplete, currentTask: String): Vector[(String, Option[Throwable])] = {
val sk = i.node match {
case Some(t: Task[_]) =>
t.info.attributes.entries.collect { case e if e.key == Keys.taskDefinitionKey => e.value.asInstanceOf[Def.ScopedKey[_]] }
.headOption.map(showScopedKey)
case _ => None
}
- val childCount = (if(i.directCause.isDefined) 1 else 0) + i.causes.length
- val skip = childCount <= 1 && sk.isEmpty
- if(!skip) log.error(s"$prefix- ${sk.getOrElse("?")}")
- i.directCause match {
- case Some(e) => log.error(s"$prefix - $e")
- case None => i.causes.foreach(i => logIncomplete(i, prefix + (if(skip) "" else " ")))
+ val task = sk.getOrElse(currentTask)
+ val dup = sk.map(s => !loggedAny.add(s)).getOrElse(false)
+ if(sk.map(s => !loggedThis.add(s)).getOrElse(false)) Vector.empty
+ else i.directCause match {
+ case Some(e) => Vector((task, if(dup) None else Some(e)))
+ case None => i.causes.toVector.flatMap(ch => findRootCauses(ch, task))
}
}
log.error(s"${failed.size} of ${results.length} test tasks failed:")
failed.foreach { case (i, d) =>
log.error(s"- $d")
- logIncomplete(i, " ")
+ loggedThis.clear
+ findRootCauses(i, "<unkown task>").foreach {
+ case (task, Some(ex)) => log.error(s" - $task failed: $ex")
+ case (task, None) => log.error(s" - ($task failed)")
+ }
}
throw new RuntimeException
}
@@ -844,7 +860,7 @@ lazy val root: Project = (project in file("."))
)
// The following subprojects' binaries are required for building "pack":
-lazy val distDependencies = Seq(replJline, replJlineEmbedded, compiler, library, partestExtras, partestJavaAgent, reflect, scalap, scaladoc)
+lazy val distDependencies = Seq(replJline, replJlineEmbedded, compiler, library, reflect, scalap, scaladoc)
lazy val dist = (project in file("dist"))
.settings(commonSettings)
@@ -869,7 +885,7 @@ lazy val dist = (project in file("dist"))
val extraJars = (externalDependencyClasspath in Compile).value.map(a => (a.get(moduleID.key), a.data)).collect {
case (Some(m), f) if extraModules contains uniqueModule(m) => f
}
- val jlineJAR = (dependencyClasspath in Compile).value.find(_.get(moduleID.key) == Some(jlineDep)).get.data
+ val jlineJAR = findJar((dependencyClasspath in Compile).value, jlineDep).get.data
val mappings = extraJars.map(f => (f, targetDir / f.getName)) :+ ((jlineJAR, targetDir / "jline.jar"))
IO.copy(mappings, overwrite = true)
targetDir
@@ -1141,3 +1157,9 @@ intellijToSample := {
} else
s.log.info("Aborting.")
}
+
+/** Find a specific module's JAR in a classpath, comparing only organization and name */
+def findJar(files: Seq[Attributed[File]], dep: ModuleID): Option[Attributed[File]] = {
+ def extract(m: ModuleID) = (m.organization, m.name)
+ files.find(_.get(moduleID.key).map(extract _) == Some(extract(dep)))
+}
diff --git a/doc/README b/doc/README
index 29f64c9fef..a89ab52792 100644
--- a/doc/README
+++ b/doc/README
@@ -1,7 +1,7 @@
Scala Distribution
------------------
-The Scala distribution requires Java 1.6 or above.
+The Scala distribution requires Java 1.8 or above.
Please report bugs at https://issues.scala-lang.org/.
We welcome contributions at https://github.com/scala/scala!
@@ -31,6 +31,6 @@ Licenses
--------
Scala is licensed under the standard 3-clause BSD license,
-included in the distribution as the file `doc/LICENSE`.
+included in the distribution as the file `doc/LICENSE.md`.
The licenses of the software included in the Scala distribution can
be found in the `doc/licenses` directory. \ No newline at end of file
diff --git a/docs/TODO b/docs/TODO
deleted file mode 100644
index 558aa87205..0000000000
--- a/docs/TODO
+++ /dev/null
@@ -1,90 +0,0 @@
-//###########################################################-*-outline-*-####
-// TODO list
-//############################################################################
-
-* Histories
-
- Requires: -
-
- Create a class "History<X>" that can be used to store a phase
- dependent value of type "X". We can then have TypeHistories,
- FlagHistories, ClosureHistories, ...
-
- Currently only symbols may contain phase dependent values. For that
- reason we sometimes create symbols just because we need a phase
- dependent type (for example the thisTypeSym). And sometimes we don't
- have phase dependent values where we should (for example lobound in
- AbsTypeSymbol or flags in Symbol)
-
- Once we have histories, it is possible to add one or several
- phase-dependent values to every symbol (and also to other data
- types).
-
- The two base operations of class "History" are "getValueAt(Phase)"
- and "setValueAt(Phase)". There are two kinds of histories: those
- that may only return values already set and those that trigger the
- evaluation of values not yet set (=> lazy types).
-
-
-* Remove the notion of primary constructor.
-
- Requires: Histories
-
- In case of abstract types and type aliases, the sole purpose of the
- primary constructor is to store the type parameters. These type
- parameters can be stored in a type parameters history.
-
- In case of class types, the primary constructor stores the type and
- value parameters of the class and it defines a valid instance
- constructor. As for abstract types and type aliases, the type and
- value parameters can be stored in parameters histories and the
- instance constructor defined be the primary constructor can be
- replaced by a normal constructor.
-
-
-* Remove symbols from MethodTypes and PolyTypes
-
- Requires: Histories, Primary constructor removal
-
- The symbols of the value parameters of methods are currently stored
- in their type in "MethodType" types. These symbols can be stored in
- a new parameters history of class "TermSymbol". The array of symbols
- in the "MethodType" type can then be replaced by an array of types.
-
- The process is about the same for symbols in PolyTypes. The main
- difference is that type parameters may be referenced and thus we
- need something like De Bruijn indices to represent these
- references.
-
-
-* Scopes with history
-
- Requires: -
-
- Implement scopes that maintain a validity phase interval for each of
- its member. Members may then only be added to scopes. Removing is
- replaced by terminating the validity interval.
-
-
-* Implement a type IntervalType(Type,Type)
-
- Requires: -
-
- A type IntervalType(Type,Type) specifies an upper and a lower
- bound. This type can be used to replace the loBound field in class
- AbsTypeSymbol. It makes it possible to merge classes TypeAliasSymbol
- and AbsTypeSymbol into one single class whose info is either a
- TypeRef for type aliases or an IntervalType for abstract types.
-
-
-* Solve refinement problem.
-
- Requires: Histories, Scopes with history, IntervalTypes
-
- Replace the current type CompoundType(Type[],Scope) by the new types
- CompoundType(Type[]) and RefinementType(Type,Map<Symbol,Type>) and
- add a Scope field in class ClassSymbol.
-
- Replace the symbol in compound types by a closure history.
-
-//############################################################################
diff --git a/docs/development/jvm.txt b/docs/development/jvm.txt
deleted file mode 100644
index 2f8085a972..0000000000
--- a/docs/development/jvm.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-Java Virtual Machine
-====================
-
-
-This document gathers technical informations about the Java VM to help
-Java/Scala developers tuning their runtime settings on the Java VM.
-
-
-Java VM Options
-----------------
-
-* -Xmx option (maximum heap size)
-
- Heaps larger than 2GB are available starting with J2SE 1.3.1
-
- Default:
- -client: 64M (32-bit UNIX and Windows, MacOS X)
- -server: 128M (MacOS X, see [vm11])
-
-* -Xms option (initial heap size)
-
- Minimum: 1025K (Linux-i586, Solaris-i586), etc.. (see [vm08])
- Default:
- -client: 2M (32-bit UNIX and Windows, MacOS X)
- -server: 32M (MacOS X, see [vm11])
-
-* -Xss option (thread stack size)
-
- Minimum: 48K (Linux-i586), 64K (Solaris-i586), etc.. (see [vm08])
- Default: 256K (32-bit UNIX and Windows)
-
- NB. Stack size under Windows is a link-time setting, so the executable
- (java.exe) as created by Sun has this 256K limit built in. Windows
- however, has a simple utility to modify the stack space of an
- executable (see [vm03]).
- In a command window (or Cygwin shell), use the EDITBIN command to
- permanently modify the executable (WARNING! Do not reduce the stack
- size below 32K, see [vm04])
-
- EDITBIN /STACK:16000000 C:\Path\To\java.exe
-
-
-Scala Environment Options
--------------------------
-
-* JAVACMD variable (Java command)
-
- Scala default: java (v2.x)
-
-* JAVA_OPTS variable (Java options)
-
- Scala default: -Xmx256M -Xms16M (v2.x)
-
-
-In the following example, simply replace <jdk> by
-"java-1.5", "java-1.6", "java-1.7" or
-"java-ibm-1.5" to experiment with different Java VMs:
-
-> env JAVACMD=/home/linuxsoft/apps/<jdk>/bin/java \
- JAVA_OPTS="-Xmx256M -Xms16M -Xss128k" \
- test/scalatest test/files/shootout/message.scala
-
-
-
-Resources
-=========
-
-
-VM Options and Tools
---------------------
-
-[vm01] Some useful -XX options
- http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
-
-[vm02] jvmstat 3.0
- http://java.sun.com/performance/jvmstat/
-
-[vm03] Modify the actual java.exe executable on Windows
- http://www.eyesopen.com/docs/html/javaprog/node7.html
-
-[vm04] Configuring server stack size
- https://ssa.usyd.edu.au/docs/eassag/eassag20.htm
-
-[vm06] Tuning the Java Runtime System
- http://docs.sun.com/source/817-2180-10/pt_chap5.html
-
-[vm07] JVM Tuning
- http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp
-
-[vm08] Java HotSpot: load the VM from a non-primordial thread and effects
- on stack and heap limits.
- http://blogs.sun.com/ksrini/entry/hotspot_primordial_thread_jni_stack
-
-[vm09] A Collection of JVM Options (13-Dec-2005)
- http://blogs.sun.com/watt/resource/jvm-options-list.html
-
-[vm10] The Java VM for Mac OS X (Apple Developer Connection, 2006-05-23)
- http://developer.apple.com/documentation/Java/Conceptual/Java14Development/06-JavaVM/JavaVM.html#//apple_ref/doc/uid/TP40001903-211276-TPXREF107
-
-[vm11] Java Virtual Machine Options (Apple Developer Connection, 2006-05-23)
- http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaVirtualMachineOptions.html#//apple_ref/doc/uid/TP40001974-SW1
-
-[vm12] Running your Java application on AIX, Part 2: JVM memory models (22 Oct 2003)
- http://www-128.ibm.com/developerworks/aix/library/au-JavaPart2.html
-
-[vm13] Options in JVM profiles (IBM)
- http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=/com.ibm.cics.ts31.doc/dfha2/dfha2jb.htm
-
-
-Garbage Collection
-------------------
-
-[gc01] Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine
- http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
-
-[gc02] Tuning Garbage Collection with the 1.4.2 Java[tm] Virtual Machine
- http://java.sun.com/docs/hotspot/gc1.4.2/
-
-[gc03] Tuning Garbage Collection with the 1.3.1 Java[tm] Virtual Machine
- http://java.sun.com/docs/hotspot/gc/
-
-[gc04] Garbage Collector Ergonomics
- http://java.sun.com/j2se/1.5.0/docs/guide/vm/gc-ergonomics.html
-
diff --git a/docs/development/scala.tools.nsc/nscNodes.dot b/docs/development/scala.tools.nsc/nscNodes.dot
deleted file mode 100644
index ab96c455c1..0000000000
--- a/docs/development/scala.tools.nsc/nscNodes.dot
+++ /dev/null
@@ -1,104 +0,0 @@
-digraph SQLTypes {
-
- size="4,4"
- rankdir=BT
- rank=max
- ratio=compress
-
- node [shape = record]
-
- Tree
-
- SymTree -> Tree
-
- DefTree -> SymTree
-
- TermTree -> Tree
-
- TypTree -> Tree
-
- EmptyTree -> TermTree
-
- PackageDef -> DefTree
-
- ClassDef -> DefTree
-
- ModuleDef -> DefTree
-
- ValDef -> DefTree
-
- DefDef -> DefTree
-
- AbsTypeDef -> DefTree
-
- AliasTypeDef -> DefTree
-
- LabelDef -> DefTree
- LabelDef -> TermTree
-
- Import -> SymTree
-
- Attributed -> Tree
-
- DocDef -> Tree
-
- Template -> SymTree
-
- Block -> TermTree
-
- CaseDef -> Tree
-
- Sequence -> TermTree
-
- Alternative -> TermTree
-
- Star -> TermTree
-
- Bind -> DefTree
-
- ArrayValue -> TermTree
-
- Function -> TermTree
-
- Assign -> TermTree
-
- If -> TermTree
-
- Match -> TermTree
-
- Return -> TermTree
-
- Try -> TermTree
-
- Throw -> TermTree
-
- New -> TermTree
-
- TypeApply -> TermTree
-
- Apply -> TermTree
-
- Super -> TermTree
- Super -> SymTree
-
- This -> TermTree
- This -> SymTree
-
- Select -> SymTree
-
- Ident -> SymTree
-
- Literal -> TermTree
-
- TypeTree -> TypTree
-
- SingletonTypeTree -> TypTree
-
- SelectFromTypeTree -> TypTree
- SelectFromTypeTree -> SymTree
-
- CompoundTypeTree -> TypTree
-
- AppliedTypeTree -> TypTree
-
-}
diff --git a/docs/development/scala.tools.nsc/nscTypes.dot b/docs/development/scala.tools.nsc/nscTypes.dot
deleted file mode 100644
index b4c0cb5960..0000000000
--- a/docs/development/scala.tools.nsc/nscTypes.dot
+++ /dev/null
@@ -1,102 +0,0 @@
-digraph SQLTypes {
-
- size="4,4"
- rankdir=BT
- rank=max
- ratio=compress
-
- node [shape = record]
-
- Type
-
- SimpleTypeProxy [label = "{SimpleTypeProxy|(trait)}"]
- SimpleTypeProxy -> Type
-
- RewrappingTypeProxy [label = "{RewrappingTypeProxy|(trait)}"]
- RewrappingTypeProxy -> SimpleTypeProxy
-
- SubType -> Type
-
- NotNullType [label = "{NotNullType|underlying: Type}"]
- NotNullType -> SubType
- NotNullType -> RewrappingTypeProxy
-
- SingletonType -> SubType
- SingletonType -> SimpleTypeProxy
-
- ErrorType [label = "{ErrorType|(object)}"]
- ErrorType -> Type
-
- WildcardType [label = "{WildcardType|(object)}"]
- WildcardType -> Type
-
- BoundedWildcardType [label = "{BoundedWildcardType|bounds: TypeBounds}"]
- BoundedWildcardType -> Type
-
- NoType [label = "{NoType|(object)}"]
- NoType -> Type
-
- NoPrefix [label = "{NoPrefix|(object)}"]
- NoPrefix -> Type
-
- DeBruijnIndex -> Type
-
- ThisType [label = "{ThisType|sym: Symbol}"]
- ThisType -> SingletonType
-
- SingleType [label = "{SingleType|pre: Type\nsym: Symbol}"]
- SingleType -> SingletonType
-
- SuperType [label = "{SuperType|thistpe: Type\nsupertp: Type}"]
- SuperType -> SingletonType
-
- TypeBounds [label = "{TypeBounds|lo: Type\nhi: Type}"]
- TypeBounds -> SubType
-
- CompoundType -> Type
-
- RefinedType[label = "{RefinedType|parents: List[Type]\ndecls: Scope}"]
- RefinedType -> CompoundType
-
- ClassInfoType[label = "{ClassInfoType|parents: List[Type]\ndecls: Scope\nsymbol: Symbol}"]
- ClassInfoType -> CompoundType
-
- PackageClassInfoType[label = "{PackageClassInfoType|decls: Scope\nclazz: Symbol\nloader: LazyType}"]
- PackageClassInfoType -> ClassInfoType
-
- ConstantType[label = "{ConstantType|value: Constant}"]
- ConstantType -> SingletonType
-
- TypeRef[label = "{TypeRef|pre: Type\nsym: Symbol\nargs: List[Type]}"]
- TypeRef -> Type
-
- MethodType[label = "{MethodType|paramTypes: List[Type]\nresultType: Type}"]
- MethodType -> Type
-
- ImplicitMethodType[label = "{MethodType|pts: List[Type]\nrt: Type}"]
- ImplicitMethodType -> MethodType
-
- JavaMethodType[label = "{MethodType|pts: List[Type]\nrt: Type}"]
- JavaMethodType -> MethodType
-
- PolyType[label = "{PolyType|typeParams: List[Symbol]\nresultType: Type}"]
- PolyType -> Type
-
- OverloadedType[label = "{OverloadedType|quantified: List[Symbol]\nunderlying: Type}"]
- ExistentialType -> RewrappingTypeProxy
-
- OverloadedType[label = "{OverloadedType|pre: Type\nalternatives: List[Symbol]}"]
- OverloadedType -> Type
-
- AntiPolyType[label = "{AntiPolyType|pre: Type\ntargs: List[Type]}"]
- AntiPolyType -> Type
-
- TypeVar[label = "{TypeVar|origin: Type\nconstr: TypeConstraint}"]
- TypeVar -> Type
-
- AnnotatedType[label = "{AnnotatedType|attributes: List[AnnotationInfo]\nunderlying: Type\nselfsym: Symbol}"]
- AnnotatedType -> RewrappingTypeProxy
-
- LazyType -> Type
-
-}
diff --git a/docs/examples/swing/ColorChooserDemo.scala b/docs/examples/swing/ColorChooserDemo.scala
deleted file mode 100644
index 1cb2bdefa2..0000000000
--- a/docs/examples/swing/ColorChooserDemo.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-package examples.swing
-
-import java.awt.{Color, Font, Dimension}
-import swing._
-import event._
-import Swing._
-import BorderPanel._
-
-/**
- * Demo for ColorChooser.
- * Based on http://download.oracle.com/javase/tutorial/uiswing/components/colorchooser.html
- *
- * @author andy@hicks.net
- */
-object ColorChooserDemo extends SimpleSwingApplication {
- def top = new MainFrame {
- title = "ColorChooser Demo"
- size = new Dimension(400, 400)
-
- contents = ui
- }
-
- def ui = new BorderPanel {
- val colorChooser = new ColorChooser {
- reactions += {
- case ColorChanged(_, c) =>
- banner.foreground = c
- }
- }
-
- colorChooser.border = TitledBorder(EtchedBorder, "Choose Text Color")
-
- val banner = new Label("Welcome to Scala Swing") {
- horizontalAlignment = Alignment.Center
- foreground = Color.yellow
- background = Color.blue
- opaque = true
- font = new Font("SansSerif", Font.BOLD, 24)
- }
-
- val bannerArea = new BorderPanel {
- layout(banner) = Position.Center
- border = TitledBorder(EtchedBorder, "Banner")
- }
-
- // Display a color selection dialog when button pressed
- val selectColor = new Button("Choose Background Color") {
- reactions += {
- case ButtonClicked(_) =>
- ColorChooser.showDialog(this, "Test", Color.red) match {
- case Some(c) => banner.background = c
- case None =>
- }
- }
- }
-
- layout(bannerArea) = Position.North
- layout(colorChooser) = Position.Center
- layout(selectColor) = Position.South
- }
-} \ No newline at end of file
diff --git a/docs/examples/swing/PopupDemo.scala b/docs/examples/swing/PopupDemo.scala
deleted file mode 100644
index 6a9eeb125b..0000000000
--- a/docs/examples/swing/PopupDemo.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-package examples.swing
-
-import swing._
-import event._
-import Swing._
-
-/**
- * @author John Sullivan
- * @author Ingo Maier
- */
-object PopupDemo extends SimpleSwingApplication {
- def top = new MainFrame {
- val popupMenu = new PopupMenu {
- contents += new Menu("menu 1") {
- contents += new RadioMenuItem("radio 1.1")
- contents += new RadioMenuItem("radio 1.2")
- }
- contents += new Menu("menu 2") {
- contents += new RadioMenuItem("radio 2.1")
- contents += new RadioMenuItem("radio 2.2")
- }
- }
- val button = new Button("Show Popup Menu")
- reactions += {
- case ButtonClicked(b) => popupMenu.show(b, 0, b.bounds.height)
- case PopupMenuCanceled(m) => println("Menu " + m + " canceled.")
- }
- listenTo(popupMenu)
- listenTo(button)
-
- contents = new FlowPanel(button)
- }
-} \ No newline at end of file
diff --git a/docs/svn-to-sha1-map.txt b/docs/svn-to-sha1-map.txt
deleted file mode 100644
index e192ac2e7c..0000000000
--- a/docs/svn-to-sha1-map.txt
+++ /dev/null
@@ -1,14907 +0,0 @@
-r216 e566ca34a3
-r217 33d6e170c9
-r218 4177daab2f
-r219 073294fbba
-r220 23d2bfbeb2
-r221 fd3f10df3c
-r222 21b147f7ca
-r223 51f6f363f0
-r224 0ef73bcf85
-r225 413b4edac3
-r226 71da7497b0
-r227 8001992607
-r228 faca8cb93f
-r229 4bb5759c29
-r230 bf9a101fb5
-r231 7abd4f84e2
-r232 04e7b8d053
-r233 672f970631
-r234 48e7aa8296
-r235 934da996ba
-r236 1b970f6fb4
-r237 1af5e67569
-r238 20f7e75afe
-r239 19470c9c41
-r240 5253396420
-r241 a1f09f8344
-r242 9ed4c257ab
-r243 1726bf7568
-r244 df427a25f1
-r245 bd7715e8dd
-r246 85c1f5afc3
-r247 ae4ce8d3c4
-r248 e0b8cd4966
-r249 517c132d72
-r250 d95d9cb156
-r251 f7f0da0fd1
-r252 11450dbc4f
-r253 6cb8bc84c9
-r254 8ab0ae13ce
-r255 5f531ab2e6
-r256 66ca81e66f
-r257 ceb16f7fea
-r258 7d1e4e92ca
-r259 ee984f7f47
-r260 6ea3ab4665
-r261 325edcd705
-r262 b63203c5b5
-r263 b8509a08f1
-r264 affdf7ee9c
-r265 ee273f5e73
-r266 eac21ad76d
-r267 de0a87e4a0
-r268 77ef6d4279
-r269 bf1f3aa029
-r270 7e7310ca12
-r271 942bac76c3
-r272 7a1fdc1453
-r273 e5c5cc620d
-r274 2fc8c8dc20
-r275 17bd66e3cf
-r276 f9517d6754
-r277 2b83d80577
-r278 0aa5a94bb6
-r279 7394e750cb
-r280 af8181e6b3
-r281 168da72d52
-r282 1b4875af97
-r283 dc22952ef4
-r284 2c49076945
-r285 6f6ef48204
-r286 68fabb7cc6
-r287 685a3ccd27
-r288 55c2ee3d49
-r289 ee9191bbf0
-r290 c00e8c765a
-r291 bde5d21715
-r292 0b68bd30b1
-r293 5d47aa2f77
-r294 b81d58dbc3
-r295 6b2fcfb659
-r296 89161f84fd
-r297 4c58302ea3
-r298 3efc6463c1
-r299 0d9486124a
-r300 3c1b85f91e
-r301 b5a8069651
-r302 83e1bd9b50
-r303 ddfa3561ca
-r304 d316462efa
-r305 9454221e70
-r306 647a30b9bf
-r307 6a4a9f9e93
-r308 e1fb3fb655
-r309
-r310 6749e5dd65
-r311 fe773c088d
-r312 6290560c08
-r313 1be73bee0e
-r314 e8b06e776b
-r315 4cd3c13b5d
-r316 99565a58dd
-r317 6f00b2f558
-r318 7d4e995581
-r319 1d2a33a1c2
-r320 fe9d7cc9ec
-r321 de976b2afa
-r322 95a5ffa201
-r323 9700a2088f
-r324 9427388e5a
-r325 e5583b7c11
-r326 fc497536ed
-r327 91c9a415e3
-r328 1fb1bf6d27
-r329 208bd5ee9e
-r330 d382fa3fa4
-r331 f119eaa798
-r332 7732779b26
-r333 20813b9555
-r334 c92e218894
-r335 e9e6e2ee0d
-r336 6bd6a0b409
-r337 59ed04e4f2
-r338 f5c16175c8
-r339 1956c53007
-r340 2afca5bd49
-r341 bfe8564103
-r342 013290fbda
-r343 65b8549607
-r344 c5ffb069fa
-r345 4a44cf6531
-r346 3d7e4fa518
-r347 a005880219
-r348 8503fe1a88
-r349 f00a69459a
-r350 dc5897f483
-r351 efa9d346d4
-r352 c371d05bd6
-r353 37666f9377
-r354 675b4262a2
-r355 2522593cfd
-r356 bcc3899778
-r357 a16dd265fd
-r358 65f127aaa2
-r359 0c3c430ecd
-r360 ca3af56fc2
-r361 bb0968e953
-r362 aa82c43f10
-r363 d0e2fb4b34
-r364 67b84045bf
-r365 3ef8b49d5e
-r366 b2410c68a9
-r367 efeadee8bb
-r368 2666bf0515
-r369 6a6d53bb15
-r370 a275c7c9fa
-r371 0c12c1623d
-r372 de6d589d7f
-r373 0e938416e8
-r374 b1276c1eca
-r375 a6e2444478
-r376 4d43c508f3
-r377 be7a96e1b5
-r378 14bc0c4f0d
-r379 aac15cfe1c
-r380 2531b91feb
-r381 ce0cb58ff3
-r382 1fb5a195b5
-r383 d5da7d9aa5
-r384 b5308c3f44
-r385 3dd969e98d
-r386 c3ad24e873
-r387 7dcbfdfdf1
-r388 9447d90bd7
-r389 ace3aba1de
-r390 2ad302331f
-r391 3fc1840211
-r392 c773be407e
-r393 0318d97b8c
-r394 66046dcef9
-r395 32920909df
-r396 9046cab361
-r397 b1f3fad210
-r398 83ae0d91c2
-r399 aecf76e848
-r400 6cdcb93df4
-r401 7a553aba4c
-r402 453461f798
-r403 86beea21be
-r404 0f07bf588c
-r405 eab692bf1f
-r406 e2a4a9dff4
-r407 78d30c2813
-r408 28eec741b3
-r409 be91eb10bc
-r410 b6c9458943
-r411 7ba32e7eef
-r412 ff7d11e0c1
-r413 0bc479de95
-r414 d7bb5a3038
-r415 974cf85afb
-r416 9ab44e5b8c
-r417 b094b0ef63
-r418 fafd175ca9
-r419 7254471b0b
-r420 2142b86ece
-r421 2dc20eb9c8
-r422 ad60428ffd
-r423 8246e726ae
-r424 00e8b20d83
-r425 b078b78ebd
-r426 766aece314
-r427 6656a7bed7
-r428 32d7050253
-r429 e9314e4358
-r430 2301c181a8
-r431 1501b629e8
-r432 76466c44df
-r433 0f9346336d
-r434 9e6cc7fa40
-r435 d6cc02f92d
-r436 fa5c556780
-r437 38ec9ea7d1
-r438 6e1b224b20
-r439 1faf3fbd77
-r440 8e1ff11b1c
-r441 3d3fae031a
-r442 a3cceb2ddf
-r443 b8ae1b5fd8
-r444 7c50acd7bc
-r445 66ce41098c
-r446 4147525455
-r447 ab6e0b35fe
-r448 b6568d57a4
-r449
-r450 5d7eda1d9c
-r451 449b38c265
-r452 37acb0f1dd
-r453 8a4a9a9809
-r454 b4b5355b6b
-r455 23f2da8615
-r456 68e734d000
-r457 1a44c882dc
-r458 f4a43858e8
-r459 188dd82f86
-r460 cc86341145
-r461 2c9a95dbe5
-r462 70dfa262b3
-r463 684a5d4d0b
-r464 c9d34467cd
-r465 82cd3d4d23
-r466 7b6238d54b
-r467 16e81343ba
-r468 6f805930c9
-r469 1c07a3cfef
-r470 cee76a7329
-r471 341cb486e8
-r472 4244c4f10a
-r473 9bf8922877
-r474 b4d9609411
-r475 0eb7d01302
-r476 579d815bfa
-r477 9a4819a033
-r478 9d8a37ee5c
-r479 bca74f068d
-r480 4b69de24fd
-r481 3b822a8f07
-r482 e4adf08ce2
-r483 1cbb1ee373
-r484 8d16dc3a98
-r485 78b2ff42fc
-r486 22c472cff5
-r487 6dfc1be517
-r488 818eca7c39
-r489 acd1b06b4e
-r490 19458ed8e2
-r491 bbea05c3f7
-r492 31b5dceeb1
-r493 3307717e4e
-r494 ed5dbe8475
-r495 60218d9ef8
-r496 ed86cb4106
-r497 955981999c
-r498 0cc202c85b
-r499 db1ad8a9e0
-r500 820c818d4e
-r501 611eb370fa
-r502 c6ce203b92
-r503 890f4fc1b3
-r504 374fe54282
-r505 58cad3d1ce
-r506 04577625cb
-r507 0d66e06ff4
-r508 dd1df4c41e
-r509 7452fd4769
-r510 b68d6aba80
-r511 73cf6d4754
-r512 4afc1d1c27
-r513 c995209f7e
-r514 6440a65cbe
-r515 f449cd95e9
-r516 3be5b4361a
-r517 644e5bdf87
-r518 1bb9e69a30
-r519 6a7bec093b
-r520 5e7f6d941d
-r521 0947087d29
-r522 940c7755d3
-r523 e6ebbe6ab4
-r524 746cf42fd3
-r525 6326a9e379
-r526 dab45b752f
-r527 d891fd9474
-r528 394aef1a7f
-r529 5f8e5c235e
-r530 b80dcfe38a
-r531 1c311b1828
-r532 54952ba17e
-r533 787d4bb9db
-r534 e2a09f258a
-r535 0aa9fd3d2e
-r536 d4992a09ec
-r537 61150fa8ae
-r538 1a2828c106
-r539 4d1b718b13
-r540 8b716cefd3
-r541 7722c1b044
-r542 26caccbea4
-r543 51627d9425
-r544 e0cfd0011b
-r545 856b1b4355
-r546 bbd53b7ccb
-r547 9cfe96647b
-r548 e1dcdf1a7b
-r549 b5a3e6b734
-r550 e189c7bacc
-r551 5c24c95533
-r552 2ed373a5c3
-r553 5ee5a01aad
-r554 277c7242d0
-r555 c33226ad82
-r556 85c73ba918
-r557 efd06d74f1
-r558 9ba1d49533
-r559 379a56669b
-r560 19da03df20
-r561 a8f9240799
-r562 5c510296ee
-r563 5092735baa
-r564 7104fcb442
-r565 15aeb5fd48
-r566 d8284d61f2
-r567 f115eda9c9
-r568 d7c9373e85
-r569 fee56a7201
-r570 d91518092e
-r571 868b0f94f0
-r572 fcae0e84b5
-r573 3ceaf4b02d
-r574 a3d34c650a
-r575 bfcbdb5f90
-r576 e360fb4095
-r577 6ffa9f1636
-r578 5e49a57244
-r579 7acb9ba822
-r580 a7846c5f8e
-r581 2ff2f6e029
-r582 00699895d9
-r583 fae0e93a6a
-r584 a715104520
-r585 eb4833b12e
-r586 0c9d5eb8c3
-r587 5557a63792
-r588 009ca753a5
-r589 1bcbe1244a
-r590 53e9038cd0
-r591 6bb5add14b
-r592 44eba4f61b
-r593 03a24d7345
-r594 cee6c10b74
-r595 cc931f87ac
-r596 8bfdf09fe8
-r597 6b71c4960a
-r598 8f51cb5a38
-r599 0aa5643808
-r600 e38818336a
-r601 793f61a0a2
-r602 dd65ae6e73
-r603 54f148e1ee
-r604 1e7ea9f9b7
-r605 d872259f55
-r606 2c230e23ac
-r607 46b0b6bad4
-r608 79c7c73561
-r609 217d42413b
-r610 4503263fda
-r611 e51cf921ec
-r612 c8bea29c67
-r613 64861914be
-r614 bcad96f5ad
-r615 f9534fc128
-r616 09402976e7
-r617 8ed70b27d7
-r618 e403c76450
-r619 272e832a97
-r620 d28eae9101
-r621 4d64e59a55
-r622 660d5315db
-r623 1e6f940bd9
-r624 46034e790c
-r625 45d391977c
-r626 8bde4b7721
-r627 9a6a334729
-r628 609593beeb
-r629 d5d9d56f49
-r630 6208a4f530
-r631 faf079fc79
-r632 84de17250f
-r633 62df669297
-r634 4d51076c62
-r635 17a647a740
-r636 d20bbb416e
-r637 bd60b6057c
-r638 2b05eb0cc4
-r639 c3feacc621
-r640 63815a24d6
-r641 2a5b63b2a0
-r642 e644be0706
-r643 fd4d0f8fe9
-r644 a5aa3c8f66
-r645 28cbd95ca3
-r646 3599b6d086
-r647 e1cdc3fe30
-r648 f7308846bb
-r649 791909eab2
-r650 3ab93af939
-r651 336eabe34a
-r652 544dd4f57e
-r653 8e76d1283e
-r654 c397f80f8b
-r655 06238329c5
-r656 3f3e6accb7
-r657 4d1dfaffed
-r658 fa72586d0b
-r659 e0d3451834
-r660 21f24de326
-r661 81a8fae3a6
-r662 a9e68909d6
-r663 d02f69f602
-r664 a5d85a9e96
-r665 7871c81399
-r666 42fe3b7da7
-r667 49a63cbfb4
-r668 f3aeae44c2
-r669 0478f7197f
-r670 88143accb0
-r671 014a47d565
-r672 e8dc487e70
-r673 99becce923
-r674 3db933967d
-r675 7099e17fb2
-r676 f6ca275318
-r677 723503c1c8
-r678 6f062616e2
-r679 51b150938e
-r680 ce9a82d638
-r681 1b110634b1
-r682 2d62f04fb4
-r683 89fb9fd615
-r684 bfe4d0dff9
-r685 ae221d1e85
-r686 dfb6cb93cc
-r687 932bc98741
-r688 b9bd1fbde7
-r689 bd6ee62da0
-r690 5571c34f79
-r691 bbb471bf1a
-r692 52874b143e
-r693 2b22c5eb6a
-r694 c7d24b1e47
-r695 23d5c3f804
-r696 135fc297cb
-r697 5eecad0f93
-r698 ceda0125a9
-r699 92e745e537
-r700 bd6c059264
-r701 47fbf9d2e9
-r702 b3896b2e39
-r703 2a6f701d05
-r704 a575f59c3b
-r705 16b7be07c6
-r706 4d8caab2e6
-r707 de98513298
-r708 9de54c7671
-r709 fdd7ca356b
-r710 d5f8a13cd7
-r711 b9ff893fdf
-r712 7f08642a0a
-r713 c55bc91171
-r714 ca14451a52
-r715 74be7e83e5
-r716 974fe6069d
-r717 6be0c19d9e
-r718 2c2c1a4e17
-r719 b0c97ff489
-r720 e15b1ae55a
-r721 c7b62d7913
-r722 9b2e927cd8
-r723 4686a2d6f6
-r724 bdc7125ab5
-r725 89cec93a5d
-r726 4071a56256
-r727 3096d1674f
-r728 b4cfef2557
-r729 9c66a1e5b6
-r730 7da0997328
-r731 911a4a65f1
-r732 969e41ca39
-r733 2300aac76a
-r734 f7f1500768
-r735 f5f7f30a43
-r736 7b6a46d75a
-r737 3efb3a279e
-r738 259221ca99
-r739 82bedc921b
-r740 fb71c50b8f
-r741 8f1264daa9
-r742 7eda0b9cfc
-r743 a766b31106
-r744 22d0a607cd
-r745 2cc25288dd
-r746 d62458f59a
-r747 703ab37f59
-r748 5e26ba92f6
-r749 fa4d10ee2b
-r750 be99001f72
-r751 ace7fee429
-r752 15321b1641
-r753 edce97ab20
-r754 60fe35a72b
-r755 639e009fd9
-r756 47843c835d
-r757 c76223a9a2
-r758 ba71b42902
-r759 9bad87da03
-r760 5745978304
-r761 cb5e82737f
-r762 3fb5e2ade5
-r763 336e1acd4f
-r764 416062aa91
-r765 6af6dae0df
-r766 3a593c580c
-r767 c481e95b2f
-r768 be858b38fe
-r769 6a6b914be9
-r770 8290fa5c45
-r771 15e29208a4
-r772 469714eafe
-r773 528c521f9d
-r774 d7d26ea960
-r775 1fbc4f6561
-r776 a55f14b464
-r777 34cdd069a1
-r778 c055dc83e3
-r779 d8aceb9d8d
-r780 24259833eb
-r781 2fc1837fcc
-r782 39f22e7351
-r783 62fc094c20
-r784 914d29f889
-r785 da93e36d8f
-r786 5c348d28da
-r787 9dc6d5fd22
-r788 ada273a1ca
-r789 e06aeaebbd
-r790 329c70cae6
-r791 f69094bc71
-r792 ca1cba5b06
-r793 1ab2519887
-r794 dfcf91626f
-r795 bacea50d7a
-r796 43a8b154ed
-r797 84af8bf38d
-r798 a00409bd98
-r799 64621b6363
-r800 4269eb620a
-r801 ee7107b4ab
-r802 b23289c5da
-r803 52e2b941b1
-r804 46517a47bc
-r805 05deaeec74
-r806 8cfce062de
-r807 aa579de50f
-r808 8044852c6f
-r809 6533142379
-r810 be4f8d7916
-r811 97e75ddc91
-r812 9c9dfb24a4
-r813 ba5d59e9f6
-r814 44ca12f55b
-r815 0494d60bfd
-r816 da838048c9
-r817 152934349f
-r818 a495f88f49
-r819 c4335d55bc
-r820 85d4773be7
-r821 1e180e451c
-r822 5021943900
-r823 099c17cf13
-r824 2fd2dfeeb3
-r825 563e00ffc7
-r826 6734a441e8
-r827 1b049a090b
-r828 c75bafbbbc
-r829 537442e3dc
-r830 ead39262eb
-r831 ecc6226a4d
-r832 d647b1e479
-r833 4a809abfa5
-r834 f770cdac70
-r835 b74ad75078
-r836 7dc050f17d
-r837 11622662c8
-r838 5d1b310ad7
-r839 e99f07aac3
-r840 23f124d305
-r841 0e1e141430
-r842 c7392f4c45
-r843 82f0cb3c2c
-r844 5f6f1f7aa7
-r845 0df5ec7521
-r846 1583a2afb2
-r847 e7609c9d0e
-r848 88cb90bf6d
-r849 8edcd12a55
-r850 cefb352f0f
-r851 7454e3a009
-r852 072b5480f9
-r853 ec5989695e
-r854 9ee7224289
-r855 184e92e447
-r856 d82f770754
-r857 70ae99e7ea
-r858 f29ec2158b
-r859 3102d7d40f
-r860 9753961477
-r861 d8d2c7f502
-r862 c2c93468eb
-r863 0720197b32
-r864 cc296d5b5c
-r865 b8f86bb95c
-r866 8b6079a283
-r867 ee836661ce
-r868 1f97bdd390
-r869 a424426552
-r870 9114fea991
-r871 68c5a76acb
-r872 ce103c2f95
-r873 6b4b085c7c
-r874 efd426fe23
-r875 a8722061ee
-r876 6a0cdb5821
-r877 4826669acc
-r878 1066a7cf01
-r879 4827da4894
-r880 b80391a805
-r881 f1a6676465
-r882 b95c08c879
-r883 0145ce34b5
-r884 06a671299a
-r885 c7f30e40c0
-r886 5a0ab443e5
-r887 0e53b38aed
-r888 ecd251a20e
-r889 f03a35b6c3
-r890 1a094d97cb
-r891 ff386d78cf
-r892 2cc211bc73
-r893 ec3b6d9bbc
-r894 ad92319573
-r895 478c334b56
-r896 5bcdedd615
-r897 a461a7982b
-r898 f0e3edad2c
-r899 dc0594eee9
-r900 ba84abf44d
-r901 b814f5d2ce
-r902 3084ef6b79
-r903 26388aa8b6
-r904 d5f5419249
-r905 a6389e9170
-r906 a0361ef7c1
-r907 6958133baa
-r908 ddf59687e3
-r909 55424e716c
-r910 ee7a23f3fb
-r911 05d7f7c3b5
-r912 94cc5fb398
-r913 bf8fd4c5b3
-r914 00abd39f96
-r915 e2a375174c
-r916 8e9836f531
-r917 38b5376903
-r918 68f54db833
-r919 335a4e9588
-r920 3ef2334f34
-r921 a4392e6d75
-r922 fe7e260075
-r923 1481659b35
-r924 c5f1b804dd
-r925 0d359a148e
-r926 3c256cfb74
-r927 ad4c87c5af
-r928 4912b7dd53
-r929 1554123d30
-r930 48dbc5e78c
-r931 4b1f4936e2
-r932 55ebf641a9
-r933 006b8ed3a1
-r934 5615207c16
-r935 9d78319bec
-r936 aa4085f651
-r937 35173713d1
-r938 1d24dc9093
-r939 d2df7c9c9a
-r940 b7f7cddf7c
-r941 d58dc0f186
-r942 3edab36b89
-r943 a72fdbec0d
-r944 e7e6cc4243
-r945 e5770ffd30
-r946 4bd86410e4
-r947 8eead5dedd
-r948 6ad472567e
-r949 639f108441
-r950 fedbced652
-r951 2aec262f78
-r952 1ec3e2c664
-r953 981a0d142c
-r954 bf64b80e8e
-r955 df8999d77a
-r956 57830a98fc
-r957 76f378175a
-r958 dd34727fc7
-r959 a9d2d11892
-r960 d4555e92d1
-r961 933de9aa03
-r962 04e4c7ee18
-r963 c3a8d9f143
-r964 b5f8932a9b
-r965 62656923de
-r966 428dce2175
-r967 720e381fd8
-r968 32d99afd50
-r969 4bcea1cf5c
-r970 209dd1ab44
-r971 05350a4a9d
-r972 2f2e78b7c1
-r973 1203341cb2
-r974 916bc3b9cd
-r975 3f3eab9278
-r976 796f281527
-r977 c2b559a9b2
-r978 22e7c20e90
-r979 af52fe5e14
-r980 4e426a6298
-r981 4df9f3a89b
-r982 09ad15e15a
-r983 808974e349
-r984 0e5eaf6fbd
-r985 eca1e7ffa8
-r986 6139351009
-r987 bdf7315e7f
-r988 37d9d1b979
-r989 7a4d11c997
-r990 3b96193f16
-r991 7c77d7dcf6
-r992 6cef26d980
-r993 8b54bfd4f6
-r994 c9f7644026
-r995 c64fa43afa
-r996 87d3cc2997
-r997 dbda2fc17d
-r998 c637a7f0de
-r999 2afcc06484
-r1000 0ef074e5fb
-r1001 f01c39c755
-r1002 bc36095d0e
-r1003 77bbd22d07
-r1004 cda6f17ef0
-r1005 58ed80c61d
-r1006 319090d57b
-r1007 ca9f4fbb7b
-r1008 6802b7f420
-r1009 47326f67ee
-r1010 8e54f08fa4
-r1011 195efaee57
-r1012 a943d3cf95
-r1013 1935d7178d
-r1014 e96d1be7b6
-r1015 e31cc564d5
-r1016 3ad0a509fc
-r1017 709b56fe8a
-r1018 c66ad962e6
-r1019 becb3c22d6
-r1020 1805e699a0
-r1021 ae9eeb9372
-r1022 e90fe22dc3
-r1023 05b3783bba
-r1024 7477cf8c1c
-r1025 b5b28969c5
-r1026 be547c5450
-r1027 6391473b0d
-r1028 697691c3b3
-r1029 6f65660583
-r1030 c0a66221a6
-r1031 1be5d460df
-r1032 8b025da064
-r1033 3279825ba3
-r1034 13885930be
-r1035 42ebd9cb4c
-r1036 f56a073205
-r1037 177dba42d5
-r1038 98fbeebaa5
-r1039 be1376dcac
-r1040 57b45faedf
-r1041 28db3bba9b
-r1042 da378d9a6d
-r1043 40eddc459e
-r1044 b82944e86b
-r1045 b3ad694a43
-r1046 36fed7ddbb
-r1047 308cd9b2f6
-r1048 bb98463dc1
-r1049 1277a5e94e
-r1050 db2914e723
-r1051 81dbbfa8d6
-r1052 280d025c7e
-r1053 9aaa79cdba
-r1054 0a0595a1c7
-r1055 08ba2872c4
-r1056 8ddba4dded
-r1057 e00deae3e5
-r1058 a5fdf3ec18
-r1059 316f425492
-r1060 7ccd1ed473
-r1061 b0b2440892
-r1062 0c5b3ad66e
-r1063 8f1ab98b77
-r1064 d4945a881b
-r1065 086e26c6bb
-r1066 14143d5b3e
-r1067 0715852a2e
-r1068 71dba047af
-r1069 52afd6d1da
-r1070 9efa993106
-r1071 9500f0c78c
-r1072 85a93fa145
-r1073 5a64e1706c
-r1074 5f77ce3a39
-r1075 30309b2ba2
-r1076 e9c280e68e
-r1077 323f6c8961
-r1078 5df0cb2c74
-r1079 511713e0f4
-r1080 c1bcad868c
-r1081 bb9cfcedf1
-r1082 7afa1692c9
-r1083 a56f482825
-r1084 336bb52e43
-r1085 7c0c7a1f49
-r1086 def6806d93
-r1087 9b09c3e8d9
-r1088 a146e0762d
-r1089 016c1d51aa
-r1090 1651493c7e
-r1091 74d350a2ba
-r1092 e570d189e0
-r1093 4ff4623f2e
-r1094 22f3db43a7
-r1095 6d4a913e0f
-r1096 4c8016c62b
-r1097 a6a3c78743
-r1098 53efe4c369
-r1099 b08af12a36
-r1100 aaf811cc09
-r1101 34c22f876f
-r1102 09797356a0
-r1103 640680faba
-r1104 b68cc17788
-r1105 d75d9c0d07
-r1106 be905bb7cb
-r1107 e52bd69509
-r1108 673eec6972
-r1109 ac54718edb
-r1110 7dc9bd0f1c
-r1111 4fdf2ee3ca
-r1112 63c9056e69
-r1113 fc4121d4cc
-r1114 71557bc2da
-r1115 c5d9799308
-r1116 69d94c439c
-r1117 d73289451b
-r1118 e39c6c0e62
-r1119 056a15a7e8
-r1120 60ec6920d9
-r1121 40e05d7679
-r1122 115b836500
-r1123 6b56b4b590
-r1124 59f320de1d
-r1125 b7378219e2
-r1126 ed86a8f6b3
-r1127 9877ad4b2c
-r1128 ef53216099
-r1129 011db07a5b
-r1130 20410a6d32
-r1131 5107585f17
-r1132 3765cc0c11
-r1133 2c9c03c154
-r1134 86e5e65288
-r1135 4d18dc9f7d
-r1136 c6a3849966
-r1137 4b03e0bc46
-r1138 30e3b26eee
-r1139 9b9660252e
-r1140 3016ae3a59
-r1141 90b4108f45
-r1142 c1c06996b1
-r1143 41e6216426
-r1144 5850ec1c8b
-r1145 2d01fbe908
-r1146 3a4c181e03
-r1147 8684be678d
-r1148 728ab1f19f
-r1149 be21ca1267
-r1150 03449ed20a
-r1151 8c0786c2f1
-r1152 97b01f58e9
-r1153 5a67796e02
-r1154 e41aa28a33
-r1155 8ccfe152e0
-r1156 9b9ce37073
-r1157 ea1bcd09ef
-r1158 f014b416aa
-r1159 5cbecc3b89
-r1160 863a5f0add
-r1161 bb672e7f07
-r1162 b25aa75bcb
-r1163 01b58f124d
-r1164 0502ed783e
-r1165 bc7faf76c7
-r1166 6fa7aaec76
-r1167 9c38388db3
-r1168 5c9050c6b5
-r1169 4997e2ee05
-r1170 a6a049520a
-r1171 a045106086
-r1172 8c0290713c
-r1173 d27a593dc1
-r1174 8f8b0efb39
-r1175 8a3fd993d8
-r1176 d809159c0f
-r1177 aa4c7a9ca2
-r1178 8dc5a3d907
-r1179 45be55750d
-r1180 57fdd41099
-r1181 e1d1b2d9b8
-r1182 cd257c40d1
-r1183 36a3ab03ef
-r1184 f0398407c7
-r1185 4019f76676
-r1186 e73d2649b1
-r1187 62ea09a680
-r1188 3db90fcd88
-r1189 154d2e27a1
-r1190 59f37b3fec
-r1191 d0da6a1fd0
-r1192 7e214f1547
-r1193 57e6418abf
-r1194 e07f1d2146
-r1195 044392dffe
-r1196 69e9c38b4f
-r1197 34ddfde6bd
-r1198 3efa683e96
-r1199 7cef1c5c75
-r1200 17ec08ec2f
-r1201 f1d35e8588
-r1202 7dc777e619
-r1203 912a3dcbea
-r1204 14cf526996
-r1205 c513a75367
-r1206 5a3dead77f
-r1207 a89d27dea0
-r1208 1732d4ec94
-r1209 7a1154824c
-r1210 6150a5b04e
-r1211 5ea9e55829
-r1212 dd32ecc6bd
-r1213 7c3f5b1123
-r1214 5893d5b55b
-r1215 6e5ee79778
-r1216 6bd09d1151
-r1217 9ed9970ee4
-r1218 cecd6833be
-r1219 fe0cd4ccf9
-r1220 50cfa1ce61
-r1221 32f01ba87a
-r1222 eda495f66d
-r1223 20e31b0d76
-r1224 ca32e4de8e
-r1225 b515ce4596
-r1226 de98c6562a
-r1227 32cef67832
-r1228 d24f7cda21
-r1229 abd8bae0a2
-r1230 d61afba2c5
-r1231 7cd27574a6
-r1232 562f1f62e3
-r1233 da74821b08
-r1234 183d279b2c
-r1235 9d675361a3
-r1236 a3654375f6
-r1237 101992b2d7
-r1238 1bbbb4c44f
-r1239 b56a6d699c
-r1240 5d58eac358
-r1241 ab3ad145b7
-r1242 43eaf5cb64
-r1243 f37b3d25f8
-r1244 5aefaf0289
-r1245 f91ce5d110
-r1246 71ef5f593c
-r1247 72e4181a21
-r1248 417db2c895
-r1249 c635da58a6
-r1250 f92d38c415
-r1251 df43fa3f64
-r1252 fb39bdf496
-r1253 396a60a22c
-r1254 2607570861
-r1255 4678d29bef
-r1256 c99331efe7
-r1257 cce804c34f
-r1258 5fdf691280
-r1259 73b8c5b039
-r1260 83b0601c69
-r1261 8dbaa5dfc0
-r1262 0386aaf8b9
-r1263 e7d85e45d6
-r1264 1cd03ac6fc
-r1265 0e43757819
-r1266 c4e1967d6c
-r1267 87210b8f10
-r1268 b7dd9ed9a2
-r1269 73e8019358
-r1270 4cdff61887
-r1271 eae9ff36d8
-r1272 1832dd1036
-r1273 8222cb50fb
-r1274 a6b1f467d9
-r1275 596976749d
-r1276 1fd3a2beb2
-r1277 16f6896733
-r1278 67a3af7360
-r1279 8497662b95
-r1280 b0a6581fe6
-r1281 a79210890a
-r1282 10842143de
-r1283 da5c361c7a
-r1284 8341c5c36e
-r1285 7b1200a4f4
-r1286 b227b27211
-r1287 d1d13f56f1
-r1288 83f7f3a758
-r1289 14b1a37788
-r1290 71cd6f0484
-r1291 1203bc5ed8
-r1292 261f125a04
-r1293 a6cccc16e3
-r1294 31e4cd7266
-r1295 062981ee6a
-r1296 ef8c355694
-r1297 048a89ecb9
-r1298 20aa76ad3a
-r1299 54886f8012
-r1300 8a94b49aab
-r1301 d50c39952e
-r1302 cc29221639
-r1303 eb893b68fa
-r1304 633f7316ae
-r1305 f0cf135c58
-r1306 20543e1606
-r1307 dc2dd01c6d
-r1308 e7e41951af
-r1309 b41bb0cfaa
-r1310 1d4933eab0
-r1311 b0a00e8558
-r1312 40fde0de91
-r1313 690d5b8ee1
-r1314 c68f3a0c00
-r1315 8224188368
-r1316 c9f081e345
-r1317 ba17480ab2
-r1318 5a25b6cfc1
-r1319 4f8b58c0ae
-r1320 1cfdffddd1
-r1321 8246648ff1
-r1322 c4e4065bfe
-r1323 6d891c5063
-r1324 c8f4c60282
-r1325 bc25825b42
-r1326 6dbb85aa03
-r1327 7590404f80
-r1328 ca6bfb0f68
-r1329 20b0001740
-r1330 f029f8f1ba
-r1331 904390c640
-r1332 24884fed2f
-r1333 079d579bfe
-r1334 508e62c581
-r1335 c6dafd9c9c
-r1336 c8c10445bf
-r1337 b04a4e1a21
-r1338 93c3bce1fa
-r1339 288ba9925e
-r1340 4c10e8515b
-r1341 80d3a625a7
-r1342 2b1afe846e
-r1343 d7b4fc3e69
-r1344 191ff46a27
-r1345 330db276e6
-r1346 33bb8c9531
-r1347 d36d1e0e4c
-r1348 2b4c3ffd81
-r1349 16058f3be3
-r1350 c040897705
-r1351 d19300beff
-r1352 2549ba1c55
-r1353 7ebf3abe37
-r1354 194a0cfcbf
-r1355 c6bfe08b2e
-r1356 03a8443eea
-r1357 2fd58d0430
-r1358 f69ebea872
-r1359 376b97626f
-r1360 a2bc132e04
-r1361 bbbecb8a61
-r1362 5d5d6d1763
-r1363 65981fc712
-r1364 3cda488d5a
-r1365 07493a2465
-r1366 4409444f49
-r1367 f10b65baef
-r1368 7a9bbd21f0
-r1369 1f02ae1368
-r1370 1ba1b5f0d6
-r1371 cef4819a20
-r1372 03552d1859
-r1373 9ed2cdba69
-r1374 06a5f2627e
-r1375 108c95de63
-r1376 41af0bf85b
-r1377 6ba693de02
-r1378 eb89bf0481
-r1379 10f1c3abfb
-r1380 9cf507cee3
-r1381 cc58ab3a7f
-r1382 e6d8b58497
-r1383 79b7bfc473
-r1384 325b15e759
-r1385 8ac36547ea
-r1386 3c896b4d73
-r1387 2d1a404d9a
-r1388 cdbd9750f4
-r1389 860d5686c0
-r1390 003528200c
-r1391 f548eaa205
-r1392 1fc44135a1
-r1393 3228df8eaf
-r1394 ec46a90f5c
-r1395 0c5225a4af
-r1396 fbb6cebf1d
-r1397 155189bcfa
-r1398 40bdb6bee6
-r1399 627a239ed9
-r1400 fc682c4406
-r1401 9769a4d244
-r1402 a290cbe0a1
-r1403 3cb7eb8fcd
-r1404 7d98030490
-r1405 69d4d1a118
-r1406 513514d066
-r1407 5a7daecfa2
-r1408 a69e4e5995
-r1409 dd1ebac2aa
-r1410 d8a3d0acaa
-r1411 d1746306e4
-r1412 7e8423ed47
-r1413 c52494a7e0
-r1414 af26097134
-r1415 638f6e8e07
-r1416 045f856bac
-r1417 4212f1b8c0
-r1418 5d956bda6b
-r1419 e2b146bbef
-r1420 d107eb40f1
-r1421 7e8533ec42
-r1422 97d8a84895
-r1423 dcf7886f78
-r1424 c85fd22375
-r1425 43c5c82eb9
-r1426 70d78cbfc8
-r1427 a9af998cdc
-r1428 bb6372b1c9
-r1429 129deca8fd
-r1430 139d9a3f87
-r1431 e9a7b01df1
-r1432 78c05c5995
-r1433 0fd76c61fd
-r1434 e60924767e
-r1435 52c7c80485
-r1436 13c7c02fbe
-r1437 151cca035b
-r1438 5600ac92e6
-r1439 3ea157ef07
-r1440 77e079a5e1
-r1441 8395399f4b
-r1442 026c357349
-r1443 636ded2b48
-r1444 9b9e16dd39
-r1445 86451906a5
-r1446 957c42dadf
-r1447 7d2cf8f17d
-r1448 8e10a1c93c
-r1449 86fa7e4536
-r1450 e3aa358f3c
-r1451 e46d223383
-r1452 c015c50dd2
-r1453 2be75c2c42
-r1454 271e180836
-r1455 731b678500
-r1456 3551973214
-r1457 c4b7a33f58
-r1458 0eec3d4087
-r1459 d14fd54e1b
-r1460 239d97850a
-r1461 0f69f89f76
-r1462 37846a9955
-r1463 e7b222d3fa
-r1464 e47e2de37e
-r1465 ba1b334040
-r1466 97ad2ad9fe
-r1467 a5764c4b45
-r1468 9207360ce2
-r1469 66807fa7e2
-r1470 a04578330d
-r1471 606b414ee1
-r1472 3029d91bf2
-r1473 499216593c
-r1474 874773fde6
-r1475 fcbd0e6400
-r1476 0aa1cfd521
-r1477 a6cc836dda
-r1478 bda0fb8228
-r1479 5ff566c77f
-r1480 19f1bccb17
-r1481 f42db99fd1
-r1482 ed300578cc
-r1483 9fae257875
-r1484 3c0b747908
-r1485 33fa93d62b
-r1486 8c482d22eb
-r1487 6e78409268
-r1488 01d4668fc8
-r1489 1b77651f90
-r1490 dc6ec50a08
-r1491 d8af1f7d53
-r1492 5b9b535641
-r1493 c0de8fd882
-r1494 b77cc54fa8
-r1495 8c65092474
-r1496 f7a0696413
-r1497 83737b19d1
-r1498 c8f0a7b6bd
-r1499 409a65421c
-r1500 ec5d770a7c
-r1501 7af685862e
-r1502 51a5386fa3
-r1503 810aefd0aa
-r1504 191c921e2e
-r1505 423ecdde9b
-r1506 d564a5473c
-r1507 156cb20b17
-r1508 d9bddc2fce
-r1509 9b05a390f1
-r1510 4d46f95c8e
-r1511 9638946662
-r1512 eb2f292cf9
-r1513 ff834c078d
-r1514 820f0b7226
-r1515 2b811578d4
-r1516 50fc9d84a0
-r1517 909b51e1da
-r1518 7a10026f29
-r1519 bb0022e6f6
-r1520 dc3fd344db
-r1521 419261187e
-r1522 066d81e7b6
-r1523 561f5efc25
-r1524 7f76c81a3e
-r1525 5d8b5d80bb
-r1526 b66879588f
-r1527 6282d0a5b0
-r1528 179b3f7892
-r1529 3ec4228daf
-r1530 d853b5d4d4
-r1531 807f9e4fb7
-r1532 4b3c76ddc4
-r1533 95ced83e5a
-r1534 49fae7d6e4
-r1535 0ff59624ef
-r1536 b870b4d3c9
-r1537 e2aba2c2ad
-r1538 26f6e93446
-r1539 154770da0b
-r1540 20918420a8
-r1541 14b3e240da
-r1542 fe809d3e73
-r1543 89f87cd020
-r1544 6f759ab9ca
-r1545 dd78e43d8f
-r1546 64d947d0e2
-r1547 7449ae53ec
-r1548 57a845d676
-r1549 615be6cee2
-r1550 f1182273dd
-r1551 d08dff3b18
-r1552 4500aea224
-r1553 d39fa1bb47
-r1554 3c30f6a1e6
-r1555 2d87b80967
-r1556 ae0b5fd298
-r1557 041659f9cc
-r1558 201f7eceea
-r1559 b6ad6a1bc9
-r1560 6ca43bcd97
-r1561 afabca6131
-r1562 fa256a1af8
-r1563 169b9a7ebe
-r1564 c12c3d3856
-r1565 dd6c158469
-r1566 82f735e5d5
-r1567 4f7353b447
-r1568 fba7c6afa2
-r1569 75d0b4a55f
-r1570 9baa6069ce
-r1571 f805b1683f
-r1572 2a1c7b3076
-r1573 84bdc646dd
-r1574 aa4eeeadec
-r1575 8de05b9366
-r1576 5718f84fdd
-r1577 8870ac88ff
-r1578 2052b68d97
-r1579 3338ca09b8
-r1580 4c20ac9650
-r1581 35342050b6
-r1582 84b6d995fd
-r1583 c6a4f7ec60
-r1584 65f0b02c89
-r1585 24c93d6416
-r1586 0e0aa61d20
-r1587 d49b034739
-r1588 f1d658c71e
-r1589 185bb897da
-r1590 ec98152cb2
-r1591 923c969e57
-r1592 0d9f013e96
-r1593 d113a4ca43
-r1594 8a265077a0
-r1595 f70f8574e4
-r1596 3e7a9d63ef
-r1597 51fb00e99f
-r1598 791345238b
-r1599 0dffd904b0
-r1600 041c512b32
-r1601 febb62721c
-r1602 ed28110153
-r1603 9d803bdc8a
-r1604 66077bf0c6
-r1605 8ee55188d8
-r1606 9c45685549
-r1607 55e40e1fdf
-r1608 a54029cbf9
-r1609 c17ef940fd
-r1610 10ce3e7c80
-r1611 dfc5cdeeb7
-r1612 d91729e50c
-r1613 497bfa3ea7
-r1614 1df7849ad7
-r1615 fc5e4bae74
-r1616 e2a6ec40b4
-r1617 cbf2cf2dca
-r1618 da160bfd73
-r1619 9b76838e75
-r1620 b70c49d2cd
-r1621 2de2bfc08e
-r1622 9cd9808b13
-r1623 3e764c63bd
-r1624 1ec30351bf
-r1625 2bb320eee9
-r1626 5dc0be3990
-r1627 fa73acda7c
-r1628 9e75e356d9
-r1629 094b1778ce
-r1630 5328404a62
-r1631 7191c8db6a
-r1632 dcd1796051
-r1633 a87e39db1f
-r1634 774bd9179e
-r1635 cd57b4ea44
-r1636 971ea727e7
-r1637 1726af0c47
-r1638 04e430874f
-r1639 30e1c738b9
-r1640 3242f383e0
-r1641 ecb8e40fb5
-r1642 7e20b9677d
-r1643 110211dfcc
-r1644 785aa26ab6
-r1645 67f1003ff6
-r1646 0f26e2f6ed
-r1647 08e04389de
-r1648 fbfe5ca0ba
-r1649 f7d10e2442
-r1650 339f51f314
-r1651 cc2a5f0399
-r1652 46781834bf
-r1653 f52ca3cc46
-r1654 1f454cd1cb
-r1655 2755e0794f
-r1656 96eb45c701
-r1657 e9b5eabdb5
-r1658 3ba71965ef
-r1659 0432dd179a
-r1660 607e9ec3f1
-r1661 9b3424de03
-r1662 53a5a8b254
-r1663 e006340aeb
-r1664 1a3084b209
-r1665 99b4e7dc35
-r1666 85ecdee41a
-r1667 79d406a6e9
-r1668 a9b7800360
-r1669 a887198e59
-r1670 3a8034f03a
-r1671 9cf2d7a56a
-r1672 fdf807a9fc
-r1673 67d1375a9b
-r1674 c40946712e
-r1675 a25300aed4
-r1676 a544dd4512
-r1677 767fba6cd1
-r1678 2e5258021f
-r1679 2c1ac0cc2a
-r1680 abee72fd55
-r1681 d5488e582a
-r1682 9c16bdcb8e
-r1683
-r1684 8490d8db14
-r1685 dff11cda58
-r1686 a6e102a5a1
-r1687 453e6a6db7
-r1688 d1a6514fb1
-r1689 be83a67054
-r1690 907dd4a4c7
-r1691 724ebb9791
-r1692 17e61a1faa
-r1693 afc36c22f4
-r1694 bbea46f3c3
-r1695 aba90f1964
-r1696 351971e83a
-r1697 82f6be34ee
-r1698 47a3af351e
-r1699 e1e0fa0c7b
-r1700 5fe89984bf
-r1701 a95be0a530
-r1702 b374c47114
-r1703 fe8f946e87
-r1704 1be7ad1e4d
-r1705 0c125b263d
-r1706 60205bccb6
-r1707 eb0304192b
-r1708 afdd2ae37b
-r1709 98f8b715ca
-r1710 3b888fff88
-r1711 0590ef07a2
-r1712 2543b1f362
-r1713 34d1e011d0
-r1714 93cb87cc1a
-r1715 8cf9f1c09c
-r1716 1e58e5873d
-r1717 fa86012919
-r1718 ca433daf1e
-r1719 ba5d4bc0ba
-r1720 9efff672d7
-r1721 39e04cd56d
-r1722 c5684228f0
-r1723 ff81c53907
-r1724 18c6124caa
-r1725 47ebc88769
-r1726 cc14c3fd9f
-r1727 9060ea504a
-r1728 6393b5b089
-r1729 f270a39315
-r1730 1e13dcd54b
-r1731 d625849898
-r1732 8422906b95
-r1733 71d2d7d978
-r1734 c3dd593e0d
-r1735 ca4f0683b1
-r1736 22601538e7
-r1737 7a7fd08c62
-r1738 e9b85b2806
-r1739 40c6285921
-r1740 6b900ad98d
-r1741 30ebdd6a33
-r1742 2f0b15f0e8
-r1743 36cde37b4a
-r1744 3e967ea8a6
-r1745 5a6459c987
-r1746 8f86ae48c3
-r1747 8f8507d071
-r1748 bf1f22df3f
-r1749 3b6074552a
-r1750 49f9d70b50
-r1751 5ec41c878f
-r1752 95fb97c1d2
-r1753 e231ecf228
-r1754 093023c653
-r1755 0e7948f042
-r1756 243531187d
-r1757 7a740005ac
-r1758 ff2fdd7bf9
-r1759 9739f7b7b1
-r1760 6f239df8e7
-r1761 256df827c2
-r1762 17e5c50d20
-r1763 71288c3d5e
-r1764 6502b10931
-r1765 da10615b3f
-r1766 4c58fa7b64
-r1767 95ed9ff085
-r1768 76da137f37
-r1769 b960d0b0e5
-r1770 f6dab0da8d
-r1771 63035c10a8
-r1772 a42f5acee1
-r1773 6191a1cea7
-r1774 b0cd565a51
-r1775 05e2b718cd
-r1776 f381bdba78
-r1777 2a4fe8cf43
-r1778 90c25ce9bb
-r1779 9aa73f7072
-r1780 d8beafde50
-r1781 813005cff3
-r1782 ea9add9f3d
-r1783 6e7a634da7
-r1784 7885501dc1
-r1785 bf54552f98
-r1786 3be1b3ad50
-r1787 480141c85a
-r1788 f6c0572ee8
-r1789 df1f2259cb
-r1790 d1f3dd8f8c
-r1791 0d71e3976b
-r1792 8f3e64bfcd
-r1793 8c06f155be
-r1794 96c18e0bf4
-r1795 390da638ae
-r1796 c48e8b69eb
-r1797 eb7da0de46
-r1798 4d69afd9eb
-r1799 fb814bd992
-r1800 7bfe816d3d
-r1801 4430371143
-r1802 29f2b9e84c
-r1803 4764fc5555
-r1804 d23d0a9c73
-r1805 53b2044393
-r1806 50db43a6e4
-r1807 c84e4be5ce
-r1808 1e46957a4f
-r1809 7d5d0d08ca
-r1810 44c0c70c5d
-r1811 b39d559fcf
-r1812 21d6879077
-r1813 4171a0e4a4
-r1814 8ff5e6c0e5
-r1815 8c3432973c
-r1816 32512b8609
-r1817 999b431955
-r1818 e1389174de
-r1819 81288e4e3e
-r1820 1115a0305c
-r1821 a884cbd15f
-r1822 a87a5ed43e
-r1823 f2edc84853
-r1824 33d19305e4
-r1825 26801b88cd
-r1826 aa3d610138
-r1827 8566e05662
-r1828 51f791416e
-r1829 58a79d27b3
-r1830 b587800cb7
-r1831 35bbfac32e
-r1832 5c70a41406
-r1833 a4d3dba63b
-r1834 76ff2cfcc5
-r1835 3a6b4792cb
-r1836 08cc6583cf
-r1837 7347b4ef10
-r1838 64c34f2009
-r1839 2cdffdee79
-r1840 7c52bed1a6
-r1841 9c20935fb6
-r1842 412f0dee7e
-r1843 d172e5ef70
-r1844 9bcc8b562f
-r1845 d37c08ba93
-r1846 ca1fb5b2ea
-r1847 263b33d07e
-r1848 e592008b31
-r1849 6be0cda04a
-r1850 aa8b75a4cb
-r1851 eb2a2e9310
-r1852 bdaca26661
-r1853 70245d6924
-r1854 c811babc88
-r1855 49625177f1
-r1856 57875e8033
-r1857 93fc1b0b63
-r1858 b877736780
-r1859 653445deeb
-r1860 4063ce9617
-r1861 394a775723
-r1862 e3e27c8785
-r1863 ea5ed7d4b2
-r1864 c2d445c46a
-r1865 ff67e2865f
-r1866 be5f005c3a
-r1867 302a8dfa19
-r1868 300a10fbe4
-r1869 560262c902
-r1870 8e697fc00d
-r1871 e721ad85bb
-r1872 cc00fa9f43
-r1873 9bf060b7c9
-r1874 fc7e1bce49
-r1875 4bab79034d
-r1876 de0a7b2297
-r1877 6ef31a0569
-r1878 c38b0a7fd3
-r1879 8d29db9496
-r1880 17638ef00f
-r1881 7363ca6d17
-r1882 97043a3bd4
-r1883 da10e84d85
-r1884 20e65c3ad8
-r1885 2ba1bbb103
-r1886 cc0c421327
-r1887 7122907653
-r1888 6a5131fc32
-r1889 2521f5270d
-r1890 8f12698280
-r1891 ab3ba403ef
-r1892 3cc09cdf0a
-r1893 ced2ba5fa0
-r1894 8dcce18a84
-r1895 83d1bae3f6
-r1896 fa70dcb1a5
-r1897 18fa82639a
-r1898 2093f9a082
-r1899 cf86b70560
-r1900 4f86e73bfe
-r1901 c743c68faa
-r1902 4f7571ec6b
-r1903 73b40d05db
-r1904 a5737137ab
-r1905 32d380ac6a
-r1906 0f6629c829
-r1907 54313dd4d0
-r1908 8da7c2b08d
-r1909 f8ed082d80
-r1910 f5437e9a8b
-r1911 a61eb89370
-r1912 9d52498406
-r1913 4cdb15a19e
-r1914 70ed6bea27
-r1915 cebcce6b16
-r1916 d71d7bb6f1
-r1917 1ce2b54384
-r1918 5c81900dec
-r1919 b9035ad31a
-r1920 02e1901894
-r1921 859704d7d6
-r1922 8e28c8583d
-r1923 4cf8078dab
-r1924 012bb63042
-r1925 63e0282966
-r1926 9a63043f7c
-r1927 7318a7e03d
-r1928 1bb18c95ae
-r1929 ddfcb6ad98
-r1930 3d150a5c2b
-r1931 0da94e1a1b
-r1932 e5ae9a3ec8
-r1933 7396b95892
-r1934 34615d4a1a
-r1935 516d5e2e31
-r1936 3c051855fc
-r1937 7597b1d5bb
-r1938 e5d1984c53
-r1939 1f99f743ae
-r1940 b072c8ee42
-r1941 7beb013c4d
-r1942 013b0ec718
-r1943 64913ef749
-r1944 bcd8a97b88
-r1945 056ce01ce5
-r1946 6a72d316aa
-r1947 f28a8a337e
-r1948 35ff40f25b
-r1949 319d4a304f
-r1950 3ad5854650
-r1951 79dfd483eb
-r1952 3b343cbf53
-r1953 0d064c5f91
-r1954 67c0850080
-r1955 e914e7a9de
-r1956 5fb655da1e
-r1957 34806cbc47
-r1958 cf31deaa19
-r1959 862f5badaa
-r1960 dfba31919a
-r1961 0f287203ac
-r1962 e37834d2eb
-r1963 e641ecb4dd
-r1964 7834c94e2d
-r1965 83e2c23071
-r1966 9f261a9240
-r1967 c7b74a41f1
-r1968 826b2fe47b
-r1969 182dce41f7
-r1970 15d66b518f
-r1971 29aa887026
-r1972 da7c6e4094
-r1973 0b4f31189a
-r1974 24b5f2f352
-r1975 2618e4550d
-r1976 c738ff1ae8
-r1977 2c435db44a
-r1978 3284c3e19f
-r1979 58657deaa2
-r1980 c69637585f
-r1981 d9fad519e8
-r1982 1bd13a8a2a
-r1983 5c34a951da
-r1984 aff70280b8
-r1985 ef7ab5ba91
-r1986 b35e4689cf
-r1987 e81d53a7e6
-r1988 ed02ff19e9
-r1989 b29d2c5234
-r1990 f81bbb4560
-r1991 0591bfabfb
-r1992 4d6fdfccca
-r1993 febd795beb
-r1994 b4997e3245
-r1995 d5bb139c0c
-r1996 7ce4434052
-r1997 63f7a4026f
-r1998 f936b14dd7
-r1999 6e64ba463c
-r2000 bcfd14b3f3
-r2001 986cda8cfc
-r2002 ed337a0a04
-r2003 858b174325
-r2004 60f05e6378
-r2005 90e43b5df7
-r2006 6289ffbd91
-r2007 d4acacd8bf
-r2008 399bb06cf0
-r2009 c9bb06052e
-r2010 28d3e984f7
-r2011 a3a5e047a6
-r2012 8faa7e1826
-r2013 bb03dbdd47
-r2014 93fea4d99c
-r2015 3e30fefb9d
-r2016 9a387fe59f
-r2017 164e2d8283
-r2018 35cfb1d88b
-r2019 e8de562d27
-r2020 9d6b317310
-r2021 41d7105a22
-r2022 4a5e0ea95c
-r2023 c8f278f400
-r2024 0c15dac9e9
-r2025 5045628572
-r2026 35edf3c230
-r2027 406679c2e6
-r2028 daf8afbdbb
-r2029 25016938dc
-r2030 bfe5383a1e
-r2031 24349248b1
-r2032 ca506ab133
-r2033 b1465f1f22
-r2034 f3fa114104
-r2035 2b7eaff322
-r2036 b68be7fedf
-r2037 2fd1face7f
-r2038 cbbb75f1bd
-r2039 7871d529b6
-r2040 746baf5411
-r2041 9b39818185
-r2042 18b13aadb5
-r2043 b72b96eace
-r2044 8c48250df5
-r2045 82f98b6f03
-r2046 cb6381bedc
-r2047 5fd5896c14
-r2048 e40307b850
-r2049 0212d5e04a
-r2050 4c626e1062
-r2051
-r2052 4ef1371308
-r2053 3317f76bbd
-r2054 33c3ea3b03
-r2055 377337eb8c
-r2056 8bb7f3d835
-r2057 890d729569
-r2058 30dae67575
-r2059 79c146cc2a
-r2060 50f7a66ed0
-r2061 db9d5a4f8b
-r2062 18be2fe9d8
-r2063 21a4dcc99c
-r2064 6b8d116ec9
-r2065 daea8b76a5
-r2066 ee3559b8bd
-r2067 44f38bde65
-r2068 ed0a728933
-r2069 345c562684
-r2070 6a1db626b6
-r2071 6c9deb38e1
-r2072 c926654a82
-r2073 0ab1c86696
-r2074 8550ca1591
-r2075 75b2c96112
-r2076 e37e8692e0
-r2077 a23dcbc444
-r2078 52d21a8546
-r2079 c6c820e8c5
-r2080 64ab1bd6b6
-r2081 8bec111856
-r2082 34501279e2
-r2083 a54b3188ed
-r2084 4a2e6b4e9e
-r2085 142bcb34f7
-r2086 3a4e72367e
-r2087 de8b8417f9
-r2088 b9fb541ab2
-r2089 a24fb5cd32
-r2090 bfde8ef1fe
-r2091 56e2a32dc3
-r2092 dcf5824694
-r2093 5a966687d2
-r2094 240bba50f0
-r2095 cb84910e87
-r2096 26fcd4c7cd
-r2097 f20b622e6a
-r2098 16d29a74a0
-r2099 18f69a76c2
-r2100 c8437e055e
-r2101 38d21f571c
-r2102 0861b9b399
-r2103 6ab80e73d3
-r2104 e6769e5ed9
-r2105 f4eb9e9cf9
-r2106 5488f9b4ae
-r2107 dec4538a46
-r2108 d773ded52f
-r2109 3743c70592
-r2110 bdb4c6d897
-r2111 2a0a8d29e1
-r2112 99a4612af7
-r2113 8f37d5e80f
-r2114 dda82d5eb2
-r2115 dcbe9fae57
-r2116 56945b9d09
-r2117 619bbf9b85
-r2118 d305f5fbe6
-r2119 0c3462a399
-r2120 e9b099b381
-r2121 26630285cd
-r2122 6d14e4da5a
-r2123 a1e8115baa
-r2124 62747ac614
-r2125 6dac101d48
-r2126 a85cabb4c9
-r2127 673cc92764
-r2128 1e1222b707
-r2129 7a4b5c1072
-r2130 4840576349
-r2131 4000080b8a
-r2132 f662fe1a35
-r2133 082d612f19
-r2134 9370a1e001
-r2135 9dce7827b2
-r2136 e4a37a2f11
-r2137 3b81bb39eb
-r2138 dbbab2f7f8
-r2139 8796df1360
-r2140 aa8590e42b
-r2141 ab08cd252b
-r2142 5e6295d2f1
-r2143 ee81efca19
-r2144 0c7c3c6d75
-r2145 be3f31b34a
-r2146 8a675351cf
-r2147 5d861db0fc
-r2148 08dea16b70
-r2149 7feba1480e
-r2150 b0d1c8d146
-r2151 15c5be6f3d
-r2152 d56b51f38d
-r2153 2bda1797dc
-r2154 9ff862a955
-r2155 178ae73888
-r2156 3edd611a2c
-r2157 336268483f
-r2158 00915ce954
-r2159 e516933250
-r2160 22b5c4c0bf
-r2161 5137f0a3ad
-r2162 accaee1ce5
-r2163 17b8ac4bf4
-r2164 4931ca3059
-r2165 cea1921b50
-r2166 8d7d9f8df5
-r2167 829cdf1f81
-r2168 6b8ceb50e3
-r2169 6e1ccede35
-r2170 1f4151cc03
-r2171 605ff15c1e
-r2172 2aa1444f81
-r2173 486a8c2f7d
-r2174 e4687a8913
-r2175 613a52d58f
-r2176 6e7244f1c0
-r2177 709ba6a8fe
-r2178 1935bd3e53
-r2179 2d473fd67a
-r2180 35e4fb5175
-r2181 8dda7b0466
-r2182 40508d0a02
-r2183 8d9a50e63a
-r2184 6cc7254805
-r2185 103888d458
-r2186 5e87c33e2a
-r2187 86f01a5276
-r2188 039d3b3c86
-r2189 68a9768777
-r2190 255be1e85a
-r2191 1efee7453f
-r2192 28a8f644f0
-r2193 6047e1e259
-r2194 fab2ebadf0
-r2195 e6ed073577
-r2196 fa15a3d866
-r2197
-r2198 cd15a69869
-r2199 7e748928cb
-r2200 03e0decc57
-r2201 93da4f9341
-r2202 df9d6b1edc
-r2203 2458b5ce59
-r2204 44e74c6381
-r2205 904d31853d
-r2206 d0ffbd2412
-r2207 d87359dbd9
-r2208 21cf884cc7
-r2209 b550531ef9
-r2210 806aab5f09
-r2211 da6aa22fc8
-r2212 644a9f0d71
-r2213 bd139b1e9e
-r2214 d8c9cf366c
-r2215 f36f1385f4
-r2216 9b0529c56f
-r2217 07627136f8
-r2218 5b88042e49
-r2219 68ed8693e9
-r2220 2694a9cda4
-r2221 063e9a81fa
-r2222 58d053ebed
-r2223 adf175ac26
-r2224 bcc3423f85
-r2225 933984df2c
-r2226 4b5620b2f1
-r2227 de574928fe
-r2228 6eba51241f
-r2229 a7c75c09c6
-r2230 eaedb73aa5
-r2231 910667e39a
-r2232 144f8735b7
-r2233 681290f866
-r2234 787f3ff992
-r2235 f2de9c44a8
-r2236 d29c108139
-r2237 161661cf29
-r2238 15d8dae21d
-r2239 0602da2bfe
-r2240 7534129fe0
-r2241 687adfac11
-r2242 67bb1e7543
-r2243 76d02d660b
-r2244 0310ff02f3
-r2245 aa19b7dead
-r2246 f5ccd18bd6
-r2247 fd5b71760e
-r2248 14bd516c52
-r2249 8acc04c7d3
-r2250 373f590537
-r2251 b1d1e01908
-r2252 110310e52a
-r2253 c5d12428eb
-r2254 b9bce038b1
-r2255 b1b0574170
-r2256 ff8ce7198a
-r2257 3351f53801
-r2258 7c0e0f3ca3
-r2259 1dcdd042ac
-r2260 d6cb921038
-r2261 183040ae17
-r2262 81ed64fd4d
-r2263 e15d8d316b
-r2264 77eea4abf2
-r2265 f22dc6124d
-r2266 5f8752e96c
-r2267 77895f73d5
-r2268 2eed730f5f
-r2269 3d2b827dcc
-r2270 782063cf85
-r2271 83f5597196
-r2272 946aa12519
-r2273 3b1253891b
-r2274 0adfc8d42a
-r2275 ab7815a4ab
-r2276 7b8b6d0adf
-r2277 22499e81b5
-r2278 fec2e00d09
-r2279 72e96acd7e
-r2280 783f68c2ac
-r2281 5f628d0664
-r2282 2c8a91239d
-r2283 da4189d103
-r2284 68b2298f83
-r2285 71cd266cd4
-r2286 a1c71f9157
-r2287 8b4b869302
-r2288 5090a8faa6
-r2289 dcac982fd6
-r2290 836f5fbd90
-r2291 b05601a61b
-r2292 3590dd484a
-r2293 497e073783
-r2294 03399790a4
-r2295 3186eaed67
-r2296 84f921cf1c
-r2297 edf7c7a74b
-r2298 5598e28509
-r2299 3f4bdb54a2
-r2300 fd033d227b
-r2301 3fcadde1cd
-r2302 88ec34baba
-r2303 5ab98b10ad
-r2304 c8eb73357f
-r2305 5059979f35
-r2306 d6e4037c7b
-r2307 cc195672a2
-r2308 abdb5cc6bb
-r2309 d8888a99cf
-r2310 3f6a2d9a54
-r2311 16fca155f2
-r2312 9b1c72bc8a
-r2313 25d392bbcc
-r2314 b8d2c4e065
-r2315 9d7f21f573
-r2316 eee708d519
-r2317 084de2477e
-r2318 5e749cea9d
-r2319 c5dcb8d01f
-r2320 d9eef6e144
-r2321 e3a34d5bee
-r2322 2f487fd928
-r2323 f5919ef574
-r2324 64c98ed139
-r2325 57bf1138b8
-r2326 253a192ede
-r2327 2f88fe7918
-r2328 dc13a90b2b
-r2329 ae638b7fc0
-r2330 6a29f17c21
-r2331 74a2351508
-r2332 ad1bbdca7e
-r2333 000632827a
-r2334 e3981e4bbf
-r2335 7ba607db86
-r2336 87cb480434
-r2337 8698d99b93
-r2338 5665f6b29c
-r2339 39d3d2c894
-r2340 c0b473a235
-r2341 cfcba70201
-r2342 dcb9b69a64
-r2343 fdfbbfd640
-r2344 94d3acbf63
-r2345 35259d1028
-r2346 4ba19f6141
-r2347 84f0da94d5
-r2348 5e6ded3a4a
-r2349 33d36a45eb
-r2350 bf1d9d46d0
-r2351 ca5b2ccfb2
-r2352 b37cbcac6f
-r2353 7b0cb5b0f3
-r2354 ffe249b10d
-r2355 21dfb196b2
-r2356 3ce1703938
-r2357 2209925d31
-r2358 f7e5579e4f
-r2359 ca3b44fb2d
-r2360 fb144c8d45
-r2361 3f89d6837c
-r2362 fbbe896c2c
-r2363 4a9bfff8fb
-r2364 c788c8898c
-r2365 d9c1452ff8
-r2366 ad1e0f4cc3
-r2367 6024fffaf8
-r2368 c474f7cb36
-r2369 8a9f354696
-r2370 512a32f9e2
-r2371 4464fd3c97
-r2372 0362d6e255
-r2373 de408cadfb
-r2374 b629bde913
-r2375 cbecd2ab52
-r2376 2d4a2223b1
-r2377 08ab698c37
-r2378 399482a6ba
-r2379 b62bc67911
-r2380 e22c2ff60a
-r2381 53e08f348e
-r2382 6f0bb4891c
-r2383 a15110d883
-r2384 a7fc16dfe6
-r2385 1dbc00126b
-r2386 94d7bcd7ab
-r2387 3ea1b00f74
-r2388 59a98600d2
-r2389 4e215f6791
-r2390 c72f7b292f
-r2391 1be73373fa
-r2392 d1624f0e58
-r2393 4baa04cfb6
-r2394 67da7e0b9c
-r2395 5b0dce5f2f
-r2396 f34373f436
-r2397 5a98f27b77
-r2398 643a9f3e2c
-r2399 f31ddb4271
-r2400 c1af5293fc
-r2401 b877bd4e6e
-r2402 a63c581ec0
-r2403 b35f58c4f2
-r2404 1d821aee2f
-r2405 2733181352
-r2406 0572255cf1
-r2407 79fca26698
-r2408 d53c0dadb9
-r2410 9108260633
-r2411 752abae338
-r2412 cebef56475
-r2413 dfb4b3d88b
-r2414 39aeb78b15
-r2415 e5901f3310
-r2416 3927bcf1cc
-r2417 f2ae3da0a7
-r2418 61cd59dc29
-r2419 f2d05be35c
-r2420 8109d288cd
-r2421 bbadab7e72
-r2422 f8865bfa85
-r2423 2102c85d8d
-r2424 0c2f94986a
-r2425 4ae2a110b2
-r2426 c1344232ad
-r2428 350dae616e
-r2429 2c14e0fd96
-r2430 ec8b875fec
-r2431 ed4861b3f3
-r2432 00bd0b0b03
-r2433 2c067ee54f
-r2434 b011f55379
-r2435 1c3bde7437
-r2436 7c8f4490a3
-r2437 e0302c3f4a
-r2438 cd4de247e0
-r2439 a2a20e4cc2
-r2440 b411d98cb9
-r2441 8822af3c41
-r2442 5421ec6d05
-r2443 d9059f96dc
-r2444 e6bcb618fa
-r2445 9694e01a39
-r2446 bba5b99fcf
-r2447 0c5398b922
-r2448 af6b02cfe0
-r2449 bc787f22d3
-r2450 783d20556d
-r2451 7fab748c79
-r2452 fd419e96a7
-r2453 6688f9d3e1
-r2454 b711111204
-r2455 25412bcee8
-r2456 098eeb4af8
-r2457 ccaf171196
-r2458 77eeea0708
-r2459 97626f9df6
-r2460 34a75235f6
-r2461 642fe7790b
-r2462 56457e5b4f
-r2463 e72cb8c981
-r2464 24c538e634
-r2465 10ab89ae44
-r2466 d2d2db6b51
-r2467 7d75758247
-r2468 f525d895f4
-r2469 640950adab
-r2470 398f4e52a4
-r2471 aa23e3e1a2
-r2472 a386c6b2f4
-r2473 a14f030d44
-r2474 ae2cba7319
-r2475 328063bbe5
-r2476 05b798c3d1
-r2477 7a9f373473
-r2478 17ea384cb3
-r2479 3cb16fdb40
-r2480 4209d6c888
-r2481 5069b94720
-r2482 c8842d2ece
-r2483 2aef35c1c9
-r2484 7c6d191387
-r2485 d3aeb53f30
-r2486 30d9763761
-r2487 364a11eaee
-r2488 fc07fab722
-r2489 3dc7c479c1
-r2490 ee9aea08d4
-r2491 4a61569db4
-r2492 73b6fcf337
-r2493 4e8adb9edd
-r2494 9c37599cf6
-r2495 24549f229e
-r2496 67b86b9e8d
-r2497 94c44549ef
-r2498 41f787d1f5
-r2499 91945ebb95
-r2500 3d7fe86ae7
-r2501 ff4e274396
-r2502 0134764630
-r2503 4c01efeee5
-r2504 244e701074
-r2505 95bd5979f6
-r2506 170091b655
-r2507 4f93a0fb9d
-r2508 0bc48e99d9
-r2509 bec9884b00
-r2510 c9e045f5c6
-r2511 e473193158
-r2512 b95957de6c
-r2513 43318b75bd
-r2514 131fc7ff56
-r2515 06bad88d6c
-r2516 c86863e436
-r2517 b8f8fb77bb
-r2518 204c95bb5e
-r2519 53f396c70e
-r2520 ec2cf46df2
-r2521 4801729114
-r2522 8f71bdfa4e
-r2523 e6ad5066a8
-r2524 08c65b09ef
-r2525 37cfcbc4f5
-r2526 b5d47b164f
-r2527 c11a8632c4
-r2528 982254cf56
-r2529 bc2b4c14e4
-r2530 f412400f06
-r2531 b2847d5516
-r2532 24e7b23949
-r2533 7c34b69259
-r2534 49b2a7e6b9
-r2535 0e15eaa854
-r2536 9441412e0c
-r2537 2f18309e79
-r2538 5b1555e72e
-r2539 e414d903e3
-r2540 1c315aa623
-r2541 f40e29b44c
-r2542 d2d7a7ed16
-r2543 f5fc87e968
-r2544 9d0a383fa1
-r2545 f9d951b4e6
-r2546 39a7f8363f
-r2547 7735e5b993
-r2548 d68d41ec0a
-r2549 8d6a1e3cfe
-r2550 0fe104ec43
-r2551 3a273d52ed
-r2552 6157d53787
-r2553 d6963262b4
-r2554 df78dc64f7
-r2555 d05ea282a1
-r2556 0c20540ebe
-r2557 0b38cbc3c5
-r2558 2629b94686
-r2559 3a657c3f26
-r2560 466ef4d121
-r2561 bd2cb9d56f
-r2562 da6966888b
-r2563 d266b00a2d
-r2564 5cf09c3b1b
-r2565 990b79b76d
-r2566 3fedc714db
-r2567 a10fed035d
-r2568 dd76054657
-r2569 6a930f9ca6
-r2570 c9ced67aa4
-r2571 fb462ea1b3
-r2572 a0ae30f323
-r2573 9de41d8e77
-r2574 196d85658b
-r2575 1f5810a6e8
-r2576 b62de8dc4f
-r2577 2014d1feee
-r2578 02424acb23
-r2579 08299566b2
-r2580 1da04b88fc
-r2581 14ea14e71b
-r2582 7861176c22
-r2583 9c50901f93
-r2584 b549b7bc7b
-r2585 07f96aac39
-r2586 e1f634c04c
-r2587 f145a03da3
-r2588 2f8a23ed07
-r2589 7cf98e704a
-r2590 d6261e9cd3
-r2591 0f58b769c4
-r2592 a1f0c5d00b
-r2593 d437649e1f
-r2594 6e033e8d2d
-r2595 429b2299ae
-r2596 d5d867cc1c
-r2597 f69df6a87d
-r2599 1ceb5de993
-r2600 0ec87d7eb2
-r2601 819c49c7f3
-r2602 3c2c7c93c6
-r2603 0434561cee
-r2604 27203be4cd
-r2605 8bb7d00387
-r2606 66202c13c9
-r2607 9742dffcb5
-r2608 9810b4372a
-r2609 2d6d5a41e2
-r2610 d5f12adbfd
-r2611 f84a1e2955
-r2612 470b27d49a
-r2613 16ef657d46
-r2614 24a50b5e81
-r2615 40e9aaf193
-r2616 3b4e70e1bd
-r2617 d19cd4e679
-r2618 ffc44a5c91
-r2619 04121e51e8
-r2620 f405b980ba
-r2621 4fa1acc175
-r2622 192afdc3ca
-r2623 c2e3c0f366
-r2624 a45c078ec7
-r2625 f6fa10b19b
-r2626 b1e0f11836
-r2627 6a574075fc
-r2628 911f51efb7
-r2629 d72362d233
-r2630 669a7e4704
-r2631 949cbfa341
-r2632 5e430d9bf6
-r2633 8895d4c283
-r2634 c46335ac1a
-r2635 b8d11d03ea
-r2636 a634b2280f
-r2637 333d2fd8ba
-r2638 7b9dbbfaf5
-r2639 df05d14290
-r2640 d15a4148ef
-r2641 ba3daff2aa
-r2642 b52895234d
-r2643 e24b4f134f
-r2644 646bedd83c
-r2645 6c399e8273
-r2646 c56fa94244
-r2647 b28470ad0e
-r2648 2fae19f844
-r2649 5b778f324f
-r2650 76506bbb73
-r2651 cfefa04006
-r2652 31238c61f5
-r2653 f4308ff5f3
-r2654 3eb734d2b4
-r2655 a28376d5bd
-r2656 0b75ded56f
-r2657 01599fa37b
-r2658 12bd290e16
-r2659 180d7c2fec
-r2660 fffd640953
-r2661 531b370021
-r2662 45715e4289
-r2663 2f390afd17
-r2664 181f366139
-r2665 16ec5b5482
-r2666 94109ffcbe
-r2667 c1e6d28227
-r2668 e2d5017493
-r2669 7ff87b6dc3
-r2670 4342030b00
-r2671 124944fb5b
-r2672 05632168c1
-r2673 826af8cfd0
-r2674 e27bc7f5e6
-r2675 a6cbb7ee0f
-r2676 3f86c7c501
-r2677 09d5285df3
-r2678 38ad1eeb91
-r2679 5bcf3d3f6f
-r2680 c81ec5f07f
-r2681 8cf49a6284
-r2682 9308bfb939
-r2683 a8431a8613
-r2684 56747fd2de
-r2685 810d031614
-r2686 00478513fc
-r2687 4c74885f5b
-r2688 142fa4545b
-r2689 593554425b
-r2690 420ab4bb9c
-r2691 045c22769d
-r2692 1807482906
-r2693 b96ad4aaa3
-r2694 6034828756
-r2695 dc15aa8a27
-r2696 b3d9ef7126
-r2697 4066bd9c15
-r2698 f909d73594
-r2699 d2bf0e1ddb
-r2700 fda2eeab2e
-r2701 cda9593740
-r2702 ffea5d8f78
-r2703 ebd6149d9c
-r2704 5c4179270f
-r2705 c3dad6eaf6
-r2706 3610314d5c
-r2707 b3c7876018
-r2708 f117a23cbc
-r2709 483b35519a
-r2710 4b14bbab34
-r2711 63e5a79c2b
-r2712 dbb4b1b89d
-r2713 94ce263ccb
-r2714 67089f9e05
-r2715 5ff59b4a7a
-r2716 ef077db69b
-r2717 0da441a4ca
-r2718 90feb7ffbd
-r2719 3d5478d4e1
-r2720 95146d1ee5
-r2721 1d27f61a15
-r2722 756d7e4741
-r2723 65fc22f072
-r2724 0bb65de0e0
-r2725 ec81919033
-r2726 ef1bd748b8
-r2727 4c4bc2c147
-r2728 50f5fcf7d6
-r2729 2d8126de26
-r2730 c1c3bc8b5a
-r2731 92d93e58ce
-r2732 00f558fd79
-r2733 6d53026841
-r2734 b1562509b0
-r2735 5aa1b9d168
-r2736 04aea0295e
-r2737 0f9736d449
-r2738 6a448198f8
-r2739 dbd4d89103
-r2740 22f8b2e70d
-r2741 4d14aa915e
-r2742 46e374a5c0
-r2743 45df364c3b
-r2744 b674983475
-r2745 dc1e6dd949
-r2746 5f19071110
-r2747 c06bdb684a
-r2748 88a9af0734
-r2749 72a496a3c4
-r2750 8ba6023e7a
-r2751 ce039b7db1
-r2752 b57a08994f
-r2753 fae54c38a7
-r2754 2dedb4dd2b
-r2755 79ab139d58
-r2756 286ab9ba98
-r2757 e9201a7193
-r2758 21e809f6cb
-r2759 a4737b5704
-r2760 fce53bc99b
-r2761 1e9a5c8fa3
-r2762 41fc64111c
-r2763 da9c179a47
-r2764 d0f5e90b5b
-r2765 b918f65c2e
-r2766 bf4d9f29a6
-r2767 829ff49f1c
-r2768 07c291484e
-r2769 a736bd4140
-r2770 774209bb21
-r2771 b93f7b2512
-r2772 78ea6ddc4c
-r2773 8f6a248ace
-r2774 1e478c2c6e
-r2775 70d535ae7b
-r2776 98bd45db83
-r2777 982187f1d3
-r2778 b524ace93f
-r2779 b7210674f8
-r2780 a0846e3ecf
-r2781 de42629d73
-r2782 f6f7e50bfd
-r2783 5998eb1012
-r2784 bd9f74861e
-r2785 5412ad4a1c
-r2786 2ca6f3cc99
-r2787 7c81b118ae
-r2788 aa96bcae32
-r2789 0aa10646c7
-r2790 26d14cf7cf
-r2791 e688c54bea
-r2792 b29bcf9f0e
-r2793 95f6a43b4c
-r2794 6bee9bc8b0
-r2795 61d5e9b411
-r2796 cce47063a6
-r2797 d95cab4184
-r2798 952ee03cca
-r2799 ddc26de6b2
-r2800 e7bb2275e3
-r2801 b40e2e6879
-r2802 247c8b081e
-r2803 37be4bd4a8
-r2804 db24f5b0d6
-r2805 c39826e69e
-r2806 4a8d2fa214
-r2807 bb70bf9e77
-r2808 04741a8f8a
-r2809 315baae74d
-r2810 c1df3809c6
-r2811 6c1888cb45
-r2812 63f1bdd100
-r2813 6c9e15bea0
-r2814 72523cc253
-r2815 354a08de0d
-r2816 848d9a68a9
-r2817 d61be478ed
-r2818 6d5be0aba4
-r2819 29c8420e04
-r2820 f893e29c2f
-r2821 417033fd0a
-r2822 f108d5429f
-r2823 7155dffc81
-r2824 6d13331746
-r2825 35338a6399
-r2826 f56e421f4f
-r2827 4f00279941
-r2828 0bdcdc7c9f
-r2829 435fe5da69
-r2830 2ebbfcd94b
-r2831 7814682f95
-r2832 d58b852b5c
-r2833 ff313793ab
-r2834 82bd6e4326
-r2835 10090487be
-r2836 58dc39185c
-r2837 7417f70cc6
-r2838 2e3a472e95
-r2839 1b56122b74
-r2840 f410167a75
-r2841 8e21b1ec26
-r2842 4b1688cfd4
-r2843 b5d1f0a2f4
-r2844 8a2115f360
-r2845 9928e41df8
-r2846 57808a09a8
-r2847 f6c38a0331
-r2848 dd1a0dff0f
-r2849 6ef9088488
-r2850 5b2ecea0ec
-r2851 4ed93830ba
-r2852 8a4add814e
-r2853 32fb9e583a
-r2854 d94678566b
-r2855 647a8836c5
-r2856 a231200e62
-r2857 0b43b2e82d
-r2858 a37819d7be
-r2859 7b19a9f333
-r2860 672a2b4b11
-r2861 65f20e3f1a
-r2862 737ba5b937
-r2863 bf4737b364
-r2864 a49360db4e
-r2865 6f6fae0e87
-r2866 09b226cf9d
-r2867 069839fa6c
-r2868 577d475284
-r2869 2bea6271b4
-r2870 dacc0190d5
-r2871 47e6548915
-r2872 0af8d12102
-r2873 3869143cba
-r2874 0a10a202bb
-r2875 f6835d10b6
-r2876 29d6bb1eb3
-r2877 164f433132
-r2878 5db349a7bd
-r2879 8517e8ce45
-r2880 c94a990938
-r2881 c5ca08e53f
-r2882 3cd77e2c4f
-r2883 a4eb56b88c
-r2884 a32de8bd0c
-r2885 2cfc33e42c
-r2886 0f9240b197
-r2887 e18aa1f949
-r2888 5d81251857
-r2889 05f0493156
-r2890 d84ed1d80f
-r2891 fa228978e0
-r2892 e272f2dc11
-r2893 9be9bb3626
-r2894 0522bc5751
-r2895 bf519a01e3
-r2896 45028dc737
-r2897 92763237f3
-r2898 ca196dd13c
-r2899 49332fe728
-r2900 100718a811
-r2901 f8d7d0b5a5
-r2902 0180171652
-r2903 9cfde36da8
-r2904 7465e94917
-r2905 f57010499b
-r2906 5ed2fb0f5d
-r2907 1e69dfd777
-r2908 61bf0c8f1d
-r2909 430c5dbe56
-r2910 c86bcd0630
-r2911 25ebed6d59
-r2912 834473088e
-r2913 e0ae9dedb0
-r2914 ef1bee05f0
-r2915 7ad11edbe9
-r2916 6aa8f52864
-r2917 71ac5a4ad2
-r2918 a70044860b
-r2919 da995cbaec
-r2920 51cc72085e
-r2921 8408bce1b7
-r2922 071bc69d4d
-r2923 c6526ff17d
-r2924 4fdc1318cc
-r2925 d188fb525f
-r2926 0ee73f9bb5
-r2927 0643b2df51
-r2928 4206abe0ca
-r2929 feb87f51f3
-r2930 944d6aec55
-r2931 302643672d
-r2932 1a380153a0
-r2933 e54a33c950
-r2934 95749d947c
-r2935 d7541a389a
-r2936 224c54733e
-r2937 360cd14a72
-r2938 9c24883918
-r2939 bb5e2de28e
-r2940 cf4fd3eeea
-r2941 3657ec24df
-r2942 227d56fc06
-r2943 b4745afc19
-r2944 d88a6cb1e4
-r2945 ae8b367bfe
-r2946 1300597627
-r2947 c44e8bb3c3
-r2948 b929563659
-r2949 56835ce139
-r2950 93102f73c8
-r2951 c262e44a2f
-r2952 6b60fc73e6
-r2953 70e9690e72
-r2954 dd33f4d02b
-r2955 04d78098f0
-r2956 4e3a699d7f
-r2957 3b5c08c007
-r2958 7847f3cf0f
-r2959 653b1117a2
-r2960 e52e120e4b
-r2961 6e1747c335
-r2962 bce606fb00
-r2963 381f20a04b
-r2964 2b714fefd1
-r2965 8bd0505b31
-r2966 dc77b955f8
-r2967 9e04e5e0a9
-r2968 42ae44afed
-r2969 5073bab4d6
-r2970 8a549256ab
-r2971 41872ffb3b
-r2972 9278a377fd
-r2973 7a5770aa1e
-r2974 c83874f3a2
-r2975 1731e5bd87
-r2976 8cbb56700d
-r2977 4931414ab4
-r2978 938d635c43
-r2979 bf2c43a88b
-r2980 b88fd07ae6
-r2981 dbbff1f3e4
-r2982 789d2abd99
-r2983 1b604c5f4a
-r2984 8127c2eeef
-r2985 6b35acd807
-r2986 556ac3b679
-r2987 245b2c3eb3
-r2988 b604e761bc
-r2989 5f69afd077
-r2990 5027368303
-r2991 a28216b0e1
-r2992 784644a919
-r2993 b33c785dbb
-r2994 43505887a3
-r2995 5dc5083345
-r2996 17c857d22e
-r2997 35f72d0a59
-r2998 86b56b80e1
-r2999 7c7bb3f6e7
-r3000 39d7ffe546
-r3001 645f87a5a8
-r3002 98a03600e0
-r3003 64d2fb73cd
-r3004 99ec3e8abc
-r3005 d963cc312e
-r3006 4004f3c9c8
-r3007 b8e65e4dfb
-r3008 c17db339dc
-r3009 d194fb8cea
-r3010 a4642adf15
-r3011 b19820ffbe
-r3012 34dca6ad93
-r3013 8dd1635f7f
-r3014 2a309487c5
-r3015 1a83c87e7e
-r3016 adfc51e14b
-r3017 a743b99a00
-r3018 0c3b2c8af0
-r3019 9fa2048e5c
-r3020 bcf98e6de1
-r3021 70c6897197
-r3022 118ba73f3a
-r3023 acbb83de85
-r3024 8bc6f7c187
-r3025 988633e286
-r3026 a5fef07308
-r3027 82a62ec95a
-r3028 483f42e9ab
-r3029 fbd9b93cc4
-r3030 3ec2af2548
-r3031 a55fdce899
-r3032 c4098caf33
-r3033 b9d0a59aad
-r3034 05468b3b04
-r3035 c1d2e4fa48
-r3036 e884c5b471
-r3037 9050b0828e
-r3038 915155182f
-r3039 4a2c2ffedc
-r3040 bae29995f2
-r3041 68d72320e3
-r3042 ce0c39c85e
-r3043 d540d32e90
-r3044 e5d0859a89
-r3045 76606401f9
-r3046 4d40926c1e
-r3047 0de069d640
-r3048 d57f01bdef
-r3049 acbf344574
-r3050 5b782ac56a
-r3051 222b71d54f
-r3052 8ff3a97381
-r3053 77f339b101
-r3054 bda037d7c6
-r3055 ef5b5ca41a
-r3056 fb2baaca32
-r3057 deb8c2dbee
-r3058 ad169885b0
-r3059 d8631cf668
-r3060 13000c076c
-r3061 2c4e04f759
-r3062 880c57e2e9
-r3063 07c4fae621
-r3064 f78573782b
-r3065 09ce120614
-r3066 2a3901a657
-r3067 141324d825
-r3068 0193c6d2d5
-r3069 278d0ef80e
-r3070 6ab8129e58
-r3071 266937fda1
-r3072 abe707d00a
-r3073 92fcc53be9
-r3074 873dd15e74
-r3075 229917fca2
-r3076 9422bf63f7
-r3077 ef7e4e5a67
-r3078 7ff8b2396f
-r3079 91a1d60c0d
-r3080 3da2cbe475
-r3081 e329fb0ec7
-r3082 62ba1d3b91
-r3083 f988ff0675
-r3084 84ff0a4c40
-r3085 f28c845709
-r3086 f962498141
-r3087 cd2030986e
-r3088 05062b76d8
-r3089 65d12219ef
-r3090 e691366550
-r3091 70e76c73dc
-r3092 d9944e2b51
-r3093 c7ce40c3c7
-r3094 0c42b4a80b
-r3095 927dadef10
-r3096 7db35370fe
-r3097 cfcd524e69
-r3098 e377d5cd76
-r3099 26f8a264be
-r3100 687c2be6d7
-r3101 7cb6cbfa0a
-r3102 4b1ad364d5
-r3103 89cd6790e5
-r3104 e4642b1cf5
-r3105 9d24efb389
-r3106 61bfff7453
-r3107 eeab29703e
-r3108 ef7348057f
-r3109 ce49391c0b
-r3110 5d65d5689a
-r3111 f8791e07ec
-r3112 c88601425d
-r3113 fa257bfab3
-r3114 011b49957d
-r3115 3d80e28b90
-r3116 a91be3f08a
-r3117 9711cb5539
-r3118 5fef5ac208
-r3119 c2bac2fa23
-r3120 cb2627b3cc
-r3121 0c2b5967e0
-r3122 bd07456f92
-r3123 34ae4f9fba
-r3124 c5287e6ce5
-r3125 1389f3407e
-r3126 92659885e3
-r3127 e339aa20e8
-r3128 bebd7cb4b6
-r3129 1bca8c5072
-r3130 b85cbeed4f
-r3131 0214953367
-r3132 1b9f47f3e3
-r3133 4fefd6bb11
-r3134 1e724a3d46
-r3135 bb2e5cbb9c
-r3136 8837d66ac4
-r3137 a405a10c05
-r3138 f475e1a49a
-r3139 2a5dfa5220
-r3140 e744fbb15d
-r3141 536d087fb8
-r3142 f152ba6f9d
-r3143 ee45148951
-r3144 6f2455dd9f
-r3145 8571291ea2
-r3146 8f463de49f
-r3147 21f7a05322
-r3148 54cb878b8b
-r3149 987b57f6b4
-r3150 c2dfcba328
-r3151 492ef88167
-r3152 24e43faec4
-r3153 2ebc9ea1d6
-r3154 5ddd74a408
-r3155 4db594575a
-r3156 6e8fe0a8c7
-r3157 7432218075
-r3158 00048f2901
-r3159 425f0d4461
-r3160 20bae1c9fc
-r3161 d9e9decf57
-r3162 60f6069405
-r3163 b524342e8f
-r3164 18d2dda29a
-r3165 a6b356f4a5
-r3166 b618729497
-r3167 2aab9b99cd
-r3168 14c64d8e10
-r3169 7de863e85c
-r3170 1b9da8e38c
-r3171 12ee4a22bf
-r3172 c9c91c98bc
-r3173 de2f5cdf57
-r3174 81091404c9
-r3175 e6d2aa4047
-r3176 af92d37f45
-r3177 0349ad65d8
-r3178 4daaa21895
-r3179 0cb02ad504
-r3180 308ed786b8
-r3181 9efd259519
-r3182 d7e5c0f81c
-r3183 f698557737
-r3184 e0cb1d2184
-r3185 02e928fd36
-r3186 0371fea50f
-r3187 bab61a5c3f
-r3188 1f7970f3c6
-r3189 65788124d7
-r3190 c10e42f319
-r3191 5e5ff4d592
-r3192 c3168553c4
-r3193 ca09668e88
-r3194 45f3196c8f
-r3195 77609a89df
-r3196 02a6574294
-r3197 8dcb4da871
-r3198 e90524b771
-r3199 32a9ad2c6a
-r3200 d7c89ac1b6
-r3201 872ffbd907
-r3202 a832a47df4
-r3203 1e1dfb7c8c
-r3204 ba2568edf4
-r3205 359ccf8501
-r3206 828b051bf4
-r3207 2cdb40e1ef
-r3208 401f49d066
-r3209 a1ae43c145
-r3210 b1a561d119
-r3211 3d3273ecae
-r3212 904fd95252
-r3213 7e04abe185
-r3214 f25e5dee76
-r3215 668e8ae268
-r3216 3b1dca4a7f
-r3217 c49fcd1023
-r3218 aefc959799
-r3219 989713ac26
-r3220 108910dcf6
-r3221 9f33609a68
-r3222 6af09c2f22
-r3223 18d6311803
-r3224 0cf6ebc16d
-r3225 b56ca3254d
-r3226 27a522996d
-r3227 e62db728e8
-r3228 06c5b6bf94
-r3229 b4f40a720c
-r3230 501082e638
-r3231 a8254eef65
-r3232 65518842d4
-r3233 76255b83a2
-r3234 3f84ccaa23
-r3235 3f137861e9
-r3236 e3deada17d
-r3237 446d90a2b0
-r3238 53ee2c0a66
-r3239 e5a10b5d5f
-r3240 b45360c49e
-r3241 7569c085bc
-r3242 d0ecd06a51
-r3243 d94a30d347
-r3244 682856e062
-r3245 805cd03fcd
-r3246 f36b4fc607
-r3247 efb7dc68db
-r3248 7b29157404
-r3249 608e922cbc
-r3250 1e59ef7fe0
-r3251 3b537582a6
-r3252 790ea6458a
-r3253 41ccf7eea1
-r3254 7f8e3d286e
-r3255 ce4346489c
-r3256 4ff7dbf5b9
-r3257 8b5b896060
-r3258 b14785e208
-r3259 74a305485a
-r3260 53445e748a
-r3261 4c6e4e319b
-r3262 3668fbec35
-r3263 d2fbc9ec5a
-r3264 940f327765
-r3265 43d9d996ff
-r3266 239e60890f
-r3267 47f5adf267
-r3268 61b0435b64
-r3269 706cd4cf87
-r3270 794a8601bf
-r3271 b0b5b5fc12
-r3272 368d511247
-r3273 dea41a5aab
-r3274 2c7b4a9d13
-r3275 4a3559d005
-r3276 f9042a2c42
-r3277 fceea28c22
-r3278 3bf3156272
-r3279 960da5806c
-r3280 b33917d779
-r3281 0602ac4d0b
-r3282 b96d7fa0a9
-r3283 5c8234107d
-r3284 7b6ab58713
-r3285 ad0b57d983
-r3286 5dacc66587
-r3287 e73cc0dbf5
-r3288 1b9180c273
-r3289 aa86bdc415
-r3290 d03b5fd70e
-r3291 87b12a1040
-r3292 1fef47e7b0
-r3293 e56821baaf
-r3294 a278f79961
-r3295 3b26120ff8
-r3296 2ce4da7402
-r3297 43f2d69e0e
-r3298 4c1a09cbc9
-r3299 f37c79282a
-r3300 bae111e875
-r3301 bb777251ab
-r3302 f020b6c5ba
-r3303 3cf6799f12
-r3304 1da220d96b
-r3305 2090a468ef
-r3306 fa64b1f6b2
-r3307 b64f685feb
-r3308 5e263118d0
-r3309 3fb2be2e19
-r3310 146510051f
-r3311 a86e0b90d8
-r3312 53e1782c71
-r3313 4761c43895
-r3314 910d3045ec
-r3315 0a4f68e681
-r3316 51a3f4687b
-r3317 d4014963a3
-r3318 f339e45758
-r3319 218dfd17b1
-r3320 d7060af8bb
-r3321 0c69d76b6c
-r3322 bf6a12295f
-r3323 12f31726de
-r3324 5a1bdae350
-r3325 2416fb7416
-r3326 498e4de99d
-r3327 93944e71f3
-r3328 fee5e824a9
-r3329 8d57fd5731
-r3330 c48a6091ee
-r3331 7be461e3ec
-r3332 26fe188f82
-r3333 1ed6c90451
-r3334 f3129f0da6
-r3335 d4e3c78e73
-r3336 d2db0dc89d
-r3337 b47b66ba0c
-r3338 a7c611df65
-r3339 424c55c4a7
-r3340 d62f52e2f9
-r3341 be579df2ed
-r3342 c806592747
-r3343 cffaae5651
-r3344 563faf882f
-r3345 02f1b571ce
-r3346 1c5ee40dab
-r3347 45541e41cb
-r3348 6eab12dda6
-r3349 19a0b7bf76
-r3350 5325bdaaf2
-r3351 417eeecba6
-r3352 e667e3d3d6
-r3353 f0462d8921
-r3354 eb5957859c
-r3355 379107dc6e
-r3356 bd56492ebd
-r3357 b3714201db
-r3358 e2885f986f
-r3359 b5127bbfea
-r3360 40db5ce741
-r3361 50b1b01c8e
-r3362 5c93f175aa
-r3363 313fb0a317
-r3364 e6b4b5bb09
-r3365 944b0908bc
-r3366 e2711857ee
-r3367 97875c8e2f
-r3368 5b86f497ec
-r3369 c1cf10de40
-r3370 c6bafd19a0
-r3371 cd51f95257
-r3372 87ba0c3692
-r3373 82fac1f8d8
-r3374 bc7e8ae564
-r3375 ce3243d0a4
-r3376 faa6d5c4a6
-r3377 d301ceffc9
-r3378 2eeda36287
-r3379 d89ef849b3
-r3380 c42214f9a3
-r3381 9e6bdbf4d8
-r3382 65cd38fb8b
-r3383 8d5573b5a0
-r3384 9686e20774
-r3385 9b4accd226
-r3386 e0e30084fb
-r3387 de1938de8f
-r3388 81b3c99632
-r3389 6607c9043b
-r3390 b49b44f0f2
-r3391 a7e0b49793
-r3392 196fb61c6f
-r3393 74946c736c
-r3394 c2505b8e5e
-r3395 62bb07c8a5
-r3396 501341ca37
-r3397 d30eb65e9d
-r3398 ed98c812a5
-r3399 cbf9e4a901
-r3400 5a1117d93a
-r3401 932f642e9e
-r3402 b0f0428e9a
-r3403 14163d11e5
-r3404 b53d38fdcd
-r3405 15bccea34e
-r3406 000f4bea97
-r3407 2a33fa039b
-r3408 f4e913aa03
-r3409 49123a49a1
-r3410 1982d7c0e5
-r3411 0adfa22f70
-r3412 514b9f68e1
-r3413 50ca1789d3
-r3414 755fcb9a66
-r3415 7262baec37
-r3416 9f3e2b2a0f
-r3417 5c1a325f05
-r3418 83f49b9beb
-r3419 9633437d12
-r3420 efb7b042ee
-r3421 96ff31936c
-r3422 548a1b758f
-r3423 395ad8ef2a
-r3424 147b761cea
-r3425 e27e0cf399
-r3426 259f4d2745
-r3427 b1b396567e
-r3428 8e297c9a6e
-r3429 036c29404e
-r3430 cf71c30d3c
-r3431 42cdcee6a3
-r3432 9393649522
-r3433 9ed892ea8f
-r3434 8cfefad21f
-r3435 f36f539cc2
-r3436 ba6a39aa67
-r3437 f2db31c140
-r3438 ba643c72df
-r3439 8eab4b5a28
-r3440 946d299889
-r3441 90d52624b9
-r3442 da852d8ff2
-r3443 8991585adc
-r3444 fbed2284e1
-r3445 96d69778b6
-r3446 62bde31335
-r3447 2136372ed7
-r3448 1d90bcabca
-r3449 8d92c23ba2
-r3450 57aef02daa
-r3451 05e63cf5e6
-r3452 41803c1c21
-r3453 52cbb7e9a7
-r3454 9c9c620615
-r3455 d5783a0e75
-r3456 b84faf9252
-r3457 e42693c168
-r3458 92ed802ce4
-r3459 8df9fca462
-r3460 3d71c05ad2
-r3461 7ddd0a6021
-r3462 4bd55b04d9
-r3463 77542c4f6a
-r3464 b4ae478e11
-r3465 ca1842d677
-r3466 c7010a9995
-r3467 9309cf418f
-r3468 63f1dcdd14
-r3469 1fb60c2cb0
-r3470 96aaa10303
-r3471 c377a704ca
-r3472 e23c51b0c4
-r3473 0437311aa1
-r3474 979587afe1
-r3475 e624082970
-r3476 2ce38016a8
-r3477 a746827473
-r3478 37742d3e76
-r3479 d2f969bff5
-r3480 09dba51a9a
-r3481 1c023c5345
-r3482 52d69b2abd
-r3483 8f5fdee46a
-r3484 49ee0198cf
-r3485 39178d7bfc
-r3486 acde04b2cd
-r3487 b6078ccf17
-r3488 cbe17005ad
-r3489 f2fdd942f9
-r3490 a14f094cf5
-r3491 8ac6b33927
-r3492 20de82010b
-r3493 66e469b904
-r3494 ebfda5b516
-r3495 05dd3314d6
-r3496 6274b6d50a
-r3497 365eb2d10f
-r3498 c812ada36f
-r3499 1129ed2878
-r3500 3db7494096
-r3501 a0b4532024
-r3502 dc580cf37e
-r3503 cb7783485b
-r3504 0c2274120c
-r3505 dea91c4e75
-r3506 e5cd07a0e8
-r3507 8912797e9b
-r3508 33d3b46b98
-r3509 4ab231d693
-r3510 cb1b811c02
-r3511 e23a24bb9f
-r3512 c7ccac906a
-r3513 9802b472cc
-r3514 ce53d0dc9c
-r3515 8621368703
-r3516 32013363bc
-r3517 19c9ffaa82
-r3518 07c7a31297
-r3519 c5a53a3a06
-r3520 31c6c0a62d
-r3521 5f9cb270e8
-r3522 05b722f3be
-r3523 751b5fef76
-r3524 9b178df043
-r3525 d2bb978499
-r3526 801009bb55
-r3527 9674b1514d
-r3528 6e4d83438b
-r3529 663ba495b4
-r3530 98f97d8e30
-r3531 b586442ff3
-r3532 6cc9d353da
-r3533 ba35c9553c
-r3534 4a1a36b344
-r3535 596f4af6a8
-r3536 c8a563c9a6
-r3537 3302ff7a20
-r3538 af125e6f83
-r3539 d53ff4ce6a
-r3540 e976f28a28
-r3541 bcde7a4406
-r3542 8da050118d
-r3543 d93bfce648
-r3544 2f30b9e5cf
-r3545 01e4da3b3b
-r3546 624d9f1198
-r3547 53fab22ccc
-r3548 4a94d26165
-r3549 97fcb93af1
-r3550 80cee61ed3
-r3551 a1acbca2a4
-r3552 99d2c0a5db
-r3553 09c6eecd08
-r3554 31d7bbf0f5
-r3555 6f74136951
-r3556 09415a6af5
-r3557 84a4f81380
-r3558 1d35cb0258
-r3559 1a6515ccef
-r3560 652272e16f
-r3561 89942c7a7f
-r3562 5c259cbc76
-r3563 7320ca34aa
-r3564 fb32a6880b
-r3565 23984e79ff
-r3566 72e388e281
-r3567 93796dd69d
-r3568 8adac706a6
-r3569 65a7eff371
-r3570 de650b49b7
-r3571 4cdcb6dbae
-r3572 ea60f46077
-r3573 bb58768c2c
-r3574 5c2695aedc
-r3575 dc7b49d56d
-r3576 25339d1762
-r3577 ad12814977
-r3578 388a7262cb
-r3579 befce84f58
-r3580 cdf59d7873
-r3581 2df00e9062
-r3582 71da85dba6
-r3583 af375eabc6
-r3584 906348dd30
-r3585 c54ece4ae0
-r3586 92e05fabc9
-r3587 c69d97edc4
-r3588 8e283c9e3c
-r3589 b6cc6b0e57
-r3590 913e6bd36f
-r3591 0516acad01
-r3592 42ea1b6956
-r3593 902ced470f
-r3594 99fe4d41dc
-r3595 01409a254a
-r3596 2cbdc0ba3b
-r3597 eed5ff3582
-r3598 5f09d8f587
-r3599 246717e05e
-r3600 6a31538686
-r3601 780d8d55b1
-r3602 b6ae5c66e2
-r3603 badb4d8cd4
-r3604 5fa2459117
-r3605 e8ba62bd8a
-r3606 c1dcdba537
-r3607 26d3537617
-r3608 a28ac70198
-r3609 c2e80c44ac
-r3610 218f76a292
-r3611 f614ac93d2
-r3612 3fe1910a3f
-r3613 80109112f9
-r3614 4fad1254ef
-r3615 c2c1e5db00
-r3616 3bd3a5d239
-r3617 cbf71d88fd
-r3618 364ef1fd07
-r3619 025f26c3d4
-r3620 5cc5811736
-r3621 42fedfeb61
-r3622 e0fa1563de
-r3623 f381097446
-r3624 7fffc7b84c
-r3625 93aab3cf13
-r3626 4c09cb76be
-r3627 3cf459cf6a
-r3628 225d4cca51
-r3629 0579072405
-r3630 d59e2e7baf
-r3631 659b759965
-r3632 f0309dff80
-r3633 92432c2148
-r3634 d229755836
-r3635 ac5afb16a5
-r3636 a1f8145d48
-r3637 085cfba242
-r3638 2dd10de725
-r3639 4c98fce602
-r3640 c66e04d863
-r3641 1e107ea04d
-r3642 6f574e4004
-r3643 af63f742e8
-r3644 11f42cf102
-r3645 7701a98e41
-r3646 e5d611e411
-r3647 d214dd6c6c
-r3648 e6a955c2fc
-r3649 a7474d56c8
-r3650 728d05b388
-r3651 5d37e0e315
-r3652 c885bb4472
-r3653 4b5ad66372
-r3654 a7d877a4ef
-r3655 006505fd59
-r3656 24b907a640
-r3657 99b207b1d7
-r3658 52877fa8cb
-r3659 f9cda0d53a
-r3660 6b99c42b61
-r3661 8673513033
-r3662 b9f91af85b
-r3663 88ad975120
-r3664 3dd173c8ed
-r3665 8233d97107
-r3666 8bf7aa51bf
-r3667 633ee309f1
-r3668 acf705fe9d
-r3669 57d20057ab
-r3670 fa2236790c
-r3671 1fbf1add8e
-r3672 032410ce2f
-r3673 ac9e42deb3
-r3674 d0ac66f6d5
-r3675 6c23d94763
-r3676 cd96887579
-r3677 5c8b65d6d0
-r3678 b29f29c850
-r3679 f01e57a6f6
-r3680 d3e1bf2e08
-r3681 1c08fd5be7
-r3682 e86b5f81f9
-r3683 d361bcb23c
-r3684 14414226a9
-r3685 4ffc505e68
-r3686 12905b5fc0
-r3687 7f63832946
-r3688 8ae023e876
-r3689 5b0cf6f9f1
-r3690 02e58d8f1c
-r3691 71643852e2
-r3692 543531f94c
-r3693 a0702e16f1
-r3694 b3461701e7
-r3695 1050dd4533
-r3696 e1ee4a54c0
-r3697 98fd27c10e
-r3698 edd9c3b808
-r3699 5b80c0ad5d
-r3700 60e78ebb8c
-r3701 b687aa1883
-r3702 31f3132b17
-r3703 534204a7ee
-r3704 24b9bbe78b
-r3705 8df067b25b
-r3706 0b4c2c7563
-r3707 a2b63875b5
-r3708 e864209014
-r3709 ea57d9e40d
-r3710 cb785fad2f
-r3711 96bc1b2e6f
-r3712 dd012e5461
-r3713 66ab84dd8c
-r3714 8541c3cfb1
-r3715 87a4e43ba8
-r3716 1a3fffe3c6
-r3717 d67d3c2eba
-r3718 bb73b04148
-r3719 f609e1d7cd
-r3720 4e7330335e
-r3721 c824d58e10
-r3722 e9fd9059f2
-r3723 a9664dbf3d
-r3724 55dc942618
-r3725 5cedd7f04e
-r3726 f749c05183
-r3727 5ba5cce463
-r3728 d50af5d833
-r3729 35612e02fc
-r3730 5e1103c409
-r3731 4368c52950
-r3732 41cd79472f
-r3733 a8332ccd34
-r3734 f0429d8a6f
-r3735 8b802f68a6
-r3736 48d8539087
-r3737 6386db1a6d
-r3738 ab3bc54b20
-r3739 f99e4b1e18
-r3740 25b24ddd28
-r3741 09c3cc4c36
-r3742 4ba5a222f5
-r3743 fec3fd9ee6
-r3744 7457a6092e
-r3745 f56aef22e8
-r3746 734dbe0e1e
-r3747 74a30a3f52
-r3748 622167df9a
-r3749 829eb95ee2
-r3750 6e325ca26c
-r3751 0dcfb955d4
-r3752 8d054a3f01
-r3753 e8a800d31f
-r3754 87de8ee438
-r3755 8e4b8c4d58
-r3756 251d24e244
-r3757 bfa877d7e4
-r3758 27410be753
-r3759 18b44350ef
-r3760 358371050d
-r3761 c78c1e3efd
-r3762 1deb28f000
-r3763 89f45612e8
-r3764 afbe00bbad
-r3765 9d65aea9a9
-r3766 2968ffe5e0
-r3767 35c612c5c2
-r3768 5fc13b102f
-r3769 86dd00a81c
-r3770 d34f161678
-r3771 f91cf5ddfc
-r3772 4bd7cf5b63
-r3773 a8731f5c35
-r3774 55fb705ed9
-r3775 499b0279b7
-r3776 016e76d9c2
-r3777 d2b5a0ad16
-r3778 233229a0f8
-r3779 88e246ba2a
-r3780 10c29b9c5b
-r3781 172de146a8
-r3782 d2b9c55e12
-r3783 02dc24e068
-r3784 c9e33b2023
-r3785 dff9023c16
-r3786 4d14ec1b71
-r3787 7108592b2b
-r3788 0610ba492f
-r3789 d8e3e31836
-r3790 c3d9d5ed52
-r3791 0a45f37896
-r3792 db7ba7d051
-r3793 d953b81b54
-r3794 92bbd46102
-r3795 49f7b6b403
-r3796 21b0b406b5
-r3797 4cc5d62ce1
-r3798 41b5050ad1
-r3799 a21098b9cb
-r3800 e35884ed02
-r3801 e18433d52e
-r3802 9ea32651f7
-r3803 f66f43a1be
-r3804 0f7b4d28a1
-r3805 b8186b906d
-r3806 66db83df88
-r3807 ac6bf7a571
-r3808 70394e1ca5
-r3809 7142247463
-r3810 ab2a6493bd
-r3811 72d99c95e9
-r3812 3ef7b2660e
-r3813 f617efc24e
-r3814 fae754c81a
-r3815 6862dacb9f
-r3816 84094a0101
-r3817 e485893f01
-r3818 85733d4b2e
-r3819 cd7dcb372b
-r3820 c1fa420d34
-r3821 74d2ffc0b9
-r3822 6d35dedf60
-r3823 2facf37679
-r3824 6b243c5e3d
-r3825 f9cc4a054b
-r3826 0baefc44bc
-r3827 a9b53b7c86
-r3828 23f795a322
-r3829 e3198c669c
-r3830 4e79c400f4
-r3831 a88516e6a9
-r3832 d6f4a87a85
-r3833 0c75fe7c17
-r3834
-r3835 9eb2d3fa77
-r3836 efe04a5215
-r3837 a78d745dbd
-r3838 19158d78f8
-r3839 2080c5a1cc
-r3840 162a5f7755
-r3841 4fdab72617
-r3842 ebe2c4bf3c
-r3843 b8c700cd8f
-r3844 cbd30cf21c
-r3845 08661fd29f
-r3846 1aa40dd9e3
-r3847 a0a569dfb7
-r3848 436a4363f7
-r3849 1a333dbf5f
-r3850 5d070472ca
-r3851 2dd7fe52f6
-r3852 d5e8f67ade
-r3853 e4a6367b05
-r3854 35f02f5fc8
-r3855 4a2bd066c9
-r3856 8332a1e9d8
-r3857 99847828c7
-r3858 0f6081c0bd
-r3859 95381cac9e
-r3860 8aa1f96c45
-r3861 6b93dced8a
-r3862 4ec12fd076
-r3863 bc2421cd19
-r3864 89d9f33d8f
-r3865 bd170a6e74
-r3866 88a2e8af94
-r3867 986b87a3be
-r3868 6e578cf8bf
-r3869 e7f0aaf5c3
-r3870 a7e9b25308
-r3871 45a2a1519b
-r3872 f45ce87202
-r3873 896b9e9783
-r3874 eb3d3eeb7e
-r3875 fc1ed2a188
-r3876 096ab28f3c
-r3877 4fd6b0098e
-r3878 f1bf4d646d
-r3879 1f2e15f4e5
-r3880 2c5022f9da
-r3881 71010e2f3f
-r3882 9b6cd96846
-r3883 5c3266e3d1
-r3884 5e80a7ac2d
-r3885 75f09b2c8f
-r3886 03f635fcec
-r3887 3620f945d1
-r3888 d475960786
-r3889 1098308d1a
-r3890 0dce46b648
-r3891 5f956146db
-r3892 6b7136abff
-r3893 5d450c4999
-r3894 da9f329d84
-r3895 f9ccc84517
-r3896 d5e85ef0cf
-r3897 fcc306f42a
-r3898 042b3c3978
-r3899 402ee86303
-r3900 9d73819ae7
-r3901 16856ead74
-r3902 5de62f994f
-r3903 80c6300d10
-r3904 2cd85f1d31
-r3905 9d8942df91
-r3906 0b6ef8dc59
-r3907 0afb3068da
-r3908 c003c37092
-r3909 2bde64168d
-r3910 edf4302bff
-r3911 d0cf4e00d7
-r3912 816c3d5001
-r3913 4a519eb7b1
-r3914 d435f4e8d7
-r3915 54c7abb0d0
-r3916 6f55f1053b
-r3917 757caf9ec6
-r3918 01a9d76f59
-r3919 21204727d1
-r3920 cc64c24f2e
-r3921 0cf94fe12d
-r3922 93f05e44fd
-r3923 0f88183f98
-r3924 67b84cefdb
-r3925 b08c2c22a6
-r3926 2ce58118dd
-r3927 160c05843d
-r3928 524918c134
-r3929 204dbd6dac
-r3930 4ab12055ef
-r3931 8442cdcfca
-r3932 8281ca3993
-r3933 8c930dea2f
-r3934 5722c3dd69
-r3935 15e8b9c25b
-r3936 e0411a5c21
-r3937 e1b655d6ae
-r3938 bda1e6ab23
-r3939 f177bb3215
-r3940 390e2599eb
-r3941 c053c8af00
-r3942 f8ee6ef857
-r3943 594fd59916
-r3944 64cff6a0e3
-r3945 74c76637aa
-r3946 d554c8332b
-r3947 1addfa71cf
-r3948 c05c10e3fa
-r3949 863714d6cc
-r3950 e3e53e2bda
-r3951 d439857e2f
-r3952 4c6438417d
-r3953 851321621a
-r3954 5dfd488748
-r3955 4f59c83f13
-r3956 431abf42bd
-r3957 28c2394d01
-r3958 9d110b32d0
-r3959 1fe84bcc45
-r3960 b2dc4a4233
-r3961 f714a29dd6
-r3962 491b4c50a8
-r3963 7f8e2cec8f
-r3964 9b8b0e477e
-r3965 008f8f063c
-r3966 4d7916df75
-r3967 951667d5ee
-r3968 ee4c236bcf
-r3969 ded727e045
-r3970 a8a9dfda09
-r3971 b81c202d9d
-r3972 ff2538e649
-r3973 a7dfe53e15
-r3974 737ceb1e9a
-r3975 4fccc2395b
-r3976 12b7df185b
-r3977 bd9b58dd62
-r3978 2655bd72e0
-r3979 1b7d5dbc1f
-r3980 a50c723119
-r3981 5323096a43
-r3982 47f009d34f
-r3983 2f7726cbc0
-r3984 51a21634fe
-r3985 273a9c720c
-r3986 7c9853df4c
-r3987 434f79ad15
-r3988 78dedbcfe8
-r3989 3a11fb5be6
-r3990 d389d62497
-r3991 f8c47c369e
-r3992 9acfa7693d
-r3993 820a2d3a60
-r3994 e6072321ea
-r3995 ac954ccd10
-r3996 52696417c6
-r3997 aa77b6d1ec
-r3998 2f69f39176
-r3999 e8b87c676d
-r4000 0c3c16e037
-r4001 718ff58ca1
-r4002 89de292795
-r4003 98447d6dd2
-r4004 7501dbe6ea
-r4005 ca46e0cc97
-r4006 b52ba30891
-r4007 5363f24d1d
-r4008 c8c857382d
-r4009 39b3d0aaf4
-r4010 1d22852044
-r4011 e657ee6136
-r4012 26743f690b
-r4013 105ddb769e
-r4014 90a3814707
-r4015 beea6fa18e
-r4016 014b73dd9a
-r4017 e1d244645f
-r4018 6a7c67314a
-r4019 a3488a2195
-r4020 1cd1331b29
-r4021 0cc197de4e
-r4022 c21090e6a8
-r4023 b2ee76bdc5
-r4024 f0e63b8bcb
-r4025 7179a093ef
-r4026 9e67e8eb2a
-r4027 baf9a278a4
-r4028 28d2afb09c
-r4029 d5dd908810
-r4030 75398c1c57
-r4031 528c8d1450
-r4032 424f8b40d5
-r4033 90b4dc0509
-r4034 22d6d7b652
-r4035 9917c66801
-r4036 a274f949c3
-r4037 9602bf11e9
-r4038 2e064cb574
-r4039 a95c0558aa
-r4040 9e2006a60e
-r4041 713aadc739
-r4042 2879da2391
-r4043 0d0172cb82
-r4044 f0663f5fd7
-r4045 8cefd2b4b3
-r4046 a29d908bb3
-r4047 37a3e2201b
-r4048 852bece973
-r4049 b8c5798b5c
-r4050 87ea8ccb1a
-r4051 36d0dca50b
-r4052 fd4e74823e
-r4053 fa99242159
-r4054 e46aab9c0c
-r4055 38c5a6b5ca
-r4056 5860530cce
-r4057 bca179b895
-r4058 51fcef17d6
-r4059 72ced8be62
-r4060 ebf8f4f181
-r4061 21d00c2acf
-r4062 a994adf6e1
-r4063 715423971f
-r4064 60e9413f4a
-r4065 51dfe805f4
-r4066 0246e1e74c
-r4067 1bee42b554
-r4068 5b2c183efb
-r4069 477b790692
-r4070 c009286f50
-r4071 eff6111eea
-r4072 061a14c274
-r4073 a68b994bdb
-r4074 9e4dfe2668
-r4075 32bc7086c6
-r4076 ed7f01e165
-r4077 9201f823b0
-r4078 6508005cfa
-r4079 d02399bd06
-r4080 5662d8f94e
-r4081 2dfa8272da
-r4082 8d4cadf3d9
-r4083 956b9aa3fc
-r4084 b0876f8e35
-r4085 250399c9e1
-r4086 6f7a94d6e4
-r4087 278cb7cc7b
-r4088 4582381b8a
-r4089 8802442bde
-r4090 48073005b9
-r4091 b937dc9918
-r4092 5dec2b451b
-r4093 379f7c1f8c
-r4094 a3fbf70b2a
-r4095 041681054f
-r4096 68562d06e3
-r4097 e922fce3e6
-r4098 6d081b3c4c
-r4099 67290d0879
-r4100 040ca6168b
-r4101 07af0f5eb5
-r4102 9a33a267d9
-r4103 ad7e262eb8
-r4104 5c5a13fc7e
-r4105 96cf49a321
-r4106 8bb23af6b6
-r4107 2554f8b5f6
-r4108 badd1338a0
-r4109 c0f530cfa0
-r4110 31b680f267
-r4111 427e592c27
-r4112 bdf2e9f702
-r4113 6a415fa5ce
-r4114 b630d0e2d9
-r4115 8e8f155893
-r4116 0ff3b181b6
-r4117 8cce5ad64a
-r4118 6d81466523
-r4119 0baff379fd
-r4120 5a6a7cf01a
-r4121 32947cc0c3
-r4122 09dde3d0fb
-r4123 204ec80b8f
-r4124 680392e3ea
-r4125 d6a1e148ac
-r4126 472e16fbec
-r4127 74b9d73234
-r4128 de8fc1e7de
-r4129 c808e1b5c1
-r4130 7febddefc6
-r4131 e08284c96a
-r4132 b3e4299f66
-r4133 d86d471f88
-r4134 1832eb5f83
-r4135 73ef58a544
-r4136 60e0d4dea6
-r4137 63bd290c91
-r4138 e5af480b99
-r4139 da0dcd1188
-r4140 05ac4be4a3
-r4141 5a665f0654
-r4142 2e5c8d22e4
-r4143 ea57a524be
-r4144 8cb91759c7
-r4145 9081d7c2be
-r4146 9bd5e8507d
-r4147 edbac1669b
-r4148 171b8ec351
-r4149 540fe94ec0
-r4150 cb6e13ecc4
-r4151 88a54be387
-r4152 27ea2ec908
-r4153 737dfff4c7
-r4154 ece0d0ed89
-r4155 d1b4a12b05
-r4156 57d313ef7e
-r4157 a636876294
-r4158 91a11635eb
-r4159 c718a6bce6
-r4160 89a3ecc15e
-r4161 a1c834fea8
-r4162 85b2ef7fac
-r4163 ea94e14951
-r4164 860077ec57
-r4165 4c8b6bac74
-r4166 d1a3ad162d
-r4167 0adb68921a
-r4168 12e8a96c2b
-r4169 3f5f7682e4
-r4170 f53185a333
-r4171 507568e72c
-r4172 6ba18e0059
-r4173 cb4fd03782
-r4174 e67937da14
-r4175 5e7ea748c3
-r4176 2c5078a2ee
-r4177 329705355e
-r4178 e34cd16629
-r4179 5865b39955
-r4180 b232d5005c
-r4181 28a0f4147f
-r4182 61badf43b9
-r4183 e215fbc8cf
-r4184 535c7e54fc
-r4185 9907ade461
-r4186 194eaecc00
-r4187 b021e998f8
-r4188 67282530f6
-r4189 d9e3c133db
-r4190 242b37e9b8
-r4191 676fbe45e3
-r4192 0f61edd914
-r4193 1af5b9aeed
-r4194 8bdf158f08
-r4195 11f1938e73
-r4196 2ab6994175
-r4197 6e45b64b7c
-r4198 b5c5916958
-r4199 7ef2731a78
-r4200 de1ca7103e
-r4201 2a99a8010f
-r4202 e389932a09
-r4203 e39e84e8f2
-r4204 0562f3653e
-r4205 5c39c6a1a9
-r4206 0eabdfe72a
-r4207 ef910b836e
-r4208 5ba805cbfc
-r4209 cb0e7af1e8
-r4210 08caefd4e0
-r4211 6e33a303fe
-r4212 6f9c2ac007
-r4213 af1a7619f6
-r4214 3371e4627e
-r4215 8c6e72f8ea
-r4216 ce836de569
-r4217 f1c0882880
-r4218 9b45ca7391
-r4219 bb6caf035a
-r4220 0ea3313c31
-r4221 b691398a82
-r4222 22dc160a9f
-r4223 4c593d00f6
-r4224 c20c973f9f
-r4225 958dd64c52
-r4226 a50fb39267
-r4227 08d6815870
-r4228 2fa90340dd
-r4229 d7268ca89a
-r4230 0dfe89ce41
-r4231 23f5623d54
-r4232 29f5328623
-r4233 21eab08db3
-r4234 7fb5a2b969
-r4235 8ae660b5ce
-r4236 ec21929876
-r4237 aab9d8db07
-r4238 3d20038cd6
-r4239 dc4938928d
-r4240 d3cc2c2216
-r4241 4e274a8232
-r4242 23e00d0a92
-r4243 e31007e594
-r4244 1631e00c3c
-r4245 364559e233
-r4246 2b80c3e689
-r4247 4aa2414f56
-r4248 9966a10dc9
-r4249 99ee96571c
-r4250 4751d12774
-r4251 336f08db48
-r4252 bfbc23fa63
-r4253 b9bb52ea34
-r4254 1979f56bb0
-r4255 7c023507ab
-r4256 82365dd142
-r4257 abf0edeaf3
-r4258 fd154fbd77
-r4259 5da06c813f
-r4260 12be3aab0d
-r4261 ce80365a9d
-r4262 3e24518770
-r4263 537b80d752
-r4264 faf9183089
-r4265 d7499538cc
-r4266 4ae459ef75
-r4267 6ad31934e9
-r4268 20e2019647
-r4269 b72243eb88
-r4270 3577a16ffe
-r4271 ca5b2cba22
-r4272 f2a6a86bb2
-r4273 612132fd58
-r4274 c04ff15055
-r4275 8c69c7617a
-r4276 ed271f4379
-r4277 c27b04348a
-r4278 869e14b718
-r4279 72128a7a5a
-r4280 1f3355d714
-r4281 1ec9209a8d
-r4282 7fe5ed6df8
-r4283 ebe1c8f272
-r4284 3cabc3d6df
-r4285 1ea7ccc409
-r4286 95bafdf4ea
-r4287 7fd0b4b8c8
-r4288 d8f34726bc
-r4289 a9b4163417
-r4290 97b285c569
-r4291 dd9c59cc23
-r4292 eee9ffbb4a
-r4293 4824341905
-r4294 4eac31b0ff
-r4295 51168b223a
-r4296 b0190b575c
-r4297 1cd6878c34
-r4298 555612e072
-r4299 c5b684607c
-r4300 c8573fd5df
-r4301 0caa21c155
-r4302 7b78918132
-r4303 b04cea15bc
-r4304 944cdf5c60
-r4305 7ad58e693c
-r4306 df6b358dcb
-r4307 bc84a838e5
-r4308 1cb144f5e8
-r4309 ce41129d96
-r4310 7d4c3a7052
-r4311 fdd8c6597f
-r4312 5704ccb048
-r4313 fcafb7bed6
-r4314 2c62148021
-r4315 8c15cfa189
-r4316 00e3092afa
-r4317 b2dbde8066
-r4318 a93bb8d43f
-r4319 43e1f829ef
-r4320 5271830578
-r4321 6308575a9e
-r4322 7999556902
-r4323 85d13f716b
-r4324 f683124427
-r4325 1de8fefb18
-r4326 3f2b3db06d
-r4327 94da2c3d36
-r4328 6152efdbc1
-r4329 a98c6f20f8
-r4330 c77239218d
-r4331 ebb096e96f
-r4332 63bb8df947
-r4333 ec061b1605
-r4334 bca043774f
-r4335 b4ba0b8045
-r4336 6d4bae44bf
-r4337 8e1c13bc2a
-r4338 b0142d0b0b
-r4339 fbe14f7330
-r4340 c09c5c4c75
-r4341 1b61b60d0e
-r4342 74fa0daa1a
-r4343 6dd54e71a1
-r4344 cd6a645300
-r4345 2393804085
-r4346 a4e5d4a1d7
-r4347 35b8aa2237
-r4348 a81b05fe54
-r4349 7a3a636e9d
-r4350 98fd985ca3
-r4351 ac9e7dcde2
-r4352 b900a9491d
-r4353 6e9b46d532
-r4354 ed607f9e00
-r4355 b3c92d8d92
-r4356 eab8ef5475
-r4357 a779e34b04
-r4358 bdfec77a20
-r4359 7ca0b11f15
-r4360 1e6dd6bf67
-r4361 d145b661e1
-r4362 4139c127a7
-r4363 1e33553484
-r4364 5e728c60b7
-r4365 a481860c64
-r4366 3abec2c182
-r4367 c0a2895a71
-r4368 957609904b
-r4369 409252cb26
-r4370 20851c9a02
-r4371 5b1141d3e7
-r4372 98d76b37bb
-r4373 9bebec47fd
-r4374 43f25bbed9
-r4375 f750bc83b4
-r4376 a6b903c195
-r4377 2317a36563
-r4378 170cb99b47
-r4379 2b073f0a00
-r4380 b23d885feb
-r4381 3e90b7175a
-r4382 5cf7d39061
-r4383 aa78f8ed21
-r4384 84f48521b8
-r4385 ea4a4fd3b2
-r4386 503767d7b5
-r4387 998e8e3f6f
-r4388 f5633fe404
-r4389 2aa41fcee1
-r4390 9be1f597f2
-r4391 2f19f317f4
-r4392 c8b79c9ee7
-r4393 5f5d61e408
-r4394 99aa6cd9ed
-r4395 5e19bd9b04
-r4396 8ed7d96bde
-r4397 64f1cbe7dd
-r4398 9a5375373b
-r4399 adde8def57
-r4400 f505a2d5a2
-r4401 6113fda697
-r4402 7df39b24cf
-r4403 5269174866
-r4404 adf2ae34ae
-r4405 4fe7cba490
-r4406 84bc4d62b2
-r4407 ee16845bd4
-r4408 03f703627a
-r4409 e59ae197eb
-r4410 83ffad38a2
-r4411 f833e14198
-r4412 dfd98cb40a
-r4413 b09ad43fbf
-r4414 db7efc544c
-r4415 0ebb260f0a
-r4416 e12958a079
-r4417 2a5f62338c
-r4418 56b6b545dd
-r4419 80a2ef51f1
-r4420 7e92e642b9
-r4421 2f441aeb70
-r4422 6b0fcaab0e
-r4423 ec4245fc4e
-r4424 163fd22846
-r4425 fe6d934763
-r4426 09a1cca14e
-r4427 15ed0b070e
-r4428 d5fec7cd48
-r4429 5354118e13
-r4430 8de006ed70
-r4431 1e497c553d
-r4432 eb2601d5af
-r4433 3d0bf84e9b
-r4434 e4ce06a933
-r4435 7e26a89aec
-r4436 a33babfcf1
-r4437 bc6f997f0a
-r4438 7d50bd127a
-r4439 184a284ccc
-r4440 2ce85ef7ee
-r4441 86ed57937a
-r4442 9418aa6b6f
-r4443 33f0d7c7e0
-r4444 a500d671a4
-r4445 5cad7d9a1d
-r4446 35dd7bad5e
-r4447 2e0a2d41cd
-r4448 573e3db24e
-r4449 6c2eeae273
-r4450 efcdf64997
-r4451 05928a2653
-r4452 f30e2cdae7
-r4453 a6fb796e0e
-r4454 5105a3cd57
-r4455 d527c775db
-r4456 ae5a9701ae
-r4457 611894900f
-r4458 338d1dece1
-r4459 7edb15bf5f
-r4460 c43de12f1e
-r4461 1715eca785
-r4462 2c5d9fc10d
-r4463 6a173f47a6
-r4464 3fe0c855d6
-r4465 813a8805de
-r4466 e4c22e287b
-r4467 16632c98c6
-r4468 7fa7c9317a
-r4469 0d4dfff1a0
-r4470 e2e975778f
-r4471 a84b3fba65
-r4472 47e47b4a12
-r4473 2be434ad7f
-r4474 0bf95c4e3e
-r4475 02746d1257
-r4476 7517bd975a
-r4477 5d7078f6b8
-r4478 fdcaec1742
-r4479
-r4480 8cf263bf21
-r4481 01cd680dee
-r4482 e8c5ff7bae
-r4483 441a24642b
-r4484 2bcd0daa54
-r4485 ce8cd951e7
-r4486 9294a4771f
-r4487 675b73f5c4
-r4488 c188ae171c
-r4489 4d5aa89e14
-r4490 703297ef51
-r4491 ec5c9dff4b
-r4492 b6f8d5a603
-r4493 b058c90501
-r4494 747d62e43c
-r4495 f18f51cb99
-r4496 26ae505805
-r4497 0c89a9d1a2
-r4498 2f8d5228ca
-r4499 90942ba061
-r4500 4d3f8e6a98
-r4501 9e3c3c9731
-r4502 dc4422b5c6
-r4503 ffbd367ed4
-r4504 a0f177b57b
-r4505 437b69de00
-r4506 ae80c2257e
-r4507 92c43defc4
-r4508 10b4d730b8
-r4509 d0126c1ff4
-r4510 a2231f55a0
-r4511 3761cb4b3a
-r4512 8ef0c9bfc7
-r4513 65c1d826b2
-r4514 14c330159a
-r4515 fcc3a4867d
-r4516 1b62046e2e
-r4517 f730f48c1f
-r4518 c7cf81fcb5
-r4519 7554cbeb65
-r4520 4a72b68fe3
-r4521 cb95310d86
-r4522 bd16fac899
-r4523 ef7b23f9d8
-r4524 097a86f213
-r4525 d8d8d98d36
-r4526 48bd238a90
-r4527 b18e6b9a5a
-r4528 5b8594a6be
-r4529 dcc928609e
-r4530 6b71c24b1d
-r4531 7bcb0076ad
-r4532 88aad851bf
-r4533 d47ab5bff5
-r4534 97cf075c99
-r4535 159d71afbe
-r4536 37a09ef5c2
-r4537 485957378e
-r4538 cebbca73fb
-r4539 6b793b53ef
-r4540 5f6f5f723b
-r4541 ff21a4fbaf
-r4542 288e0c04ac
-r4543 a23a5c8b04
-r4544 0af18b6efc
-r4545 ec620e79d0
-r4546 8565ad9661
-r4547 e14a1532ef
-r4548 4e800def5b
-r4549 1b8f5a109e
-r4550 2b8b774ea6
-r4551 4fd9ff44db
-r4552 6313864bba
-r4553 cc3cdec920
-r4554 b65ef22c4d
-r4555 9055a919a6
-r4556 cc54f72704
-r4557 7314eaba5e
-r4558 0085ecb2f4
-r4559 e23e263d51
-r4560 4be0964120
-r4561 5a7a0b1dcd
-r4562 6e9fcf31c2
-r4563 50b1206218
-r4564 9cbbfa3ae3
-r4565 43b0ce3c5d
-r4566 e572f2935c
-r4567 b8b10d4207
-r4568 41a4692089
-r4569 cd0fe627cb
-r4570 27a039bf41
-r4571 72937e8473
-r4572 159a3633b5
-r4573 2994973970
-r4574 abcd2d2f11
-r4575 0f11b56fdc
-r4576 b8356d0569
-r4577 7deca20d7c
-r4578 ce5f59f920
-r4579 0c5513d5fc
-r4580 47278930d1
-r4581 5c8e9c28ec
-r4582 a4796d889d
-r4583 4c83b5e7d2
-r4584 77464f58b8
-r4585 8fa3a68fa3
-r4586 526506ee0d
-r4587 71186b0815
-r4588 9202c01342
-r4589 2941c83b95
-r4590 fba39a9328
-r4591 0e4a5a46d1
-r4592 4b24405a51
-r4593 120d1f6d1d
-r4594 c420d1b4b6
-r4595 88445e5c92
-r4596 5318e01060
-r4597 22a82cff38
-r4598 c1f0a81530
-r4599 eb6ce946a2
-r4600 2a09259c9c
-r4601 a4d45a4908
-r4602 b1c5fc5475
-r4603 1d7cdd713c
-r4604 8baf2c8492
-r4605 380429bc95
-r4606 2f697bbee2
-r4607 5c27a53649
-r4608 f13923cb2a
-r4609 c9305ff74f
-r4610 b57983c013
-r4611 85218bf8a6
-r4612 add8bf8d68
-r4613 3a28c9b0a3
-r4614 78a88d95aa
-r4615 738348f88d
-r4616 041a971eb7
-r4617 0a6b2c44cb
-r4618 018bd93918
-r4619 7a23facb88
-r4620 897ffc2114
-r4621 a4409bd62f
-r4622 4dff479674
-r4623 f3198962b8
-r4624 3b81e0cbac
-r4625 25a98964b5
-r4626 8c7d8bd610
-r4627 8a666daa5c
-r4628 e21ba6a461
-r4629 307cda5cad
-r4630 3d3787b6d4
-r4631 5da73c7fd8
-r4632 32cabb1c30
-r4633 ce8279816d
-r4634 391ec16407
-r4635 ecda78ddf1
-r4636 c64152bc3e
-r4637 527e849cbf
-r4638 e46029a572
-r4639 2c1956c282
-r4640 9ac7819931
-r4641 6772d17cbd
-r4642 c18f8a9b2d
-r4643 16317e63bf
-r4644 7c11786a48
-r4645 72b4cec44a
-r4646 269e0a0579
-r4647 265f05b5d7
-r4648 5af15214f1
-r4649 99369b6820
-r4650 bd6070ae78
-r4651 e093d72b2f
-r4652 60b24c0671
-r4653 1da91ff38f
-r4654 90948bf331
-r4655 7af69ba79d
-r4656 45084b98fc
-r4657 8fd901f748
-r4658 36795d2e4c
-r4659 082ab859ac
-r4660 27103aafc3
-r4661 013bdae337
-r4662 20af4df51a
-r4663 c141a84b49
-r4664 dd918cc2b8
-r4665 ecd89b556f
-r4666 3632df227d
-r4667 2214cdeaef
-r4668 4cb8dc8cc3
-r4669 cc49e611aa
-r4670 9a7eb6466c
-r4671 6f850988f4
-r4672 59a434de1b
-r4673 3f12c15fc0
-r4674 1a3ba334d7
-r4675 e4ce6b57c2
-r4676 7f208e2a13
-r4677 8e4ce216bd
-r4678 57a460675a
-r4679 1c2a65c287
-r4680 bb79f90e83
-r4681
-r4682 23f8c69b0b
-r4683
-r4684 8cd7fcc2ab
-r4685 620b8cedeb
-r4686 c7a32d9079
-r4687 74dabb6ec9
-r4688 7762de74a5
-r4689 4b2d79b21c
-r4690 924b0f3039
-r4691 899e2bf1b2
-r4692 76993fa93b
-r4693 21766465c5
-r4694 c7f9cb3d7d
-r4695 8970fdfe03
-r4696 9272651e53
-r4697 2826766917
-r4698 66527219ab
-r4699 6f66105f7d
-r4700 5db8ce56f5
-r4701 218871311d
-r4702 1adcbe66f6
-r4703 9910af693a
-r4704 6e1ef09bdc
-r4705 f8beba5270
-r4706 e142eae2eb
-r4707 b47c6e1f7a
-r4708 3080077eb7
-r4709 1814e8a373
-r4710 5e4a5b0270
-r4711 e82f10b501
-r4712 ad4be6739a
-r4713 d2c7c98291
-r4714 90b1ff4a62
-r4715 2e445f65c0
-r4716 eb8147e124
-r4717 7332181fcd
-r4718 6091cca8a5
-r4719 67dc2eddbc
-r4720 dae93b66ed
-r4721 135a6a67b7
-r4722 41433ad630
-r4723 5354ca48d8
-r4724 a5a299eecb
-r4725 ac14ced855
-r4726 90595610c6
-r4727 aa62dc1ac2
-r4728 fecc6c4d1f
-r4729 3ae2484310
-r4730 0954e0acf5
-r4731 a2a1b7b1d8
-r4732 6a6d7b7f49
-r4733 0cd27125ec
-r4734 9cb190e882
-r4735 7a10e3170d
-r4736 a37e1b6309
-r4737 321c9c4240
-r4738 4c9144de76
-r4739 11a9eecb4d
-r4740 d8522ed174
-r4741 36a6c00e93
-r4742 0efba3ab03
-r4743 50e9847ce5
-r4744 4024e57526
-r4745 e80b0f535e
-r4746 ad601a2680
-r4747 252505f3bd
-r4748 db3bf9a78a
-r4749 b8818bf292
-r4750 b10fe9805e
-r4751 89fdedf629
-r4752 e06547121d
-r4753 61e926fa20
-r4754 a628fcb21e
-r4755 2d9c5a2419
-r4756 207f4257b3
-r4757 c8a1b33655
-r4758 70e481806b
-r4759 e7991261bd
-r4760 df9d094d27
-r4761 5ae9ab371e
-r4762 0188db141f
-r4763 68b225d73b
-r4764 5a5a3eb0e1
-r4765 471bb9d011
-r4766 9cbac19bd6
-r4767 c24210160e
-r4768 e96181b4d8
-r4769 f029fc6649
-r4770 d603b33c53
-r4771 61e06202c0
-r4772 0c9b6c2e46
-r4773 de663567a2
-r4774 de4256056a
-r4775 3ae63b5ccd
-r4776 fc8a16405c
-r4777 1903902243
-r4778 fd9ebbc82c
-r4779 db20991e47
-r4780 15956fc33e
-r4781 0b87051d35
-r4782 9e1ed62536
-r4783 177e09a431
-r4784 e1a8cf0ba7
-r4785 f2141da88e
-r4786 ef6771bfc8
-r4787 f4d80be80f
-r4788 e74f7af55c
-r4789 23c574d163
-r4790 7adc109576
-r4791 daa5460faf
-r4792 ddfe8474cd
-r4793 7ebd3268f7
-r4794 917a34ff65
-r4795 b2846fa014
-r4796 528a6580ed
-r4797 f49c6bd79b
-r4798 083c4b354e
-r4799 f6f24bd8f5
-r4800 b2857eddb0
-r4801 1806bcbab4
-r4802 5ffdc57de9
-r4803 6401f14a5c
-r4804 0d9289b101
-r4805 33cce75063
-r4806 9c7d881883
-r4807 0e1461926a
-r4808 f70518013d
-r4809 ba2e6f61e8
-r4810 9f6d1325c7
-r4811 8398b563c7
-r4812 f2a21aafec
-r4813 aab12e76a3
-r4814 d17278ec0b
-r4815 e4f6a24702
-r4816 75971d2afe
-r4817 56d62194cd
-r4818 4eb2ccaed2
-r4819 b09684a187
-r4820 25152f0884
-r4821 b5bb25e418
-r4822 9e8ee50e5e
-r4823 7a65551686
-r4824 d35e16dea3
-r4825 3616845062
-r4826 63b346bd6f
-r4827 0cf7c3be89
-r4828 e57dc927b5
-r4829 427dfba905
-r4830 ddbc132632
-r4831 7aa7e0b239
-r4832 66bf262e01
-r4833 ec5c988d61
-r4834 ca015f2887
-r4835 45edd7984a
-r4836 7836c40fcd
-r4837 c3244c0d69
-r4838 54671fce28
-r4839 2eb46ac9dd
-r4840 21363864e8
-r4841 aa7d8d3ffc
-r4842 1901db1ef0
-r4843 d466616dd4
-r4844 0b22f20283
-r4845 acfa296358
-r4846 771f3479c1
-r4847 f11fca9389
-r4848 a41b58e5a1
-r4849 feaeff1c3c
-r4850 f4fb89d6d6
-r4851 6df648d403
-r4852 e2bffd2133
-r4853 6bf26b5b78
-r4854 78441751ad
-r4855 630679a8b6
-r4856 0cde435cdf
-r4857 0b24f5797d
-r4858 871771f410
-r4859 ec1c69a32b
-r4860 65814d93ac
-r4861 387dd38c1e
-r4862 2f369fd348
-r4863 08b8ef29f3
-r4864 b8627f4782
-r4865 4aa7f95c0c
-r4866 b9461febf4
-r4867 eceee57a25
-r4868 bd7c67a541
-r4869 029493a5ec
-r4870 dfe0ebc86a
-r4871 a444240d9d
-r4872 3291d4cb2d
-r4873 bc4c24f8ee
-r4874 8aedd8beea
-r4875 d523187556
-r4876 f3b767e870
-r4877 9df28816ef
-r4878 f2b9ba819a
-r4879 607db199f0
-r4880 73fff1f47e
-r4881 1634d380f6
-r4882 bcd7ead349
-r4883 11bd0d6186
-r4884 fabdc86271
-r4885 14203ea9e9
-r4886 eba1c026d1
-r4887 0f97e0f90d
-r4888 83282ce687
-r4889 4047801c1e
-r4890 e416b5a276
-r4891 5e03512552
-r4892 58dc9b6ad4
-r4893 8800f2781e
-r4894 977cbd4ef5
-r4895 90b93c790c
-r4896 071be391c1
-r4897 8a426ccf5f
-r4898 3ee9201e2f
-r4899 52e169b789
-r4900 d888c78872
-r4901 222cbc2dea
-r4902 47f1199b5c
-r4903 97e86af1a9
-r4904 e2b9df1250
-r4905 7fa8d8b098
-r4906 c3a4c7ee6e
-r4907 d11a5ec080
-r4908 fb1795a8b9
-r4909 d75e14f947
-r4910 44ec9c5d1e
-r4911 87f227fedd
-r4912 0beee8af0c
-r4913 161eca2526
-r4914 f4823a2c46
-r4915 d1fbd50cc3
-r4916 36f6311a1d
-r4917 a34d33eecb
-r4918 da82206648
-r4919 a1a44d9fc9
-r4920 7d38b7501c
-r4921 26d7ba2f85
-r4922 c3acfba197
-r4923 d7d3c75f70
-r4924 ea98167b27
-r4925 b58c45a425
-r4926 6a9ac9e4eb
-r4927 98378efcc3
-r4929 85477b8726
-r4930 f89520449e
-r4931 1986671899
-r4932 306e0e4e7a
-r4933 b1944462af
-r4934 83aef81458
-r4935 5535664a2a
-r4936 da547cc724
-r4937 cbd29e3627
-r4938 a03c63c2a3
-r4939 59eea769bb
-r4940 f7ba3e8bbe
-r4941 f8e80a4464
-r4942 599345037c
-r4943 b83bbad311
-r4944 fb67524a83
-r4945 12c007cda6
-r4946 d4de06d53a
-r4947 858ca46c6e
-r4948 87878dd860
-r4949 39b388ce8a
-r4950 e0afb879a8
-r4951 657c0cb4f1
-r4952 05228439f3
-r4953 a47b13bd5f
-r4954 d8e21c3162
-r4955 273a7ad59a
-r4956 029c7504a5
-r4957 b7e1ffda48
-r4958 3a863546b1
-r4959 61befc9bde
-r4960 1d6a8505af
-r4961 4b4aa8e21f
-r4962 ad017dcfba
-r4963 a92ce124f5
-r4964 6a9da72893
-r4965 3f7799f8c6
-r4966 c32643ee1b
-r4967 6f3451e92f
-r4968 bcf48fb54e
-r4969 33e0b0964a
-r4970 e99a5c79c4
-r4971 6beb9d699f
-r4972 959a8f0520
-r4973 653d8ffab2
-r4974 83e70dd503
-r4975 990c85f22f
-r4976 535febedaf
-r4977 1d2b98eaa1
-r4978 e528160f31
-r4979 fdeedc59a9
-r4980 9bcec1fcbd
-r4981 630b3717fc
-r4982 115c008334
-r4983 4d9a521222
-r4984 4cf6770e38
-r4985 15724bed1b
-r4986 97d4a23fa6
-r4987 6e137742b1
-r4988 0b6923d694
-r4989 06f66337c3
-r4990 81592cfd53
-r4991 c037162241
-r4992 634e743658
-r4993 31168656d7
-r4994 89c583a548
-r4995 47d41ea48d
-r4996 2ff070d879
-r4997 d0b1b0f44e
-r4998 0be4dbe484
-r4999 b22fc5ff5e
-r5000 b72a0cd2ed
-r5001 bbc77264aa
-r5002 c2967e39e1
-r5003 0a69feac8c
-r5004 0aba785404
-r5005 57ec040fbc
-r5006 0a8b8f9b90
-r5007 09e5446bd3
-r5008 1ddf7e4b15
-r5009 bc5923e2a9
-r5010 854954dc3a
-r5011 0ca9ad8078
-r5012 4720d45a83
-r5013 d4a7e14e41
-r5014 a84e0a9b9e
-r5015 505451a22c
-r5016 7cd71254b0
-r5017 1d724260bd
-r5018 7612d651c6
-r5019 db6216578f
-r5020 0da6b57884
-r5021 b98f463833
-r5022 30e4902b3d
-r5023 fc0af27421
-r5024 8bbd5b9c94
-r5025 e9caaa6ac5
-r5026 bcedaa4549
-r5027 7ba39195a5
-r5028 5318cffed3
-r5029 87052b61f5
-r5030 060f551348
-r5031 53cfb59269
-r5032 3d141a0130
-r5033 c057cb9d00
-r5034 e0d7aeaa9d
-r5035 2d91f011f2
-r5036 386cb01afd
-r5037 d5d245559d
-r5038 f21a820859
-r5039 a0855e0e7b
-r5040 d1ad2bf521
-r5041 a88a30cdbc
-r5042 515d0ff480
-r5043 04fe66b306
-r5044 5dbdf2cc8c
-r5045 54d61d5149
-r5046 31f89d2888
-r5047 cb13c4597b
-r5048 2bf04d01db
-r5049 03698af2fe
-r5050 41c615a461
-r5051 6ff6a40689
-r5052 95dbf1955f
-r5053 354a2566de
-r5054 58375d932a
-r5055 f11d4d6216
-r5056 f87ec7b728
-r5057 3c7879dea0
-r5058 9b60de91ba
-r5059 676477e2f5
-r5060 849943209e
-r5061 65e8e4cd1c
-r5062 31a5aa6eca
-r5063 b6f86e98f9
-r5064 4f4d28f2d5
-r5065 e7f8ed8b62
-r5066 4e8414de05
-r5067 b32abd3724
-r5335 eca144a9ce
-r5336 3c876ae544
-r5337 5da6acde68
-r5338 bf6dcc4e92
-r5340 0a27645cd5
-r5344 79c0c5404d
-r5345 6eef38afc1
-r5347 f88572e6dd
-r5348 b68121ff0e
-r5349 62df5b4f60
-r5350 203e2f5549
-r5351 5a8157ab26
-r5352 ca957c397d
-r5353 b0d216d7da
-r5354 bc1714113b
-r5355 db7046b4e1
-r5356 8ef485ab17
-r5357 2eba60d641
-r5358 aa5ba627f3
-r5359 3ef0d0f9e0
-r5361 3478adbbd4
-r5363 13a89c1778
-r5366 2c0f7659ec
-r5367 e70a1a24ef
-r5368 17e2b1c2a6
-r5369 df50e05006
-r5370 53a3cc7b17
-r5371 0669cf647f
-r5372 c0d0e8f685
-r5373 b2695e9489
-r5374 9ff3d91d01
-r5375 3bb43d3862
-r5376 227e616d4b
-r5377 7afcf99c5a
-r5386 0e82079908
-r5387 d3819b93ab
-r5388 2f7430a277
-r5389 d6c0efe5b4
-r5390 ac84922849
-r5391 9821f70bc7
-r5393 d8fdc6daf9
-r5394 341c62a27b
-r5395 f7f19a8883
-r5396 ec2227a060
-r5397 7ccea812b7
-r5399 99b6474dab
-r5400 34e7849596
-r5401 713b176bd2
-r5402 10322415ae
-r5403 212ae85d01
-r5404 518f51eb79
-r5405 e50dcb9e2a
-r5406 fe815b63e9
-r5407 5faf35dbd6
-r5408 2ec5c04244
-r5409 35915d3420
-r5410 eb94d965c9
-r5426 b846b44bb7
-r5427 4f8cb21ef3
-r5441 ec25a32375
-r5442 dbf2424c54
-r5443 4e176bc3d2
-r5446 776ecad2a3
-r5447 02752ec5eb
-r5448 e30e2a3304
-r5466 5d4d8b21ce
-r5469 ee5a600ff4
-r5470 d85b12fb07
-r5471 281a73cdd5
-r5478 156a21e266
-r5479 956a04062a
-r5480 331d8814dc
-r5481 58175ab809
-r5482 04b5daba99
-r5483 87863bb42c
-r5484 c189860619
-r5485 400a4aca0a
-r5486 8bde6043d6
-r5487 b839a4f9b3
-r5488 5854add893
-r5489 4c9d99666d
-r5490 9d4a545cd0
-r5491 5dfb1f07ad
-r5494 cfd33de807
-r5497 163ea78358
-r5498 65d00d8084
-r5507 67855156d8
-r5508 a948905244
-r5509 ccb7b56e5e
-r5510 eb15d28974
-r5519 18e106e8d0
-r5528 d8d15e9700
-r5529
-r5530 f7a382d513
-r5531 b0cdfa157a
-r5533 15431dfb40
-r5534 52a762c84e
-r5535
-r5538 1b2637c4ef
-r5539 5a34f0b7a7
-r5540 891506606d
-r5541 401bb8a56f
-r5542 84523838fc
-r5543 1a2b324edf
-r5544 a637905c84
-r5545 33efb08a90
-r5546 cb5094082a
-r5547 124760ce04
-r5548 60ee99e4ad
-r5549 8ecff3568d
-r5550 c0578852eb
-r5551 e81a5c8074
-r5552 1ae15a9a30
-r5553 d9ed348810
-r5554 c4b0b7f476
-r5556 b169da1399
-r5557 e6d5f93be6
-r5558
-r5565 39d0d659e7
-r5566 c79184934b
-r5567 ae23ef2344
-r5568 792fe29856
-r5572 65fa4b2806
-r5574 ac90ad939c
-r5575 a6d825e5af
-r5578 445d2630c2
-r5581 9d5475d9db
-r5582 d3eec69c33
-r5583 64b3256bbb
-r5584 2360b7b207
-r5585 c89ce42f40
-r5586 d89f328f14
-r5587
-r5588 487f837c81
-r5589 8a41146ae3
-r5590 b9a2da1e41
-r5591 5748364adc
-r5592 e885bf6a4b
-r5593 cacf5a2b6a
-r5599 9eac2bedc6
-r5602 628f5c1eab
-r5603 6fc1fe1d66
-r5604 79fab58946
-r5606 3ba2f2b49e
-r5610 f1314e373a
-r5611 e0a29566c2
-r5612 a61449bc64
-r5613 e95af789da
-r5614 b945b6d398
-r5615 4f707afb75
-r5616 6960178399
-r5617 4a08aae226
-r5618 6dc1abb28a
-r5619 9007f0b447
-r5620 91cb19d568
-r5621 049fd9e20d
-r5622 c904321df0
-r5623 be2558167a
-r5624 f0f49df473
-r5625 fa129e84e8
-r5626 73892507bc
-r5627 26dd3fc05f
-r5628 e649e5a07c
-r5629 a8735d44aa
-r5630 78c5bde4ca
-r5631 ccc4c81ec3
-r5632 f8336becda
-r5633 5953fca1fe
-r5634 ab90a0a69c
-r5635 09ff70349d
-r5636 3d222bdcde
-r5637 dceda6e347
-r5638 902f698abb
-r5639 e475dfe83d
-r5640 dcedaaead7
-r5642 bc13888586
-r5643
-r5644 a5cffcb687
-r5645 c57219d240
-r5646 0d6dd01058
-r5647 05a91221bd
-r5653 c717ffa0fd
-r5655 44af599687
-r5656 cb6e500214
-r5657 d18d3c6368
-r5658 88dbab4afb
-r5659 60a0f3e591
-r5660 3ebac4319b
-r5661 38b3c42eba
-r5662 03c4d117bd
-r5663 432ea8895b
-r5664 3fedd27585
-r5666 7748d5fd7f
-r5667 4306480044
-r5668 a3ec956b66
-r5669 55baf42acb
-r5670 dc4e5a3fbd
-r5675 c9a4b1fd73
-r5676 0ec22a89f2
-r5677 dd7e035a5d
-r5695 1577ce588c
-r5702 fa9b107e81
-r5704 c9919d1be6
-r5705 67fa247c22
-r5707 b55ce89f72
-r5711 9547dd90c0
-r5712 b8f52d4664
-r5713 9668bd2204
-r5714 7cb7e12fa1
-r5715
-r5716 90c4181708
-r5717 bc15df9265
-r5718 da05ce41a5
-r5719 1d7dd9a70a
-r5721 25eb10e214
-r5722 7fc1dcd161
-r5723 8adbe6a585
-r5724 5c4c36dc47
-r5725 c904af67ce
-r5726 14a08beabf
-r5727 9d212568da
-r5729 4d92b553e2
-r5730 0bdfe0b5e6
-r5731 6b0d6745a4
-r5732 5ea297c2be
-r5735 c19726b180
-r5741 8f7db2818a
-r5742 f292079705
-r5743 62dcdfbe3f
-r5744 641aa219e7
-r5745 9392e58298
-r5746 2197e9485a
-r5747 28f84fae2b
-r5748 b499d07e91
-r5749 9640cab2cc
-r5750 12517352e0
-r5753 6fa3674c30
-r5754 8bb1d77089
-r5755 2b8adb6ba8
-r5763 dbc6ef023c
-r5764 a831beb540
-r5765 4f6c6e57cb
-r5768 e195c21436
-r5769 15d7da7d90
-r5770 01443e42ed
-r5771 71d0e5a229
-r5772 302186ad6e
-r5773 074eba93ed
-r5774 22245600a5
-r5775 6b1d01b1b2
-r5776 2aafa8639f
-r5782 ed96cbb6a1
-r5783 2821949f43
-r5784 05c7c3c6e8
-r5785 05dd1909d2
-r5786 287ffda0a6
-r5792 1e23b870ca
-r5794 bbad3c86f9
-r5795 46a4e2f698
-r5796 f5d48370ee
-r5797 97b9dcf588
-r5798 73a8597fde
-r5799 b78ee4f8b8
-r5800 c8db5e2c18
-r5801 108e80e28e
-r5802 5380d49e4e
-r5803 f5f37e4062
-r5805 15fea20ac4
-r5806 710c9301a3
-r5817 acdffcce39
-r5818 2526f54f64
-r5820 89c682981b
-r5821 5bd4ed60ee
-r5822 c1e184a365
-r5826 96ae92e4f6
-r5827 7320a81b8a
-r5828 96578a7c29
-r5829 a7991b7024
-r5830
-r5831 25ed8431be
-r5832 806b26a007
-r5833 d3607fa712
-r5834 9272c30317
-r5835 787f4bce33
-r5836 b47d0130f6
-r5843 cce4e3e625
-r5846 bf6be46075
-r5847 a51f26e639
-r5848 f205be7a60
-r5849 ad5e5a343d
-r5850 45371e8792
-r5851 b2793f3496
-r5852 eb73a9886d
-r5859 5a1d969571
-r5860 007f4346d0
-r5861 11e3b59f8f
-r5862 55b91a4680
-r5863 261195377f
-r5864 40dc432b5e
-r5865 dc92346c81
-r5867 bbcf2deba1
-r5868 e8384f4f32
-r5869 ba2010fcad
-r5870 3427c16568
-r5871 0b2d0a6c5d
-r5877 7d7e144e98
-r5878
-r5880 91a9821f91
-r5883 d7007f7a96
-r5884 19cd1641c1
-r5885 f9fed3d5ce
-r5886 a081275eeb
-r5887 0d35144e70
-r5888 4f42f5b49b
-r5889 208bb6e42d
-r5890 d0266a1a7e
-r5891 31b6aecca7
-r5892 750b48f091
-r5893 eb9f31482b
-r5897 3cc6245389
-r5898 9c599f5f90
-r5903 f8b72f6122
-r5904 3e27d741d1
-r6619 ba72a27f4a
-r6620 277dcc3571
-r6621 389e6d3afe
-r6622 a190c204e0
-r6623 8a9572b96b
-r6624 c44a597469
-r6625 e588e23b94
-r6626 c899305fa7
-r6630 27b35faf27
-r6631 2534d32a6e
-r6632 c7e1b5449f
-r6633 d969657ce2
-r6634 3d41a873e2
-r6635 c36fefb5da
-r6636 b0c609cf01
-r6637 d7919a1a9e
-r6638 1169c34d29
-r6643 ca9017c139
-r6644 083f4dd55a
-r6646 1e3992f63a
-r6647 57edf1ab5e
-r6648 b5c077e394
-r6649 5698c4850c
-r6650 95ebbaa43e
-r6651 647c85991c
-r6653 f9377afa2b
-r6654 719588d174
-r6655 718cc9060c
-r6656 33bcd27ccd
-r6657 5478a64f23
-r6658 cfcb34f4e3
-r6659 99fce48f6c
-r6660 b283f88a6f
-r6661 285389fb4d
-r6662 1aa3839d75
-r6663 ff46b04fc9
-r6664
-r6667 c0c963afaf
-r6668 0bef86d8e8
-r6669 963530c26e
-r6670 1c43d5e932
-r6671 8c8b95f3ed
-r6675 b9863c050b
-r6679 f857dea44a
-r6680 4d0b6e97c4
-r6681 d22d800a3d
-r6682 fb7e30141f
-r6683 58b08a3b64
-r6685 cb156c0843
-r6687 661aade979
-r6690 561a1e4f3f
-r6691 dea10c9898
-r6693 74d770b456
-r6701 7cb7defbd4
-r6704 9beb585e55
-r6705 74e31661ce
-r6708 6d022ea683
-r6722 78c4deeb63
-r6727 71fa860544
-r6728 9e745473dc
-r6730 d3d7b7ce01
-r6731 197e25fa59
-r6732 045dba5466
-r6733 eb5bdf5ed6
-r6734 739ba95896
-r6742 6bd2f4b698
-r6744 c09c5f39bc
-r6747 03f3c2af8c
-r6748 8533be1a96
-r6750 496ed79cbb
-r6751 7ede3d70d2
-r6752 803caf64ee
-r6753 bdc6a260fb
-r6754 bb158a6c62
-r6755 9765bb08ad
-r6756 8b4c6ca107
-r6759 7e5198183b
-r6760 b3acb71544
-r6762 b2dbba9927
-r6766 37e705bd66
-r6767 51565df038
-r6768 c516a44630
-r6770 886e009e11
-r6772 88abe6a1e9
-r6773 8e3135cf74
-r6774 aa33f16c7d
-r6781 91ff3e0a6d
-r6782 15433cf438
-r6783 bbfac7615b
-r6784 2b54dff2c2
-r6788 4bf7da4f43
-r6804 3baeaef8b8
-r6808 14cdf97737
-r6812 039933c86a
-r6816 bfbe346421
-r6819 42aa095ac4
-r6821 bf39025ae7
-r6823 1eb8db0dc6
-r6835 578b9226a6
-r6840 322068fb8a
-r6841 0a1598f285
-r6842 0404ac212b
-r6844 7e4339ca70
-r6847 4ddf81c218
-r6848 5459db1226
-r6849 47f417a4a2
-r6850 3cc6197142
-r6852 b656cd6c83
-r6853 0a5eb2c599
-r6854 1ef57837fb
-r6855 5c15a9a9d5
-r6858 e7bdebbdf6
-r6859 1f57a0e06e
-r6862 5725b720cc
-r6864 1d147fed1e
-r6865 357c6349ec
-r6866 887bf2afd5
-r6868 36e6a5a203
-r6869 e5864c02f0
-r6870 0140bb0b4a
-r6871 7863b8edad
-r6872 516ec524e5
-r6873 c1978a3507
-r6874 0558b4ffd9
-r6875 23b23e99f8
-r6876 246dc68a9b
-r6877 095970154d
-r6880 c4f1e1c3fe
-r6882 15a115e5bb
-r6884 d7a3d1a070
-r6890 bcc8c5b3f4
-r6891 1e93a4694f
-r6892 e97babe022
-r6897 5b854aa343
-r6898 8515d4a5ab
-r6899 ce7646c79b
-r6900 c7e98a8e00
-r6901 f15cab9b7f
-r6902 705747005f
-r6903 7d8791d5c5
-r6904 beefcf0c9e
-r6905 5d8738edb4
-r6906 9f7ee056ca
-r6907 be7541e2f4
-r6908 b007bacd9a
-r6911 5cd5436fc1
-r6918 d0d3ec6098
-r6920 eccdddcc73
-r6921 76f0380dd7
-r6924 f9874202d8
-r6925 95921f1ad9
-r6930 20978ce7ae
-r6931 a959828b60
-r6933 6b46664e63
-r6937 f64d8a594c
-r6938 626a6597f7
-r6939 d746f73c9d
-r6945 2b4f591221
-r6946 e858e292e5
-r6947 abc7c2c51c
-r6948
-r6949 4bbc472029
-r6950 18ef3d1b68
-r6951 e5af62215a
-r6952
-r6958 fc24e7abd4
-r6959 d9942ba66f
-r6962 65f9252a9a
-r6963 99c2f95fcf
-r6965 02e3db6b22
-r6973 98071e6518
-r6984 650c4f0627
-r6985 c732b72618
-r6986 a75bf119d5
-r6987 a315aa92b5
-r6988 ed3fdfcb39
-r6989 53725c9b96
-r6990 a56b5bc795
-r6991 5b3eaa1547
-r6992 2608a0b3ec
-r6993 6e3e914fa8
-r6994 05cde95442
-r6996 542401df8d
-r6997 f9ea70db10
-r6998 7423e836f2
-r6999 d5fd750f81
-r7000 a2647adc11
-r7001 e9b3fa3701
-r7002 8d86347882
-r7003 4f0d8b24a1
-r7004 198624e412
-r7005 d66ace258d
-r7006 e9ea3247c6
-r7007 7ff239d7a9
-r7008 3049afc7ec
-r7009 5993e28ec5
-r7013 fde7c4cb46
-r7015 b178e4658b
-r7017 315ba402be
-r7020 e7a7b15c8b
-r7029 6fbb495aad
-r7035 dd40ea8aeb
-r7036 2163b93a51
-r7039 3b40ebd0cb
-r7040 67627dd409
-r7041 4bbe6ea1dc
-r7043 2b8d5f6485
-r7044 d1007862ed
-r7045 5013567324
-r7047 811abc564c
-r7048 56645fa25d
-r7049 486042e89a
-r7052 ac8b46abda
-r7053 ce508d2ea1
-r7054 1c4335808d
-r7055 2c18390628
-r7059 af265b8b1d
-r7060 c058627550
-r7061 87185f9844
-r7063 13aeb49173
-r7071 512b362d73
-r7072 e59dc955e3
-r7073 99a204f187
-r7074 9ce18b19b6
-r7076 40f1882abe
-r7077 9f328e4c8d
-r7078 fa84d50fb8
-r7087 bc10a1dc26
-r7088 264a2ef48a
-r7089 2c4293b449
-r7090 b8da7c77d6
-r7093 8fc98a03c2
-r7099 0f46fe4ca5
-r7116 8b6c8a3c07
-r7117 a0c48ce649
-r7118 e3fc3506c7
-r7120 73ff6fcfc2
-r7121 99a8527292
-r7123 e205301999
-r7124 e29a183a64
-r7130 2f626674d0
-r7139 6900fbac1a
-r7155 e22bb2b053
-r7161 0a5724a195
-r7162 6c633ce6bb
-r7164 acc947a63b
-r7165 95fa0a32b3
-r7180 5fe735b785
-r7182 aec0da2ead
-r7192 1e768684d1
-r7193 a13de6568b
-r7205 d8cb3b071d
-r7206 ce72df2c02
-r7220 78d3bf3364
-r7227 1819fb81bf
-r7228 bf78330b04
-r7233 c495fbf365
-r7237 bccf5e8958
-r7238 63f4d51181
-r7244 8e1da29a68
-r7249 88cd71a283
-r7250 84d3c4385e
-r7251 2313191913
-r7252 ffa1aaad1b
-r7253 b6f7fcc730
-r7256 692ce7bc6b
-r7257 34b47d2a0b
-r7258 ef8d203f26
-r7259 a9595d49f7
-r7260 dab0d42953
-r7265 e84e21716c
-r7266 3cb424ab59
-r7267 0fb74cd584
-r7272 0b47ca3e5b
-r7273 ca8dccb135
-r7274 90451da3b1
-r7289 103fc2b13d
-r7290 8243b2dd2d
-r7291 62fb3c42e4
-r7292 2c7b0f4ced
-r7294 f4cefb4318
-r7295 5c41ae07d5
-r7309 365acfe04b
-r7310 274d395e6b
-r7318 c0f698a7c0
-r7319 ecf482f69e
-r7335 e8b399400f
-r7336 7435339ba7
-r7337 6b474101b9
-r7338 f8de30e27e
-r7341 5a94352a62
-r7344 1f5bd8a590
-r7345 12a9f76471
-r7347 b1e41df94d
-r7348 bffeaa0e04
-r7352 099e903658
-r7354 5a5f6faf05
-r7355 026286b7aa
-r7360 0015af7171
-r7363 ff1c68655a
-r7364 00afa24fb6
-r7365 dcb432cd6e
-r7371 f20335d190
-r7373 3379165fc1
-r7374 960380abbf
-r7377 2c77b8a0af
-r7379 8b8d0f844c
-r7384 fa472df87d
-r7387 3225458545
-r7405 6ce297f44c
-r7406 88a1448f33
-r7408 de29ef0ac4
-r7409 92dcada606
-r7415 7199ea34ab
-r7420 ea5e13cb94
-r7421 ef93d319a6
-r7422 4723a7ea5c
-r7423 8d5dc2f990
-r7424 5d3c21e6c7
-r7425 5911c61bf5
-r7426 8d547276dc
-r7427 bc4bd901b1
-r7428 703ba993c3
-r7429 bc46a1b536
-r7431 ddfe2e74ec
-r7432 332ab9f485
-r7433 5c11f952af
-r7436 8ab0305de7
-r7437 98e286c197
-r7439 c98f8ec742
-r7440 ac5aa786a0
-r7446 b9f274691a
-r7449 1685264f55
-r7451 f60573811d
-r7452 63c4d30252
-r7454 79432ad37e
-r7455 3f638fc27d
-r7456 4a0d4f42ce
-r7457 183bcec0b6
-r7458 45ccffe15d
-r7459 a31e6c4000
-r7460 953466de7c
-r7461 47d6dff4eb
-r7462 dbe346af1c
-r7463 c05a58bd34
-r7464 16b00da844
-r7467 f746ce36d8
-r7468 ef2de304b1
-r7469 6870553eff
-r7470 2aea310f9a
-r7472 541b260c65
-r7479 06ab9264e8
-r7481 ffffaf4910
-r7482 5cfcf82f51
-r7483 c039ddddee
-r7484 d83476284e
-r7563 696b5a858f
-r7564 07724cb4b0
-r7565 eec07f7431
-r7566 911ce1e4a5
-r7573 90bed7c3b6
-r7574 288d0481e4
-r7575 b7ff021e08
-r7576 673fb7e02b
-r7577 2a2f543db6
-r7581 f4ad01e291
-r7584 4311ae53e7
-r7585 4e6e4e17d5
-r7586 50d5f79bd7
-r7588 0ecead295c
-r7589 ed292b2b9b
-r7590 3a349e70a1
-r7597 5da7b0a395
-r7608 e3b1cc9130
-r7609 fa80c56a42
-r7610 757086a40b
-r7616 1918e7230b
-r7623 335de89b82
-r7625 f7a989f23a
-r7637 549c8a2a44
-r7638 cc2a602aa5
-r7639 cab784ad14
-r7640 23904f6355
-r7641 213addb673
-r7642 af9cd28006
-r7647 c49cb64a8a
-r7655 4150f7e6fc
-r7677 9040a1ea86
-r7678 8f660e3dda
-r7679 5e34cf4f88
-r7683 a15d1d617a
-r7684 69584d1e2f
-r7692 31adfc6cf4
-r7695 3be616edcf
-r7704 95ff3d2928
-r7705 0ab820501a
-r7708 a2f0ad4b7e
-r7710 f6bdc80cf2
-r7711 61441aa3be
-r7712 df73352fea
-r7717 b43c857900
-r7719 4d15dfcb12
-r7720 6e81dcdd8a
-r7721 715c838ebb
-r7722 a93415ff65
-r7723 52f4d88651
-r7724 ddbd7463f2
-r7726 e06f68204c
-r7728 78871179ee
-r7729 a8df0271a0
-r7730 4825d24dac
-r7731 fe6c954429
-r7732 cefd4bfbd5
-r7733
-r7734 8b2f809290
-r7735 cc71492e8b
-r7736 f79c3b7566
-r7739 682413c930
-r7744 b9a54c2751
-r7748 8b6eba1a9c
-r7754 7427ad1127
-r7762 28264ad218
-r7767 046c97346e
-r7768 4ba746e97c
-r7769 d8ee617600
-r7770 eee023674e
-r7771 de843e4a74
-r7772 1c43cfe216
-r7774 333b75ec32
-r7775 ae11503b40
-r7777 6e756ebf32
-r7778 016ff4c9ec
-r7807 66adf79008
-r7809 e5556bbbe0
-r7824 150014366e
-r7833 faf05d692e
-r7835 24bbfba338
-r7836 c024e21764
-r7838 5976124d73
-r7847 9ae456c484
-r7848 37cb08de40
-r7849 102c5ae99d
-r7850 72db375a73
-r7851 bae76d1be3
-r7852 7b6693a2a2
-r7856 ab1b5de53f
-r7857 f451a2fc8d
-r7859 39a1658065
-r7863 a605ab716e
-r7864 1b68ef970c
-r7865 e8f45e9296
-r7866 5bae313f42
-r7870 ca712dacc6
-r7871 5f49bdadcf
-r7872 dcf5715bee
-r7873 2de072f99b
-r7874 af68b2f871
-r7875 42bd0dce6c
-r7876 4857648d27
-r7877 d8dd12a551
-r7878 4f69e5325d
-r7881 8f94fcf948
-r7882 d6f40f58a9
-r7883 a00b0c60a7
-r7884 975a608b36
-r7885 8599693b3c
-r7886 37e0008c4e
-r7888 0f99d908cb
-r7895 8714d194ab
-r7900 769b33953d
-r7901 86a6c4afff
-r7902 b142c4376d
-r7907 28c125d3b9
-r7908 77b063b003
-r7909 001ce2371b
-r7911 7718b24e9d
-r7912 c4ad0fba91
-r7913 35adc1c48a
-r7914 e0f22af441
-r7915 adab52e289
-r7916 68159e91ab
-r7917 0be36c00e4
-r7918 5dd59f4127
-r7919 e670a7bb76
-r7920 ddad4e40ef
-r7921 8249292424
-r7923 e10bdf2f82
-r7925 913b2c9b3a
-r7928 a4e074308b
-r7929 640ea6fc45
-r7931 4d929158ef
-r7932 c1cc40e97d
-r7935 b444420b5b
-r7936
-r7937 2933e3f3cc
-r7938 fe05247881
-r7939 3fe40a93ff
-r7941 0d8b14c605
-r7942 8446c6c767
-r7943 590af0e4be
-r7946 a2dc3dd2c5
-r7948 37f32b6907
-r7949 013b381743
-r7950 a833d535ec
-r7951 189cd283fb
-r7952 b113b640be
-r7953 7aceef658a
-r7954 5da65359b5
-r7955 b1be740f87
-r7956 d0ff5e5680
-r7957 1ab98be85b
-r7958 f704035418
-r7959 511aa6f2e4
-r7960 6e372ca477
-r7961 9d39ff267e
-r7962 c3426a231b
-r7963 0282dda201
-r7964 059cda57f0
-r7967 48dd2c26dd
-r7968 4642751e0e
-r7969 777381a305
-r7970 7309056770
-r7971 b9e7cf28ee
-r7978 ef34b6a65b
-r7979 499580a1ed
-r7980 b39db081ff
-r7984 b301f8e867
-r7985 096390023e
-r7994 5a17c91819
-r7999 972ecebb27
-r8001 0b424f22db
-r8002 74c681cb2d
-r8004 aabf6ed2ab
-r8013 a31a1a0c7e
-r8014 e8a989b914
-r8015 af8c15ce25
-r8024 7fa3172f1a
-r8025 4757cf7f35
-r8028 b8a3d27064
-r8029 d16491f730
-r8030 df6069ed29
-r8031 4006064a64
-r8032 47e617d962
-r8034 af9961b0ec
-r8035 93da925b0d
-r8037 1df3ef081a
-r8041 53366074ae
-r8042 8aaebe5639
-r8043 51eb57e0ea
-r8044 cf9459eefd
-r8045 f467096ce4
-r8046 599eb475e4
-r8047 998bc939d7
-r8048 3860412af7
-r8049 b0e949a3cb
-r8050 f24e379577
-r8051 6204bc36f0
-r8052 cadfccc331
-r8053 fc17292454
-r8054 5a6a763157
-r8055 1292086fa5
-r8056 6f4b3a93cc
-r8058 e4f63ce252
-r8059 fe0436c6f9
-r8060 2568aebb5a
-r8061 4ac8886e43
-r8063 b34c9f524f
-r8064 3d7e84e6fa
-r8065 401d5eda44
-r8066 7d9e8c17bf
-r8067 fb129da251
-r8068 4308d3971b
-r8069 be158db7ec
-r8070 ce9000fb3a
-r8071 9024aa4405
-r8072 ac20cbb480
-r8073 f670f31553
-r8081 49ea811d41
-r8082 4b1eef7cf4
-r8083 6865be2978
-r8085 fa92e7b7e3
-r8088 b705622061
-r8089 9a39e68be1
-r8090 7632879f2c
-r8092 047b0657af
-r8096 2b77dc7e1c
-r8097 e6ef9af62f
-r8098 087920b5e3
-r8099 5d6cd01850
-r8100 8d6cbbead8
-r8101 f3c1d397f9
-r8102 41c92929fe
-r8103 02ab294283
-r8104 a78b5c7699
-r8105 02fb5be2df
-r8106 2906c10f80
-r8107 6147fc43c8
-r8108 ad9ac5a296
-r8109 ac87e36fdd
-r8110 e0c336f21b
-r8111 e4fc9bd2fc
-r8113 b53dced121
-r8114 8592375f95
-r8116 856c86e29d
-r8117 4080a760cb
-r8118 bafe025128
-r8120 cc8ee691af
-r8121 ed1dfe18cb
-r8122 87447d7723
-r8123 2caf315455
-r8124 2c430022e5
-r8125 6374945139
-r8126 1b41a79cb7
-r8128 a35c89a5e9
-r8129 57e11c6b35
-r8130 5c97c9e85c
-r8136 5e37103071
-r8137 ac83eb5c94
-r8139 5d3674cbab
-r8140 0b09e1d2e4
-r8141 5e3e15d1dd
-r8142 be488e78a9
-r8143 31ea434a66
-r8144 0f456bcbb0
-r8146 52b71a5564
-r8147 3f17e1b36f
-r8151 23e9172c99
-r8152 701558d924
-r8153 d31085b750
-r8154 cdc4595aed
-r8155 04d69300ed
-r8156 56ea4526d3
-r8157 56c803d9c5
-r8158 9d95c090f4
-r8159 7796d36f0b
-r8160 52ce2fb174
-r8161 c755b6a62e
-r8163 f964ab66d6
-r8165 5c25a05118
-r8166 78f9cc60cf
-r8167 90f48c4fbe
-r8168 bb6dc39a5d
-r8169 71158d0b59
-r8170 a39f873983
-r8173 3a0c15973d
-r8178 3e41f705d1
-r8182 ccbd600259
-r8184 068aa4e25a
-r8185 0f21d47d79
-r8188 b56a24bbc7
-r8189 cedd6024fb
-r8190 2146b9187e
-r8191
-r8192 ab1b368720
-r8196 d21d4888b3
-r8199 3fc6cbcbfb
-r8204 d0bc4a20d2
-r8205 43a5a26967
-r8206 1d6f2ff511
-r8207 045652a12b
-r8208 8e2649846a
-r8216 8ac5a042ec
-r8222 ab9c3ee71d
-r8226 4146327bbd
-r8230 30161140e9
-r8246 343c15fe83
-r8247 5bdedbd453
-r8248 3f8fefbe72
-r8249 b2455fcc38
-r8250 f901816b3f
-r8251 7b8adeb8ff
-r8253 adebb89dfa
-r8254 1f7c3208a5
-r8255 7eac52f2c1
-r8256 e44c3c3606
-r8259 982fab6e30
-r8260 88ba68ac7e
-r8261 d30f004a81
-r8262 e538d9afa1
-r8263 e753bc53ac
-r8264 b41132eeb3
-r8265 2edbb8c633
-r8266 1ab39df4af
-r8267 5b74d5d555
-r8268 1c873c520f
-r8269 9b7fbdfe7f
-r8270 f2211e34b8
-r8271 43109af479
-r8272 29fd527461
-r8273 dc344b2fd6
-r8275 cb62884e39
-r8276 a3be604378
-r8277 261ff3d0ab
-r8278 82fddf62e8
-r8279 198f0d25d0
-r8283 5363217748
-r8291 7e65f43f82
-r8292 9934175fad
-r8294 55561538cd
-r8296 8e569f7fb4
-r8300 474c32c2fd
-r8303 73fc9aef16
-r8304 58749ce64b
-r8305 89dba633f0
-r8306 793151ef07
-r8307 65c14d6dc7
-r8308 e40c9ebc96
-r8309 e87657e617
-r8310 d16fd45df7
-r8316 8ad24113ea
-r8317 c5c18aa57a
-r8324 4f25b17e9f
-r8325 96bf7d6c80
-r8350 33a9262563
-r8362 a035658a13
-r8366 eb9c91332c
-r8369 28113d4604
-r8370 9a73f4c8d4
-r8371 1bedeb3b33
-r8373 a959d0cd10
-r8376 c840d9f58c
-r8377 eb79135b97
-r8378 6f141280bf
-r8379 6d236c4abd
-r8380 9b88ad1f3c
-r8381 d03714058c
-r8382 dcc092f2ad
-r8385 8c39831d83
-r8388 67bdd4e52b
-r8391 0cad3ffca7
-r8392 ec74d7c7ec
-r8394 f6b48ea106
-r8395 279f7b6674
-r8397 1b39181c37
-r8401 75ee284f25
-r8403 49ee6e4ec4
-r8404 840911b8e3
-r8405 22a098bf7e
-r8406 80bfcf9e75
-r8407 1e9090374d
-r8414 e84cda0299
-r8415 a2cd7999f5
-r8420 d5aee9e7a1
-r8422 d283455a24
-r8423 ad4905c0ff
-r8429 5a90f0aebd
-r8432 8d9a6bb9b2
-r8433 7f3d535727
-r8435 1536b1c67e
-r8436 c4bc5bc26a
-r8437 87494e1323
-r8438 3197c82a56
-r8439 e15e544b09
-r8440 d75abefffa
-r8445 8e0d30f85c
-r8446 b795edec92
-r8454 9954eafffd
-r8455 4a8bcedf9b
-r8458 01dfdb2e3c
-r8466 9e4302fbea
-r8467 dd535c3645
-r8468 9050da7108
-r8470 1c6e546027
-r8474 7430aa1b4c
-r8475 796ed03186
-r8478 23992437cf
-r8485 0d2ad77479
-r8491 cd98806a35
-r8492 b7fdd69780
-r8493 0093ff481c
-r8495 94591f74bc
-r8496 111bd4483b
-r8497 e852d77293
-r8498 2c0c8cced1
-r8499 30da384983
-r8500 8a4c664b33
-r8502 da84919a84
-r8503 a8a2bc7ff2
-r8504 296bcdfcb2
-r8507 b5f66bdd72
-r8514 6d9e1774b9
-r8516 5a4ad1c3ff
-r8518 5e6c4e77af
-r8522 d156f34b93
-r8525 90a4be3747
-r8526 f52e6a6a8b
-r8527 8eaac02ce0
-r8531 bd0e709a7b
-r8532
-r8534 7cb834d07b
-r8536 927abec3b0
-r8537 30ed1a3702
-r8540 33637d5c2f
-r8546 5a8391bb88
-r8547 98c1cc7d1a
-r8548 31c48dcbf1
-r8549 c216472d2f
-r8553 cda2954e7b
-r8557 d82e9fa4d7
-r8559 3a4a6a3b66
-r8561 def54abfbd
-r8563 fe5b7a11c5
-r8564 fb7021c177
-r8565 b2079c3e22
-r8566 2119e3945b
-r8567 a89814eaf3
-r8568 bacd5d56f4
-r8569 132637e42e
-r8570 9ea0d2b4bc
-r8572 f81fd55cf6
-r8574 423649a208
-r8575 7936eb95cc
-r8578 93cb4fff0f
-r8579 082d6d6ac0
-r8582 4ba05a16c5
-r8583 4ed3ac6323
-r8585 82654dbf8a
-r8586 a202a68496
-r8587 cd2cfe1999
-r8588 b0399bd45b
-r8589 a131363221
-r8594 e5154da769
-r8597 f914e325dc
-r8598 0a4e7a8116
-r8599 238f90bea8
-r8600 2a73bd0f46
-r8601 d4c7abb9d0
-r8602 ba8044fafd
-r8603 da1c8faef9
-r8604 6cd505dba5
-r8605 d921798f07
-r8606 55f38ed459
-r8607 0482a0c416
-r8608 75df1caebc
-r8610 643711f83a
-r8611 f2b8a606c1
-r8613 206233021b
-r8616 f011bcedf3
-r8617 fe6e0afa5c
-r8621 ff389f693c
-r8622 5e60e37eb4
-r8623 82a4d4a8a1
-r8624 bd649c76b1
-r8625 d81428a287
-r8626 97980ef322
-r8627 3d449d9f66
-r8628 d0798c6b85
-r8631 a6279c2d91
-r8632 c0f1af1705
-r8639 3818926f90
-r8641 9a8e9075dc
-r8642 1237c52026
-r8643 540f1b3922
-r8644 9abe4fe735
-r8651 b4ea568bb3
-r8652 7c6c9c0847
-r8653 7165e8d40d
-r8656 dc97215ec9
-r8657 6387971d97
-r8658 91412ea3d4
-r8659 d1f14a8b11
-r8660 1874b9eba4
-r8662 3f3634c6d0
-r8663 29ac82f32a
-r8667 3f64a5e88e
-r8670 2e01209742
-r8671 0f3a8b5a8e
-r8673 01d4e3645a
-r8674 97257e8e6d
-r8679 13a369ce8d
-r8689 f72b4dfe46
-r8690 e51237b7cc
-r8691 d9be3828b7
-r8692 b3d9e27b95
-r8693 cc43126a20
-r8694 bc80f0fd79
-r8696 6cbc253b9b
-r8707 aafc72b3df
-r8710 5a5eb8196c
-r8711 a3b6a1de07
-r8715 5508808ef7
-r8717 a4b7c29804
-r8718 54a8dae948
-r8720 bc14c4aa87
-r8721 0e61f9c37e
-r8722 00ee529f42
-r8723 8bb69c4fa8
-r8724 2282fe8e8d
-r8726 3b48a0dbda
-r8728 3101d1577e
-r8729 655a7f3801
-r8730 39e6150851
-r8731 7bc38cea93
-r8732 e452b69c0e
-r8733 75beea5dd9
-r8735 5fab489bd5
-r8737 bfe7706220
-r8738 bf98eebc6c
-r8741 e40402803f
-r8742 9a45bd5bdb
-r8743 920e6a2e5a
-r8744 427c400d0e
-r8745 04871d8ee1
-r8747 f5934f7970
-r8748 c8964378fb
-r8750 8ee34d4036
-r8755 e3efde8ea0
-r8756 a2d886a301
-r8757 5656170f7c
-r8758 c12786087f
-r8761 d58bf70442
-r8762 96e5dc3d89
-r8763 4f4ce3a4f1
-r8764 d12123f57d
-r8765 ce2affc166
-r8768 e898539e93
-r8769 20aa9911d0
-r8770 40396d951e
-r8771 b628076f05
-r8773 b03888b4da
-r8775 9643a7ddc2
-r8778 8d98363504
-r8779 c6d2de5a15
-r8781 a3a8628edb
-r8784 2511000652
-r8796 0586e1b756
-r8797 8abd909119
-r8802 499d7f10e2
-r8803 60b3d90f81
-r8804 53cb459ecf
-r8805 942bb16fc5
-r8813 6c710d403e
-r8814 8d3d085f4b
-r8823 6ce056f31e
-r8827 1450735f97
-r8831 4831a456ff
-r8832 59b5c7d568
-r8833 e1327fc474
-r8834 dc398c6645
-r8835 3e985a3e8d
-r8837 9f013a7ccd
-r8838 02bf8fff18
-r8839 1c15235511
-r8840 f4f4e71387
-r8841 76faa29bb7
-r8842 7d72618b37
-r8843 93275f2d34
-r8845 7233c24d3c
-r8846 8b2e339813
-r8847 054f9fcc98
-r8855 e627aa0456
-r8856 6f6036e0d3
-r8857 02afba3bf8
-r8858 2404604f2d
-r8859 ac49199ed2
-r8861 9c0102e568
-r8862 c23c5ee74c
-r8869 6aba5aeae5
-r8870 137654bb3e
-r8871 5a4c34e338
-r8872 af995b1f8f
-r8874 0f6e140435
-r8875 dc2f206668
-r8878 2901639c75
-r8880 d7a4f76d25
-r8881 83b51eccb8
-r8882 5c21476c57
-r8883 717d95c978
-r8884 fa37aa44cc
-r8885 24284feee5
-r8886 42dc44dd52
-r8887 6a20eed594
-r8889 86c028b6fa
-r8890 fbc3a71a1e
-r8891 c986830f3c
-r8892 3863cb69ce
-r8893 705d9f23d3
-r8895 bff27eb916
-r8897 5f951ae316
-r8898 7096ee3e73
-r8899 bf18c37320
-r8900 64ed2090a3
-r8901 00a2c044eb
-r8902 7cd471c223
-r8904 c012f92306
-r8906 c1a76844ed
-r8907 b1b11f7221
-r8908 bd7a56937a
-r8909 6fe33e19fb
-r8910 97efa1560f
-r8911 2995f1a6a4
-r8912 de4eb301bc
-r8915 dcbcc29383
-r8917 2f0f432ebc
-r8919 507ce7c6b9
-r8920 8322730ecf
-r8922 61622e4255
-r8923 543c22858f
-r8925 aa9629c845
-r8926 9fc39d7b60
-r8927 096ef34f8e
-r8928 3bc241d399
-r8929 47f4077d2a
-r8930 1eb482f817
-r8931 deb79f8dd8
-r8944 472b09e0aa
-r8945 7dd216cef2
-r8948 a094bf3c2e
-r8949 27de825580
-r8950 4a26ab7d81
-r8952 1a3ed197d1
-r8953 bff6517f57
-r8954 dcfd04956a
-r8955 ec04190880
-r8958 af511469a6
-r8961 f1208fc000
-r8962 470f990722
-r8964 48946a261d
-r8968 5331ce87dd
-r8969 c95aa7344c
-r8970 4490aaef07
-r8971 0618391c55
-r8973 e909afb83f
-r8974 bcf35077a2
-r8975 2be267a788
-r8976 7cadf17a75
-r8977 b7ccb47d14
-r8978 59e15fd5f1
-r8982 07033117c9
-r8984 4af96ffd7a
-r8986 3475351c46
-r8988 00db012c72
-r8990 2cf278b25b
-r8992 c10e1f0cab
-r8993 4b0a5966df
-r8996 458d3d10cf
-r8997 bcac3c45b2
-r8998 f44bc6e066
-r8999 d1053b01cd
-r9000 f3f8f974bf
-r9004 f9e5afd36a
-r9005 118050a7d7
-r9007 42744ffda0
-r9008 0e0a4aa446
-r9009 61d092d582
-r9010 615d92649f
-r9015 52a66ee1f7
-r9016 c5af8e01c6
-r9019 54a3755e36
-r9022 d6753d1eda
-r9036 2f2e82a9c3
-r9037 d3462e7f50
-r9038 83fcb4da4e
-r9040 2f5a1ddcde
-r9041 7e705baa34
-r9043 505644abe4
-r9045 8526940f15
-r9049 50788d5fff
-r9050 44b5456706
-r9051 2fd723d1cd
-r9053 3f8b526dd8
-r9054 2738fdc2ed
-r9055 43949e44b7
-r9056 4a56a364a4
-r9057 21808a3d77
-r9058 91eb4a0982
-r9059 fab8b6d5c1
-r9060 17aff1c1fb
-r9061 bd1dd90121
-r9062 d42b02b092
-r9065 f7df490b13
-r9066 a2912abc26
-r9067 3554798475
-r9068 31e93255cb
-r9069 a7a95ea3de
-r9070 009442ef0b
-r9071 5c642cbca2
-r9072 d8e8ab6a9e
-r9074 61723a8f72
-r9075 948b1a53ea
-r9076 f28285cee7
-r9077 640ecf38b7
-r9091 7ebc41cda2
-r9092 247577e966
-r9094 dd9a27c37f
-r9095 e02fed8e7d
-r9097 8d82ebbe36
-r9098 ee7252af47
-r9099 5352638cee
-r9100 37b3648e30
-r9101 1ccd9b6ced
-r9102 6c9163849c
-r9104 68c6e531f4
-r9105 c0d0290379
-r9106 39ac777cdd
-r9107 1c1e6d0fd8
-r9108 82ee25df5d
-r9109 8b0cd5cf7c
-r9110 257a1845d3
-r9111 40990494c7
-r9112 79705f3dbd
-r9113 4749c3d31d
-r9115 f187d8d473
-r9116 3e1e1e91bd
-r9117 b6f68a6bcc
-r9118 6aa668e0f4
-r9119 d9ba6d6db9
-r9120
-r9121 6b142c2217
-r9122 12ef0e1272
-r9123 a071695837
-r9125 2b3c8f9449
-r9126 d433eb14c8
-r9127
-r9128 f25687d77f
-r9132 e7042a30c6
-r9133 69b4ee3b28
-r9136 8d006d8cba
-r9138 f03c47f101
-r9139 bc752a61fe
-r9140 bce3c6001f
-r9141 0f2a6c8bba
-r9143 f8680fc2b1
-r9144 2c670cb8a2
-r9145 4819d0a6a4
-r9146 c3351baaa2
-r9147 23f68d5b13
-r9148 09369019c7
-r9149 9d507e381c
-r9150 1e23988361
-r9151 8e56e0e55b
-r9152 a4e49ea5ac
-r9153 afb51786ac
-r9161 8b5680aa83
-r9162 69583d89bc
-r9163 516f06d7bd
-r9164 e2e0a9488d
-r9165 d8de14d630
-r9166 3125604fb0
-r9167 7632c7172d
-r9168 63d618b20c
-r9169 84089c19ec
-r9170 5c2004c074
-r9171 1e1a2160bc
-r9172 4fb358b4ae
-r9173 69a0c3e30a
-r9175 c3ff16d17e
-r9176 c8b7f16b10
-r9178 939774370e
-r9185 f18a26d8b9
-r9187 ea64259fa0
-r9189 aa93e6f3b8
-r9190 f7e5d9d0af
-r9191 398e777ecd
-r9193 aecb341d73
-r9197 064217d20c
-r9198 c7a3100b08
-r9199 a90beca18e
-r9200 12014a82a3
-r9209 46ff81bfd5
-r9210 8ad9636a32
-r9213 39a00243c5
-r9214 e46598c089
-r9215 61f333639f
-r9216 25b1b24c08
-r9217 de92a193eb
-r9218 9a326616b4
-r9220 0d7fcb4422
-r9221 7faacc7b75
-r9222 f165c87a43
-r9223 166fc61a6e
-r9224 7b06546f88
-r9226 e008a32fb9
-r9228 6889ff9726
-r9229 ac255eaf85
-r9235 f3047df95f
-r9236 bb30761427
-r9238 1a98bd7b47
-r9239 97f3e8050e
-r9240 b00a1198aa
-r9241 f1bac69903
-r9242 dff1d96421
-r9243 96c144a972
-r9245 a18c1441c6
-r9246 8e2cb2b07a
-r9247 d0dd6b7eee
-r9248 258064826d
-r9249 66b7fe95d2
-r9254 15a20c680c
-r9255 b15e16ecc5
-r9256 cc9e329bff
-r9260 25896b2d55
-r9261 17c14587cb
-r9262 1ef41016b0
-r9263 4a530112eb
-r9264 41b2863d8d
-r9266 d26dfbdf59
-r9267 821551dd7f
-r9270 cb7711db82
-r9272 466db7220a
-r9273 9f54fe8bd0
-r9274 23c02cb584
-r9275 2538bfa058
-r9276 837661837e
-r9279 aecb355ecc
-r9289 cbd2f9d216
-r9290 7106a3e0e1
-r9294 f6183ef4b0
-r9295 5131de0a0b
-r9300 02a20e546d
-r9301 4aeee87b5d
-r9309 f05f4846f1
-r9310 63ceabef32
-r9311 54ad97b77d
-r9312 216f8bf4c2
-r9313 4a2b662fa8
-r9314 87d1a060ea
-r9316 1b1040e91d
-r9317 6e5b3945dd
-r9321 2a19832b23
-r9323 f7e598a6a9
-r9324 4af77453d4
-r9327 5cfd4f2b9e
-r9328 25133fac5d
-r9330 adf238e0db
-r9331 663b3ae5b8
-r9333 b72b10f883
-r9334 8b0dd2aa7b
-r9344 ee04f80964
-r9346 5baf3e447f
-r9359 f814b3162e
-r9361 ee8ff73b74
-r9362 b09e4cd1c6
-r9363 327b87d1c6
-r9364 75327922b4
-r9367 51d3afbb1a
-r9368 90da470006
-r9369 fb4eff8638
-r9370 54bb9363cd
-r9371 24561d55b0
-r9372 086f1209bf
-r9373 41d22eefca
-r9374
-r9375 9eb3282d5e
-r9376 2bf8bc108b
-r9377 e150c1dd7e
-r9379 722d82d18a
-r9381 23a59cf629
-r9382 2cd214e5fe
-r9384 6538ff2bea
-r9386 ccf513fe44
-r9387 e56d401f6b
-r9388 1e1dcc614b
-r9389 c8a05b45e0
-r9390 61b77f31e7
-r9391 06303e5d5b
-r9392 0774603396
-r9393 686571753a
-r9394 61ef5c893f
-r9395 c5e9360725
-r9398 6c468e8927
-r9399 77708ded5e
-r9400 899a7adfe5
-r9403 0f20a51754
-r9404 42f868bcea
-r9405 5a2f21ce9a
-r9406 6981bc62d7
-r9407 c50a0d2295
-r9408 bc94a338c0
-r9409 9629051686
-r9411 04fe2f9bde
-r9412 50c411759b
-r9414 f9da023c4e
-r9415 cddb243ff6
-r9416 a72d88c271
-r9417 f8b32f27f6
-r9418 8809b3edf2
-r9419 e566bd874b
-r9421 6337248afe
-r9422 10213bc9e7
-r9423 78db4cf7fe
-r9425 ca3a272ce6
-r9426 f34865ed00
-r9427 1c33235d8c
-r9429 959f3bc8f8
-r9431 a42ba53668
-r9435 cfe4c7ffe6
-r9436 18a55e8190
-r9437 6474945c60
-r9438 6090bd2328
-r9441 4fe80dadef
-r9443 e7b3599186
-r9444 9924a48040
-r9447 8a9719c222
-r9448 4f6a14b33d
-r9449 4d85fb1278
-r9450 4cb43c7788
-r9451 6c347e3971
-r9452 a3ffb394a4
-r9453 6cffd12cb9
-r9454 ccb5bd1da8
-r9455 40a4987f45
-r9456 f1f6f2b233
-r9457 db6ceead4b
-r9458 98f71af784
-r9459 525018c3ca
-r9460 67dfced37f
-r9461 0988bfd2e3
-r9462 52bb1b64db
-r9463 80eb08f5a1
-r9464 7806f3f00f
-r9466 7eadbd48c7
-r9472 3654e5334b
-r9473 fdb2a89495
-r9483 8a193daf23
-r9486 a0f6d27d54
-r9487 4b8520e5ef
-r9489 cb3adcfb6d
-r9490 1e5fd9b56a
-r9491 af8af21c94
-r9492 e794df0beb
-r9493 593deb5d50
-r9494 64c81890a5
-r9495 0c657593da
-r9500 a64a94ca52
-r9502 5916f8929a
-r9503 9551ed8f58
-r9504 8de712dd91
-r9506 8f3171f840
-r9507 3bb7dbfe4d
-r9509 8de6f6fe13
-r9510 0d16edd1ce
-r9514 f1e0492155
-r9515 60231d47f3
-r9516 f50f40c2df
-r9518 95c592e4b7
-r9519 39eba8638c
-r9520 d26f9ec822
-r9522 e74806422b
-r9525 dd230b0b1f
-r9526 635b88be42
-r9529 eabd3ebf0c
-r9530 5384cea22b
-r9533 44348b4eb4
-r9534 b360756b02
-r9535 c633e28b40
-r9536 7ed033caf3
-r9539 2820d1ff44
-r9540 8c2a69d14e
-r9541 8c84ecf771
-r9542 9e3b5c094b
-r9543 bfea9f20d2
-r9544 0ca21a0653
-r9545 02a45e20bb
-r9546 a961d3dcd6
-r9547 5b72bfcf91
-r9548 ce6fd61e24
-r9549 344ba095e1
-r9550 d0193043d9
-r9551 fcec4e056e
-r9552 d1042e7f42
-r9553 78d2e50495
-r9554 29da7050a8
-r9557 d4b2af5aaf
-r9558 3f748a40b1
-r9560 735573067a
-r9561 a3d868bf57
-r9562 114bfa60ec
-r9564 96248ae593
-r9565 279cdcb498
-r9566 2f6d0cf0fd
-r9569 dae92a5589
-r9571 7931d3dbaf
-r9573 210fdccbfb
-r9574 114aeb4622
-r9575 6835f1377b
-r9578 f75cbd338f
-r9580 1828ef4310
-r9581 b6df86923f
-r9583 8b51007563
-r9587 181cefa872
-r9588 d1d980fd2b
-r9589 cfb8a3bb3e
-r9603 003f7e2b70
-r9604 f3cf054432
-r9605 6f5749c792
-r9606 e1bfe57368
-r9610 3f41a604a3
-r9611 8190c6b5da
-r9612 8bb851f21e
-r9614 f41ccda10b
-r9615 9453e0350e
-r9616 96376cd154
-r9617 6093bbedc0
-r9618 cf5b53633e
-r9619 4c0d1ef392
-r9620 767bb1b875
-r9621 81d2963d4c
-r9624 0d6d353412
-r9626 d3cc8c2190
-r9628 6b0dcb2052
-r9632 2bd3ff37df
-r9633 01f4bb38e9
-r9635 1c2ab2bf73
-r9636 a27223c2f1
-r9637 aeb2770ea0
-r9638 4aa9c242f1
-r9639 990a28f37c
-r9640 cc4427befb
-r9644 e5a7cc3149
-r9646 509d09ebaa
-r9647 8efcc63042
-r9648 69001ca4f9
-r9649 e1d945a2ed
-r9650 e97fb47f7c
-r9652 d932455a65
-r9654 903fc11979
-r9655 9e27208eae
-r9656 e4282e0148
-r9659 9e58ed4d39
-r9660 cf7c5917c9
-r9661 ec85d6ce0c
-r9662 2836cba04c
-r9664 0e974bb373
-r9669 6c4b4f89c8
-r9670 e3e918acdb
-r9671 9e5f776d68
-r9672 dd7f9edbf1
-r9673 ea260cc63c
-r9677 d429702dc5
-r9678 4cc8ccb5f3
-r9680 634c658057
-r9681 18e6056e06
-r9682 635a7663d7
-r9684 76d0d7ad84
-r9685 8acb41bd0a
-r9687 cfe333853f
-r9690 016ff2d134
-r9692 c9f419ea7c
-r9703 634195f784
-r9716 e6fe93e5b4
-r9718 d915a97c87
-r9719 6d62e86ec4
-r9720 453fdea8ba
-r9721 a8835495d4
-r9722 251f5ce1a6
-r9723 1cbef2171c
-r9724 0ef0f40ae3
-r9725 b7b7d30add
-r9726 57dd329199
-r9727 f8a6425c9c
-r9728 ea6777a4ea
-r9729 3020baca77
-r9730 dd50828fda
-r9732 d169735abb
-r9733 11bcf8ef29
-r9734 10f7cd80e3
-r9735 44d630b0ce
-r9737 803488f3e2
-r9740 273be26c40
-r9741 8c752c3af8
-r9753 3178d341be
-r9786 d684e5c071
-r9788 5833fcd8c7
-r9789 ebdcd61b65
-r9790 2937f4ebca
-r9791 0e14716756
-r9792 fba3480e73
-r9795 8c38668c95
-r9798 c1822e42d2
-r9799 434d460454
-r9800 d3d12d547f
-r9802 cf5d275c67
-r9803 2f4c6a2eb8
-r9804 4a64ac9c7b
-r9807 2aee8120ee
-r9817 e3099c24bd
-r9818 9e9adeedf0
-r9819 eb0969baed
-r9820 607c9b39ae
-r9821 97e6e4eb27
-r9822 bf075cd7bd
-r9823 0ecbad689c
-r9824 cc77b573c3
-r9825 f6f011d167
-r9826 32e3f2cafb
-r9827 e566c7126c
-r9830 485a79aa79
-r9833 a116937649
-r9835 47fd02fe68
-r9836 d69bbfb031
-r9837 8a7e78ded3
-r9838 0d9b416b66
-r9839 919caa4646
-r9845 1a605eefa6
-r9848 039e982182
-r9849 29f933b60a
-r9850 df3c09479e
-r9856 6a440b960c
-r9857 9edda0088d
-r9858 07c368dcdf
-r9859 8c1bbafee4
-r9860 7cc5c06947
-r9861 ffa9da234d
-r9866 828377d9c0
-r9870 3eae42f4cc
-r9874 e92807e312
-r9875 4077f04935
-r9876 100951d187
-r9877 39d6b1f81e
-r9878 50ce776c18
-r9879 611f454168
-r9880 fd8dff6dd8
-r9881 15fc37931a
-r9882 195dc6ba17
-r9883 7482239527
-r9884 9304e2a7a6
-r9886 912077c5f8
-r9888 2f4f3d3db7
-r9889 b277d15d25
-r9892 89e9d67df8
-r9896 f54efe4dc3
-r9897 56f672fec1
-r9899 a27f9a3b43
-r9900 f1c170f25f
-r9907 658bc3c447
-r9908 31365c2ab0
-r9910 e8df51ba07
-r9912 108db60672
-r9913 e3b4286533
-r9914 852ff5c25c
-r9915 15d4afe9eb
-r9916 29162dae26
-r9917 60b6ba084f
-r9919 9be1288dec
-r9925 67cf4f5e32
-r9926 f045549b48
-r9927 17f1716229
-r9928 b20668b85a
-r9934 7adcd11916
-r9936 152563b963
-r9937 408c6fe6c5
-r9939 04cbd87417
-r9940 cc20f5fbb5
-r9941 176e869db3
-r9942 107e2e6a5b
-r9944 3c8bde9170
-r9945 242afcdafd
-r9946 9674b0e81d
-r9951 c470f8cca0
-r9953 110a1d0cde
-r9954 f2ccc14292
-r9955 37dd5e78a7
-r9956 c96ed0ccb8
-r9957 38522bbe95
-r9958 d7da5b7e4f
-r9959 258591edca
-r9960 d7dc0ad355
-r9962 94e3a13f24
-r9965 b3a20024cb
-r9967 ed30031b5c
-r9969 41fefebc73
-r9973 78ac90b85a
-r9974 bd426ab6f9
-r9980 e5b3a8a6b4
-r9981
-r9982 979180ca5f
-r9990 0af30e1b77
-r9996 d1cc9d42c9
-r9997 142560739a
-r9999 100b76d0f5
-r10002 5c8c46664d
-r10005 6e23c62953
-r10016 0e94771489
-r10017 77ca805c39
-r10020 8799272ad2
-r10021 5585e3de50
-r10028 6c26499a9e
-r10030 1614f42a20
-r10031 2a27ffb80e
-r10032 d710f4e615
-r10033 969f759310
-r10035 ce7fe41d5f
-r10036 68508bdd74
-r10037 0647a263be
-r10038 7b006dc22e
-r10039 f1e1fcc733
-r10041 53c115ff4c
-r10044 fabe192ccb
-r10048 603ef144ed
-r10058 c71d5e24e6
-r10059 4362112a7e
-r10060 1d856cb047
-r10061 5db82b1e48
-r10070 45bcd02f6b
-r10071 199cec961a
-r10079 3e829735e9
-r10082 56483c663b
-r10083 5c7809eab4
-r10085 cb7f66a22c
-r10086 914932babf
-r10087 316228912b
-r10088
-r10089 b4a6ccf033
-r10091 fca1d7499a
-r10092 c90bd2b598
-r10095 790842fe30
-r10097 b31ceb487d
-r10101 f55b965036
-r10103 b94b6f9af6
-r10104 853b9424e5
-r10105 02e108bcf2
-r10106 7be3105727
-r10112 016811518a
-r10113 8c8bc695b7
-r10114 9f926a9e1e
-r10116 e30503f100
-r10117 8cd3a8fcd5
-r10119 afbcca7ccf
-r10121 5b971182c0
-r10122 f14c3081b4
-r10123 3faf31102b
-r10128 5a435856c7
-r10131 02488b6797
-r10133 54f0202e29
-r10134 0b433a78b4
-r10136 79e3814ced
-r10137 e0dde41aec
-r10142 28f747a2c1
-r10145 08373d4e92
-r10147 a2fced5b2c
-r10149 e37a942060
-r10150 27c0faf35a
-r10151 a13f7c0a01
-r10152 2867ff421b
-r10154 3ab5889983
-r10158 f341b97e0b
-r10159 e7c9deb053
-r10161 48d8a9ffdb
-r10167 32176ac4d3
-r10168 614ebd7eea
-r10169 327f88d168
-r10172 12a3b4c5ff
-r10175 2357b792b4
-r10177 83d75b3bdb
-r10178 e63cc07f6d
-r10181 a1c8763976
-r10184 61b2debaa0
-r10186 d3d697a9c5
-r10187 cac2dae195
-r10188 a5abaf7350
-r10189 df922513e5
-r10192 e46e66a019
-r10193 c5455747a9
-r10194 3a352874f5
-r10200 6fab83741b
-r10201 c09dd61567
-r10202 0d03cad115
-r10203 2c11ab6c75
-r10205 3f05775fad
-r10206 9529a25ac7
-r10210 2d80ade773
-r10213 93119cb1e7
-r10216 69a8cebb64
-r10218 9c97b8998b
-r10221 70e2162afe
-r10222 4ba667134f
-r10223 b0d5f49209
-r10225 198906fb11
-r10231 687e65fb3c
-r10236 e69db0d97f
-r10237 76ed03005d
-r10238 e46fafa41e
-r10239 a41182e5fd
-r10241 5303be8340
-r10242 3269ad2aff
-r10248 acacbf69ba
-r10253 a0476f0882
-r10254 b213b89017
-r10258 60d600e1a1
-r10259 8514f85695
-r10260 f7fd780877
-r10261 1693661295
-r10264 fe174ed6ed
-r10265 3e35bb3888
-r10268 0790935d10
-r10270 c054287dd8
-r10271 f7567ab635
-r10292 ab63846918
-r10295 87db2fe784
-r10297 e1d57aae22
-r10307 439588db95
-r10310 661c602630
-r10311 d8448a3b19
-r10313 31af03b80e
-r10316 c0ab376dd8
-r10322 bc89afad4f
-r10323 0eb1877191
-r10324 f947c1f55f
-r10329 2bca03b1f5
-r10334 a1e615c925
-r10338 6e53e14f4d
-r10339 0ad5e129f3
-r10340 e8540b5d78
-r10342 611228e4e8
-r10345 8a799ca985
-r10357 16bbef1243
-r10358 30b12a8240
-r10359 53dedee225
-r10362 73d2dd4ed4
-r10363 5b99970b27
-r10364 e3cba876b8
-r10365 6d93465512
-r10366 3d4d7ce3ef
-r10367 5de3ead55f
-r10369 00a38096af
-r10370 5015b73da1
-r10387 bf280fbf45
-r10388 3ee224f431
-r10390 cb08c06766
-r10391 2b00fe2592
-r10394 50bcf69e3f
-r10396 a600ff64fb
-r10397 a694dd57cc
-r10401 bce0953662
-r10404 33098727a1
-r10405 d848220eca
-r10407 df63d8e2f8
-r10411 3c1e6d6ce3
-r10417 9715d09e80
-r10420 699c6045ff
-r10436 1052ad2f1e
-r10437 6a2134b1b0
-r10439 8e890c848f
-r10440 c61121a813
-r10441 0c96403c27
-r10442 f70a92677c
-r10443 8d3c44cfb9
-r10448 06e94608cd
-r10449 2dcc3776f9
-r10455 0196b0e057
-r10461 800ce668ac
-r10462 18bf680266
-r10463 058227a666
-r10465 4c5b8cd11c
-r10468 44678c37b1
-r10469 05db77de0d
-r10475 f0fb641bf6
-r10491 f0a0e0cbe6
-r10492 b809bf2730
-r10495 e06381565d
-r10496 156137e600
-r10497 16a3288cce
-r10498 96fd088973
-r10499 2464205e53
-r10502 22fa993389
-r10503 b7cd34eda4
-r10504 98f2f761c7
-r10512 7afac73a71
-r10513 9347b21b29
-r10514 ebde4dd2e1
-r10515 4827f6b33f
-r10516 48eef96556
-r10517 78e8d1aef2
-r10518 5752dd02e2
-r10519 5fc1ae9658
-r10521
-r10522
-r10523
-r10525 c5ebdc8ee5
-r10531 735025859b
-r10532 e0e0326182
-r10533 e2ec34436e
-r10534 d27455c099
-r10537 1ce961f61e
-r10538 831cb380f1
-r10541 dae0f5a9ef
-r10547 ed847eaf75
-r10548 31a6f4e932
-r10555 a4d94d427a
-r10556 8062384325
-r10557 43185f20f4
-r10558 bccb84e1e4
-r10559 7ace623b84
-r10560 eabe0b477d
-r10561 1ab4fbc3b9
-r10565 b592e914f2
-r10567 207d07dae7
-r10572 3b317f928b
-r10573 c1d1fec365
-r10574 b739c4a2ec
-r10575 208678a0c1
-r10576 4b37b5a01c
-r10577 098db0fd0b
-r10579 b1a3187949
-r10580 8eafa3496a
-r10583 7e5c5cdec0
-r10584 ce525b28b0
-r10585 8d4f8da5c9
-r10586 571734806b
-r10587 6cf170624d
-r10588 31458cbaed
-r10590 9cfe96ba63
-r10591 4d8b3694b3
-r10592 3bf0245b79
-r10595 43933f0a88
-r10604 6948de6a3d
-r10606 0769f64764
-r10607 db913d614d
-r10608 8e54a0f8c7
-r10609 7f3c7c3924
-r10625 51d9edec14
-r10635 7674f974c3
-r10636 b5b3ce4df6
-r10639 289fd3d730
-r10642 e1c732db44
-r10643 10a651a13c
-r10644 f96b6beefc
-r10648 9f27eacd5c
-r10649 4ae344ed1c
-r10650 1f2a73f36b
-r10652 c5861d8243
-r10655 1f2b7055e4
-r10657 10cbf9df8d
-r10658 88a5144bb6
-r10659 e732589d1d
-r10660 28d40d21d0
-r10661
-r10663 ba3e6db5b8
-r10665 9c90fcb0a5
-r10666 01191c193f
-r10667 ef8581a8f1
-r10669 34856ebaec
-r10670 5bb26aa18d
-r10671 b519e9c792
-r10672 837c8180bd
-r10673 5d449bfbc1
-r10675 eecb5e5c4c
-r10677 ca330cfd2f
-r10680 0ddd974516
-r10681 9ea852e2a5
-r10682 6da6345af2
-r10683 a4bc6dfce1
-r10686 62cb8572fa
-r10688 d08a0445c1
-r10689 3d9d369b71
-r10696 24eb581d80
-r10697 f0cde59118
-r10701 6f84d4088e
-r10703 c0ace80be3
-r10705 17227e1b2e
-r10708
-r10710 2383a5b941
-r10711 44a06ff6ab
-r10712 02550b2be3
-r10713 b66389b2f2
-r10714 9a17c7fb08
-r10715 7f0f5d6586
-r10716 cac4c47b3a
-r10719 14c88ba747
-r10722 dd8c18716a
-r10724 c744cf80a6
-r10725 755fb899e3
-r10726 b1c47f7bfa
-r10727 8625a87820
-r10729 46a32e94ff
-r10730 a7da970fa8
-r10731 2b00a2580c
-r10732 d3529d9a6e
-r10733 5298d7cde0
-r10736 b92ecfcbd0
-r10737 ea0c3a7ce9
-r10738 81cc9a834c
-r10739 e43c7bef06
-r10740 2ef5d4c6d8
-r10741 d934e21d46
-r10742 4efd6eb726
-r10743 43b3b98924
-r10744 807b7a27ed
-r10746 5b834e801c
-r10748 28edfc1109
-r10751 a87d9a20e0
-r10752 2f4064efbe
-r10753 7b2bdb4e75
-r10754 ed8f3f0b9b
-r10755 5cc62b4e5c
-r10758 8efd925c73
-r10759 ddaba1cd98
-r10760 2e68f5404a
-r10761 5daae64bc6
-r10762 b33aca6a2f
-r10763 3fb252a904
-r10764 c98ed47ebb
-r10765 af87cfc074
-r10767
-r10768 30cac1fb06
-r10769 444b8a7d2e
-r10770 27176e165d
-r10771 78c3aae673
-r10772 9b21354635
-r10773 d6969c4b5d
-r10774 5c8a5ba86a
-r10775 96ac0066d7
-r10777 821fbc5a87
-r10778 223060bfa9
-r10780 6efa3eee11
-r10781 b0c55e3bf3
-r10782 e91bb354f4
-r10783 97f23516de
-r10784 a9cc141f19
-r10786 dd225e9a25
-r10787 90c68e1914
-r10788 bd7866c794
-r10790 b8fc3bed09
-r10792 b1936ece49
-r10793 50c0a1ee2f
-r10794 e4c282d9ef
-r10795 1f5dfbd7a6
-r10796 5e8888920f
-r10797 532c0efeb8
-r10799 e0eb99500c
-r10800 55dfd6ad55
-r10801 24cbbd1ede
-r10802 fef68d7c3f
-r10803 2647716232
-r10804 437535a2de
-r10805 4707025099
-r10806 9577df98ab
-r10807 9015f58e12
-r10808 2c2a0807ed
-r10809 fba880aba9
-r10810 7039753da9
-r10811 0484e57e04
-r10812 5c21feb3a0
-r10813 a11f6935e0
-r10814
-r10815 26f25f8d88
-r10818
-r10819 e9bd1a35e7
-r10820 58c64abc66
-r10824 04034834f5
-r10828 789bf97c72
-r10829 218c5a8223
-r10832 775cd7b80e
-r10835 b7e87847c7
-r10838 99630e2937
-r10846 8d2349581f
-r10862 b1d8840877
-r10865 21c8ba1830
-r10868 a7f0266287
-r10876 a08e8f2d88
-r10878 cc8d4298d7
-r10880 f9454ad5ce
-r10885 12a2b3b7eb
-r10887 7f27845c6d
-r10888 9227a0f86a
-r10890 10aa201700
-r10891 750e57765b
-r10892 03f09f244e
-r10893 7f42043da3
-r10894 c90d5a4256
-r10895 838b1dea8d
-r10896 cfffbfed68
-r10897 4c272b0d3e
-r10898 2aa6c12894
-r10899 cf626598ea
-r10901 86e18d84dc
-r10902 28a1d779aa
-r10903 1cc06bb697
-r10904 2043c0ab21
-r10905 6041bbcabc
-r10906 cc7c6431d5
-r10907 99792adaf6
-r10909 034bc4be40
-r10910 427c20e5e0
-r10911 d6369095cf
-r10913 dbce4463e8
-r10914 d0ac19940d
-r10915 d977e2f2fa
-r10916 61da956077
-r10918 58bbb60b30
-r10919 c6c0b840e0
-r10920 22cd83b16b
-r10921 8feb3e75bc
-r10922 b5adf7938c
-r10923 f48b473795
-r10924 c57c0d9c77
-r10925 c74fb39638
-r10927 879b7baeb0
-r10940 41b90d5719
-r10944 d1c4f9e32b
-r10946 7cf6a80044
-r10949 97caf77483
-r10951 b927a915b0
-r10953 3c13a0fe5f
-r10956 93d985632f
-r10959 e70118f238
-r10960 c126ff44ca
-r10962 e5813a6b34
-r10963 5be9ee0305
-r10965 9a0804557c
-r10966 917449a634
-r10967 4f41a69e99
-r10968 c1e09aa0b3
-r10971 86eaf4945b
-r10975 fbccd6a318
-r10977 96a817da9a
-r10979 058d18cdf1
-r10980 cc89987935
-r10981 dfa271755f
-r10982 a39d99f668
-r10987 fb248a8ec1
-r10989 ae0a3254e1
-r10990 48c9a76728
-r10994 b40e3b35ce
-r10995 fb649f4f34
-r10996 306a954005
-r10998 f6c3ded42b
-r11010 59ab197fef
-r11012 95d627ef59
-r11013 fbb5dde4e9
-r11014 328e57f430
-r11020 f54b2bded5
-r11023 bb7d698d97
-r11025 1e07cd1829
-r11026 e20a23f7e4
-r11030 ebc5e580fa
-r11031 690f288e45
-r11032 6d23621bb9
-r11033 d893f45b6a
-r11034 312aeb8639
-r11035 8de5ae2b13
-r11037 9450c16f19
-r11038 47c5f0f3ec
-r11040 8b952a85bb
-r11042 aa5655211c
-r11047 578b99d3a6
-r11048 d83897f0af
-r11052 25ac436d71
-r11054 bbe0f5e228
-r11055 c4181de5eb
-r11056 8d6dced8a0
-r11058 28972eb1cb
-r11060 cf9f9a663f
-r11062 58f003be77
-r11063 dfb9046387
-r11064 73b2db5db4
-r11067 1f65685c96
-r11071 31cb1f9613
-r11072 6a33d831d2
-r11073 6014888a9d
-r11074 c2f7d03d50
-r11075 82d419c00c
-r11076 00736e1092
-r11079 4c1f8c3810
-r11081 0e8ad86aa1
-r11082 28cd5c6e5e
-r11083 b0e9768e07
-r11084 b367d6e32d
-r11085 e2e090d4e2
-r11086 0bdaec07d8
-r11092 9ddd12335e
-r11093 d8e5596950
-r11095 a43e6b1242
-r11096 72b474d620
-r11098 77863427ae
-r11100 ef2279df3d
-r11101 c4ad383220
-r11103 5e9a42a481
-r11105 6c4a4d5de8
-r11110 e8447205a8
-r11111 6df0408f3c
-r11112 d7ebd599b9
-r11124 1cc0156eb6
-r11125 34289c430a
-r11126 0be9c5a52c
-r11127 9c91674927
-r11132 22a8618b48
-r11133 fe55fa336b
-r11134 02332d4a07
-r11135 9d76f980c5
-r11136 2cab50f0f0
-r11140 b9cfe254ac
-r11141 01e1d5902b
-r11142 d13cbc73c3
-r11787 c4df28255a
-r11788 02a1f9afa9
-r11789 9ff91b5986
-r11792 e9002c674d
-r11793 0ceb9c1c8e
-r11794 977d703857
-r11796 fcbd0bfa8b
-r11798 f6eb33a216
-r11804 8813209807
-r11808 c5b9e36ca3
-r11809 377310315a
-r11810 eeeb68228f
-r11811 e639f232ec
-r11819 f800661f1d
-r11820 4dc7be4b10
-r11821 e9dcc56639
-r11826 cd0434d530
-r11830 fcc4d182dd
-r11831 6ea7d123d3
-r11832 c8ce38cb14
-r11833 0d18ad8861
-r11835 6018a932ce
-r11838 8397c7b73c
-r11839 d6be8533ee
-r11840 c2a6b222c1
-r11841 64bd32b141
-r11842 dcabbf90df
-r11843 57a569ba3c
-r11845 e45535592a
-r11846 fa4aaf9bcb
-r11847 6712cfd277
-r11854 31d539218a
-r11855 ca6b2dcd81
-r11856 661a599ed6
-r11857 546d98a2ba
-r11858 430e9f4c47
-r11859 6e961f3b74
-r11860 b0e5eeb119
-r11861 2dcbfa7d08
-r11863 1cc6a768e0
-r11864 e78dcdc4c5
-r11869 aac8bba0c2
-r11875 96d7374b9b
-r11876 2fb330d244
-r11878 2d6d68fb6d
-r11889 1f166dfd3a
-r11891 5bc19dd5f6
-r11892 ae8da76c01
-r11893 724e68bab0
-r11894 450979f775
-r11895 609af01c6e
-r11898 ecca1a73d8
-r11899 26400b7b32
-r11900 a31e57a3e7
-r11901 e92dd1b674
-r11909 e060c61b61
-r11911 e51207992f
-r11924 34ec899267
-r11926 cea527a9dc
-r11927 ee41bd58d4
-r11928 f324c3aa07
-r11930 83d0d76b12
-r11931 cfb62d0b27
-r11934 458adadcaf
-r11935 6739cacb9d
-r11936 d1aed7012a
-r11938 90fed9c484
-r11939 c66f4b8162
-r11944 278f89bf2f
-r11950 540c308ca6
-r11951 e182625e51
-r11954 d7b39e3597
-r11955 11c26aa228
-r11960 7d89506e35
-r11961 6ad83dae69
-r11963 8414ebada9
-r11964 d4cc633ec9
-r11965 80d1c7de2a
-r11966 908decebd0
-r11967 d2d5fb166c
-r11968 39fbdc73ae
-r11970 7cf62c8a32
-r11974 b2d9d9096a
-r11979 9578a9df03
-r11980 1cf6fcfbfa
-r11983 a7a87af828
-r11984 835fab5224
-r11985 a31e3c23a1
-r11986 625d525491
-r11987 f1eb98a9ec
-r11989 84bed4cf43
-r11990 5740c65d5f
-r11992 f587ec7c8f
-r11994 3aad376baf
-r11995 0335d0cf63
-r11996 35b2dad1fe
-r11997 067694f36c
-r11998 273405850c
-r11999 54b23b8394
-r12000 989c80bcad
-r12001 63d5f0c247
-r12002 2d28f7fcc3
-r12003 a384720d2c
-r12004 9934c835a7
-r12005 2a52c9f3ab
-r12006 8bde15629b
-r12019 61349a9191
-r12020 fc5d8ffdb0
-r12021 2140a3b04a
-r12022
-r12023 d394b0b1c1
-r12024 1e6f4c280d
-r12026 52759489db
-r12033 a2db8d932a
-r12040 1d8e1b2d22
-r12041 4b7298f02f
-r12042 40c6ed3501
-r12043 d0a8963618
-r12045 e0f606ac4c
-r12047 9128040ab1
-r12048 960ce31287
-r12050 37222ddfae
-r12052 715774d4b2
-r12053 ba3b4ba405
-r12054 225fac5af5
-r12055 6bc98cf8af
-r12056 d675971454
-r12057 41d984037a
-r12059 a6ffdf6992
-r12060 2cae4689eb
-r12061 52ccdc5627
-r12065 2ec348815b
-r12066 4dc5918462
-r12067 46285f4309
-r12068 f16995458c
-r12069 54e04e4085
-r12070 d63942fe1a
-r12071 4ce287ec39
-r12075 7620e2d34b
-r12078 9867746f9a
-r12079 6d5979b714
-r12080 c184cc7096
-r12081 6476819ce3
-r12082 1edd1f1db1
-r12083 7b6fe636f8
-r12086 c378489a95
-r12087 542c248d61
-r12088 627257dfbb
-r12089 09dd9eb7ef
-r12090 177505fcb9
-r12093 d1b12f2a86
-r12094 ff5d9c9afa
-r12095 a4faf44171
-r12096 b0da26356e
-r12097 7329219d88
-r12098 7dfd2d5822
-r12099 08fc901f4c
-r12101 72c1d53647
-r12103 aba747cf8d
-r12105 30f41d643a
-r12111 ed3f1d101d
-r12112 4e18a7e8d4
-r12113 67915c6694
-r12114 ed89b34938
-r12117 b5df8e3517
-r12120 c717018a84
-r12124 8f93b9f009
-r12126 490050f689
-r12127 1b887be0a1
-r12129 40a5b9d61c
-r12136 66eb76d374
-r12138 94220cb34e
-r12139 5081021e56
-r12141 b0745f84a3
-r12142 0b4d9de1dc
-r12146 a1ec75c264
-r12148 b4b91dcb58
-r12151 088d4aef3f
-r12152 eea125fb1d
-r12158 2836a47041
-r12159 97664fd90f
-r12160 ecc878bb26
-r12161 2096c06222
-r12162 674015b30b
-r12164 a8a692413d
-r12169 fed30dbea8
-r12170 665a2748f0
-r12171 d618e1f898
-r12173 8eed99684f
-r12175 81a4d20bf3
-r12176 b0cee5943f
-r12177 510f983351
-r12178 6f5102c26b
-r12182 01292462be
-r12183 1219180c5f
-r12185 5eb0d12474
-r12187 72597908f8
-r12191 e4bc488dea
-r12192 842391cb5c
-r12193 9b5d61596c
-r12194 1287e33524
-r12197 308f93f8ed
-r12198 b75dec4cf4
-r12199 f0da69b725
-r12200 8a42f2f146
-r12203 c7345c8a95
-r12205 288b766d4e
-r12206 af32136a17
-r12207 5fa0bb8d42
-r12208 633354bc2d
-r12209 0cd9d09355
-r12210 16e1b57be1
-r12211 2754c44988
-r12212 7f4894c8ba
-r12213 a694448355
-r12214 ad89e1d2ff
-r12215 6b9c024750
-r12216 1c53987588
-r12217 34732d0895
-r12218 b656480d91
-r12222 d6dd8c3fb0
-r12223 00c12b4d00
-r12224 f974621afd
-r12225 17d7758bba
-r12226 846fec4ed0
-r12227 f581be6a67
-r12228 ab013e7071
-r12229 c08f1700ca
-r12230 40430c44da
-r12231 f2e4362a5a
-r12232 b98eb1d741
-r12233 573b5e2c86
-r12234 32cd1ac7b8
-r12235 ee232043b0
-r12236 a9f599f975
-r12237 2ad1a3c218
-r12238 33ec0ad1d7
-r12239 7aeca0f163
-r12240 787bb041fe
-r12241 03408a6c02
-r12242 819c89544a
-r12244 887f9515f7
-r12246 4e9b6b48a7
-r12247 2e35175f47
-r12249 ede9c3921e
-r12250 d46c58d0f7
-r12251 7ef97b2993
-r12253 b766a0baf3
-r12254 b0b847f1eb
-r12255 9260b90c00
-r12256 c2c019c73d
-r12257 ab51bb3e06
-r12260 01d6a088da
-r12261 212f89bcc6
-r12262 9f8daa47ff
-r12263 302612f334
-r12264 85272be21d
-r12265 2345df9ba2
-r12267 726eff2779
-r12268 802a3e3a8f
-r12269 9f2ea1b342
-r12270 5540988eb4
-r12271 95a9b8dc2e
-r12274 76e2ea8895
-r12275 4358c5019d
-r12276 c5bacffe8d
-r12277 bd02f63597
-r12278 54bdbd7c5a
-r12279 c2cd1c0ece
-r12280 a31348e99a
-r12281 27afc3c269
-r12282 7ccd176538
-r12283 a874f35109
-r12285 080802c84d
-r12286 8b78ce0012
-r12287 6d2449f066
-r12288 c2c439dc6d
-r12291 edacf9f434
-r12292 4428dd2a4e
-r12295 84224545d9
-r12296 ca623645fa
-r12297 d93096ce92
-r12298 255435b4f2
-r12299 76223e85e2
-r12300 eeff0aed80
-r12301 5fe375ba62
-r12304 07833a931f
-r12305 6d9221f765
-r12306 13369d36fa
-r12307 7529035f6d
-r12308 72105be047
-r12309 f6a9176308
-r12310 7e617efa8f
-r12311 fcf17f5bec
-r12312 6bd1cbb28f
-r12313 6d98fcf8ef
-r12314 5c473c90d8
-r12315 8a5b14e856
-r12316 145902b170
-r12317 e48c773647
-r12318 511a3ff39a
-r12319 d8116e7abd
-r12320 a5b37442c3
-r12322 2b7574b14f
-r12323 90eda0dfdb
-r12324 3bac46a9ea
-r12327 7ce9a2d992
-r12328 07d14d9712
-r12329 9f1345730a
-r12330 a840917b32
-r12332 51ff43f811
-r12333
-r12335 379dacdac3
-r12336 51242965f3
-r12337 1d8d942932
-r12338 74f167520e
-r12339 8da5cd2cf0
-r12340 c739e595a3
-r12341 4b121fc9bb
-r12342 d701620429
-r12344 f9c34f8d3b
-r12347 31b6dbf1c5
-r12348 c5c6d4a8ce
-r12349 02189a8d5b
-r12350 3d8003db99
-r12354 14ea3ab51e
-r12355 efb6db4cc9
-r12356 92cb82a6da
-r12357 bf32e7d4a8
-r12358 7c57443945
-r12359 63c0c73ba7
-r12360 e00276d4b1
-r12361 1019c3a8ef
-r12362 368d3a7129
-r12363 5f07516f6a
-r12365 e0fa88b729
-r12367 247ec20681
-r12368 1adb565b6e
-r12370 d33a20f067
-r12371 6b9a5f149a
-r12372 475937a041
-r12373 62d7f4c35a
-r12375 bd9874055f
-r12377 f3c134a70b
-r12378 444991fd00
-r12379 0f1add0d0b
-r12381 c633afd891
-r12382 b37372ea5c
-r12383 a41f6eefc5
-r12384 d5d4f71448
-r12385 1fd4a4b280
-r12386 46b5d81c6b
-r12387 2ec28d164c
-r12390 08a42368c0
-r12393 11f1b34dde
-r12394 2d3a640e0b
-r12395 16d3cf1f8f
-r12396 6348be1535
-r12397 7f39e4a1fd
-r12399 399cfa2a08
-r12400 c2bab2c122
-r12401 0a719124c9
-r12402 551e31ec7d
-r12403 d8504784b8
-r12404 5355f3c732
-r12405 d6f27a8d9c
-r12406 a64786e441
-r12407 81442501d0
-r12409 39b0a1fbf3
-r12410 7f2f04c2f8
-r12411 e2bcca722e
-r12412 e175239fd3
-r12413 fd3697ed00
-r12414 95eaa29b50
-r12415 538e22b80c
-r12416 c89a1811df
-r12417 a21a258fe6
-r12419 a06edbf12a
-r12420 4b973bfb25
-r12421 b1498443ca
-r12422 1da3a45955
-r12423 e517b3b183
-r12424 edff72ec73
-r12428 d73c9b51b8
-r12429 c61bd2d85c
-r12431 0b34dfbcfe
-r12433 7c236d237c
-r12434 e7ea8f8598
-r12439 1c87f4dd46
-r12440 dbcfaeb07e
-r12441 9f95026c8e
-r12443 d3f33a44f8
-r12445 5327a60d20
-r12456 eb21be47d8
-r12473 4574bcbd67
-r12474 d340c57d7e
-r12475 de47e4d7a9
-r12476 53f715896d
-r12477 17ddb5c33c
-r12478 d5dceac54c
-r12479 6b182eb903
-r12480 7de02030ad
-r12481 eadf9387e2
-r12482 e114becbc9
-r12483 a00c8f75f1
-r12484 fe133c86f4
-r12485 a19af644d2
-r12486 d50a009591
-r12487 dc373d09bb
-r12488 972725421c
-r12489 09db2edcd9
-r12490 e822b909c2
-r12491 42f11c0aff
-r12493 d725f4a6d2
-r12494 c9fa2fb215
-r12497 d71a8cd2f7
-r12502 7ff9dec674
-r12506 74b464b1c5
-r12510 2cc1c6799b
-r12511 b9232101bd
-r12514 af7db4f3c5
-r12515 d0655ebe76
-r12516 974e1a2f9e
-r12521 3cebbd7cea
-r12527 0fdee8b11c
-r12528 58b7571f72
-r12529 145c188d55
-r12530 564bc566d3
-r12532 4357e79096
-r12533 2465b7e2aa
-r12534 7d793f6ff5
-r12536 6b573ed92f
-r12540 cbba5153da
-r12546 300caee15c
-r12557 b47ed354cf
-r12558 65d20f0d9d
-r12560 b63f70743f
-r12564 f507e25804
-r12565 53e0d8562a
-r12566 60718f6da0
-r12569 e8844dd919
-r12571 538a43fb6e
-r12574 9e118bbf6a
-r12575 5eadca1408
-r12576 102aadc5f5
-r12578 748a2f87b2
-r12582 4da4d32840
-r12591 62c04ef6b9
-r12592 f69c8e975a
-r12604 f8b2b21050
-r12605 ecbe1cdd17
-r12607 93e7d7fe4d
-r12608 a1b189d8ad
-r12610 082e881d0a
-r12611 2ddb10dfa4
-r12613 649289cb68
-r12616 1e350595d8
-r12619 e313d9651a
-r12620 ea8c405c26
-r12621 d1dcdba7ee
-r12623 ff9592bd51
-r12624 5c301870f6
-r12625 b696185eec
-r12627 83767dc5e2
-r12628 d0310bece6
-r12629 4192a98136
-r12630 73a1346edb
-r12631 e69edec6c7
-r12633 20caac2bac
-r12634 cb77b69a42
-r12635 4976d17863
-r12636 83d4a1b304
-r12639 e731089080
-r12641 1ce5ecc912
-r12646 62cd29a178
-r12649 8d96aea0a2
-r12651 466df8f4b7
-r12669 36a7ca2d54
-r12671 0e32440936
-r12675 7440758377
-r12682 e07c5695f3
-r12686 e032ccba0e
-r12694 6d8a7e7376
-r12699 44c08fe2e4
-r12704 22f1be16fb
-r12705 649de80693
-r12707 25acfe6cc7
-r12708 79cda8f630
-r12711 9d12fe104d
-r12712 b0f070a6aa
-r12713 042cce8cfc
-r12714 71b3f784a3
-r12715 0fd37e790a
-r12716 eba18a359e
-r12717 c61168109e
-r12719 52ab7acfbf
-r12721 840202e705
-r12724 10bd9e9c8e
-r12727 c8f68128c1
-r12728 57a9a56fa9
-r12729 7896c66827
-r12730 658fc638ac
-r12734 3527c51675
-r12737 71ba470de3
-r12738 97946f9d60
-r12740 d32deafeb2
-r12741 7c7ea4b57e
-r12747 26109cdb6b
-r12754 77de72ce86
-r12758 8af1dfade7
-r12760 6ac1007149
-r12762 8d61f90ec5
-r12763 623a1e50fb
-r12764 33770714c3
-r12765 6b630a80aa
-r12766 2e1e65ee5b
-r12767 dfa2cf1c11
-r12769 5a9fbd9d95
-r12771 8d8bbecc08
-r12772 809ffd2c15
-r12773 1f486461f7
-r12774 27261144ee
-r12775 0d022af194
-r12779 1a8874d472
-r12780 1828b005b0
-r12781 d65e422032
-r12784 dca3a04243
-r12785 7bb91bbfbd
-r12786 8ab3c6b56d
-r12787 10bec64595
-r12788 c8740e98dc
-r12789 5960d43f3d
-r12791 259528cdf7
-r12792 92629629ab
-r12793 4d9354ae14
-r12795 24943dad3c
-r12798 98b3d5254f
-r12800 c0983451c5
-r12812 d932b6cb1e
-r12814 aa6cc51acb
-r12815 4fdaad4888
-r12817 1ec3ba2ab4
-r12818 49d86b0f87
-r12827 c9e92bfc89
-r12832 b907c8eb59
-r12843 7b405d5b02
-r12844 302e8dbfca
-r12845 8d1cf73c03
-r12847 cf471e6091
-r12848 385b899a0c
-r12860 c1ce17b264
-r12864 6900f59041
-r12868 d2c1b74f0f
-r12869 d2671e65de
-r12870 9f996ddaf6
-r12872 ee3213739c
-r12874 d0893187a2
-r12875 6b801413fd
-r12876 ab7d775228
-r12877 4c74083c14
-r12878 0b2f65aa6c
-r12879 7fe7bace8a
-r12880 2353ddb22a
-r12881 6eb0e65691
-r12882 78906ce9f9
-r12884 1c1b5e88fb
-r12885 3f9b82c88d
-r12886 a205b6b06e
-r12904 95c231ae31
-r12905 f6d48a08ca
-r12906 712ffcabe5
-r12907 00eed346f2
-r12909 d3b1c7957e
-r12910 6c815e5740
-r12911 87fed8f410
-r12912 151acf12ef
-r12914 18b2e053ae
-r12917 c310233042
-r12920 fffae18775
-r12921 afa0379466
-r12925 a20315a54e
-r12926 de68205eba
-r12927 a272e9b460
-r12928 ff6a4630be
-r12929 ddae8fd220
-r12931 b77116fea1
-r12932 7845ce31b8
-r12933 8df9996c16
-r12934 b7a2b46a73
-r12937 aee3d8d52d
-r12938 b979e14d6e
-r12939 f25732f7d1
-r12940 34f6ea9cab
-r12942 67717605c8
-r12946 648556baef
-r12949 1b41795f51
-r12957 9f847abf34
-r12959 72639626f7
-r12960 a2d610b1d7
-r12966 e4a89c3bd0
-r12971 22aa3cc49b
-r12972 a15a2bed93
-r12973 3e458ce8dd
-r12974 2fef21d33e
-r12975 cb0a5a45a1
-r12976 2f38118b94
-r12977 0b00cb9fc3
-r12978 40884972d9
-r12979 2a22d4156b
-r12980 56fa78c91d
-r12984 96906f755f
-r12985 082a3edc21
-r12986 c373bdc3b8
-r12990 7f37fa01a4
-r12993 08704a195e
-r12994 49592a353d
-r12996 2b040ce0fd
-r12997 d708dde778
-r12999 9d44ea69f8
-r13001 bbcd575ed7
-r13002 ead965a337
-r13003 b8b85aa1c5
-r13006 6761dc14b7
-r13007 41865ed001
-r13009 4f2d5e4808
-r13012 9ce1dd8d50
-r13014 c4181f656d
-r13015 dd8fbb7c36
-r13016 3ef75fa07a
-r13018 d93d566e08
-r13032 f91bc93ad4
-r13034 b10fe799a8
-r13035 ef106dc59c
-r13036 853a0a5433
-r13037 9db671d702
-r13038 8090763f46
-r13039 3a28527889
-r13040 515ab49a70
-r13041 ab093d847c
-r13042 417417ef71
-r13043 07f4b0f821
-r13044 eeb6eb3873
-r13045 43daceac47
-r13046 eadef15613
-r13047 1487307edc
-r13048 57a7a38526
-r13052 ab477e33c3
-r13053 e2565c0356
-r13054 825e4447d6
-r13062 96eb13400a
-r13063 34112093ef
-r13065 05672898a1
-r13068 363a042442
-r13089 c3f4ef6104
-r13098 853e53f117
-r13101 7a8dc411ac
-r13106 476606f848
-r13109 15ffd68390
-r13112 7305b72eb8
-r13113 a49cbca4e9
-r13114 0ff28e0305
-r13115 810a709dd7
-r13116 5a17de87ec
-r13125 333e924d5c
-r13147 74c60ffa67
-r13150 e97eb8f50e
-r13151 f5aa270473
-r13169 c1cb43d928
-r13175 3124ea5658
-r13176 85f19da7d2
-r13177 9e8c022640
-r13180 bff42682bc
-r13182 b14c210bab
-r13186 3a4750825e
-r13189 b9d874ba4e
-r13191 42b43e8b38
-r13192 b91088da8d
-r13198 99a7957c4f
-r13199 14553bf9fe
-r13200 ff082b58c6
-r13202 db75a1c922
-r13203 64177deffa
-r13205 491d263ce2
-r13206 b2ed8091cf
-r13207 db0c13fdad
-r13208 98d92d4659
-r13214 05b59f2c7d
-r13215 bf83b15cad
-r13220 9feddc6cb4
-r13222 d3b764f220
-r13223 35bd7a8255
-r13224 a49aba6e82
-r13226 08f096df8c
-r13228 01ef5d562c
-r13232 6c52710e56
-r13233 5bd7d8413a
-r13234 9c0994d031
-r13235 17f18b46d5
-r13238 16f241cfe7
-r13239 5438ab13a9
-r13242 6ff4542f8b
-r13243 969384da70
-r13244 768a93028f
-r13245 35c966b024
-r13246 4cd5e4812e
-r13247 bdc8a6a607
-r13249 96f925078f
-r13250 fbd2eae173
-r13253 bd931b3fcf
-r13254 4ca92ff83c
-r13261 7886881b34
-r13262 ac791fa286
-r13266 8fc8fb71ac
-r13268 a7cd73f5f5
-r13274 0903ca6b21
-r13277 fa369bcf65
-r13279 7b61cfa3e4
-r13280 41be228d1a
-r13281 d18ce48ac2
-r13282 ed73e93b10
-r13283 509410ff39
-r13285 3818b76a0d
-r13288 ac55b8a3c3
-r13289 78940081ab
-r13290 e1f5fa089b
-r13291 82c5f83abc
-r13294 d0c65dcd15
-r13295 44b2aab804
-r13296 1c3653233e
-r13298 afbc3fedec
-r13299 60aced6ae6
-r13300 201ee07f10
-r13301 7444097917
-r13303 6590cc3936
-r13304 122ff46948
-r13305 a98fe88f2e
-r13306 e117099d3d
-r13307 07235ebcd3
-r13309 62bf8d67c0
-r13310 48e6aca343
-r13311 a6354053e0
-r13312 dca86389ac
-r13313 b574ca87cc
-r13314 7ae1ce1e8d
-r13315 893b03bebd
-r13316 c5ef189ab9
-r13317 c8fab9ec7d
-r13320 1bdf2c4ebf
-r13321 e32400681a
-r13323 96792348fa
-r13324 062fedaefa
-r13328 a9a877ea24
-r13330 3c14e1a072
-r13331 cbc9b3c3ba
-r13332 aab21c2dc8
-r13334 b6f9e1752c
-r13336 7e4f1a8b53
-r13337 db83d6f46e
-r13338 cad2ace82f
-r13339 8e5450bb09
-r13341 61bfaa4b28
-r13342 79842acc1a
-r13343 2ee9e59b35
-r13344 ccb860372f
-r13345 50a757c947
-r13348 639adcce01
-r13349 83ac2b5669
-r13350 e4d31aed1f
-r13352 090482dae2
-r13355 59a0cce0c0
-r13356 f5c98713de
-r13360 08a4772207
-r13362 1999c1bdc3
-r13363 b7af5e53d1
-r13365 25258b3d6d
-r13366 8c9e9f7b7d
-r13367 dfda38550a
-r13369 b8681839ed
-r13370 924c77e79b
-r13371 db60c0207b
-r13372 8f305d4959
-r13376 5e175852a7
-r13377 0d95261bbc
-r13378 9b2cb3887b
-r13379 060239a436
-r13380 1d4bc5dea5
-r13381 43319c2b2c
-r13382 e1aa90e7f3
-r13383 3c9cf29c59
-r13384 493ab4a848
-r13398 c73986baa5
-r13401 532d7a9f35
-r13403 7f8c296130
-r13404 5d4605b693
-r13405 cde40bd9bd
-r13406 6eacab84a9
-r13407 8647f299b0
-r13408 de4e67acfb
-r13415 db0cba8350
-r13416 c4a1857e8b
-r13418 52ccc329cb
-r13422 cc843b480d
-r13423 c68abba08e
-r13425 1120eaf953
-r13427 387f98cfde
-r13428 8f1bc80367
-r13454 5ecc494306
-r13455 0faae9a228
-r13456 26fb6b5395
-r13460 1360c0b1ac
-r13482 b7a804423f
-r13483 31e30179cb
-r13487 b097e75380
-r13490 da79f1b5fb
-r13491 8ed122db80
-r13495 65e20dbbf9
-r13498 81c78662cb
-r13517 98e9995ddd
-r13518 bd42999939
-r13519 a891b5b274
-r13533 4ddadc9fb8
-r13536 dc6d7a0973
-r13537 9752b4da2a
-r13540 0d5c56f023
-r13553 6459ab6923
-r13577 ed8326a398
-r13580 97b34f3cd1
-r13582
-r13588 e5d6f338de
-r13589 2ed9387915
-r13591 74dc1a8453
-r13592 7d3efa0e19
-r13593 422a46993c
-r13595 999d30eea7
-r13607 8ad43107f5
-r13612 a703d69eab
-r13615 9aaf456f48
-r13616
-r13619 b186613b3e
-r13620 c6f96a7ef3
-r13621 c9658ac006
-r13622 a210986884
-r13623 5fbcd57e96
-r13624 4e45e9e07b
-r13628 9a9ab66963
-r13629 cc4c5f64d1
-r13630 c84f9f9226
-r13631 6d544011e9
-r13632 74168e4184
-r13633 fc9a9f9334
-r13634 58283d2f54
-r13635 eb1e54b1e8
-r13636 3aa48de96a
-r13638 319dda9041
-r13639 50f39cd160
-r13640 c81cb36f85
-r13641 a6d2b80b53
-r13646 a86b9aedb9
-r13648 0fd867b5ed
-r13655 73d091062d
-r13656 6d37bf097d
-r13657 a99670b344
-r13662 e054b90b63
-r13664 7da478591f
-r13667 5327f1188a
-r13668 f6cd01e01f
-r13669 f95bfb97f4
-r13671 80f280c545
-r13674 5ca37b791e
-r13675 a315748a73
-r13676 13148cc2ae
-r13677 064ff0081d
-r13678 5b273b4327
-r13679 779aec9f38
-r13684 4c05b14a71
-r13688 7ceeb1e609
-r13689 dda8f67ce0
-r13694 a85358f76a
-r13695 d27d64aa30
-r13699 1a87dcf96b
-r13700 d9f2401cdb
-r13701 abbcc46aca
-r13702 b9461d35c4
-r13703 36a6313540
-r13705 5d32ba1ca5
-r13706
-r13707 078b598234
-r13709 13fc5575c5
-r13713
-r13716 0f73d8ae86
-r13718 e5ca1a3906
-r13719 76c06b4661
-r13720 3cad8b66e8
-r13721 b9af696f62
-r13722 18d3961cbe
-r13723 06b9a2a9c8
-r13724 4eb322b878
-r13726 2bd1b6a760
-r13727 f21693b632
-r13728 5747a2d98a
-r13730 fa1837c8f7
-r13731 bf23fbb746
-r13733 799f20c50c
-r13735 52d136c332
-r13737 e56b12033d
-r13738 456729b845
-r13739 7e1a139a35
-r13740 f614f2eb68
-r13741 3267a516f9
-r13742 0cbafac8af
-r13743 6c0a1ca198
-r13744
-r13745 255766e149
-r13746 cb5425e58c
-r13747 fdcae0b7eb
-r13749 07e22566c1
-r13750 d890aa1a5c
-r13751 ba2bb0f732
-r13752 94a67b3673
-r13753 e5237247c9
-r13754 966d503017
-r13755 fdd9bd04ed
-r13756 9c723bc385
-r13760 e8558ed48a
-r13762 3e1f51aad2
-r13763 cddc4c3cf5
-r13764 51e784b215
-r13765 a17c545086
-r13766 dfb7134aec
-r13767 b3f0e4bf9f
-r13768 0580641b2e
-r13769 a478609e1b
-r13770 687e21d160
-r13773 cb1daed658
-r13775 2bb757ae59
-r13777 9090138f76
-r13778 e45c740e23
-r13780 602a62d1fb
-r13783 1f6eb71e42
-r13784 a8c4885e88
-r13786 a5692b1f40
-r13787 fe9a3a692e
-r13789 2f56eefee4
-r13790 c3c207c8f1
-r13791 b355de5a08
-r13792 628029724b
-r13794 0dd548a5ea
-r13795 1aa0693bf9
-r13796 ed48d258dc
-r13797 cfa21f44a0
-r13798 fb51361c65
-r13799 23b18671a2
-r13800 185ed95432
-r13801 6f0e4a2001
-r13802 45f7a9228a
-r13803 67176e0d6e
-r13804 8941b3fa60
-r13805 3e249d85e4
-r13806 8d886ca8fb
-r13807 bb99cc66c9
-r13809 2fd65e0fd3
-r13813 322c980230
-r13816 c4cd5137d2
-r13817 ca0ffaa0ee
-r13818 2113259af4
-r13819 4c3fd9db2a
-r13820 fc09487480
-r13821 9d7b414f6c
-r13822 f913d79677
-r13826 0799efb893
-r13827 d855e45442
-r13828 ca64494053
-r13834 345d649bb2
-r13835 1bb3f81b2e
-r13836 1dda54121e
-r13837 817317824a
-r13838 eb71465d1d
-r13839 7bee443fb8
-r13841 62c8424646
-r13842 fb77e16411
-r13853 3ab4a7b749
-r13854 fcc91d2f8d
-r13855 856ffa7572
-r13856 222998874f
-r13858 1e00b1bd3b
-r13860 2e9f2110cc
-r13861 123760edeb
-r13862 3272a4bfb3
-r13863 1bb174dd34
-r13866 d45f68252a
-r13870 17688db317
-r13871 d8e9f6cd93
-r13873 5295a1a8ca
-r13876 83641e762f
-r13878 4ce201a6f4
-r13879 d02988125b
-r13881 11297162d1
-r13882 fa2d95497d
-r13884 1f945242de
-r13885 2a1e4cc575
-r13886 644350e3ca
-r13887 87609b4241
-r13888 2388b54ba3
-r13889 c295622baf
-r13890 b7ff333ead
-r13891 e9d163ad64
-r13892 b7470d8225
-r13893 864c5a385a
-r13894 a09af55ae3
-r13895 120253e251
-r13896 09f0838d07
-r13898 df55a8175a
-r13899 1021800b39
-r13900 411793e1ba
-r13901 02c5a32843
-r13902 51e901a8c3
-r13905 9b379d01bf
-r13906 11d8e2c487
-r13907 5ffe50c3df
-r13908 0c453c1a3a
-r13909 f3e42a50ab
-r13911 0eae959935
-r13912 984c3fb306
-r13913 b3d232dbbe
-r13914 481741edaa
-r13917 264b9c05a2
-r13930 87e7a42076
-r13932 baa83f11ee
-r13933 f45ea36183
-r13934 183c469b21
-r13936 a176556bea
-r13939 d3a71dbd88
-r13940 613ee6e299
-r13942 7f6e39f86e
-r13943 4ba8aa0dfa
-r13947 6b74adde4a
-r13948 8c53284280
-r13949 fb3b62bc0f
-r13950 614a08f31d
-r13951 01e533c0c8
-r13952 a3dcb88cad
-r13955 c9861cd198
-r13962 50af342498
-r13964 433db019ec
-r13965 9481a6f181
-r13966 bdf8585f76
-r13971 928dce3cfa
-r13973 a9ce750946
-r13975 0fb6357fa6
-r13978 8125e64385
-r13981 b08f3e3e9d
-r13982 37eb010197
-r13983 67729af8d5
-r13984 c8fcd5202e
-r13988
-r14001 2ba73ce97c
-r14009 ba31aaae83
-r14010 b206d8933c
-r14012 92f5905cc6
-r14014 1aad4cb651
-r14016 fa3861528d
-r14017 e1ffc05b10
-r14019 3cb61dc106
-r14020 25fd82c6dd
-r14022 787b0264db
-r14024 e086a4440b
-r14027 9289284717
-r14029 42bd578320
-r14030 575f3023b5
-r14031 1b1b7d6515
-r14033 2e91b45194
-r14036 8b0df2f59e
-r14037 c0fd2c90d0
-r14040 5879e8e98b
-r14042 bc940a8471
-r14043 288e240875
-r14051 a3d11d3121
-r14052 1769b68a6d
-r14054 41dc722508
-r14055 b3c3d1a638
-r14056 2e1386f375
-r14057 aafaaef961
-r14059 9c79f8e32d
-r14061 0eb7d42b3a
-r14065 7231cf881a
-r14066 c1f27b70c6
-r14067 8c5352dc3a
-r14071 3a6ce7d18a
-r14073 151cbc5c27
-r14074 dbd98be39e
-r14076 70ea2a549c
-r14079 524405a9b6
-r14080 bb1dd8165a
-r14081 add615a76f
-r14082 e715cdd0c4
-r14083 2e68a9c580
-r14084 3b07bbaa4b
-r14085 d46b616171
-r14086 05096f361b
-r14087 9495c8bcd1
-r14089 573e90041e
-r14090 fb6fcaa6d6
-r14092 8bd9521d8a
-r14093 af87ca7166
-r14094 7e34adcfa1
-r14096 1565699e2d
-r14097 2f0b80463d
-r14102 fb914227c5
-r14103 07c5d167ad
-r14104 ecca8e2e67
-r14105 0c48c80ce9
-r14106 fc8593d4eb
-r14107 2dcea3f029
-r14108 ae85da1eac
-r14110 bb37eb067b
-r14111 9342a6e7c4
-r14113 21221df100
-r14114 a8f9f01d5e
-r14115 c11c657d05
-r14116 cad235ff62
-r14117 dbf12a761a
-r14118 12a0200eae
-r14119 0053d374d6
-r14121 e690f4cc38
-r14122 b4916be877
-r14125 befbc9d2c1
-r14127 2d39db44e2
-r14128 e5029f8266
-r14130 1bfbf4d63c
-r14131 0c6ab69119
-r14133 bcbeab7456
-r14134 e869cd3410
-r14135 cf5f84719b
-r14136 f41ab7c062
-r14137 54df3c451c
-r14140 fe0b578001
-r14141 cf6f492cc7
-r14142 a447f3b97d
-r14143 e2d790348a
-r14144 6b1bf0c0c9
-r14145 e7b7a10fe3
-r14146 6ff45c6dca
-r14147 79740bedb4
-r14149 8c86276228
-r14152 18e3e2ad5b
-r14153 ba065b5e68
-r14154 63f65cfaf2
-r14155 f97742d562
-r14156 1ed83a9ccd
-r14157 3b35b45b6f
-r14158 d650015537
-r14160 8bc588cbbe
-r14161 2110b51b9c
-r14174 ff089cef43
-r14180 d01b65f281
-r14181 8332f80b24
-r14182 03005a71d1
-r14183 95c1e8dacd
-r14184 13731d7f32
-r14185 6213bbc492
-r14189 fc13dfb1f7
-r14190 d97eea1aa1
-r14191 8224431116
-r14192 c399ad282f
-r14204 db7be2b068
-r14206 28b6ccdc83
-r14218 4d9208cfb0
-r14223 d0cfad449e
-r14224 c596fbe6f5
-r14225 50d638aa63
-r14226 941b8cc560
-r14227 faf3c9732d
-r14228 e902d4a048
-r14231 ac08734864
-r14233 dd1a28887d
-r14234 5b6bfd19de
-r14235 6473f2d851
-r14236 ca2cc573ac
-r14237 7fa4bf6084
-r14240 9797470c1c
-r14241 0b67c4eaa0
-r14242 746658d274
-r14243 94339301cf
-r14244 3d62db6fdd
-r14245 6bdf9ef7f1
-r14246 bd4a42d791
-r14247 f1a96095b1
-r14248 adcc39fca8
-r14249 c91f5ac73f
-r14250 f99dfe54c4
-r14251 822c99821c
-r14252 ad49bc9daf
-r14253 b04e01b374
-r14256 0e7908665b
-r14257 7eadd5453d
-r14259 9aacd6ddc4
-r14260 5ab72025a7
-r14262 5a019e4c52
-r14263 a62078efe9
-r14265 84e704d8b9
-r14266 921bc499d0
-r14267 c80f666566
-r14268 23d9e5717e
-r14269 3b8407a9ae
-r14270 1fcc24dd92
-r14271 b41231402d
-r14272 445cb840b9
-r14285 ebd7d295f4
-r14289 f19c2f31b8
-r14291 e97e8daa09
-r14295 bee89ecede
-r14315 f507f0ac4c
-r14316
-r14317 456e209662
-r14318 e5fb1da91a
-r14319 e1e48d78a9
-r14320 2d763549c0
-r14321 e0047ee119
-r14322 2d819d201e
-r14323 36894f5639
-r14324 fb31f764a2
-r14325 060068379f
-r14326 c19b67566e
-r14327 87dd9cb139
-r14328 190093c4ea
-r14329 e8e46b9fe0
-r14341 6131229601
-r14342 d817beea39
-r14343 9ee330b57d
-r14344 55fca86261
-r14346 8295360048
-r14347 83d3f475da
-r14348 2c0a9d6348
-r14349 a311262c67
-r14350 6137ba4276
-r14351 efb71c1e44
-r14354 83ab996aac
-r14357 993a987bd3
-r14358 5e0d16ad0c
-r14360 4b798d9b34
-r14363 e717d05c2e
-r14364 a29fd9c861
-r14365 3e72397413
-r14366 deab63a2db
-r14367 1e01637f89
-r14368 bb1cc87c92
-r14369 da97d90a01
-r14371 328363d628
-r14372 a0eb2af811
-r14374 44c4ab87bd
-r14375 10b30e9d22
-r14378 d0a90c7c4a
-r14379 e0f1c57dcc
-r14380 02c904f51d
-r14381 87c7cde2aa
-r14382 e9aec18ddf
-r14384 f8a14831d8
-r14385 9543096582
-r14389 a480c3afdb
-r14391 06b17eb97f
-r14394 c32ee91e83
-r14396 647c6d8d3c
-r14398 86ddfebfbd
-r14399 1211909cc9
-r14400 c0ce58e5e7
-r14401 c6d7eeb63f
-r14405 acfef3a473
-r14406 babcbb325c
-r14407 df542644b4
-r14408 e76edeb541
-r14409 0b15f0e5fe
-r14410 d5a928e927
-r14411 2f6f349a16
-r14412 cf299d7bbd
-r14415 ea617bd0bb
-r14416 2c36f5cad2
-r14418 8177b1fbfd
-r14419 37a34b327f
-r14420 c58bc06b10
-r14426 4f8a818c72
-r14427 6854959bc2
-r14428 75b4429e15
-r14430 53d25a4ed0
-r14432 1eaa352ec8
-r14433 c0705fc670
-r14435 827c7e32c3
-r14437 8696e223ac
-r14440 3a76532277
-r14443 5d91c77938
-r14444 c5e0179c22
-r14446 266c5326a3
-r14451 ef488e9e39
-r14461 54f611edb3
-r14465 75ea6c9f2a
-r14466 55eb30f54c
-r14467 b59e5237c1
-r14469 cb817b3253
-r14470 e700865476
-r14471 32c6de2b24
-r14472 c181450310
-r14473 6a93c709ad
-r14477 22d46fbded
-r14478 66515781fa
-r14480 2facac90e8
-r14481 a2ee2a5913
-r14482 694b5caf29
-r14483 fd417cfa96
-r14485 1258a12712
-r14486 70ac4996ae
-r14487 fcb2ea2ebd
-r14488 4ec9c8abe1
-r14489 279da87f48
-r14491 d055ff17c3
-r14492 783b6a672d
-r14493 2677581b24
-r14494 b5dae30241
-r14495 8d1aa644f8
-r14496 0cda1dec3f
-r14497 cb9f5470c9
-r14498 b250e5e012
-r14499 0e580e1207
-r14500 9c8e5d206d
-r14502 768d107385
-r14503 f9a68fb01d
-r14504 0b9cefa7e9
-r14505 671bae7caf
-r14506 fa942d0a19
-r14507 bd75cef9c1
-r14508 e5b446654f
-r14509 02975ed50d
-r14513 30610072ac
-r14514 f12696d5d7
-r14515 f64174df68
-r14516 4fa39e5246
-r14517 a0ce35f939
-r14518 c04fa9cd22
-r14519 fbd2b0caac
-r14520 e5fedb8059
-r14521 d235c4d7c1
-r14522 b6f12c0800
-r14523 a197e61bc8
-r14524 5b81033d33
-r14525 db6b85db24
-r14530 09d3a7bb5b
-r14531 48fdb8620a
-r14532 c05a0b7a49
-r14533 ed2dc480b1
-r14534 e657891d8e
-r14535 64dc793f3e
-r14536 5ac5c4c3ce
-r14537 427a2eaad6
-r14538 4951596902
-r14539 8f693de881
-r14540 70c841ac46
-r14541 97f01e6f8e
-r14542 67af71b370
-r14543 34fe33a612
-r14544 9d37cdde42
-r14547 f6c4b03cb2
-r14548 f9e8fbe0af
-r14549 3884f6e1ce
-r14550 b267019640
-r14551 7975b2be09
-r14552 46669b8f04
-r14553 e8f9c64093
-r14554 93ab0ec361
-r14555 89274fde0f
-r14556 9a15040953
-r14557 cb9c4a1c3a
-r14558 a5958d5bb5
-r14559 82b18210e3
-r14560 233e7106b1
-r14561 17d05259cd
-r14564 d85738f9e3
-r14566 ed01acd971
-r14569 07b35f671e
-r14571
-r14574 9346877092
-r14576 84d2a61972
-r14593 2d27f601d1
-r14596 4688cf9ac2
-r14621 7d36c43034
-r14622 3fd2c50ffd
-r14623 f8d488f098
-r14624 d94507e039
-r14625 5df2f76bb8
-r14627 0b89f667d2
-r14630 2fa3294cd9
-r14632 551db35802
-r14633 3f2bba7a05
-r14635 890a7c5095
-r14637 6fe5b44d31
-r14638 88a96b4ff3
-r14639 f4ab1e5dfa
-r14642 f5321be1aa
-r14643 4d215df276
-r14646 df1c1931cf
-r14650 c0090ac04b
-r14651 b0a07f7860
-r14652 887d021102
-r14653 1ce782ce2f
-r14658 9b98538679
-r14660 c89a410866
-r14666 68caee2e41
-r14668 374b34db53
-r14669 92ec9e276b
-r14671 51721cc3a4
-r14674 1d2570c5d7
-r14675 e10538e201
-r14676 55bc1d9fe6
-r14678 17e7531c14
-r14679 d96ec43600
-r14682 ad36c66258
-r14684 e9c8a59b63
-r14685 52f711e282
-r14686 d6046cea4b
-r14687 414ab99028
-r14688 2df4b46fb7
-r14689 d927ac6be7
-r14690 7086e9a963
-r14691 07567a3ff9
-r14697 8ebd73e6d7
-r14701 7d3d498225
-r14702 258c55afa7
-r14704 1dbb53f9b6
-r14706 6b6afed012
-r14709 bc99ad9be7
-r14711 324bc18be0
-r14714 5fbb8b6f9a
-r14716 c82c0adf09
-r14722 baad2fbd4e
-r14727 e744a80417
-r14728 d17ec3325a
-r14729 d814e5047d
-r14731 9c55c50d4b
-r14733 f18b805841
-r14734 1e277487f5
-r14740 1e5d8760f6
-r14741 dbf80520e3
-r14754 8394637280
-r14756 00b3b4c307
-r14757 6af6ce1130
-r14758 c3b7c00d1e
-r14759 7bae49fccc
-r14760 3dffcc27a4
-r14761 153a393c5b
-r14762 01e872f8c8
-r14763 39f2357f9c
-r14765 eb6911e3aa
-r14768 b19f300a28
-r14770 fbe6aa9fc7
-r14772 9a78b52ba3
-r14773 d8342f44a7
-r14794 0724552655
-r14796 5ce0d309ab
-r14797 bb90aa425d
-r14799 ffe8d3717b
-r14800 90a862787e
-r14801 142bf7242e
-r14802 5b0e21738a
-r14803 8faf310341
-r14804 dcfbdbfd10
-r14806 c0b21797bd
-r14811 04387ad63b
-r14812 05b846b94d
-r14815 1e54e8baf5
-r14818 633ceeda07
-r14820 1ecbd65b8c
-r14824 8e359872e4
-r14826 3009b2c80f
-r14830 1a9186d389
-r14832 1ecd751ef7
-r14835 006394362f
-r14837 9af5aa94d3
-r14838 7bb24097c9
-r14839 f8085a2e65
-r14840 1a0b3a2afe
-r14841 e0015e4ede
-r14842 e26f530f57
-r14845 badd123221
-r14846 fdbf828bb3
-r14847 3e1e2078f7
-r14864 e5a1fb508d
-r14866 289869e273
-r14867 570bb834c3
-r14869 374bd7f7b0
-r14870 f862598220
-r14872 78ab4f9e7a
-r14873 5241150491
-r14876 8e2b888a71
-r14877
-r14878
-r14880 0f6f62e503
-r14881 1d4fbeece9
-r14882 8c35b8f863
-r14884 76c76b28f9
-r14886 6b515dd6af
-r14888 f759e27007
-r14891 4563bc53c6
-r14902 72615dc18e
-r14912 06efde1f28
-r14915 37b0a629b6
-r14916 a1c8394f06
-r14917 2d2821504b
-r14918 3e47505f7f
-r14919 733eeaa6ce
-r14925 d3aec2477d
-r14928
-r14934 712077fcbf
-r14939 688cb18a1c
-r14941 8a78b2af60
-r14943 0385e9835d
-r14945 a959e93dbe
-r14946 9a09b884ee
-r14947 b57e67b8a1
-r14949 525aef50a2
-r14950 b7589adec0
-r14952 0234c9d0f4
-r14953 a9a6eeac9c
-r14954 1c95be35ee
-r14956 0f09ba97e7
-r14959 76068fd352
-r14960 774b845a3a
-r14961 bc13181ea1
-r14962 914e09a4a3
-r14963 d864fda9a0
-r14964 53bce94d30
-r14965 faeeb4f264
-r14966 cec6829c1a
-r14972 075630213f
-r14973 4d07c3dac6
-r14975 f02cc551dc
-r14976 fa147c6ad9
-r14979 bfe8a1281e
-r14980 2cd76912cf
-r14982 1be78ed232
-r14985 1be24726a0
-r14990 a73188c76f
-r14997 26641ee26a
-r14998 ea732f0c01
-r14999 938d16abcf
-r15000 7a1fba63c2
-r15001 1f8b79f1b3
-r15002 ad903380ca
-r15004 7c319c48ea
-r15029 76b511c18b
-r15030 0702dce858
-r15031 9b29afd550
-r15042 be2557d32c
-r15043 ffa638e564
-r15045 154a80dda6
-r15053 3e58057fd1
-r15057 ddf531d934
-r15061 69bf02e9eb
-r15067 1b0ebaf617
-r15070 639ce2f29d
-r15071 7b33fcff43
-r15073 9b3c97d984
-r15074 f185beecca
-r15075 f2d0746c8a
-r15080 7340a8f64b
-r15081 da769bad03
-r15085 617eafd6e8
-r15086 f1954d9a35
-r15088 cef268814a
-r15089 99b5d1c647
-r15091 4983ebac4a
-r15092 3f4fe40cc5
-r15097 7a981f4262
-r15098 7466f2ee02
-r15099 880eb7c04b
-r15100 7e9f81fd53
-r15101 3d7e820e9b
-r15102 5f450da638
-r15103 44fd5e7272
-r15104 4686535142
-r15105 f95cde8984
-r15106 7d71e4cf09
-r15112 c1f07338ed
-r15114 3a0b0d40d7
-r15115 17ce6cb275
-r15116 a81ac63831
-r15117 2c7e43ae7a
-r15120 00e18ddfec
-r15132 e72ace00e6
-r15133 f9340a7c06
-r15134 eea19e9670
-r15135 0425a6b3f7
-r15136 7eea3c922d
-r15137 0d31ac9ab9
-r15139 47f35b5879
-r15140 b7efa99768
-r15141 96b8079173
-r15142 e327bbb7bf
-r15162 0bc0b0bbc6
-r15164 ef6460b6e4
-r15165 e2fd411f0a
-r15166 6ec528fcec
-r15167 04185de550
-r15168 2063b4c4fe
-r15169 3eae3a2679
-r15176 100b87f666
-r15178 b1cf78869f
-r15179
-r15180 4cba60178d
-r15181
-r15182 c033e72385
-r15183 dc2ea7ccd5
-r15185 9e7a08fba2
-r15186 ad451f4a55
-r15188 f6056a24c5
-r15190 15c03d4811
-r15191 d7efafa48f
-r15192 6209dbe66e
-r15193 ef715d5f10
-r15194 762476777a
-r15196 115538595e
-r15199 c8882cea3c
-r15200 1b1425c63b
-r15204 bb04dae00b
-r15213 a480d4381e
-r15214 859f7497e1
-r15215 6f638318d6
-r15216 0d82294aa6
-r15218 c03b61cb94
-r15219 da328a26bb
-r15224 b7e13c2338
-r15227 3fefc43327
-r15228 859d2bbba8
-r15229 8de595a5d4
-r15230 97e20b1ff0
-r15235 b6281cd5a7
-r15238 562647a37a
-r15239 5d1a536a04
-r15242 35bb651843
-r15243 e8eb3647f6
-r15244 7569442847
-r15245 ba33786e9b
-r15256 a7f12d2e14
-r15259 fb88e0421c
-r15266 a5ef3d597d
-r15267 8c06a1a545
-r15279 e4e5d2a93d
-r15284 5efe5b8017
-r15285 c5de85e432
-r15286 ba0e0cdbf8
-r15289 3e7f5eaa1f
-r15295 d6b6402e4c
-r15297 abe9ec9859
-r15298 df9ba15338
-r15302 acfc0bf01c
-r15304 02271ecb5e
-r15305 9ba40ca890
-r15307 18da40ae4b
-r15308 f918ad1886
-r15309 113c795595
-r15311 a4baf28d20
-r15313 dbfdf0ec6d
-r15315 943f6dda3b
-r15318 0dabdc7b17
-r15320 2070c4b1ed
-r15322 6178673ae8
-r15323 68f0566419
-r15324 6036fb15c6
-r15325 0cd5bb6de0
-r15327 fb80a94f67
-r15330 0c146c48b8
-r15331 fa99ddba14
-r15332 86d6fb22d0
-r15335 740c36ace1
-r15341 9b17332f11
-r15342 2d6cc7c416
-r15343
-r15345 98596ff0aa
-r15347 d89ea1c9a5
-r15349
-r15355 e6a3566bb7
-r15363 ae7d7d20bd
-r15371 aa2a5f89d0
-r15372 70ead2ee53
-r15374 a735240edd
-r15376 388342464e
-r15377 f8d38356f5
-r15384 d576a53cd2
-r15388 d34d51d220
-r15390 9077de63b9
-r15392 707e55c227
-r15395 72da305329
-r15399 e2b7b044c5
-r15401 85db410e24
-r15404 6ea801d868
-r15405 3a824805c4
-r15406 7f78d46347
-r15407 84f24cad14
-r15411 2ed788315c
-r15412 1324218fd5
-r15413 71d6e44fde
-r15416 57209b7bf0
-r15422 e18907e87f
-r15424 e77f128169
-r15425 a4d47adf0e
-r15426 d8b12acb93
-r15427 b0c36c7a7c
-r15428 24a4298b72
-r15431 a42ff88491
-r15437 57e2d8157c
-r15438 7770830756
-r15440 2e217be7e0
-r15441 a8edcacc4f
-r15446 5ca94175b3
-r15447 fffb8c1031
-r15448 73006bc163
-r15451 de69837219
-r15452 5110fdf070
-r15455 a8552fcc43
-r15457 acfecf5902
-r15458 a911ebb98b
-r15459 f5e1103a0d
-r15463 bb41ff09e1
-r15466 d4115d4898
-r15467 3b18a3f004
-r15473 3f256f905f
-r15478 1f9606f747
-r15486 957bd55c65
-r15490 d9f65f3eb3
-r15497 82fa132d6b
-r15500 bc5ef919c0
-r15502 4f27b3769c
-r15503 546aa324e0
-r15504 3db2a5539b
-r15505 0c98435e63
-r15507 1133f0f05f
-r15508 323fe887df
-r15509 6d07d7a3a9
-r15510 29a41bcff5
-r15511 7b90be1358
-r15512 01a20f46ef
-r15514 f3bfae5a98
-r15517 e85297fc2b
-r15518 64bbcbd82c
-r15519 913cd10193
-r15522 f12e0645ff
-r15523 d374411895
-r15526 79727b4ea3
-r15527 9dc05dc520
-r15532 39f5c5cb28
-r15533 21781be0c9
-r15537 76fd52f306
-r15538 574e9dd010
-r15539 78b4ab415c
-r15543 66a97fea14
-r15544 7ec37d609c
-r15546 45a3c3aeef
-r15549 239bd13d4b
-r15550 06f6a127b7
-r15553 aa3d38d9a0
-r15555 0a49cecf82
-r15558 84806c6a63
-r15566 343b1de18a
-r15568 368dcb0566
-r15569 0a62491a99
-r15570 abcd0ec5e7
-r15573 aeb29ddfbb
-r15579 b894f804ad
-r15580 1157b4042d
-r15581 872c9ba67d
-r15582 92da76f957
-r15583 45cf39b3ee
-r15585 5086f86937
-r15588 0f53a99225
-r15589 eea36e4a51
-r15592 cca42c1c3b
-r15593 fe07aac5bb
-r15594 80f341ff12
-r15596 34572d6e7a
-r15601 2e42f93bac
-r15602 3f9549bd6f
-r15603 c69e0a9b82
-r15604 9117995a53
-r15605 ca6811cfa5
-r15606 19d6af3745
-r15609 eb79ac2f9d
-r15610 d1fb907895
-r15611 c8b3af98b9
-r15612 d492b489b1
-r15613 f89b267340
-r15615 d3b56e4b39
-r15616 8bacd7cf46
-r15617 90200957ca
-r15618 f697441605
-r15619 c925964406
-r15620 bb2c7676f5
-r15621 71fd0c5ed0
-r15622 2513754bd5
-r15624 8b954c346e
-r15625 9638b5c79a
-r15626 f4efeb88f2
-r15627 0c33725df7
-r15628 3c782c8429
-r15629 753e15520a
-r15630 8af4a26ead
-r15631 3635ee89ea
-r15634 f667fb7193
-r15635 d0063db3ea
-r15636 66d53477ca
-r15638 3fbd4f0d78
-r15639 3c2c20740a
-r15640 bf86775038
-r15642 44f801b71b
-r15643 f816f0a6f8
-r15645 078d9446bb
-r15646 2eb46f56d2
-r15649 9cfe5e961e
-r15656 076db04123
-r15657 b4ad97ce2a
-r15658 520647cf0e
-r15659
-r15660 24426432a0
-r15661 2389f12ce6
-r15662 8954759d50
-r15663 9dbfdc9ae1
-r15664 4fbdc7ce71
-r15665 f39f93c473
-r15666 60963bf600
-r15676 bbe9c35375
-r15677 7d2f33a7d2
-r15678 a254fe545f
-r15680 6938beb1d4
-r15681 82543fe499
-r15682 8b6a34df2d
-r15683 8b06724757
-r15684 70f7bb2dc1
-r15685 42f60f37e1
-r15686 10582aff64
-r15687 699e811f1a
-r15689 8b7c4138c6
-r15690 89cdad5e4f
-r15691 9285759660
-r15693 4d721eabbd
-r15694 2e5ad27670
-r15695 6e159702e1
-r15696 6d5656f637
-r15697 74f476f303
-r15698 d850636479
-r15700 f65e13b82d
-r15701 e09055636d
-r15702 3d82fd2ff5
-r15703 2daab02552
-r15704 e50c7947b5
-r15705 e2be618472
-r15706 c0eb91b2d7
-r15707 13cb455fb5
-r15709 2bb161b407
-r15710 9c72f1a023
-r15712 8a8230837a
-r15713 f07ac82ac2
-r15714 51f09101bb
-r15716 64d0862222
-r15717 1c801f47af
-r15723 47fb4c71ef
-r15724 059f4e7611
-r15725 6de93c661f
-r15726 aa1f5a76e4
-r15727 2d445ad1af
-r15728 b7e61584f6
-r15729 a15a44cdd1
-r15730 66f063a37e
-r15737 c84ba7f665
-r15738 021fa2b31d
-r15743 d5c8ea4d00
-r15744 988804257f
-r15745 3cf1330cc9
-r15746 55c4cb59db
-r15748 4f81ca5702
-r15749 13fddf993c
-r15751 d789698f45
-r15755 fe4591ba0c
-r15756 d27e89c0bc
-r15757 5ce0e339c4
-r15760 28e36e9a74
-r15762 0d31778efe
-r15763 885e7dbad5
-r15765 afa84b3b9c
-r15766 6283944356
-r15767 a4ace3820b
-r15768 b9578ddc25
-r15774 5b39e1e56a
-r15786 63a716747e
-r15788 53bb3acd71
-r15789 ecff1202b1
-r15790 0737e96229
-r15792 53bcf783da
-r15793 cac07e08d8
-r15796 d820345540
-r15798 20a3e4ee45
-r15799 7261acdba4
-r15800 ebd8be8c72
-r15807 2de0e86f9b
-r15808 2ea6916297
-r15810 ef642a8a51
-r15812 5cc825c48d
-r15813 ce47426183
-r15815 c19ea510a3
-r15818 8d07df2b37
-r15819 796bed0987
-r15820 98ba45e4f6
-r15821 aa43994c96
-r15822 40de8cc60f
-r15824 4644b54328
-r15825 f8e30d654c
-r15826 616d3e4597
-r15827 6bddfbb6d3
-r15828 207afbb388
-r15829 e1bca64e99
-r15830 72cd46805c
-r15831 2f69f47e7b
-r15832 0a0eeacedf
-r15834 775c6ca39b
-r15835 642b0ca4fb
-r15836 d63963d580
-r15837 e85bedf5af
-r15838 5603633e39
-r15839 54065c579e
-r15841 56eb012d9f
-r15845 9577fff49c
-r15870 b54da55aa6
-r15872 8678b42928
-r15884 ad5afb0487
-r15886 73e60c55ba
-r15887 6988638b93
-r15889 157ce5639b
-r15890 48a0b62ad1
-r15893 9319bfeba6
-r15895 7e23740dcc
-r15896 9a04bac69b
-r15901 138499401d
-r15903 9a984e4e5a
-r15927 cd6ed4e12b
-r15929 73021214bc
-r15931 b1e5ba0eef
-r15935 6a7a1eeff9
-r15937 a3e8c0637f
-r15939 f09222f565
-r15940 40d7db8596
-r15947 65062d459f
-r15948 75dd516be1
-r15949 dc8989918d
-r15950 532013fd52
-r15954 d0299fb471
-r15955 f0ab2e175e
-r15956 44bd48af53
-r15958 b85a3d25fc
-r15964 af2e9f53fe
-r15965 7fec2a0876
-r15972 fc1e62681c
-r15973 ea2fa34a56
-r15974 b3ba623412
-r15975 3ee45986dc
-r15976 6b3f18dbdd
-r15979 ce88a14515
-r15980 f58162a784
-r15983 cd085f6143
-r15985 906248a4b2
-r15987 4b6277f851
-r15991 e1cb4b5d15
-r15992 cfe1ba4c34
-r15993 f765ef4c20
-r15994 3c6d775e92
-r15997 c49538d204
-r15999 fb882601b7
-r16001 386fe95009
-r16003 6fd613c192
-r16007 1513988c3b
-r16009 9ea23262bb
-r16010 1ed25d9dd0
-r16012 106ebd0ba3
-r16014 8a71b645f2
-r16016 329de99b63
-r16017 350f4abecd
-r16020 1ffe917f94
-r16021 148f56f1c6
-r16022 743edeefd4
-r16024 3e0cd7e748
-r16025 97db00dada
-r16026 12bceb22fd
-r16028 f7eccb851a
-r16030 45e264bfa6
-r16033 5d1339b121
-r16034 d0eb6ae1a2
-r16035 fa8d0d8d85
-r16036 5d0ff3c25e
-r16039 8eef9983c1
-r16040 efb19538b2
-r16043 03c12787c6
-r16044 16acc7aa51
-r16047 4334d8c991
-r16048 7369338a6e
-r16051 0de2fb2846
-r16055 62f0adf98b
-r16056 faeca93e87
-r16057 ab1c93a7bd
-r16059 2bd07f7264
-r16061 457e00ba9f
-r16079 74f3359eef
-r16080 118a288bee
-r16081 6be73f6e95
-r16083 0e76651704
-r16084 a9a27eaea6
-r16087 350ba559f1
-r16089 b9232781f4
-r16090 6402af9e5d
-r16096 f36d200b28
-r16098 c3d3f0d3dd
-r16103 ed1c45477f
-r16104 aef23d2821
-r16113 c409423aef
-r16114 7d5d4995bd
-r16116 6bdefe4aec
-r16117 fbfb44c7f4
-r16118 91efd55dcd
-r16120 e92d29fecc
-r16121 e4d18ccfbb
-r16122 c8b96646e5
-r16151 281e265384
-r16157 a18a545a84
-r16161 5521ec1e2e
-r16163 4678821611
-r16167 e20362771c
-r16168 184383a519
-r16171 ee9e91a107
-r16172 12935da7da
-r16178 b9c208a380
-r16180 692afd6ddd
-r16183 51f6183304
-r16185 b320b6cf52
-r16187 b9343703f5
-r16189 c46666b9f4
-r16190 dbe66d0672
-r16217 29a8a8f779
-r16218 bd46c931f0
-r16224 8f1a65cb97
-r16226 2e770c31b6
-r16227 7fc6432ea6
-r16229 3eacec9453
-r16244 546eb6e8a7
-r16245 f7c0dd850c
-r16246 8059712c40
-r16248 b98da683a9
-r16250 ea2ceda18b
-r16251 19f4c0652b
-r16252 143ecef34b
-r16253 4163ac5548
-r16254 364360e180
-r16255 1615902e57
-r16263 86b39a89cd
-r16265 7e3aecae9e
-r16266 8b63b6aacb
-r16267 ddda42af0a
-r16269 d180b26e6a
-r16270 acd4c9471d
-r16272 8a3bbb52a7
-r16273 6ec1e72460
-r16274 a44eeedd3c
-r16275 6372a8b619
-r16278 1a3a362db7
-r16279 cc441db380
-r16282 bba64758bb
-r16286 973ac73362
-r16289 b2e8634221
-r16292 08a8c00be6
-r16293 baf7e773f3
-r16296 9b7039e946
-r16297 e5868320d4
-r16298 95dd7d914a
-r16299 33b03fdc1f
-r16300 54a4542917
-r16304 b3057cb638
-r16306 4c9ef158c6
-r16307 baa6f58f76
-r16308 f353a1d4fe
-r16309 8484a8b26c
-r16312 f9924c9efd
-r16313 c06b1d3f61
-r16314 f88f17f6ee
-r16315 980a99cfa4
-r16321 e64aa79347
-r16322 597f971fcd
-r16328 0469d412cd
-r16329 cb2364e9c8
-r16332 17d9b4a800
-r16335 1f029a28d6
-r16336 79a47b92e0
-r16337 98abb80c3c
-r16338 b846a6a741
-r16339 96c581e441
-r16340 758092d16b
-r16341 f902a988a0
-r16342 d357ce72f5
-r16343 bd61de26a3
-r16344 ced4ddfef6
-r16345 833c65eb09
-r16347 88f7f3fa69
-r16348 6f503f39b0
-r16349 a12fde6a5a
-r16350 22ef50488a
-r16353 2f3d17b186
-r16355 068cd37e08
-r16356 167a627457
-r16357 8840b3a207
-r16358 c336690252
-r16359 fdab95c6ae
-r16360 2d6d18662d
-r16361 0964a593ec
-r16364 ea3a4fe4c8
-r16376 cc97afe49f
-r16377 d1bf566ad6
-r16378 b95390021d
-r16379 9dde9718b9
-r16380 6fce7f1410
-r16381 c0674859e2
-r16383 d0b40ba526
-r16384 35daeb8603
-r16385 829e4ea485
-r16386 852d3d0a66
-r16387 09d8adf207
-r16389 cc84bb54bb
-r16390 7d42d4b2a9
-r16391 d5763d58d9
-r16392 1db99a4309
-r16393 9cbedbdaca
-r16394 f0d060eee5
-r16403 c59f026df1
-r16404 7e8f7199a1
-r16405 8e4e97ad78
-r16406 325e2ba1b1
-r16407 0bc8157005
-r16408 4e308c8f62
-r16410 b219392bfd
-r16414 3d8880746e
-r16416 391fea8da0
-r16417 3128d1e0e5
-r16418 e6a1539441
-r16419 32cebff4ba
-r16420 8c770d3a7a
-r16422 2156f3e306
-r16423 418e7e5f9e
-r16424 583a2fda9f
-r16425 9da19f07f1
-r16438 6ae2c86f2f
-r16439 6eba78c751
-r16442 219412ebb7
-r16443 eae38f8340
-r16444 683e15f02b
-r16447 99529c51c0
-r16448 bcbf5a1267
-r16449 2bed53ea79
-r16452 81985e49cf
-r16454 ffe546326a
-r16456 8b014ee7d3
-r16460 c7780ded0b
-r16461 448110ac11
-r16462 fa88dfe5cd
-r16463 7efd2d6eb0
-r16469 cadd7aca7d
-r16471 3a49d0ae1d
-r16472 6599832787
-r16473 c50dd4e212
-r16483 57e8dfd55a
-r16486 90394b899f
-r16487 7999744683
-r16488 e6f0eb6e1b
-r16489 4f84b00b86
-r16490 26877991ed
-r16520 cdbd7d9a01
-r16521 23fdf0b4e2
-r16533 fff82dd828
-r16534 5d6c2cb4c6
-r16540 8a69a88c9a
-r16541 535d514b23
-r16543 7848f0ffaf
-r16548 a38b62f23a
-r16551 4f7749dd30
-r16552 08b9fdc210
-r16553 f20f480fca
-r16554 6866d592b9
-r16558 a7db64605e
-r16562 2834d1838c
-r16564 bc452c0ef2
-r16569
-r16570 7f72290295
-r16575 65ba7e2bec
-r16576 f618e45807
-r16577 01a338c1ac
-r16578 b32a065e53
-r16579 6243483556
-r16580 1f84f1d776
-r16581 a2db9e3f7f
-r16582 e7f006fe9a
-r16587 283bc03d95
-r16590 3c327c5d4d
-r16591 c63b3a7e7a
-r16595 be91cd08be
-r16598 21749978ee
-r16606 c92b30307c
-r16609 db642a40da
-r16621 8aee69cc9d
-r16622 6700e99884
-r16625 2d61f09332
-r16629 af47e5b433
-r16633 0b574c7842
-r16635 909efc305d
-r16642 23d69bfab5
-r16653 ed4693400b
-r16654 b31dcbdcf5
-r16661 f3bf480dc3
-r16664 f7638a5cbb
-r16683 91b2f60d31
-r16689
-r16690
-r16692 c3c87411ce
-r16694
-r16695
-r16696
-r16700 c8107b0d95
-r16728 0dde1442dc
-r16731 aae227ba01
-r16733 4d32e17513
-r16738 f83d897754
-r16740 1566ee0c36
-r16745 61b353255e
-r16747 806edf6f84
-r16748 c8c1ecc5ea
-r16749 eba7932b13
-r16751 491ebd0c2c
-r16754 af6be2087f
-r16755 c962a00e03
-r16760 8836f6c0f0
-r16761 14bb605d95
-r16765 c70776c006
-r16767 ee740145d8
-r16775 c379973e4c
-r16776 f6b2ab9b5b
-r16783 af7c128293
-r16794 fef6bc4f30
-r16795 eedce544f0
-r16812 50884412ab
-r16815 a405c1e0f2
-r16831 1805207276
-r16832 b1c9db8bfc
-r16833 ba0935e8ac
-r16842 70347b7896
-r16844 abeb6e6435
-r16852 b0de8aa196
-r16855 166563559b
-r16859 0313e1c018
-r16875 86397c940a
-r16884 18aff4c4b5
-r16887 d215c74375
-r16888 cc5695df41
-r16889 91d92ec83b
-r16890 ee79ccdc9b
-r16893 fd47d1ef24
-r16896 6fa0f854c7
-r16897 e53cf49b7f
-r16902 feec9de760
-r16903 55795630fd
-r16913 323e895672
-r16918 774176c7a6
-r16920 5e9bf6564f
-r16922 e877601ffb
-r16923 bc7db60a25
-r16928 8047e3e109
-r16930 a492467f1f
-r16939 c60a882fee
-r16940 de4d32b2e4
-r16943 e3d105a0cb
-r16945 51615fcd58
-r16948 737dd284b6
-r16952 72cffa149f
-r16955 77852ce568
-r16962 ca805b9f21
-r16964 45aed61ae5
-r16968 d7839e8a6d
-r16969 59d2220360
-r16970 1f83b1f07c
-r16971 9ad89d940f
-r16976 d265e01353
-r16993 1898ae1307
-r16994 0606aa4755
-r16995 a0c64cf5a8
-r16996 e52898338e
-r16997 f13e298f14
-r16998 91f5c1e98c
-r16999 7b1258829d
-r17000 9bf8be6db8
-r17001 45a49c276c
-r17002 8c52d2ef0a
-r17004 c9365b9f14
-r17005 b5e97c54fd
-r17007 35607daf40
-r17008 dcb611298e
-r17010 6838910311
-r17012 011d39a3b3
-r17017 3f70dea914
-r17021 b2e6ac7747
-r17036 ec3ee84bd2
-r17039 f9d6f834b6
-r17040 b85f33beb7
-r17041 f86527ce55
-r17042 a81199163d
-r17047 48355ee28a
-r17048 0ecacced03
-r17049 dd42e06b03
-r17050 bb6969c638
-r17051 c1e179743e
-r17053 6011d38a03
-r17054 8765cfe472
-r17055 3c43622fb2
-r17056 3eb1eb58f1
-r17057 a4c522e822
-r17058 18b36de92b
-r17059 6fde5968a3
-r17060 16e159d17e
-r17062 a6340e3280
-r17063 3811981e42
-r17064 21a839bbf3
-r17066 9191eb8dd8
-r17067 76009173e0
-r17071 b0bcd0a40d
-r17072 ebb6a2a06a
-r17078 3e45f134aa
-r17079 7681434a92
-r17082 8d017c0f1e
-r17083 f4720669d6
-r17085 64af689e66
-r17086 347e682ba2
-r17087 4fdfc29d7e
-r17089
-r17090 719dce0a89
-r17092 ced3433418
-r17094 bcb3384b79
-r17095 c6127f4070
-r17097 bee24f7b52
-r17098 40f7264305
-r17099 903933d7fd
-r17100 fb80d00274
-r17101 98933b910f
-r17103 7acf450800
-r17104 708baf9476
-r17106 04840e2ed4
-r17113 f2032c9588
-r17114 266df9f05e
-r17115 dd36893757
-r17117 c25ec632d3
-r17118 bb15b2d1d7
-r17119 10b8c781c2
-r17120 c193d5918c
-r17121 311a391dd1
-r17124 c248f50471
-r17129 f43868888e
-r17132 855ec6101a
-r17133 0ee11c3876
-r17136 0171fdede1
-r17139 882022241d
-r17143 0e04072c89
-r17144 36b0e8178f
-r17146 a626f62538
-r17147 5da9192e4a
-r17149 f4411a5ab0
-r17152 972e5c52af
-r17154 feb773f602
-r17158 6ed49d8b85
-r17159 275e9c7375
-r17161 7e908c84ff
-r17169 502a422b3f
-r17170 dad1f88d8e
-r17171 9c0ac8b712
-r17172 a187f432f7
-r17177 ef13a9d40b
-r17178 68e4cac5ae
-r17179 c4c651969c
-r17180 ae4e5376d5
-r17181 a4baf48a5f
-r17182 bf35b888e4
-r17188 57e95eb403
-r17190 0f81e1686b
-r17196 5c2635fb90
-r17200 14725a8ca3
-r17201 020add45b8
-r17202 166afcab41
-r17203 4e52d412b1
-r17209 5d802d95ce
-r17210 0e495b0aba
-r17211 c02c236c70
-r17212 7fe49aba49
-r17213 228225c538
-r17214 07ee2ba75f
-r17215 174a9a7059
-r17216 b4cd4a89db
-r17217 b6e70976e8
-r17218 04949bcfb5
-r17220 305fe3a352
-r17221 9fc30e17b2
-r17228 3d96a4aa32
-r17229 ddecab441f
-r17230 77be5533c6
-r17231 51c487b126
-r17235 3489c4fdd1
-r17238 56b0eb1d8a
-r17241 276ed22211
-r17248 9bedaaa817
-r17250 0bd2114450
-r17252 2ef54cbddb
-r17253 7e95eacafc
-r17254 f22cdb775f
-r17255 9bfd5a0249
-r17256 6ac42fecec
-r17257 c5e4288aff
-r17260 f3b5aed2b9
-r17272 717e797c25
-r17273 5e2dd3850d
-r17274 40f8fa9402
-r17275 a1c3d51a90
-r17276 807daab252
-r17277 ec04bfb454
-r17278 f085ff3942
-r17279 4ccece5f6e
-r17284 f2dfc4a54a
-r17286 5af0e1461b
-r17287 8e28858bd1
-r17288 8bafc41b19
-r17289 b4e3d06662
-r17290 ca9431e11c
-r17296 cd105bb1f4
-r17297 5f0edd35f0
-r17299 a7ea097502
-r17301 1a1c5f5503
-r17303 30a27a479e
-r17304 3bbffde303
-r17305 a14b437421
-r17306 ff9887891f
-r17313 00d196adee
-r17315 67c3c68da5
-r17316 36bf7cb302
-r17323 9a4199709d
-r17340 65b7d05759
-r17344 7bf8a0c175
-r17349 00c9c7e85c
-r17367 5a820a9708
-r17370 9257aeb98b
-r17371 89ddf2d6e7
-r17372 66f28b5aa8
-r17373 a2bfe6eef5
-r17374 ba2bb4c1a1
-r17376 1d439e0bd0
-r17377 e33a70721e
-r17378 4145de88b4
-r17379 30306fec3b
-r17380 bf96e45cd1
-r17383 06e3400b2c
-r17389 370f060c6d
-r17390 1c72ffaee5
-r17393 532147c333
-r17394 dea08d71fc
-r17395 b62a73e023
-r17396 8087f9b529
-r17397 651294e140
-r17398 8ffa7ff6be
-r17399 55d14ccdd6
-r17400 faa34dab7d
-r17401 845c4fcd31
-r17402 070c60f747
-r17404 20f986ecf4
-r17406 c1be9a8a7f
-r17409 3b25ed4bb5
-r17415 a464ed4c3a
-r17416 16d4b1d76a
-r17417 79c1f9882a
-r17418 68bcc9e7c6
-r17421 2abcdde283
-r17422 ccfea35d7a
-r17423 2a491aaa0e
-r17438 f2a72ec46b
-r17447 7cc03e888b
-r17448 b17f6f68da
-r17452 84bb943a9d
-r17453 becf900b40
-r17455 150d137d20
-r17457 339cbf16da
-r17460 4e2f93073a
-r17461 7a458d7131
-r17462 e42d7e8399
-r17463 b06edbc46d
-r17470 c3e29c28b0
-r17471 e1ccc2e829
-r17481 d237da1fff
-r17482 0d513223bd
-r17483 8c997bd38c
-r17484 2fd6666690
-r17485 4ac90d308d
-r17486 f5bed34066
-r17487 21376b3811
-r17489 a51564d278
-r17494 6ea08aefa3
-r17496 b30ca9c570
-r17497 fb93555a44
-r17498 6556ff6af3
-r17501 4153ff1282
-r17502 c9bb938eb0
-r17503 c8639e6f9c
-r17519 cc3c2f72df
-r17521 c516c42d42
-r17528 1e1231c150
-r17538 92f91f0e06
-r17541 2ffeb5af81
-r17545 cd2843fa26
-r17546 19c09dd687
-r17549 da904a34ee
-r17550 0adcf1fd86
-r17553 d1d54c6f8d
-r17554 c52b5c7df7
-r17556 4ae08113a6
-r17557 aaf919859f
-r17558 d1cd9999f2
-r17580 458c4128c8
-r17581 7a03d2498b
-r17582 718c06c2f9
-r17583 2806d83317
-r17584 cbb366f129
-r17585 d5985686e0
-r17586 03429aee94
-r17589 bdc8c11581
-r17590 ae897e4d28
-r17591 912da5d2ea
-r17592 6875e2fde5
-r17593 6029fa7931
-r17594 cee28d7cc7
-r17595 8137c1492f
-r17596 0a80c26324
-r17597 a62eceab93
-r17598 a79e84b239
-r17599 7acc55b2dc
-r17601 b5b769354d
-r17602 4d3c8ef4be
-r17603 9f907e5813
-r17604 90fa917f34
-r17605 8906512f68
-r17606 c045524ead
-r17607 e4b32dab97
-r17608 8a9a104f79
-r17609 8be38d4395
-r17610 255c136db6
-r17612 9b2908a5ed
-r17613 b17eed3047
-r17614 7fd2740b27
-r17616 a020e82b2e
-r17617 8cc51cc0dc
-r17619 6befaa0f9d
-r17620 1165c27985
-r17621 4603e36f93
-r17623 2bb5db8e23
-r17629 e8cdd793c5
-r17631 f461ac7401
-r17632 003571d528
-r17633 5d2441dd3c
-r17634 c3989c5ba7
-r17635 558808f135
-r17636 e2dc065960
-r17637 43e5b5c135
-r17638 7831970b25
-r17639 2a31d6fd2c
-r17640 036b3851c1
-r17641 f5508bac2c
-r17644 330ad12bbf
-r17649 6f4ba5480f
-r17650 9ce36827e3
-r17651 ba42c086e1
-r17652 4304b15730
-r17653 29c746ca68
-r17654 1bbf9f89f3
-r17655 6d66470bbd
-r17656 5b1da4217f
-r17657 98be321315
-r17658 c7a419a711
-r17659 3e43cc0490
-r17660 1b2c72aeed
-r17661 5103735f4b
-r17664 e9bcc87c81
-r17665 af8a754328
-r17666 ee2d15b908
-r17667 8155f5e712
-r17673 5671456e84
-r17677 2379eb4ebb
-r17680 14a631a5fe
-r17681 75d487d831
-r17682 f3c0640e3d
-r17684 1e8d204851
-r17685 eead648222
-r17687 a9b446fadb
-r17688 8100cc9f6d
-r17689 8b030ca484
-r17690 974735b01f
-r17691 68bb95dc35
-r17695 f7ab13b08e
-r17696 2ea3b94ee2
-r17697
-r17701 931d2d43cd
-r17703 a79ee73df1
-r17705 a8acd9ecbe
-r17706 e4a8be83c1
-r17707 ca3d31e7b2
-r17708 11f5744d1f
-r17709 99e44f21fe
-r17710 93ce8b0c6c
-r17712 e326df2c22
-r17713 c8ad9ef2d1
-r17714 7cfc53fb4b
-r17715 39fdbddb88
-r17716 e2690f9e0c
-r17717 764e5d6db8
-r17718 304a455e65
-r17719 1e3c53fc74
-r17720 0df17b5003
-r17721 62d0a71057
-r17722 1b9f19f085
-r17723 40c11466e6
-r17724 9b3b1847ce
-r17725 1d744e7e93
-r17726 e9a2726b58
-r17727 302427358e
-r17728 8fa8118e34
-r17729 f665c2749c
-r17730 cafc8d6e57
-r17731 14dbc65b92
-r17733 1b97e9821d
-r17734 a4b9b4366e
-r17735 4168caa00c
-r17736 083f2fe49e
-r17737 5b4ff1bb32
-r17738 78d6eadeaa
-r17739 2670b004c7
-r17740 78265a6b80
-r17741 fbf991833d
-r17742 10830eaae2
-r17743 2a3015a883
-r17744 5dcd3008db
-r17745 7e3e93ed98
-r17746 6402ff311c
-r17747 2068560890
-r17751 e76fd544aa
-r17752 cce6308e78
-r17753 b2e928c6d1
-r17754 8fb4f2c37d
-r17755 b80d1e378e
-r17757 e789f9ac8f
-r17761 3de51d6b76
-r17762 3b5f98fd1c
-r17767 e7d6bfb2ae
-r17769 924b4a982c
-r17770 54384172fe
-r17771 af9090a32a
-r17772 14fb2dfadd
-r17773 b3ce4c4f7d
-r17774 6d20b470c5
-r17778 92be0221ea
-r17780 eb96cbb7bc
-r17781 3f1d10d105
-r17783 457f6dfc11
-r17784 9325f2a582
-r17785 14a4920c0c
-r17790 f151228bbd
-r17791 4c3d87a501
-r17792 5326d9a204
-r17793 a4a89f7a2a
-r17794 12a88b5900
-r17795 eb4eac963d
-r17796 36a2c0d43b
-r17798 6b26cdf4fc
-r17799 182a5cbf02
-r17800 22b60f2f2b
-r17801 e3a13688df
-r17803 618fadfcfd
-r17804 54a706f3f6
-r17805 a1f0987959
-r17806 67ab4b8ece
-r17807 fa3010ed33
-r17808 36f07c72a4
-r17809 4065255346
-r17810 213285991d
-r17811 c5aa57c2d5
-r17812 607cb4250d
-r17813 c3afb3feaa
-r17814 0490a0ef52
-r17815 c3247d415f
-r17816 46bb8d600c
-r17817 0a4089a8ba
-r17818 0b8ece795b
-r17820 d73a296574
-r17823 e484f312b5
-r17825 5e12bab477
-r17828 103c97f7de
-r17829 5b2dec1e9e
-r17830 bd119a13d6
-r17831 7702b79895
-r17832 9e6db19540
-r17834 d03ffa8466
-r17835 9ed3fc1dbd
-r17836 21733eb9fd
-r17837 e01b0f41ef
-r17841 ea7734643b
-r17844 3781c27ce2
-r17845 e39e2b05b2
-r17847 76612dc8ec
-r17848 07eef10799
-r17849 76e6f41e6d
-r17850 29f58824a4
-r17851 b22342e78a
-r17852 2039b7fec7
-r17854 b036f6fe74
-r17855 4b8be5d8be
-r17856 cc5e79c9ec
-r17857 c7cd961ad1
-r17858 5abe77233b
-r17860 359d460949
-r17861 e8e1e61177
-r17862 93a27b6d75
-r17863 d94cac09a0
-r17865 ea519396af
-r17867 ce0d59af04
-r17868 503d8c26b9
-r17870 c8ef95caee
-r17871 09e9e88d00
-r17874 13f7432497
-r17878 b7eac378da
-r17879 578d4c6716
-r17880 08da52d903
-r17881 92b8ae1388
-r17882 f34e908054
-r17883 8434c271e5
-r17884 cf59c41582
-r17885 0df28504f8
-r17886 7fc525184b
-r17887 9b2430c776
-r17888 e1424d97d5
-r17889 dbb58b1170
-r17890 67fa653a48
-r17894 450425c964
-r17895 08c63fc9a1
-r17896 09dc46783d
-r17897 036f260201
-r17898 9636749e63
-r17899 3f04dd4462
-r17900 02827fb081
-r17901 b35a79a93c
-r17902 660b4beeda
-r17903 5ef904034f
-r17904 da332a0e42
-r17905 f98d917d42
-r17907 f057f5f3fa
-r17909 da10214991
-r17910 488f986078
-r17911 fcc62d3da6
-r17912 c36e3cc0a6
-r17913 661f1ba10e
-r17916 390ccacfe0
-r17917 12d57cd2b4
-r17918 1dd1702022
-r17920 ab9381b453
-r17925 c6cf4fc022
-r17926 761d162a7a
-r17927 d3a5b5b97b
-r17933 63031aa7f0
-r17934 8c23908ebb
-r17937 fb57f8cec1
-r17939 7aab2a8d9e
-r17940 e0a4e468b7
-r17941 3f8de98f0b
-r17942 cdda313b40
-r17943 289970ec7f
-r17944 c7aa8f5778
-r17946 26e953fc6b
-r17947 d161b8bcf2
-r17948 640daad3f4
-r17950 5906c86214
-r17952 045e04db5a
-r17958 954377bb52
-r17959 a7aeed67da
-r17960 f5f18249a1
-r17962 da8b3a4b9d
-r17964 115dcf1b3d
-r17979 520483071d
-r17981 c9bc955f52
-r17982 a431dc606a
-r17983 02ec6b9c10
-r17984 cf4c6c334a
-r17986 7d7b037bd0
-r17988 e46e603f65
-r17990 56b22f27d0
-r17991 f09e35944a
-r17992 c3bddc74e4
-r17995 a55567971e
-r17997 a0c0c86846
-r17998 d14114d3ad
-r17999 9f6fe27b21
-r18000 c260301efe
-r18001 a2166dec9d
-r18002 8cc477f8b6
-r18003 9bfc974222
-r18004 bd7bd8fb27
-r18005 8e8beb0cdc
-r18006 139d4300d8
-r18007 df426a0c13
-r18008 01dcf00b68
-r18011 238ad426ba
-r18012 f205501be8
-r18013 5fa3710faa
-r18014 f85a6749de
-r18015 1164ab879a
-r18017 771451984a
-r18018 66036d3d4f
-r18019 b9e451ce6e
-r18020 6d09e964f7
-r18021 a46b8b1501
-r18022 9e8835d617
-r18023 c762ae353b
-r18024 e638fb8662
-r18025 b72cc0bda5
-r18026 8d8d1c3147
-r18027 d3ff8d400f
-r18028 5982a5347b
-r18029 dc426d5fa7
-r18030 5fe886ed64
-r18031 9b046d0952
-r18033 a907772ff5
-r18034 7337db9c59
-r18035 54093685b8
-r18036 a4bdfdcccb
-r18038 53ed9b920e
-r18039 73746f649a
-r18042 e41d30ba4a
-r18043 4788fee88e
-r18048 cd7e1a1728
-r18049 e58673295a
-r18050 d05270c938
-r18052 78eeb59f0f
-r18053 493d03653e
-r18055 5d11bc4733
-r18056 e6c140fecd
-r18059 9e52f5beda
-r18060 57ac948b1b
-r18061 be8e3c6911
-r18062 3ee6b3653f
-r18063 a657e6b766
-r18064 4d5d6fbe94
-r18065 2b3218c788
-r18066 614ba1f785
-r18067 83ec9c329c
-r18068 60810d5c03
-r18069 0e170e4b69
-r18070 533764a718
-r18071 8cf7228f8c
-r18072 85a7be90da
-r18076 c50f73ddb1
-r18077 e1b88d7758
-r18078 2ebff1417c
-r18079 c22ebf74e0
-r18080 76294e00c5
-r18085 9ca38d23a0
-r18087 11d2fc79cf
-r18088 3f9bbdbc78
-r18089 d09ec90432
-r18090 4bac7312b3
-r18091 ef06def0f0
-r18093 6060a29843
-r18094 ecb80ebcc5
-r18095 d83917a2ee
-r18096 ec70057db5
-r18097 6ab1f0b771
-r18098 1c9870541f
-r18099 410efa8317
-r18102 f537546d8b
-r18103 2478159125
-r18104 6c0ba3ee65
-r18105 ae85676cb4
-r18106 7e3f53ed7d
-r18107 c83d5573ce
-r18108 ac7180cf63
-r18109 ff1eb3aa12
-r18115 d2c69112e0
-r18116 7518d6700f
-r18117 94ade481b2
-r18118 d0452d00c9
-r18119 26adfa0610
-r18121 2f085cf0d2
-r18122 288a684174
-r18124 1e2217eccb
-r18125 9a8c1984be
-r18126 7abf1386ee
-r18127 7d92d6c60f
-r18128 2c31c03c62
-r18129 cfe07c80c3
-r18130 4fccc851b8
-r18131 b3924e660b
-r18132 979e774ef8
-r18133 505ea7c3e0
-r18134 e32113307c
-r18135 e3bb9bfa5c
-r18136 31baa0e552
-r18137 a868cd7589
-r18138 73a4bffc83
-r18140 f5c93803e4
-r18148 91643c355b
-r18149 e659affbea
-r18150 8fbdb547f1
-r18151 1ecef3bcd3
-r18152 a91ef25608
-r18153 fe1d043034
-r18155 96f6c893f1
-r18157 978e36705a
-r18158 0464a24e40
-r18159 211fcd601e
-r18160 bb085c4f75
-r18162 19c3aa9b31
-r18163 d14b4a117e
-r18165 b640b4c70f
-r18166 a784a5846b
-r18168 d6519af64c
-r18169 ab099645c9
-r18170 91c683e22d
-r18171 d17c979ce0
-r18176 7ac2fc34f7
-r18177 6cee8d5837
-r18184 f535672a90
-r18188 e308e10616
-r18189 def1f684c0
-r18190 568cba14a3
-r18192 8e2090600c
-r18193 08a4234ce0
-r18195 3b72f6de82
-r18196 ffb3ff17c1
-r18197 57e0d0250d
-r18198 c044b2e8c9
-r18199 76228e8448
-r18200 865ec030f3
-r18202 70b9c762e8
-r18205 5f06ad4179
-r18206 3be21076e0
-r18208 3ba0e87fed
-r18209 e373d268a5
-r18210 67881bbca0
-r18212 c93f64f7ea
-r18213 64e41b43cc
-r18214 129cdce825
-r18215 26bca73b09
-r18218 5c33f943d4
-r18220 dba0f7f3bd
-r18226 5754e85ed0
-r18230 dbe0e2bc38
-r18231 1eda989ae9
-r18235 99ede604a0
-r18236 ac4542b356
-r18237 f50cd49608
-r18238 b0706ef600
-r18239 2bbaf246cf
-r18240 e59b2669a7
-r18241 92b3940688
-r18243 1901250eef
-r18244 ccfb3b9c16
-r18245 79dc3b49f0
-r18246 69fb6eaa7d
-r18247 8ee2c8685d
-r18248 2bc40d593a
-r18251 a25a8c309a
-r18254 fdd7b82c5a
-r18256 5a0c92b079
-r18257 67d80e7a75
-r18264 7ff290c43f
-r18271 97e4a6162a
-r18272 d0731b1edd
-r18273 0c29413d8a
-r18278 ddf20e4d09
-r18285 ac779096c1
-r18287 0be42af7a2
-r18291 d9418567e6
-r18293 4ec0c0ee2c
-r18295 d7dbdd75fd
-r18298 93ba5d9293
-r18301 370817ac97
-r18308 69e1ddb55a
-r18310 8dee86d734
-r18315 b9be89ebda
-r18322 818a8f4c08
-r18323 467cfb2fc6
-r18324 58bc0b3a53
-r18326 097993aea4
-r18327 1514085298
-r18328 8bbfb90b49
-r18329 dc498fd655
-r18330 b66b9de0ee
-r18331 3eadba0ddd
-r18332 35a638ed93
-r18333 9dd3236b92
-r18334 3355ead4eb
-r18335 6581c02a2e
-r18336 f1f6d7c6a6
-r18337 21e5e4c173
-r18338 ea45f483bd
-r18339 9f84c9512a
-r18340 f6350575f3
-r18341 d6798ac2ab
-r18342 1f6c8f2be9
-r18343 1c56489b3e
-r18344 b70cf1f40b
-r18345 fd1c68f004
-r18346 4fa2b5ac18
-r18347 670edfe22a
-r18350 9fcf6dc3c6
-r18352 04ed00053e
-r18353 a91a8b2ac2
-r18357 294000998f
-r18358 2b51d5c477
-r18359 3e95510910
-r18360 30ab8b6924
-r18361 ff4552038d
-r18362 0cb9b256f8
-r18363 2c3208955c
-r18364
-r18366 64342a3d92
-r18369 9e89645170
-r18371 d063a9fa51
-r18372 202d2562ec
-r18376 3b0c2ba269
-r18377 fa70f51234
-r18378 9eed5b8929
-r18379 9dfe628e0f
-r18380 128c23c788
-r18381 437e8ef4bd
-r18383 50b5242ee3
-r18384 f4301266d3
-r18385 8a78d37483
-r18387 40707e0f49
-r18388 22edfb2881
-r18389 68c289a95f
-r18391 c4a59834b9
-r18394 cbadb522f1
-r18395 cc711eef35
-r18396 27700284fa
-r18397 01ed33304a
-r18399 5775f1b887
-r18404 74a6eeaf09
-r18406 db045cb8dd
-r18407 46e40830b1
-r18408 947abebda1
-r18409 46f563457f
-r18410 c5af4c0388
-r18413 6148dff45a
-r18415 b9bec1c708
-r18416 8f1cf06e01
-r18417 14c5910337
-r18420 47bb1e153b
-r18421 5319bf04da
-r18422 8444d6e22b
-r18423 bd1e6e0934
-r18424 be31fef41a
-r18425 24471facbd
-r18426 1a4566278c
-r18427 11ee847d38
-r18429 d339959ff1
-r18431 f9c2bc54ff
-r18432 9780704595
-r18434 cf7a2f64f1
-r18437 ac89702827
-r18438 ec5e34144e
-r18439 744049bb71
-r18440 00f35b8424
-r18443 f046863f53
-r18444 edb1bf023b
-r18445 4226a1ffb1
-r18447 d32130e1f4
-r18448 f22d1313c2
-r18449 381209889a
-r18450 acdf9452c9
-r18451 5f8b4d2595
-r18455 dd8009b190
-r18458 1e15c075c1
-r18460 fe52cb070d
-r18461 f335258f61
-r18462 62104980be
-r18463 60533e82c8
-r18464 fdf7441ed1
-r18467 dad6fe7901
-r18468 e5187676e6
-r18469 1c872d63b8
-r18470 72f099bb9c
-r18471 a7d94bbd21
-r18472 db202748fe
-r18473 1ceff6729a
-r18474 2416d5724e
-r18475 abc5b5f47f
-r18477 ab9cf60fc7
-r18478 de8ca77c2e
-r18479 23f878f89c
-r18480 5e1deae361
-r18481 d601240fe6
-r18482 7838ff734a
-r18483 43b445579f
-r18484 fe72ad6351
-r18486 110b737f99
-r18487 f4d0095bf5
-r18488 cdfb6bf18d
-r18490 d73053a0c6
-r18491 ba8648d13e
-r18492 9cea5f6198
-r18493 309e7e0b58
-r18494 e484200310
-r18495 e6dd85961e
-r18496 4c4040c931
-r18497 32463342dc
-r18498 d0ca666b75
-r18499 22fcda0341
-r18500 8df11b38aa
-r18501 0eee4ea689
-r18502 420311df8d
-r18503 ad8d6f6753
-r18505 6b5b635f09
-r18506 ec18f148e8
-r18507 917101fd0d
-r18508 1d28a77bf3
-r18509 90bdc95f5a
-r18510 1af45f6a6f
-r18511 f90e6a94a6
-r18512 2b18a8b27e
-r18513 0ffc4725ce
-r18514 d249bcf71f
-r18516 c55580014c
-r18517 169a6a323f
-r18518 1cea0ea34a
-r18519 ff6271982d
-r18520 e8a46e6459
-r18521 fcb6a3772b
-r18522 0ae54e25fb
-r18523 522bf3a7d8
-r18524 397c2027d9
-r18525 6a9d9f379a
-r18526 c54bca38b0
-r18527 f56aac6b0f
-r18528 94e8503e18
-r18529 9e3295514c
-r18530 832114b933
-r18531 69d4d8c0a3
-r18532 0c7b99fbc8
-r18533 35c590828c
-r18534 8d4c53543c
-r18535 70d9557ab4
-r18536 f73e819a41
-r18537 78b61c43da
-r18538 163e4275ce
-r18539 4a1b8bcc72
-r18540 7039772a3a
-r18541 d0024b6e99
-r18542 d4c53a90db
-r18543 3be639c503
-r18544 0c424e878c
-r18545 72a7124873
-r18546 22608da738
-r18547 27fc24b0a2
-r18548 a8edce124f
-r18549 cd36447b0a
-r18550 94e71c26a4
-r18551 5251059ef6
-r18552 8c106309b0
-r18553 50c1a4c2ad
-r18554 affff809b0
-r18555 0f7296a008
-r18557 db8c41b535
-r18558 9c8da21394
-r18559 a97d573f6d
-r18560 99705d852d
-r18561 c1df5090b9
-r18562 42568ac7c9
-r18563 7f757333f9
-r18564 241dc55e6c
-r18565 0a921760e9
-r18566 7a2002522d
-r18567 37b2160aa3
-r18568 275ed574a8
-r18569 a75d39a04d
-r18570 d7f5a8824a
-r18572 7aa4764ed2
-r18573 8aed300faa
-r18574 f53ec2dc9f
-r18575 2d8878f516
-r18576 ac29052535
-r18577 7224d1c26d
-r18578 48cc8408cf
-r18579 904713e980
-r18580 fd58ffc924
-r18581 a4e8b0a502
-r18582 cd2bb7f026
-r18583 7c20966e50
-r18584 8949b0f255
-r18585 36529fe0ff
-r18586 b611f2e978
-r18587 de8a10cdd1
-r18588 2c39b8b083
-r18589 a04195e637
-r18590 d0a82fb9db
-r18591 d19685e7a5
-r18592 e7bd2c9fe5
-r18593 8814de2aa0
-r18594 ce362ef76f
-r18595 d582588b6d
-r18597 36b00f5234
-r18598 de60f2481f
-r18599 0c910180fb
-r18600 1e5ffa0cc8
-r18601 7e67e62dca
-r18602 a1efb93af4
-r18603 463be6731f
-r18604 1d19903447
-r18605 e6efa38619
-r18606 f44eb67634
-r18607 81440d55ee
-r18608 61635f0f58
-r18610 fe334907b3
-r18611 dd22c570ab
-r18612 8d9cab992a
-r18613 bc872302db
-r18614 88dc46dd31
-r18615 158e5db28b
-r18616 09ba9ab65e
-r18617 d227d486fd
-r18618 6758ca1bfe
-r18619 c918b70784
-r18620 d9a7d026ce
-r18621 8637f14a9e
-r18623 0600724c0a
-r18624 6da528df44
-r18625 0ef9dbcef0
-r18626 cfed2479dc
-r18627 5f89d82719
-r18628 96e5cca150
-r18629 2598cf0507
-r18630 54b405337f
-r18631 337ec4560f
-r18632 8ed736aab8
-r18633 3eb22b8eb1
-r18634 729ae785e9
-r18635 b5618b224a
-r18636 68c9e7c924
-r18637 6ac283c5e4
-r18640 8e498fed37
-r18641 7f8a733c0d
-r18642 fa3ea36c05
-r18643 17e464314d
-r18644 f8f0e5d25a
-r18645 17a441d93a
-r18646 d6db8f8213
-r18647 0ae9ca5d24
-r18648 fd1eba7145
-r18649 4d209eab31
-r18650 822b93ac9b
-r18651 c980b574ba
-r18653 3335e037a8
-r18655 aef123719d
-r18656 ba6cdaf1f3
-r18657 6b01bf9c30
-r18658 97fd4b036c
-r18659 2619f09ad0
-r18660 b06d4eb4ec
-r18662 39023c4346
-r18664 d471679126
-r18665 bc489c725e
-r18677 c71af41d6a
-r18678 c3a56da40a
-r18679 bbbfe4e748
-r18680 3c224284fd
-r18682 069ebc1801
-r18683 5f5b82e792
-r18685 e72f0c7f2f
-r18686 fe2068ef0d
-r18687 e934ffb347
-r18688 0250956d2d
-r18691 10cf73815b
-r18692 57ed4ca114
-r18693 8871528f60
-r18694 61ff261346
-r18695 514ff83e39
-r18696 f9394a4d47
-r18697 e604abb25c
-r18698 38dd94c87a
-r18701 9a22b72231
-r18702 c45e93e798
-r18703 2788c1ad5b
-r18704
-r18705 4ccb0bf2b7
-r18706 a5f4411f8a
-r18707 719b38b4bc
-r18708 1b1a9ba1f3
-r18709 d46bbd29ee
-r18710 7c589dcde6
-r18711 5dbf500ff8
-r18712 ef05daf100
-r18713 63089db7fb
-r18714
-r18715 27f573afb4
-r18716 b4c4f22b78
-r18717 03570027fe
-r18718 acf1e47be8
-r18719 32f93874ac
-r18720 6255db9edc
-r18721 ced5ee337f
-r18722 d5b02c8652
-r18723 d117803f2a
-r18725 4c29e778f1
-r18727 0f10ffedc8
-r18730 4b116e95da
-r18731 16eced4644
-r18732 d094b4ac4d
-r18733 efc9abd507
-r18734 6f18d00708
-r18735 44e60b3ae6
-r18736
-r18737 4466e36c4d
-r18738 35f61f4fa2
-r18739 eaa7f5738d
-r18741 66b6059b4b
-r18743 3a98614bd1
-r18744 4d8093722a
-r18745 30109202ee
-r18746 b03c1699a9
-r18747 a7697326cf
-r18749 e5464bcb42
-r18750 2fe29c477a
-r18751 48fe27d8fb
-r18752 9e54361343
-r18753 dc65ebea9e
-r18754 0d86d977a3
-r18755 4edbecfe9b
-r18756 9992fe264c
-r18757 2c5bd20a7e
-r18758 c2d33c6585
-r18759 caff582d5d
-r18762 875c84b359
-r18764 6bc633a4f4
-r18765 21035aa141
-r18766 87a113f132
-r18767 cabb954584
-r18768 6cfd03986f
-r18770 babad68e86
-r18771 ad9103538d
-r18772 593d685e4f
-r18773 c1f5cbd4a0
-r18774 f19fd024e0
-r18776 e1b326195e
-r18779 fb38e47af1
-r18780 6fea2488af
-r18781 92fc7b37b0
-r18782 8f8096f0ab
-r18783 67a8cdb404
-r18784 d17b40768c
-r18785 026b824ecc
-r18786
-r18787 a43a29e643
-r18788 d7796af940
-r18789 22c91bc256
-r18790 e31f18094d
-r18791 4a727f3b01
-r18792 0c50ba8677
-r18793 15eb9333fa
-r18794 9f5eff8768
-r18795 726ca37676
-r18797 3fb279ed38
-r18798 2a5664146d
-r18799 cecae47090
-r18800 490218b354
-r18801 f7ba972de1
-r18802 09b71d8bea
-r18803 5ae38f0f2a
-r18804 0bd474625f
-r18805 f0dc32f686
-r18806 32cac0e3fd
-r18811 53d98e7d42
-r18812 4231751ecf
-r18813 449f2a7473
-r18816 f934201e2f
-r18817 198f9932b9
-r18820 72789e9bb8
-r18821
-r18825 1575d9b94e
-r18826 f981d15e96
-r18827 393ce4d2cc
-r18828 2a91d630e7
-r18829 0d724fbb3e
-r18831 8f17ff94fa
-r18832 c590eb86c6
-r18834 49bfcbe509
-r18835 a109a92d35
-r18836 3a4aa69fbe
-r18839 5816ef2f97
-r18840 701cb3195d
-r18841 5aa7e892bb
-r18842 4f62a386bb
-r18843 efa181e577
-r18850 d364022236
-r18853 e000ae4a5a
-r18855 082a427ff9
-r18857 fe264943ef
-r18858 a21a60e5b0
-r18859 13ec830291
-r18860 dbf87324a0
-r18861 f30c0b0dba
-r18862 353c843392
-r18863 ed09a7a83d
-r18864 d0442a8636
-r18865 7209116540
-r18866 a316250dca
-r18867 caa2d287d6
-r18869 1bc50a7c84
-r18880 321338da04
-r18887 154cad734b
-r18888 284788dbe1
-r18889 84146e2f53
-r18895 83b67aa805
-r18900 6a6a0ce235
-r18902 4ad7f5bf9b
-r18904 845d054b6c
-r18905 6ac3bdaf7f
-r18906 3bcfc86548
-r18907 f931f89c5e
-r18908 5d0b9775ab
-r18909 aad82c0521
-r18910 eb4d0290ac
-r18911 43dcd522f1
-r18912 7fd3db89c8
-r18913 0144df5f04
-r18914 d9a67d0f1e
-r18916 2672f972eb
-r18917 fad438ec01
-r18920 3b4a8067ae
-r18924 7804031bb3
-r18925 f52458dfff
-r18926 403bf69a0b
-r18927 aaa3689ffc
-r18931 5da791d8c4
-r18932 7f2eaea3e7
-r18937 2d5390fd99
-r18939 f4dbe6bdc7
-r18940 3e41797985
-r18941 fe8658350b
-r18942 43ce7fbc82
-r18943 c107643d20
-r18944 ac5c2b3c67
-r18945 e3d9ce3e09
-r18946 8828cd9984
-r18948 7c04bac160
-r18949 8befdb8b05
-r18950 3826ab4938
-r18951 94b8abdd93
-r18952 9b33c1c5ef
-r18954 4a6c3da399
-r18955 a6f19f5d97
-r18957 ad62d9f8b0
-r18958 9f121f57e0
-r18959 6b31849b85
-r18960 99a2cd8de7
-r18961 a8272bce60
-r18962 611e5bd1f9
-r18964 eb572091cd
-r18965 16a0192b99
-r18966 383b4ca492
-r18967 176401d453
-r18970 8cc29335a8
-r18975 25d9040661
-r18976 91f82d5821
-r18984 6ec4b09952
-r18985 adb677e4bc
-r18987 9cf9ab263b
-r18988 5be7c2213b
-r18992 0c57ba75d0
-r18993 25a6ed98b2
-r18997 5f1bf635db
-r18998 054c404c03
-r19003 6fb95453d1
-r19006 0e26f93326
-r19018 6c3a2d29f6
-r19019 e7763d39da
-r19020 cce8ae3c86
-r19024 1c67c5b849
-r19025 422ad71e10
-r19026 4e71524062
-r19027 50184e5847
-r19028 59e6507315
-r19029 2ec828e02c
-r19033 8b383a4a15
-r19034 2555d008fa
-r19035 1c4ad55d6f
-r19039 8a45a5570e
-r19040 2de36ff140
-r19041 71f8dd24a0
-r19045 2482bddf7e
-r19047 901ce7a85b
-r19048 112a1dbef0
-r19049 31c726aa43
-r19053 89a03016ab
-r19054 bf9ca9a2b7
-r19057 f75ee36c6f
-r19058 bf02e46f2a
-r19059 5d61522281
-r19060 a0cf7a48c8
-r19072 b45a1eeb33
-r19073 04d037f2e1
-r19074 820e0bd940
-r19075 e76f8f00cd
-r19076 5bfb4e7a56
-r19077 bb817a67b9
-r19080 447c7aed67
-r19084 75e791bf7a
-r19085 b880c5f288
-r19089 dff48d1ca5
-r19090 c3137e6293
-r19091 7e05907065
-r19092 1363244de1
-r19094 1747692434
-r19095 9d9889a7d6
-r19096 b57abb7bfe
-r19104 6255d6f2a8
-r19107 8ce658f665
-r19110 136c1cce62
-r19111 3a5e4c9e8b
-r19112 221f2a8d72
-r19113 a4aa2b4b63
-r19114 1b91faa830
-r19115 3bf4f69c1d
-r19116 3949726f1f
-r19121 4cb4ad76b2
-r19122 aaae8db368
-r19128 a1a8e9261e
-r19129 d828ace341
-r19142 6dae27f35a
-r19144 2bdd20d023
-r19145 5eeb2a3b43
-r19152 1e452efbc1
-r19153 cb754b1a56
-r19160 feb088b2bc
-r19162 5a817fdbf7
-r19165 cd98a5a186
-r19167 081e2fb747
-r19168 2d1242bd5e
-r19169 9dc0426d05
-r19170 a021e16b5f
-r19183 58651079b7
-r19189 70bc8f93c5
-r19190 f818b44b1c
-r19191 03bea84fa1
-r19192 6bb3d2ceca
-r19201 07a9de6b12
-r19203 2ae67db555
-r19204 247895b5e0
-r19205 322b823276
-r19206 7349476e5c
-r19207 49dde393b4
-r19208 4c84b05477
-r19209 c570e1e7af
-r19210 2816f2e6ce
-r19211 991c819cb5
-r19212 dc64c68660
-r19215 3bd3ae75da
-r19219 907fd78c9b
-r19223 5f43e70e1c
-r19229 1f1cce4587
-r19230 d7504cba9b
-r19237 1b7e1feee1
-r19243 c23174011d
-r19244 a2eab2215a
-r19245 bf584e5320
-r19246 a074b27312
-r19247 99dae57ebb
-r19248 dab03ce579
-r19249 92cfcd4399
-r19251 42a111ba41
-r19253 3926c98936
-r19256 3803528e26
-r19257 d913225042
-r19261 460a434698
-r19265 2cef1c58a5
-r19266 728775440c
-r19267 a129d09bae
-r19273 b2fbae789e
-r19274 93967d3563
-r19275 765acb4789
-r19278 2270544a9c
-r19285 ee02ad59ce
-r19288 926ca95a9c
-r19289 180c140953
-r19290 0b16c12662
-r19291 35a8ab3cdd
-r19292 63b1fd9be6
-r19293 f3068614fb
-r19295 af66ddc350
-r19296 e5ccae21e0
-r19299 4b8fe44351
-r19301 f9551d0c2f
-r19306 42a42ac0c3
-r19307 38c3ca6756
-r19309 d4c63b2af1
-r19310 727490ab53
-r19311 3a08cbbb97
-r19315 c3b27d3b4d
-r19316 dbdac60079
-r19319 cf53536f9e
-r19320 0ce248ef65
-r19321 03e717bdc7
-r19331 cc934ee7bb
-r19332 b7772a6535
-r19333 b4084fc9c0
-r19334 9a9fece5c4
-r19337 41b0aefbf5
-r19348 223bcfc6ab
-r19350 c5157c830c
-r19353 6ae7f2cbc1
-r19354 6f7723bea4
-r19355 acaad2bcfe
-r19356 95b6ced60a
-r19357 a6d876fbdd
-r19361 52f14327c2
-r19364 b42e1f1902
-r19368 852f027607
-r19369 4f373f6da9
-r19370 e159530bfe
-r19374 c9c04a5907
-r19375 3d115bd2a4
-r19383 094ed77bd9
-r19384 621da8e1ff
-r19385 04fb01d131
-r19386 d7f7a3e001
-r19387 13d642151f
-r19391 b02b388ffa
-r19392 f5ede0923c
-r19394 021dd25395
-r19395 7cbc06ed20
-r19396 1f075b56f8
-r19397 dbf0e12c15
-r19398 a4895b8592
-r19399 85cac0f0e0
-r19401 a110b8f8e4
-r19404 74ffca5b10
-r19406 679d4590d9
-r19407 72ede3ed81
-r19413 36716c6027
-r19416 a690e4691c
-r19417 1e93e17843
-r19421 1b807250a3
-r19422 d42f62bbd7
-r19424 5d25e9334d
-r19425 f540f03503
-r19426 decbd55f61
-r19428 abd87fb19d
-r19432 5084c4d8a1
-r19433 6fbb226617
-r19434 86a6ad44fd
-r19435 c6dfb1e316
-r19436 c7c9684ae4
-r19437 2ac62aa9e9
-r19441 b2bf6d3d09
-r19442 507cd9ef50
-r19443 af1b2ef059
-r19444 f2f2c41311
-r19445 f8187cb519
-r19446 3ec24991df
-r19447 7ae5e07a4b
-r19448 199de7cd8e
-r19452 6f4fba9c67
-r19453 c490722ae1
-r19454 6167e273e0
-r19455 6c6d9a0423
-r19456 47ff605523
-r19457 fe8ed5a8f9
-r19458 1754e3f490
-r19459 e7749823a7
-r19461 6debb6aa08
-r19463 43ad0dea06
-r19464 e9ce2c085b
-r19465 df502f4ffa
-r19466 e981bccdb7
-r19467 2aeae98776
-r19469 7da30bf2d5
-r19471 cedd41ba4a
-r19472 29d431ce89
-r19473 26a13165f4
-r19474 a0159da70d
-r19481 eea79567f1
-r19482 acd28e3fd1
-r19483 572adfa2f5
-r19484 dcc8d01366
-r19487 928c9eba3b
-r19490 aaa4da9f37
-r19491 277e28956c
-r19492 f3a375b0e8
-r19493 e597ad04c0
-r19494 46af17c33c
-r19498 98c7307de8
-r19499 2a5669288a
-r19501 ecee4b18ad
-r19502 6aaab9a6df
-r19507 0c17a1a7d6
-r19508 f0664e9035
-r19509 1e9a86e701
-r19510 fc07ece2e7
-r19513 446edd3328
-r19515 074281bafe
-r19516 df13e31bbb
-r19543 33e1dac4e4
-r19545 f5a525aace
-r19546 0e4ff57c1c
-r19547 6720ae4cbc
-r19557 5995692ffd
-r19561 39fb348121
-r19567 9ed068ec00
-r19569 fe1d0c7052
-r19570 e7bc7737c7
-r19578 6599b4dc60
-r19582 b302b5afad
-r19583 8f53cc93ec
-r19598 d24de699d8
-r19599 fe3b78b864
-r19600 523a9a2658
-r19601 07c295560c
-r19604 b88e47ced9
-r19618 d47dbcf17b
-r19624 261a807655
-r19627 f86ead7ca3
-r19629 4cc65f6e0d
-r19630 92c280f6d1
-r19645 6c4064a770
-r19651 1cd31e2edd
-r19655 c43f01c39d
-r19656 0c373e4985
-r19657 046bbed8b7
-r19658 31c1983e72
-r19659 50f42ab8c1
-r19660 540aa394f3
-r19666 ed4caf3fe8
-r19667 041361ae42
-r19668 17d6cc4445
-r19670 6063bf3d78
-r19673 0b236faf92
-r19674 ff7183ddeb
-r19675 0da0208af4
-r19676 773b7a287b
-r19677 c14b30a39e
-r19678 a3926747d3
-r19679 60e6a45de9
-r19683 db99de350f
-r19684 f34abbc000
-r19685 9aafbff378
-r19688 79cbdefa47
-r19692 32b04c2801
-r19695 ac3931a11d
-r19696 2edbf55c11
-r19697 08cba2fd9f
-r19698 6a23aa029b
-r19699 7bad13f179
-r19700 39a1e1fcea
-r19706 06713afedf
-r19707 536955e1af
-r19717 ae024cebd4
-r19718 d92679d81c
-r19719 2a6a02e9a7
-r19723 6f4e82da32
-r19724 055190a38b
-r19726 1e1c87c234
-r19730 04a99160c2
-r19735 7356f7782a
-r19736 56ce6c65a5
-r19737 3cf0e5a010
-r19738 c317201d1f
-r19739 99d8d53c36
-r19740 f7b8e8f346
-r19742 781eb073f3
-r19743 1a104aefd6
-r19744 88b60e35e6
-r19746 346aff23bf
-r19747 a8759a4ec3
-r19748 5b5af9e255
-r19749 682a01c83b
-r19750 d354fa17e7
-r19751 4c9372f665
-r19752 e78864041f
-r19753 cc4cd00e58
-r19754 b59bb7d36c
-r19755 e10d77e1ab
-r19756 3a75338448
-r19757 06947d66ea
-r19758 937872a489
-r19759 b408d0e98f
-r19762 2ea21b6ca0
-r19763 40dabcbb6a
-r19764 442766475e
-r19767 19dc226f24
-r19768 aa2c129e41
-r19769 58a86b6e67
-r19773 42123a6366
-r19776 9aae43ad9f
-r19781 e8e504c0f2
-r19787 27bc36b7a9
-r19789 1e890eacbf
-r19792 85befd6927
-r19793 3045b84c8c
-r19798 269486307a
-r19799 4daa662dea
-r19800 8eaef9c60f
-r19803 1c4e51471e
-r19804 ef3fb07b53
-r19806 c46145f040
-r19807 cc44d56c42
-r19808 b93068347e
-r19813 d6b43c4b48
-r19814 4a1b22e19f
-r19815 91a0ce7ba7
-r19818 f3fa2e86d4
-r19819 d26b2f2b94
-r19820 4ad672b0b2
-r19824 2e0c9a6ba4
-r19842 583e431b07
-r19844 d9e3dde6d6
-r19846 326e257371
-r19848 ee2415395e
-r19849 6f4a561df2
-r19854 b059cbd155
-r19855 ec6a2ce91c
-r19858 a350c4c1a5
-r19859 f1b417f10c
-r19861 a3aa801a51
-r19863 1f162e940c
-r19864 7f3922f39a
-r19865 7463bf9292
-r19867 84b523c520
-r19869 13b3d06f82
-r19871 0a1d1a6167
-r19872 dc683cb316
-r19873 ec664b1cd0
-r19874 aabd642596
-r19888 8648e1c8fa
-r19891 c882a2d675
-r19892 83d96af554
-r19893 797b2aeda3
-r19894 333f70873b
-r19895 370ab197f9
-r19896 7aa5ecea0b
-r19897 6f70a9f61c
-r19899 8284808cf6
-r19900 207b303157
-r19901 100112a580
-r19903 3f03586ba4
-r19904 0635b1a3d8
-r19905 cabf107814
-r19908 3d10835062
-r19909 b06fc095fc
-r19910 5be23003fd
-r19911 252ebb3281
-r19912 bc5eb3e511
-r19913 3bf4c1afc0
-r19914 b94c73656e
-r19916 c6fb331ae3
-r19917 d56190908f
-r19918 cf92cfb928
-r19925 b22086d0eb
-r19926 61cbe9441d
-r19935 15ba4abc82
-r19938 c6bc2a97a6
-r19939 e73ce61377
-r19941 41253da6fb
-r19945 706c86380e
-r19948 4559f45c7e
-r19949 9fe1f1503f
-r19950 43c1314333
-r19952 0f17201b10
-r19959 a55310838b
-r19963 c2359ccec5
-r19964 a3bf3f136c
-r19970 f54e15370e
-r19971 75d02a1a52
-r19972 87fa83d3f9
-r19973 a030f0d8b3
-r19974 ea22ed166a
-r19975 ef98846b86
-r19982 a9a967bc82
-r19983 e4af2ce209
-r19984 5697e1115b
-r19986 6995333a27
-r19988 7bee4c499d
-r19989 f2056ddf45
-r19992 38625cc96c
-r19993 62601656c3
-r19994 43d9fc1248
-r19995 7feaefb229
-r20003 0e9c5b7f85
-r20004 e7d2120bee
-r20006 a41307b3ea
-r20007 15add6cd50
-r20008 36b1d9cf1c
-r20010 8be82e1499
-r20011 ff2a9b4c58
-r20014 70ff72a16a
-r20015 3aea5dc898
-r20016 91d6fa1a8b
-r20021 4532a5d7f1
-r20022 e1afd5b323
-r20028 ba33e9ba99
-r20036 147ecff4e5
-r20041 de1d172a15
-r20042 1e88594f35
-r20044 873a28d90c
-r20045 e1c9a81e5d
-r20048 a4011632f7
-r20050 64f63ab396
-r20051 b42abff4c0
-r20052 721c6935fd
-r20056 24ad61eb2d
-r20063 d6cca14c48
-r20064 25d82e13f1
-r20068 a17785f8be
-r20070 8bd78809c4
-r20071 a4f1bfec2c
-r20072 2411320fda
-r20073 cf3c8e3e1c
-r20074 65db7124a7
-r20075 6bce02b838
-r20076 127147fb06
-r20079 4ee93c52c7
-r20080 eb8538483c
-r20082 e4fded7210
-r20085 f8d6169dd3
-r20086 63f5dbb0a6
-r20087 cd14cb81c2
-r20088 670bbca782
-r20092 1ba4b35866
-r20093 441f16c01b
-r20095 71e3f77d35
-r20096 505a7bc4e0
-r20097 b9d997e1d9
-r20098 db3d2518f5
-r20104 e378965dc2
-r20107 fffe6449d1
-r20109 8388f49560
-r20110 5472e3afc9
-r20114 1db89021e5
-r20124 461c798dbf
-r20129 cb1c0cf0a9
-r20133 8a89b68903
-r20137 e59e58b003
-r20138 4681d842dc
-r20139 6c7497dff4
-r20140 b0745039e2
-r20142 759ad530ee
-r20143 1c5db35b3a
-r20149 5330b36a5b
-r20160 a8dc5cbdac
-r20165 cc8e4136b6
-r20172 eb46c9ab39
-r20173 1a7200a1d2
-r20175 65bd378795
-r20178 f607fe4f95
-r20186 63333f9e62
-r20199 d8ef68e6a1
-r20203 88683ede7d
-r20208 248a992059
-r20209 d5f0ed310e
-r20210 3b620e31d3
-r20211 a25195fc1f
-r20212 05363648a6
-r20216 bbc126660f
-r20217 74f5d6fa90
-r20224 e8f34924dc
-r20229 32bfcc4194
-r20230 ce4572ca49
-r20231 a41d9351d5
-r20232 70ed6680a5
-r20233 7ddabed25a
-r20248 4faa918259
-r20250 691bc54190
-r20252 e7e0d49dea
-r20253 482cf0e2ef
-r20254 beb7392745
-r20255 b70347940e
-r20256 27f2d87d88
-r20262 348fd6e69a
-r20263 f9a751e444
-r20266 21e3410dd1
-r20267 a326f40dbf
-r20269 169b05aa40
-r20270 c163877ba8
-r20284 192c943c33
-r20287 ff1ecb5316
-r20288 3a0713b4e0
-r20289 ef2cb0f658
-r20292 2d12c10366
-r20294 14fcdff9c7
-r20295 d32b5bc758
-r20296 361a7a40d3
-r20297 cb4fd65825
-r20300 e197e3a1f5
-r20307 0cc326c767
-r20309 154326ab0c
-r20310 b41e97987f
-r20311 17f712ec18
-r20312 b858cef587
-r20329 e132d06e6b
-r20341 210a9552b5
-r20344 e5d37b199d
-r20349 6af8cbb361
-r20350 c10a035e1d
-r20351 053b6a686a
-r20357 8989a1bac5
-r20358 eebda61186
-r20359 e02fb0df97
-r20363 9e5fd5403a
-r20364 5d6a3f6382
-r20365 bdf13aaa1d
-r20366 df1139ee18
-r20376 2bf84d21a6
-r20377 d66a76c121
-r20385 9245c6a701
-r20386 f96931f98f
-r20387 e97ae22dd7
-r20388 64b0678d33
-r20390 7315339782
-r20398 57f14277da
-r20399 b5c141b4ed
-r20401 e525797f19
-r20404 677352f871
-r20405 4c879e3088
-r20406 6f3aa39042
-r20416 c63a271034
-r20429 dab6222b27
-r20437 9772ebe8ec
-r20438 60d5bbdf4a
-r20444 457fd68556
-r20445 d163f6971b
-r20446 466920e895
-r20447 250b45a124
-r20449 998a7b758f
-r20450 aa6811dae6
-r20451 91e88b3f7d
-r20453 c6c3b44b0c
-r20456 2f0d5beb47
-r20457 7ba3ff508e
-r20459 d1ac90fb48
-r20463 38cfa95dd7
-r20464 a6a9f23ec1
-r20465 65c180a5dd
-r20466 335f62ba63
-r20468 d75264a14a
-r20469 2664de4710
-r20476 895280684f
-r20477 6b9fe986af
-r20478 1b97738fcd
-r20480 4f2bcd1af4
-r20481 28c75a82ea
-r20482 f181a9be2a
-r20484 d64620b254
-r20486 fa0cdc7b3f
-r20487 020b930ec9
-r20488 25e7a7c350
-r20489 541dd58f4d
-r20490 1e828fdbf0
-r20491 34fe81a8a9
-r20495 763be33fea
-r20496 19bf31545f
-r20500 814683dd50
-r20501 23f89dd9e4
-r20502 9693cd5c2b
-r20504 eaa949005f
-r20515 df4d259938
-r20519 2d324f4506
-r20522 135ec13927
-r20523 a40276ad9a
-r20524 b0e6451e78
-r20525 3e1241caec
-r20538 9bd9b9fcc1
-r20539 74c615c835
-r20543 36ef60e68c
-r20544 d9b01e2c58
-r20549 3b00d9d7e5
-r20555 4bb4b8a08e
-r20556 3d47813cda
-r20559 518ac3d5fd
-r20560 d73a32db9c
-r20561 853b1817be
-r20562 0d5d440a68
-r20564 1184fd68b0
-r20565 0b77c407e7
-r20566 fdae184659
-r20573 e83ad1e005
-r20582 135d4f06b1
-r20586 41e80159b3
-r20597 efd68171b5
-r20598 6e0b81844b
-r20599 c4cacc0edf
-r20600 e077a9d6ae
-r20601 4ed1910b1d
-r20602 c19a721704
-r20603 556813ccdf
-r20607 08013877ac
-r20608 10ee5fd9ce
-r20609 8a1eab26ad
-r20610 7ea84d3542
-r20611 6dcfae7e8d
-r20612 1c1b6ef8f9
-r20613 a3d41894e7
-r20614 2d487cd460
-r20615 5fc0c8d78c
-r20619 61316fdc90
-r20623 a259a744bb
-r20624 164fa5151c
-r20625 0ad899b34e
-r20629 80ad0e7b37
-r20630 7eea9f2823
-r20631 1ab0d9ea48
-r20634 ac9fb6ad28
-r20635 daf9227e73
-r20639 bb6e5958e6
-r20640 a0c0f09497
-r20644 895c271ead
-r20645 21fbde04b4
-r20646 7d4cea0a99
-r20649 7140e9c3ad
-r20650 e4e513079f
-r20651 743e8782a1
-r20654 2a1f11991f
-r20655 361051b4d3
-r20656 ea7ac7b389
-r20657 4591dabb1f
-r20658 f8bcd67d50
-r20659 34bc787b08
-r20660 02c6aa766b
-r20661 0516cd02f1
-r20662 89fee4efe3
-r20663 6c88e2e298
-r20664 c3d125891f
-r20672 70cc762d3a
-r20673 589adb9563
-r20675 d90d03d55a
-r20676 6975d16800
-r20677 6441087c31
-r20678 8856f21f59
-r20681 f6183b63f2
-r20682 06c7657555
-r20683 daa6f82dd1
-r20687 311622a6d1
-r20688 94d2758147
-r20689 96270a3450
-r20690 e12005a107
-r20692 c01d264766
-r20693 f375f8ac3e
-r20704 71a0d2773e
-r20705 a7ad163b51
-r20707 953fecc029
-r20710 f6c69106d3
-r20711 6a79e29cd8
-r20712 b08a2a652f
-r20713 88a93f2bd3
-r20714 5b64d91b20
-r20716 6964699e92
-r20718 690542dbe4
-r20720 f5dc89196d
-r20723 7d08bfed78
-r20724 449c680774
-r20727 36707c33be
-r20728 a3da2dca9f
-r20729 ad0fd8bca3
-r20730 bb149d1b96
-r20734 c73ab4525e
-r20735 3078e17093
-r20738 0bc49d7c61
-r20739 1c8ab3a6ed
-r20740 e73348dc9d
-r20744 fe9126e5a3
-r20745 bdf37de86a
-r20748 e75346d68d
-r20750 b6cdaaa3db
-r20751 131b264b25
-r20752 490ed74ff8
-r20753 3282ac260c
-r20756 b80125cb3f
-r20757 07629c3c12
-r20761 3502dadad1
-r20763 2b20a98b3f
-r20767 5df06dc8da
-r20768 a469bd9637
-r20769 c8203f123f
-r20771 4aeae5f9c7
-r20772 9f55ad82d1
-r20776 0ae8343fd4
-r20777 909924acba
-r20778 a6eecfb045
-r20779 96a42a2eda
-r20780 6cb01719eb
-r20781 e6a0063d29
-r20783 19e78a93e6
-r20785 2b82a20d75
-r20787 93277ea020
-r20788 9ee1f2f3b8
-r20789 a1a6ab90ac
-r20790 bf696d016a
-r20791 429da0c3c7
-r20793 67b215e974
-r20794 7c19904e48
-r20795 a572d2d56d
-r20796 bd3afbf36e
-r20797 e979241c0e
-r20798 28837470cb
-r20802 96dc0e44e8
-r20803 f203f3adfd
-r20805 1e29061536
-r20806 b4d8becafa
-r20807 9691e49efe
-r20812 982baae076
-r20816 8d4f65fb24
-r20818 7577ec4388
-r20826 ac7dc3c102
-r20828 3033d4c30d
-r20829 150e1d69c5
-r20830 53545e7af8
-r20831 171d21f11a
-r20832 b627de8553
-r20834 68bcaee6c1
-r20835 1b99b4b148
-r20840 71e03e4aca
-r20842 ebceb2fa8d
-r20843 d983dc8c26
-r20844 5087792dda
-r20849 d4486b9e2e
-r20850 1c8210ec7e
-r20851 96a7efb1fd
-r20852 a165920200
-r20854 4de81a05b3
-r20855 06ae221de9
-r20856 6e76af56f7
-r20857 a8ee0a1a93
-r20858 821e11d056
-r20862 6a416d51f4
-r20863 c37cb5ad1d
-r20864 a78bf650be
-r20866 e9a60f236b
-r20867 1e166a7a82
-r20869 bbeecf2b78
-r20872 7a8973d40a
-r20873 2040ada34b
-r20874 30e65502ff
-r20878 d04911d894
-r20879 730720552b
-r20880 d7ad3f3487
-r20881 1ec5bf5c82
-r20884 15dfc92cdd
-r20885 d14841d095
-r20886 13da5ccad3
-r20887 369d3ca26f
-r20888 821229741d
-r20889 9132454143
-r20894 5e993b77ec
-r20895 cc698e70af
-r20896 f059062578
-r20897 a6b2e34c55
-r20898 80b0d24134
-r20899 1f8b43be3b
-r20900 2e6f4e7246
-r20901 ab33bb1b34
-r20905 e8ffe2674a
-r20906 b2e9e1b26b
-r20907 29ce74418d
-r20908 8a85f07da3
-r20909 84da1b2033
-r20911 09816ef0d3
-r20912 0e439d6d30
-r20913 f83314aa82
-r20917 cf2f9d7fbe
-r20918 23e5428008
-r20920 388a0c0d1d
-r20921 f592fb0520
-r20922 a2da1ebe61
-r20928 dd89e9c089
-r20929 cabe517050
-r20932 d6fb9d7809
-r20933 ff32248e9a
-r20934 71e84137b6
-r20935 7a339e84c2
-r20936 099f42f725
-r20937 d8a75fda44
-r20938 3bc73c1e1a
-r20941 18aa7f0c80
-r20942 f07bdbab91
-r20944 91cdb15316
-r20945 6e061d6f25
-r20949 57d38b321e
-r20950 669ce2013e
-r20951 acb161272f
-r20952 8d74992310
-r20953 df94b3c5b8
-r20954 db511fee56
-r20955 1558069de5
-r20956 7cfbc47200
-r20957 68cbfeac52
-r20958 84ecd8c45a
-r20959 6022f4b5d2
-r20960 3ceebd6ba6
-r20961 1c75ee54a6
-r20962 ea09870b1c
-r20963 152d22dbd0
-r20964 39c117a822
-r20965 de56fa0693
-r20966 303a4b33f8
-r20967 3f9364fc49
-r20968 145b61f50b
-r20969 6b834672a1
-r20970 865a9137db
-r20972 0284428a9a
-r20973 415fced48d
-r20974 f270f7ecfb
-r20976 f84684ee02
-r20977 cd5525a989
-r20978 43b68ece97
-r20979 4aa7ec183e
-r20980 2bf3a560d6
-r20981 8a36e97b10
-r20982 ebe8a875e5
-r20983 46e78e4589
-r20984
-r20985 53f4fbaa79
-r20986 c6facf49bb
-r20987 f479aff274
-r20988 7312300d33
-r20989 6ca74641f0
-r20990 10d7b668b9
-r20991 e81eeb3679
-r20992 ae71711ffd
-r20993 6e768fe8c5
-r20994 52f85091e1
-r20995 1911d4e96a
-r20996 cc9e8eda33
-r20997 93f8dd3a4e
-r20998 0dd2f30edb
-r20999 d5ae4c69b0
-r21000 00814d33ca
-r21001 cda9718a21
-r21003 2b1513b35e
-r21004 462e27a358
-r21005 64fd0c1346
-r21006 b19089db0d
-r21007 ddecf60083
-r21008 646c478b3a
-r21009 7476ed45af
-r21010 432e16ce90
-r21011 ba5dbbd44d
-r21012 9bfc0f0ac6
-r21013 b94c6e0da6
-r21014 07f1f6dd14
-r21015 42e67f1420
-r21016 7214dc0e23
-r21017 2356f6751e
-r21018 a73bbdfed1
-r21019 d18435dcd2
-r21020 6fa82c014c
-r21021 3aa1da6596
-r21022 fc03eabf5d
-r21023 c8e224eaec
-r21024 60ae43e753
-r21027 d3bf2e7801
-r21028 9690b45b3b
-r21029 dae85e321a
-r21031 dc9bb26306
-r21043 2a04d57787
-r21044 1b5c4b93ec
-r21045 649c18aeae
-r21053 0200da2d12
-r21054 65520ac86f
-r21058 34b8e8fcbb
-r21059 66509d1f68
-r21060 acf89aafe5
-r21062 38babc2678
-r21063 006eee0388
-r21064 1e84701e1b
-r21065 5679285ec4
-r21066 f9c2792695
-r21067 cb39da4caf
-r21068 98c87462f7
-r21071 4e7fd5ce08
-r21073 34b2093601
-r21074 87b2ffd8db
-r21075 833b9e671a
-r21076 55b69cb447
-r21077 dcca0ea0d7
-r21078 603f715f52
-r21079 0433d88432
-r21080 a4558a403a
-r21081 3447b38abc
-r21083 8d59708911
-r21084 68c2fff4c1
-r21085 121164ef71
-r21086 5f9c20c232
-r21087 60e50904a3
-r21088 69d8830083
-r21091 fee21b7e70
-r21092 217415af22
-r21093 2f5e867066
-r21094 b13d8fe24e
-r21098 b6c6e8f353
-r21099 aff35a066a
-r21100 7144b4990f
-r21101 2b0dcfe636
-r21102 b10b283498
-r21103 b7c17993c6
-r21105 13f24056a4
-r21106 57261cf375
-r21107 b9691e331e
-r21108 5f7ddb20ab
-r21109 fa34ce4700
-r21110 1c795cdd5d
-r21111 5e6367cca2
-r21113 bde2b7880d
-r21115 0708b61d19
-r21121 c3d86bfed3
-r21123 bf032aea51
-r21124 0f5c2696c8
-r21125 10bcc73bad
-r21126 ff2ef2fd44
-r21127 193df0b93d
-r21128 6ee849b6ee
-r21129 23d5dfc76b
-r21130 6aa285809c
-r21131 d12ea6d31f
-r21135 6aaf4a3d5e
-r21136 8d2876cc7d
-r21137 baaff96be8
-r21138 dd7dbea581
-r21139 356540e284
-r21140 f584d24348
-r21141 8352022054
-r21142 32e1da60a1
-r21148 1c4651b9b1
-r21149 98a5d29539
-r21150 51850896c5
-r21151 ce67a15560
-r21156 56dc3ded65
-r21157 3ff77430de
-r21158 4eade93cfe
-r21159 1b14f49ff2
-r21160 2f3988dd7c
-r21162 860f2bbe85
-r21163 605b7c5aeb
-r21164 08437bb245
-r21165 70d4eb9654
-r21167 f972729b04
-r21168 746f8ddcc7
-r21171 cc1a2efec3
-r21174 2ccf6d3b00
-r21175 2f0a415e1f
-r21176 fc6b3b0c62
-r21177 2b05807142
-r21178 f1e0c8f025
-r21179 505bbf0b34
-r21180 1dbc0d0fc1
-r21181 324eeff963
-r21184 166c496d57
-r21186 b61957e6f0
-r21187 3bcd23488e
-r21188 4a2e3d4175
-r21189 533c7397ed
-r21190 e21283e8a7
-r21193 2515edd33b
-r21195 70de5c3890
-r21196 115ca80a0b
-r21199 5ea6fc6807
-r21200 704aa0362f
-r21201 c2a9a308cc
-r21205 7fb02f53de
-r21206 9f4d2a906f
-r21207 fb399bce3a
-r21210 46ddf14b45
-r21214 bf2da77cef
-r21215
-r21216 05c22ec2ee
-r21217 c059e09cc7
-r21218 d2726ea605
-r21219 6915c987ac
-r21220 f2be3e6836
-r21222 6613b1cdae
-r21223 44fddf7540
-r21224 a4f00eaf4d
-r21225 6353b3711f
-r21226 3d7e9c11ad
-r21227 1935b66102
-r21228 a263215e09
-r21229 4eff9e1cd5
-r21230 88aab1cf8e
-r21231 ae8c065594
-r21232 a4aeb2d0a9
-r21233 fb8c14ea43
-r21234 ef1577a9c5
-r21235 2e1aefd118
-r21236 5b394541a2
-r21237 011377a2c7
-r21238 26a2abff27
-r21239 c452268c13
-r21240 10be8dc785
-r21241 f52d79f1fb
-r21242 058b878c02
-r21243 c44c00ce76
-r21244 787e286505
-r21245 172b58c99f
-r21246 98cb7ad7c4
-r21247 c21980c483
-r21248 408f351c13
-r21249 916d6fbc82
-r21250 64d2ab49ca
-r21252 cb9f3c3d0f
-r21253 c7c8981b43
-r21254 d43ccc679d
-r21256 a09cf5dbf7
-r21257 3617996351
-r21258 c80d4c8b3d
-r21259 040e4480b5
-r21260 c968d3179f
-r21261 824e71d603
-r21262 36ca453919
-r21263 ab492f44e0
-r21264 3931ab281f
-r21265 56003e8535
-r21266 0edfb35371
-r21269 63103a5e1a
-r21271 1cedf8047b
-r21273 c0b615fe80
-r21274 6ee24a3c5d
-r21275 aa406f4b82
-r21276 f427b1e67d
-r21278 2bf117c3b2
-r21279 edcf568e61
-r21280 84a2f65e77
-r21281 22a037557c
-r21282 73dfbd2fb0
-r21283 323057ba4e
-r21284 ec127ce60d
-r21285 0c8e219596
-r21286 f349e24ea0
-r21287 25d87efb94
-r21288 a7dc91be7a
-r21289 40fdbddc05
-r21290 ee81323908
-r21291 59da69b707
-r21292 f500aeb1fd
-r21294 83c817f84c
-r21295 9751508956
-r21296 c72f823f16
-r21297 2d8b1c7ffc
-r21299 f0624e1937
-r21303 0e7403eea2
-r21304 e7e15da74c
-r21305 ad036896d8
-r21307 469dc5ebf0
-r21309 f32f872269
-r21313 7b43c30aa1
-r21322 cd51ac694d
-r21323 d5c7049d4f
-r21324 d1372c1541
-r21325 86af709d76
-r21326 081df6755b
-r21327 1ce6d9abad
-r21328 28ed5c6b21
-r21329 e8a121e9e1
-r21330 edc621d245
-r21331 d59bde5a11
-r21332 b454bbc5a4
-r21333 b6f8761f03
-r21341
-r21342 3b8ee6d4a9
-r21343 f578ff88d2
-r21344 4aa006cecd
-r21345 4ca7a22d9e
-r21346 1cc838b634
-r21347 a292a87fc5
-r21348 e0cf98dd42
-r21349 50ed222b48
-r21350 bb1482ef2c
-r21351 288c4aaa29
-r21353 2a8667d1cd
-r21354 d5b8082ce9
-r21356 9a8ba0c877
-r21372 82eb13cc08
-r21374 1b098c643a
-r21375 6dd51419b8
-r21378 af6da0b41e
-r21379 a2f3507a56
-r21380 67959c5913
-r21381 24bc8b350a
-r21382 0e437ba309
-r21383 ad0cb2873f
-r21390 82deaa1e79
-r21396 3cc8af6179
-r21401 2ff464685f
-r21402 9bed3788ba
-r21403 27ace8351a
-r21404 a5105c67d2
-r21405 9378ba126c
-r21406 68504813ef
-r21407 73648228ff
-r21408 d76943f9ae
-r21409 710e1cb6c4
-r21410 f218c00988
-r21411 0528b12ed4
-r21412 04e60a56e9
-r21413 2209c911ce
-r21414 53256b43ff
-r21415 9fa486fb6e
-r21416 1a77a3b4ce
-r21417 457a672d6f
-r21418 c46a200d8c
-r21419
-r21420 2dba26ed12
-r21421 f1044e136b
-r21422 0dbc3ea559
-r21423 2b59cbaafa
-r21424 0d80fa2d50
-r21425 261e399ba3
-r21426 8fc50d2aa7
-r21427 33aa7965dd
-r21428 1915363914
-r21429 eec07a4284
-r21430 56584c300f
-r21431 83d8f0b8f8
-r21432 b1307080fc
-r21433 b535c77592
-r21434 519214dcc6
-r21435 e2decb09ed
-r21436 1e6de3dcbe
-r21437 71b6aca681
-r21438 e93c1a93a2
-r21439 973c00923d
-r21441 18700fab3b
-r21442 beebad1bc4
-r21443 22c16774aa
-r21444 38c1f9741f
-r21445 9c4905dce1
-r21446 9722186804
-r21447 3750235190
-r21448 8ee1f32478
-r21450 e7718496ee
-r21451 ad596fcfc7
-r21452 67b1041a85
-r21453 ebe772d693
-r21455 bf3e7d4900
-r21456 8ced5e85f8
-r21459 dd9a1245ed
-r21467 bed1ffb1c3
-r21471 cfe47e4b74
-r21472 81c7ff7ef7
-r21473 800d9d8fe9
-r21474 9cf7f2c71f
-r21475 08496424f2
-r21476 a5051ddadc
-r21477 484134e4f5
-r21478 e96091a44f
-r21479 248c72814a
-r21480 03e6cd1400
-r21481 ec5a4e8f47
-r21482 b53884e8ad
-r21486 7693ab0dec
-r21487 6dd3250020
-r21492 9361f2d069
-r21493 c315a6fe9c
-r21494 b3f909df2e
-r21495 f7340c3abc
-r21496 d0475494b2
-r21497 303d9f812b
-r21498 0beec15420
-r21499 18f75625a8
-r21500 010889645c
-r21501 8ec16299c8
-r21502 70322ab6ba
-r21503 814f097feb
-r21504 b6f7f79384
-r21505 734f709290
-r21506 c1f1a2cfdf
-r21507 0721367ab2
-r21508 b8b6507a3e
-r21509 beee01e9ec
-r21510 7015c96b21
-r21511 9e155f4956
-r21512 406e54b7e5
-r21516 4f12f2af97
-r21517 00581b645b
-r21518 e8c80f152f
-r21520 628b2edf73
-r21521 5055ee1d62
-r21522 ea91456310
-r21523 aad801fc89
-r21524 11663541b4
-r21525 d98e426541
-r21527 bb1a2d20cd
-r21529 35f9176e79
-r21531 c54b7a99e8
-r21535 bc791369f7
-r21536 1973a1f7d3
-r21537 bf0921a072
-r21539 174c1721ff
-r21540 e20c986ba1
-r21541 9024ffbfbf
-r21542 765864526d
-r21543 ab257556c9
-r21545 a0cd7f2fca
-r21546 41d9ea1452
-r21547 27288e3ffe
-r21548 382dd00508
-r21550 3b2c0466a6
-r21552 6d0d855d49
-r21554 248ae6753e
-r21555 6c213d1c81
-r21556 7d6f1e7e4e
-r21557 c272bbfb64
-r21558 d95eb2a8f9
-r21559 ee10da727b
-r21560 c89c953796
-r21575 4afe5f122e
-r21577 c0d1bc031e
-r21596 348271c8b2
-r21597 4fb3473182
-r21598 41860ffcf7
-r21599 11398dd393
-r21603 2c8f5c5a82
-r21604 91b6426788
-r21606 9b54f56bde
-r21607 ff714a4621
-r21611 0ffb0708fa
-r21616 0acdb6a68c
-r21620 41c280194d
-r21621 199f6f6cb8
-r21622 9933cbe4e4
-r21627 c5441dcc98
-r21628 22b66d601b
-r21629 b2deee49ce
-r21634 4214e738c0
-r21635 0b0513fd6c
-r21638 0c6fe023cd
-r21639 326065c5ec
-r21640 cf26f62070
-r21643 a17a4dc157
-r21644 db0d40b73c
-r21645 c8266ce2b5
-r21649 3861a3a42e
-r21650 dcbffd4dc5
-r21652 d16e517303
-r21655 e4716c234d
-r21660 618b55fa8e
-r21661 42ebea46c7
-r21662 3400802903
-r21663 17ce401dbb
-r21664 947ed04398
-r21665 db8bd90da4
-r21666 eb1ee924dd
-r21667 6736ca07f2
-r21671 a0e5e165c9
-r21672 ee1042f8c6
-r21673 810deda16a
-r21675 a29eafaf4b
-r21676 1148683005
-r21677 bd66ed93af
-r21679 ce27db8021
-r21680 9af947ea3a
-r21681 796d24e102
-r21684 8b58d4360a
-r21685 aed5acd725
-r21686 2fd048855d
-r21687 3b24fde836
-r21688 4ab780e8be
-r21690 c2f6ae9755
-r21691 e73312494c
-r21696 bc17cc6c03
-r21697 cf552d7f27
-r21700 4f24cb62ce
-r21701 fa715fdd66
-r21702 15fecdc78e
-r21703 f99b3ceac6
-r21704 622c15815f
-r21705 0675d244e4
-r21706 9b16201d2c
-r21707 99cbff74b7
-r21708 4a785c8727
-r21709 1f7165c5d4
-r21710 af4338c2b2
-r21711 677ca58efb
-r21712 fe0a2ac4c3
-r21714 4f5a598284
-r21720 3db6fcb7bf
-r21721 32cff2050f
-r21722 231cfbe1c0
-r21723 9b066f5a1e
-r21724 b86d72b35e
-r21725 45e3ff972c
-r21729 922938dc87
-r21730 54e1e31679
-r21735 8f2d31cbcd
-r21736 151d1ec579
-r21737 ee5daee5d8
-r21738 d6178b3a10
-r21747 8a6e20ce4c
-r21748 78ca916a09
-r21749 35e8818609
-r21750 a2c3cdf668
-r21751 4bd4c7f4d4
-r21752 37893fe867
-r21753 8a3ff479f2
-r21754 8eb1d0c6ac
-r21755 5b937bacd3
-r21756 18cdaae4b6
-r21757 d43999e5d0
-r21765 a514ab4fe1
-r21766 4758f2a87c
-r21767 f662b62e2b
-r21771 6c86ba45ef
-r21777 3c2edb472a
-r21778 a46601aa3e
-r21779 5f75746b66
-r21783 3ec6dba7ba
-r21784 b8e90e8aef
-r21787 37a5c47ac5
-r21788 df78ff25e3
-r21789 6bc86b8248
-r21790 7abeacab53
-r21791 02ad6bb966
-r21792 c473291597
-r21793 20192c84a9
-r21794 185b1c828a
-r21795 2c0731e106
-r21796 115d774e47
-r21797 7868f336ec
-r21798 a01b81352f
-r21799 2c45d41b37
-r21800 19ec1c5b7e
-r21801 09bbc6ea28
-r21802 60cd12f770
-r21810 dabf2c23ef
-r21811 c2002c8361
-r21816 acc5c7e650
-r21817 0f4b2306ec
-r21818 7cb9037e17
-r21826 cb35c38f14
-r21829 c55b106f50
-r21834
-r21840 aa09cc3505
-r21845 b8e0795548
-r21847 536fa4d9c8
-r21853 d1185713fa
-r21866 8fe7b53164
-r21881 f8b4ca8cf0
-r21882 0319fec702
-r21884 601729ad84
-r21885 db50a62b62
-r21886 bfb49242b5
-r21888 d484df935d
-r21891 e6ff7d3557
-r21897 57a0b3d165
-r21898 180c6d047d
-r21901 582c53207b
-r21908 a99710111e
-r21914
-r21915 f9ab50b25e
-r21917 c7c69ea245
-r21919
-r21920 ba1c91710f
-r21922 0ed53d4d68
-r21923 016d815104
-r21928 fd5d20d2cf
-r21929 7c7c267d4e
-r21930 5f5660dd6e
-r21931 e7ce9b9723
-r21932 fa75d20c42
-r21933 a239e85e65
-r21934 33ff703da2
-r21939 f6ee85bed7
-r21940 a193d9f42d
-r21941
-r21942 7b822f2866
-r21943 d97b3a8066
-r21944 f4420e7b13
-r21945 bf82ecbcbe
-r21946 54523bc2fc
-r21947 b7888a61f8
-r21948 b7f77112a5
-r21951 0577b21098
-r21952 dd500f0f57
-r21953 092ef8f8f7
-r21954 516a00c88c
-r21962 b081940e5a
-r21963 a3bbcdbfc6
-r21964 1b06a599ca
-r21965 da8253c2e0
-r21966 e0c2758ed3
-r21967 b7781f0d87
-r21968 ebfcab7b96
-r21973 4d11985231
-r21974 d6191fcdbf
-r21975 da86fbe4a8
-r21979 7df797939b
-r21980 f139afb941
-r21981 50bf167d08
-r21987 b96804031a
-r21988 4debc5bf1e
-r21989 293b70525e
-r21990 dba07aa5a4
-r21991 136f08e7db
-r21992 6c1a68c847
-r21993 20919ccb1a
-r21994 9dae73d4cd
-r21995 448c34d11b
-r21996 bb141f2c7d
-r22001 1fa7a9373a
-r22002 1a66cb2193
-r22003 90c59eb70a
-r22004 4382c7dd6e
-r22005 712ebe2943
-r22007
-r22008 2ae12a5c6d
-r22009 354e05b8db
-r22010 0df04f17e0
-r22011 43cc66eefd
-r22012 6043ad6f8f
-r22013 5b391ab536
-r22014 9a3f9c0e79
-r22015 c8b3ae91ad
-r22017 3bad6d54b1
-r22018 41d361a9d2
-r22019 418b041eb4
-r22020 a33ef273d0
-r22022 67a650205b
-r22024 a3c413084c
-r22025 6fc37a1324
-r22028 5628970b43
-r22029 4b10a4ca64
-r22030 56313be050
-r22031 885f76fd05
-r22032 bb83cb8ba7
-r22033 6ecd2f3ef0
-r22034 d38342768a
-r22035 ddea6d37d4
-r22037 e3c5bb68a1
-r22038 97abbae86a
-r22039 910adc615a
-r22040 4e3c1a99e8
-r22041 83630c3ce6
-r22042 5e9d2809eb
-r22043 0301bcfa43
-r22046 bf7eee0889
-r22047 f80f8033a7
-r22048
-r22066 5da8a164cd
-r22100 0b006e7762
-r22108 6e3814fe9e
-r22114 8acca208ae
-r22115 f3d87c08f6
-r22121 2eab8f3134
-r22130 8e2b780c61
-r22131 30d9767343
-r22137 3bff39ce76
-r22140 a708aa88f4
-r22141 de67e153ee
-r22142 3281d0627b
-r22147 60354bdda2
-r22148 4e1907afb6
-r22149 cb6db4169a
-r22151 043889d581
-r22152 43e5eff2c8
-r22154 e9d3987da7
-r22155 67d0f1050f
-r22157 bf17437453
-r22159 09f490bd56
-r22160 ebb6c4a2d9
-r22161 245ec93fb1
-r22167 da5910c7c6
-r22168 84b86a977e
-r22170 d3a747882c
-r22172 5440040432
-r22174
-r22175 407ba61ff6
-r22176 eebb8695e2
-r22177 0e413bc755
-r22178 dd396886d0
-r22182 e67f560766
-r22184 1c243de3c6
-r22186 d6896c490a
-r22188 caa6bf0e7a
-r22189 a1e29d20aa
-r22190 d112ec1f88
-r22194
-r22195 905c3126ac
-r22196 22ea4e87f7
-r22197
-r22198 e045a3ff33
-r22199 7aae8c7cbc
-r22204 0f5d5c58ec
-r22206 f8429e2fcd
-r22211 5ad8adecf8
-r22215 8512b81f4e
-r22219 a2875b700b
-r22227 afe4edad3c
-r22229 3c85de708d
-r22234 a2a14fa803
-r22248
-r22249
-r22253 d300a5817f
-r22260 436a7d8636
-r22261 d3a7702162
-r22275 f492b00323
-r22276 a8d02cd6b6
-r22278 2b458481ed
-r22285 c52aa972a3
-r22291 ef9fea4f2e
-r22295 ee23aefccc
-r22296
-r22297 1e08467076
-r22298 bf1b8d136d
-r22299 de7fbb051b
-r22300
-r22303 0c6cbdac43
-r22310 85d5a0cfcd
-r22311 b23b36e655
-r22314 8af697d20f
-r22315 9cc51c6d4b
-r22316
-r22317 2db73a027a
-r22318 806f2f67c3
-r22319 e3fd6b82e0
-r22321 97bd54ecf3
-r22322 4e9d57fd26
-r22323 59dc9f40bd
-r22324 fd9ddea91f
-r22325 b9034f4cd5
-r22326 5f25a7cf9a
-r22331 9e0618ba29
-r22334 f750b08d9e
-r22335 b9fb76d09d
-r22347 18ad78dd73
-r22355 ceec792d1a
-r22356
-r22357 9923b97157
-r22358 cb367e28ee
-r22359
-r22361 109924d63e
-r22362 c084ad2bcd
-r22371
-r22372
-r22373
-r22374 b040ad441b
-r22379 c65032c3f6
-r22380 104193705e
-r22393 e938bb961f
-r22396
-r22399 5b8cba103c
-r22400 dee314b7bc
-r22409
-r22410
-r22411 9f6b596c7e
-r22414 bf63903073
-r22416 1067f5f55c
-r22417
-r22418 b2abe22c97
-r22419 52b863dd86
-r22420 24a694fe23
-r22421
-r22423
-r22426 9d5bc93142
-r22435 846040bdd1
-r22445 31dcef9d4c
-r22446 12c8a6113e
-r22448 574f77446b
-r22449 b4528e7730
-r22450 66de11cf7f
-r22451 6a949bb61c
-r22452 49344ed1da
-r22453 3501f38288
-r22454 6abc0a3ebf
-r22455 5a84bffb2c
-r22456 02f73a54ee
-r22457 7bee6a5400
-r22458 f0e000d759
-r22459 deaf94e5f2
-r22460 a0bacadc80
-r22461 c2a3d50262
-r22462 74eb6b70d5
-r22463 60a7e53a5f
-r22464 9421f2ecaf
-r22466 57b7e442af
-r22467 f911b5da55
-r22468 63dff5e57a
-r22469 38912509af
-r22470 58adc8d999
-r22471 fbc4533975
-r22472 328651c39a
-r22473 8eee437289
-r22474 f5f71f2d02
-r22475 d9dc68cd2b
-r22476 4dd14ec6f6
-r22477 78b419c329
-r22478 322e856f13
-r22479
-r22481 39e4641ec9
-r22482 7a8a37e5f1
-r22484 302b1df81f
-r22486 4db2941031
-r22487 4d69f2d6eb
-r22488 b053d329d3
-r22489 536cdd87be
-r22490 8a2c52b105
-r22493
-r22498 c66d3b0d44
-r22499 02ac95f076
-r22500 44d1000e70
-r22501 aff3ddde53
-r22508 356abe3a5b
-r22509 d7814a2359
-r22510 3c85f13569
-r22511 0cbeaf17d8
-r22512 bc5ac3dc9a
-r22513 68aeeae422
-r22514 27cdc8ab7f
-r22515 3a1d34eebf
-r22516 c9827c4a98
-r22517 b54e416219
-r22518 45528c7e3b
-r22519 fcb0419a27
-r22520 06f0f80ed9
-r22523 2182f4d283
-r22524 ba975223e8
-r22525 c66898e5be
-r22526 0394b8426f
-r22527 029482c86e
-r22532
-r22534
-r22536 a02ff1ac0e
-r22537 e036e2da98
-r22538 87b48f8686
-r22539 b05c0fa47d
-r22540 a012c4c920
-r22542 fe378b7d81
-r22544 6af63c5203
-r22545 ada6cccb35
-r22549 78d96afa56
-r22550
-r22556 0661398ceb
-r22573 d93ab70b47
-r22574 bdbaba4cf0
-r22584 289e6a43d4
-r22587 d36dcfbf9d
-r22588 5c9400467b
-r22589 a6bb10a310
-r22590 9c365348fd
-r22594 7ca4628b2a
-r22595 30896b2f45
-r22599
-r22604 60d56501a0
-r22605 7634d75934
-r22606 c386234edf
-r22607 9972040b0f
-r22608 f7d2a3fa4e
-r22609 272a147c77
-r22614 644a80be87
-r22618 fdc1be772b
-r22619 1e3a43e74f
-r22620 f5bc26b45f
-r22621 97b7cc4ddb
-r22624 da234921b7
-r22625 315e1e79e2
-r22626 74868d53db
-r22627
-r22628 280cc3fe3e
-r22630 0ce0ad5128
-r22631
-r22632 c6cc8c7282
-r22633 3630e9ba45
-r22634 9d3eef33c5
-r22636 bc0ed202b6
-r22639 5aeca8a716
-r22641 db5f08d5bb
-r22642 04e2cccd0d
-r22643 f0a7202589
-r22644 26bbdbe3a2
-r22646 e3ca222e48
-r22647 69ff5578c0
-r22648 c479dcdd98
-r22649 8992596004
-r22650 f9fe76375d
-r22652
-r22657 ed3c7e54fc
-r22658 3d6fe98b65
-r22667 a14012bd56
-r22668 12a41f6dcf
-r22669 958fb1c6f4
-r22670 db99926628
-r22672 bf44cd12b1
-r22674 8a8172da3c
-r22682 23bd1501fc
-r22683 e51d5de4cb
-r22684 c690bf16b9
-r22685 0a787b6477
-r22687 20efb133c5
-r22690 50a178f73e
-r22693 d4e2058a3a
-r22694 95d7ef40eb
-r22695 0d7f67df70
-r22698 f36ea69f64
-r22702 ed3dddae4e
-r22703 40aafbdf1a
-r22710 3ac03c3d3f
-r22711 5a50d83a33
-r22712 e5efbddf19
-r22713 024c0220d1
-r22721 ca0bb2c419
-r22722 1809c97bb3
-r22723 1e68079614
-r22724 9d7586adab
-r22725 001cf628f1
-r22726 04c38829b6
-r22727 41bfef8087
-r22732 3b8fee9184
-r22737 e3743b812a
-r22738 b781e25afe
-r22739 596ef0e94b
-r22740 4b9de7deb2
-r22751 29f9d75674
-r22754 9550c2077c
-r22755 d0f2062493
-r22762 72c11c60b1
-r22763 c3cfb6cfc9
-r22764 fc2749bfa7
-r22765
-r22766 11ae7ea080
-r22767 7155c1e129
-r22775 d91edb59ee
-r22776 a8ec5198cb
-r22777 1427045ab6
-r22778 daaede456d
-r22779 3ca4c6ef6c
-r22780 ed98119165
-r22785 385775c0c5
-r22786 e1232ab57a
-r22791 4fb0d53f1c
-r22792 86d07ffe72
-r22796 9d202a7a8d
-r22797 1ededc1ab0
-r22798 16adcd1fa8
-r22799 11f2760b59
-r22800 8bef04a234
-r22801 d8fed0f583
-r22802 40f8f77339
-r22803 d4645f9372
-r22804 e11cac6ecc
-r22805 fc735859ff
-r22806 b3982fcf27
-r22807 3c001a598d
-r22808 a43eac7510
-r22809 bd6914a7c2
-r22810 7adc188a07
-r22811 0cab741d08
-r22812 b64d195601
-r22813 e176011b88
-r22814 f6843150fb
-r22815 6c2c125d1b
-r22816 c5650b9f7d
-r22817 32de7fe412
-r22818 95e096797a
-r22819 cde87ec0a7
-r22820 d4e44a6565
-r22821 6892195b1f
-r22822 7b387e898c
-r22823 081b838897
-r22824 38e707849c
-r22825 0fc61a72e4
-r22826 74da0c7851
-r22827 38ba1149cb
-r22828 2c14b262e9
-r22829 3db5daf609
-r22830 79a7191e60
-r22831 e987f72df3
-r22832 5056993477
-r22833 bb7b9fe850
-r22834 3657dd345f
-r22835 de1f665939
-r22841 cbb97ea113
-r22842 b3e8963c30
-r22843 e73fa382cc
-r22844 b54b36af8f
-r22845 559000b732
-r22846 d20380ea9a
-r22851 799a2b0e28
-r22855 501a7c1bb6
-r22856 c0b806f709
-r22857 f61d2d2f4d
-r22858 af8f7ed60b
-r22859 41e2c237df
-r22860 8964f6f1bc
-r22865 faed687d92
-r22866 185d04643d
-r22867 4af85c28c4
-r22868 9db3f49ff4
-r22869 b0c8e27156
-r22870 64fab04e4b
-r22871 8b0de323fd
-r22872 2a6a1f370f
-r22873 de664fbc0d
-r22880 fb950eef15
-r22892 5827534754
-r22893 d367ae7b26
-r22896 8f1a52438a
-r22897 707baf25a2
-r22899 801280e6f9
-r22900 926f64007c
-r22913 a420fd587c
-r22917
-r22920 f1a211eff6
-r22922 bd52cc368e
-r22928 e594fe58ef
-r22930 0d8ba6ca38
-r22931 b3256eda66
-r22932 3bbfd70e39
-r22933 9813e37ca6
-r22934 ad22d88f56
-r22935 ec0f4422e0
-r22937 b7db974606
-r22938 441956b523
-r22939 4dcc114183
-r22942 02783a4743
-r22945 ea710916c3
-r22946 ee5a5d6294
-r22947 aebeaad6e4
-r22948 b5c2052735
-r22949 6dfcae30bf
-r22957 ec7cc94358
-r22958 56d5033a4d
-r22959 f7751134d1
-r22960 ac499bec25
-r22961 4d0f311f8f
-r22962 5a150395e7
-r22963 aab959bbe2
-r22968 3b4343886d
-r22969 672c1356ef
-r22970 f7a6c8823b
-r22972 cfb6168dc5
-r22973 561a8077e6
-r22974 6a21106690
-r22975 964cceed6d
-r22976 c40a798bf0
-r22977 4c47e9435d
-r22978 c0f03d837c
-r22979 ce755fb08d
-r22981 ad55804547
-r22982 45b659cd41
-r22983 3b8129c77b
-r22986 5824594015
-r22988 7bd08662d1
-r22989 6c4d41fbcc
-r22990 e595d0a130
-r22995 8562015759
-r22996 726a336651
-r22997 d5701f0c97
-r22998 edf94d0baf
-r22999 f78d8f648e
-r23000 b094defe61
-r23001 81226c6223
-r23002 18a4de80a9
-r23003 e57245492c
-r23006 e998a5e747
-r23007 d505a106f8
-r23009 44784f3e41
-r23010 ce223fe7ab
-r23011 e557acb9a7
-r23012 084ccb1e0c
-r23016 2976ede075
-r23017 003bd3adee
-r23018 4fe2d213ce
-r23019 99fb2b420f
-r23020 a4e163d262
-r23021 94e9b95f9b
-r23022 ab8f20c1f7
-r23024 513fd181bc
-r23026 49bdf3cda2
-r23027 bc3e3c54fb
-r23028 e251279035
-r23029 bece2590ef
-r23030 76ce74d7ae
-r23031 df7119adc0
-r23033 28c1aa3c20
-r23034 fd2bfa28b0
-r23036 df90c36a13
-r23037 9563f21b20
-r23038 54b5eacb56
-r23039 e4a596e91d
-r23041 0dacb8195a
-r23042 8b16236ebd
-r23050 feb435cc0a
-r23051 6b957d0455
-r23053 567968ab8e
-r23057 03cd602835
-r23058 39a8b1042e
-r23059 a5d47fb693
-r23060 285d2182f1
-r23062 a992ec2d57
-r23063 c8dec98981
-r23064 3e70e56427
-r23065 2e7bd469cd
-r23066 ffd6cff38f
-r23067 0894660255
-r23068 d5baff39ed
-r23069 a7ea942cfe
-r23070 04159cb985
-r23071 1b1d48353b
-r23072 0a0cdb03d8
-r23077 b82c431991
-r23078 6b033dfc5e
-r23079 0100aacc35
-r23080 c37a59c683
-r23081 d742020345
-r23082 a3aa8993d2
-r23083 43babf744b
-r23084 d7739fc014
-r23085 6e710c26ea
-r23090 ba5d0ec898
-r23091 7fa6c08f53
-r23092 cdd4cf44dd
-r23093 e4afb12949
-r23094 1389f0421a
-r23096 ec4b635150
-r23101 82b9e235bb
-r23105 24a9ae5a42
-r23106 dace259b47
-r23107 2399a69b90
-r23108 5579374fc1
-r23109 9522f08f41
-r23111 b40f4ba322
-r23112 a56c33b6a4
-r23117 9c0e58c48d
-r23118 7032d7dbdc
-r23119 0b70eebcab
-r23122 7673099e47
-r23123 19b42dea45
-r23124 fda537c771
-r23125 c18c3e1081
-r23126 cb91343d2b
-r23127 9058008d34
-r23128 4dc846980e
-r23129 0534bcaf69
-r23130 eac72bbee3
-r23131 54f6615104
-r23132 20f39c1d4b
-r23137 c0cc1dda85
-r23138 e1eb91714d
-r23139 521267d23e
-r23140 44ba99aacf
-r23141 57f2b3d5e0
-r23144 4697416af3
-r23157 0f2808227b
-r23158 d3c453d15c
-r23159 1148daec9c
-r23164 256aca6122
-r23169 06aa1c9eff
-r23171 943fbb1363
-r23172 2fefb37220
-r23173 2c59afc2c1
-r23174 a031311991
-r23179 afea859ef6
-r23180 a7fd7d6dc2
-r23181 c901a06757
-r23182 9e21fe6c69
-r23183 e0372eddc1
-r23184 ff1e0647c1
-r23185 6472e115d5
-r23190 74a0c96db0
-r23191 4afd17d6d3
-r23192 c1f8dbca52
-r23193 b090accba1
-r23194 4f741668a8
-r23195 5f00dcd852
-r23196 33aa342005
-r23197 5deb8d8440
-r23198 a4cf7b1ec5
-r23199 7553e6901d
-r23200 23c6d4f985
-r23202 bf84cd2f44
-r23203
-r23204 f22b627730
-r23205 1a9a264f8b
-r23206 f647966e8e
-r23207 b8c07db737
-r23208 cd92aad821
-r23210 34c872d1a7
-r23211 eccc23e2e5
-r23212 68aafb29c1
-r23213 001e910f97
-r23215 41d7f547c0
-r23216 4af97e33e7
-r23217 908ed2f29f
-r23218 e027dd4fd3
-r23220 40cd42b7f5
-r23222 487e5bf895
-r23223 a350673750
-r23224 72cf31c7ac
-r23225 6abce56ad4
-r23226 5c83be3b2b
-r23228 e5c22d9e0a
-r23229 4215f6bd7d
-r23230 7f5f17303e
-r23231 46069e0725
-r23232 b33c2c37a4
-r23233 b7efe90890
-r23234 44d0bb2426
-r23235 cf11854cf0
-r23236 38d4500430
-r23238 46d5e73c11
-r23240 08c460450a
-r23241 d64cbe4366
-r23242 0891a46d96
-r23243 68516d31fe
-r23244 0e7b7a50c6
-r23245 15f4e9fc9b
-r23246 d9e7e347c7
-r23250 77c31e39ec
-r23251 492f5f5214
-r23252 111deeb1a4
-r23253 af200c9594
-r23255 a4865203eb
-r23256 771b4f7c23
-r23257 6893c72ee1
-r23260 920449d6ee
-r23262 185700607d
-r23271 c5c38fc642
-r23272 6e18fbbd38
-r23273 3332d20526
-r23274 264e7c95f1
-r23281 1e73d82e13
-r23282 3087233967
-r23283 de2fb8466e
-r23284 9adc6d22c9
-r23285 e5cfe47a19
-r23286 b525978a52
-r23287 80dc8f4e27
-r23288 0642bdf044
-r23290 87134363a2
-r23291 5cdb213d7d
-r23292 080d357a3e
-r23297 491ecd7b8b
-r23298 c39f26382d
-r23301 8dd7839ac8
-r23303 4b97811b4e
-r23308 ed65254c4f
-r23309 79389bc80d
-r23310 26ac638650
-r23311 8b17d54737
-r23313 9bd74024a1
-r23314 9066ffa93e
-r23319 842ec522a2
-r23320 7a4b4c7a97
-r23321 de3e8492e6
-r23322 add9be644f
-r23323 2014160121
-r23324 eeb70cd5f4
-r23325 d33724e24b
-r23326 2f7197c50b
-r23327 898bd4b57c
-r23328 d13a2529aa
-r23329 d3d218e5ea
-r23330 e7ca142b45
-r23331 a4a65f9c42
-r23332 b1d9354a08
-r23333 b689b912ca
-r23339 2b417333e3
-r23340 81443d309e
-r23341 cfb50cbcce
-r23342 006fbc37ca
-r23345 246b590a4a
-r23349 baf9c6f380
-r23350 5c322510b1
-r23352 7f365342d9
-r23355 22da3636fd
-r23357 6de5505cd9
-r23358 cab41b6858
-r23359 6d22805793
-r23370 0895da3b10
-r23371 dc11fa1ca6
-r23372 2212fd6f4e
-r23373 6b6d21444f
-r23374 46d1cfc7f0
-r23379 a15e48df88
-r23380 0e3e701870
-r23381 d96113b2bf
-r23382 ba6fbcef84
-r23383 683af5895e
-r23384 6e6435156a
-r23385 e077dbb8b9
-r23391 e734600e0a
-r23392 4ddb4ce1e2
-r23393 f388aaaf52
-r23394 e9b61ff9fc
-r23395 962a348ab2
-r23396 8d311558f3
-r23397 6801b5e490
-r23398 b7a344e93f
-r23399 750b5244ee
-r23400 9f3d7b709e
-r23401 460edf36cb
-r23406 b4afd4c86b
-r23407 a2ce51bcb7
-r23408 e73e777e21
-r23412 adbad7ba56
-r23413 b4d47496cb
-r23414 09ec5aa3f0
-r23417 6beaf28e6d
-r23418 00b42b18ed
-r23419 1df37f4769
-r23420 9b54520a8c
-r23421 d6b71cecda
-r23422 3953904fd0
-r23423 ff86078200
-r23424 89f3533a2f
-r23425 2f851bd1f7
-r23426 c0b74d9bcd
-r23427 ae49104855
-r23429 3f26904e68
-r23430 278ec47fb1
-r23431 f4e000f7f0
-r23432 62614a6f9f
-r23433 b9982a3d3d
-r23434 b80f277804
-r23435 bcfe76ee68
-r23436 6fddcaa5f9
-r23437
-r23438 543d70e30c
-r23439 8e32048762
-r23440 3b0b4d7480
-r23441 c891ba15f2
-r23443 db163e25eb
-r23445 de012b3a6d
-r23446 379af580e2
-r23447 29be721e25
-r23448 78c1e2f94e
-r23449 1320e921ad
-r23450 70d07a2394
-r23452 af202942f1
-r23453 4a19146481
-r23454 e3b2ebcbcf
-r23455 4659d81554
-r23459 1016d68bef
-r23461 056663c3f2
-r23462 09ed9d12c3
-r23463 d76d7778b6
-r23464 8607dd6b78
-r23465 b10ba655d5
-r23466 7f8ccd778d
-r23467 948f4228c1
-r23468 8009f723b9
-r23469 942bf86c7b
-r23470 71f765bc4f
-r23471 b2559b3cf4
-r23472 107cf1ae8e
-r23474 6cb5c25802
-r23475 e46a397977
-r23476 903478337c
-r23486 37d9130f9f
-r23487 43409ebb6f
-r23488 29bd7715f7
-r23489 a1b86a7e51
-r23490 bd86b89077
-r23492 82770a97b8
-r23493 19b12e8e0f
-r23494 b95246f152
-r23495 19064bad63
-r23496 2d4a8afdc3
-r23497 a1fd391c10
-r23498 46a921df81
-r23501 91eff8e6d9
-r23502 505a858ea1
-r23503 a061def4dd
-r23505 6bf1e7a268
-r23506 8c5af3304f
-r23507 d205bf404f
-r23508 5d1052f36a
-r23510 e1780e9686
-r23511 298738e959
-r23512 ff5acd0dbb
-r23513 872f147d84
-r23515 6900ffe884
-r23516 bf939d9757
-r23517 d0d20f5b63
-r23518 8006c99792
-r23519 a3c0cdc9db
-r23520 6292877281
-r23521 e3c3cc9759
-r23523 81d659141a
-r23524 764dc81ede
-r23525 70ecc1ea56
-r23526 03b3f7d4a1
-r23528 b7fcc7c73e
-r23530 363a1456f6
-r23531 c09f6173e9
-r23533 048abea829
-r23534 9266922e1b
-r23535 eb2d8e3985
-r23536 4c1cae0ef2
-r23537 d41da608a3
-r23538 cfa6808a9e
-r23539 1fbd342a80
-r23540 48451f980e
-r23542 a86453a5ee
-r23544 13a20ba71a
-r23546 c5c02cf4ff
-r23548 1ab5e1578c
-r23549 fcbf371518
-r23550 349c8baeab
-r23551 a01f074d3e
-r23552 78ae055e52
-r23553 c9f0770b44
-r23554 72969dec9d
-r23555 4886b55fa4
-r23557 685f675ea0
-r23558 0e70623ab8
-r23561 e3cfb4216f
-r23563 c6f4dac7be
-r23565 7c0ee3acb4
-r23568 c555cedd67
-r23576 30b26d84b3
-r23577 46d1d8e55a
-r23578 597acf7b0c
-r23579 b766d4bc9a
-r23585 e83bcb3fc5
-r23587 fcc1747548
-r23588 a16bba97a0
-r23590 9382d7ca14
-r23592 575f7c33e0
-r23593 cf8c15946e
-r23594 088c19a13c
-r23595 794324a73f
-r23596 8f5b0ef428
-r23597 5ded3c7a61
-r23598 f1fa3ce757
-r23599 79ef52f9e3
-r23600 1fcb865070
-r23601 66f0296fda
-r23602 5be89bb3bf
-r23603 72d12aabf3
-r23604 bb3235a2b6
-r23606 a3d56cb47e
-r23607 59c95e3e92
-r23609 14e47d131b
-r23610 49d47cb372
-r23611 25757de1db
-r23612 3e3e3564ca
-r23613 a5553b8384
-r23615 16b3e8c1d7
-r23616 28ff653bc5
-r23617 98569e2464
-r23618 b810d8c401
-r23619 fa822e3ef6
-r23622 cbcf3f5051
-r23623 4ec7f11a79
-r23624 66a92814a6
-r23626 402d96dd3f
-r23627 4be5e11ccc
-r23628 81f38907b8
-r23629 51e4a6a351
-r23630 6b274687b3
-r23632 1c0d571f6d
-r23633 46fba575f7
-r23634 4ff54d0448
-r23642 8a959d80f1
-r23643 a37284fdf7
-r23644 1660cfc41e
-r23645 b9a25c8acf
-r23650 d7de71e9d3
-r23651 7e94841fb7
-r23652 e1aa9c8e00
-r23653 b2bade0259
-r23654 2b689f169e
-r23655 a69c1afd4b
-r23656
-r23657 765f9aa2bf
-r23658 79821ad8b6
-r23659 31533385b7
-r23664 715d95479e
-r23665 811c7f9ba6
-r23666 979c57cd87
-r23667 cc1f6bca81
-r23668 2e136c6924
-r23669 13182292f2
-r23670 ff8932a429
-r23671 f476b96f44
-r23672 843efeab1b
-r23673 3a783937bf
-r23674 627adab5db
-r23675 e1a0866ce7
-r23676 9e9914e109
-r23678 1a45bc7f19
-r23679 72b2715324
-r23680 4e3a930c04
-r23681 3d97123034
-r23682 b1e969a11b
-r23683 32ca2f2be6
-r23684 626e38940b
-r23686 77eb8fefec
-r23687 ed5459550e
-r23688 b6db478a96
-r23690 8922c4ed09
-r23693 1113f7ddca
-r23694 7806112e43
-r23696 d46e72721f
-r23697 a8db7a2da7
-r23698 fbe897d165
-r23699 43b59488c1
-r23700 b8d567feef
-r23701 0f2a7867cf
-r23702 ef89729e20
-r23703 0f188e1b47
-r23704 2087a249ac
-r23705 32454d61e7
-r23707 60a88e05b6
-r23708 8c325affb4
-r23709 c4daaeae6c
-r23710 cbc8495920
-r23712 8aed49aba9
-r23713 9a7e511b3e
-r23714 6e15632fcb
-r23715
-r23716 4dbe72f83f
-r23720 a730fb5cc6
-r23721 492b22576f
-r23722 f2ecbd0469
-r23723 11dfc5a64d
-r23724 ff7589681d
-r23725 3bbe3c70a3
-r23726 ec233d3dbf
-r23732 4cfcc156f4
-r23733 262ee3a852
-r23734 933148f71e
-r23736 58b7100731
-r23742 6c59d99c5e
-r23743 e61fb59b9d
-r23744 9c238c6acc
-r23745 5d6b870ea8
-r23746 1e6c122c44
-r23750 f033bc401a
-r23754 beed1ea811
-r23755 7f814ff6be
-r23760 bda52e41b2
-r23762 45b0c875e7
-r23763 2bb5d585de
-r23765 e671d76012
-r23766 c514c35b2e
-r23767 799bd96931
-r23768 69aa78bd1b
-r23773 9f08c98a6e
-r23779 30e72647ed
-r23780 5c6c2c243c
-r23781 9ada1110c5
-r23782 e2edb26440
-r23783 4850e825a7
-r23785 46a978e022
-r23788 4a442e98e3
-r23789 06487c5afb
-r23790 7ef1dd1b61
-r23791 4885cc5e08
-r23792 a6163bcd8f
-r23793 c123fe5e02
-r23794 9cbadc4d7c
-r23796 e911fdab94
-r23797 c72713c16f
-r23799 e49af12110
-r23800 ab276e195a
-r23801 b0623ae481
-r23803 580b030d41
-r23804 0e306e1f90
-r23806 f40a20b0f4
-r23807 3cfee5b145
-r23808 3bfd81869c
-r23810 a887c83972
-r23812 ed9fb72104
-r23813 f79c93cd22
-r23814 ae67d3e8b3
-r23815 cc1f960036
-r23816 003fc68783
-r23817 8aff48b504
-r23818 c2c54e12d4
-r23819 c9ae821b77
-r23820 5bc2fc5769
-r23822 1050387558
-r23823 f826618f7b
-r23825 610fdb6b5a
-r23826 d5533fbf70
-r23827 db4bf36110
-r23828 d519e34eb5
-r23830 7418d531f0
-r23831 8b567935cf
-r23832 54f75dc98f
-r23833 932694494d
-r23834 9e261754f2
-r23837 09d502f286
-r23838 5f32d54695
-r23840 d04cfc06f0
-r23841 969fd08a04
-r23843 6ae3eb1ad9
-r23844 cf49fb3326
-r23848 3ec0583fb6
-r23849 3e61c9a5ae
-r23850 e33bb82c2d
-r23851 89de9c3f9f
-r23853 c0bfbce726
-r23854 096bc81a90
-r23855 bf375f7d63
-r23857 f82a8ce058
-r23858 2b61c308c3
-r23859 6c04413edb
-r23860 740fcf90bd
-r23861 1259651a7d
-r23862 4db73388f2
-r23863 86834347c3
-r23864 c7262dd1a2
-r23865 31d2746757
-r23866 0cdd234b1a
-r23867 2af07fb589
-r23868 bfcffea8cf
-r23869
-r23871 79ca8d4cd2
-r23872 15cb1c7535
-r23873 8d993af724
-r23874 03f90c1734
-r23875 533ffe9482
-r23877 635bc9c17b
-r23880 4e0d481418
-r23881 cb10f8a9ff
-r23882 7b14f38ec2
-r23883 4f9b1cf852
-r23884 d891167c88
-r23885 e8b450d51d
-r23887 7d0e5ac4bb
-r23888 266a2ca1c4
-r23889 234ee6d56b
-r23890 c0a4e5acdc
-r23891 7c34a1af96
-r23892 1f4d528702
-r23893 a87d132bb7
-r23894 55d1ee6d8b
-r23895 5c5657c299
-r23896 f0f0dfd9a3
-r23897 8ae754399d
-r23898 b2fbd5a79f
-r23900 66c9b6a949
-r23901 86044e0e54
-r23902 6915e7e999
-r23903 fdb1e69991
-r23905 c875dc635b
-r23906 0b5c9ca653
-r23907 715262fcfc
-r23908 04f59ea9e8
-r23909 5d022058c4
-r23911 57ea3841d2
-r23912 07edcee629
-r23913 733a3d7569
-r23914 6ae3072cd4
-r23915 8fea694f69
-r23916 9917b4aed9
-r23917 377972b095
-r23918 33b35dfbfd
-r23919 5cefd81ee9
-r23920 8e9f3c219d
-r23921 4265833e12
-r23922 ced363bf5a
-r23923 148736c3df
-r23924 32e7c24327
-r23926 d45b5ceed9
-r23927 701b17de26
-r23928 8752d58884
-r23929 18b563879c
-r23931 0dea879a76
-r23932 d4748121aa
-r23933 7d9fb75275
-r23934 c8ddf01621
-r23935 d94210996b
-r23936 785621901a
-r23937 34d82221cc
-r23939 d06ccf64f0
-r23940 58b5c24df8
-r23941 e05dfaeabf
-r23942 c35d829d18
-r23943 67042fd53e
-r23944 92132d6efd
-r23945 bc55c7854c
-r23946 5b481bbff7
-r23947 b0fecaea9b
-r23948 b05c8ebc8f
-r23949 9026bd6e02
-r23950 09052a6a1a
-r23951 0b78a0196a
-r23953 158e748e44
-r23954 fe65bb177f
-r23955 75371b41db
-r23956 2230bc9f7b
-r23957 059e8be4c7
-r23958 9558f60e7a
-r23959 4af620886b
-r23960 c44bf4a004
-r23962 f321aef4fd
-r23964 5f40fe0456
-r23965 566fefb05a
-r23967 5bada810b4
-r23968 2e7d7d4555
-r23969 2263afdf11
-r23970 7ecee9ad1a
-r23972 236f61c04c
-r23974 b4ba25da7e
-r23975 8f444e6626
-r23977 ecc9384838
-r23978
-r23979 c936b0f217
-r23980 c865d35d85
-r23981 93b4e617db
-r23983 8348f2e278
-r23986 604797b645
-r23987 866801385f
-r23988 e89b53d7e1
-r23990 bce484e237
-r23991 5e6f7952d7
-r23992 3414335ced
-r23993 cf820b8907
-r23997 be2778d50f
-r23998 16e7ad360d
-r23999 ac0fc0fecb
-r24000 169a5233f8
-r24001 db35ccb623
-r24004 10f637f1fc
-r24005 111425f14b
-r24006 b500a5c78d
-r24007 bdd7487b06
-r24008 cbfb5d387b
-r24009 60f1b4b1c4
-r24010 fc68a188f2
-r24011 b9f20bf6d5
-r24012 cace663c95
-r24013 9722b4a420
-r24014 8fbe377d4e
-r24015 98de3e5bad
-r24016 8c713da3d0
-r24017 c1db69d909
-r24019 c90ff3d95d
-r24020 5d8c6c898a
-r24021 d6816e0143
-r24022 9d29de3084
-r24024 8e59e56216
-r24025 f3711ed324
-r24026 c28a86006b
-r24027 f4f1738fe7
-r24029 f0bff86d31
-r24032 2d11a5bd46
-r24033
-r24034 7a9f1437ab
-r24035 161a4fda39
-r24036 919d4e1f31
-r24038 a8a7481ab7
-r24039 d8994ad4d1
-r24040 cb693f9f3a
-r24041 5c7ff3ea5f
-r24042 fee124a419
-r24043 cd52c9797d
-r24044 e206930303
-r24046 d8dfb6ec63
-r24047 3715aa127c
-r24048 e6167d9350
-r24050 7cb70a411a
-r24051 b09bc25012
-r24052 017e96230a
-r24053 b89c6e7bb2
-r24054 3ca75587df
-r24055 45580f1562
-r24058 2432afcc61
-r24059 647d23d801
-r24060 da0d80743a
-r24062 3ca434dfd9
-r24063 a99604e60b
-r24064 168a3ffdd9
-r24065 de9a8b9194
-r24066 1cbe06c2dc
-r24068 4253124eec
-r24069 d2dfdc4e6f
-r24070 492be26527
-r24071 3301506556
-r24072 19b45e9643
-r24073 6300d5e277
-r24074 e07ca49a24
-r24075 f253b67d4a
-r24076 82a6aaab86
-r24078 3235722859
-r24080 be85330d5b
-r24082 dea65103bf
-r24083 5f905da8b6
-r24084 85e79881a0
-r24087 3cf67d788a
-r24088 85fbd6f100
-r24089 e372dc0767
-r24090 fe1f2b8096
-r24091 ec9b00e195
-r24092 f9b1917e8b
-r24093 78007ac467
-r24094 78a48c46cf
-r24095 ccc81fa54c
-r24096 ebafcc4e7c
-r24097 da6b846e70
-r24098 dc39ab60d5
-r24099 5be3517c4f
-r24100 d3d4a95ce7
-r24101 6d43731ecf
-r24102 6d0718b5ec
-r24103 a1d4d39c40
-r24104 b961c9bdfb
-r24105 e97169c1c3
-r24106 c888bb422d
-r24109 da33ea2189
-r24112 07a2981402
-r24113 b6fb314419
-r24114 4a194bf538
-r24115 fcdc2267fe
-r24116 e40485618c
-r24117 d884d63800
-r24118 64da770afe
-r24119 942d844aeb
-r24120 db25b914f5
-r24121 0d29472c77
-r24122
-r24123 330febc72b
-r24124 ba82b29b92
-r24125 1c537ba1b3
-r24126 4bc1fae32f
-r24129 7048ac2d66
-r24130 fb718ccd5c
-r24131 834c065736
-r24132 ad3910e7fe
-r24133 b345da5ef4
-r24134 43d3c02185
-r24135 0967826371
-r24136 b06bfabfa4
-r24138 cf492f472a
-r24139 80488e4218
-r24140 f89016a873
-r24141 4b9e197b96
-r24142 9808117e92
-r24143 c6e21a52fe
-r24144 42eee5f325
-r24146 3ef8ef6606
-r24147 45c751c04e
-r24148 c5f20ad02b
-r24151 174a25e1b3
-r24152 2f1759cebc
-r24153 6de1404fd3
-r24154 ce173be810
-r24155 581e82f87f
-r24157 94bb0a9013
-r24158 d59d7f928d
-r24159 ee4e09235a
-r24160 ed9469c06d
-r24161 cd4486aa72
-r24162 589b8a5d53
-r24163 caf436d96f
-r24164 2ebde52602
-r24166 ad7fd95c8f
-r24167 7aca20d8d3
-r24168 235a7ea171
-r24169 5caf65d340
-r24170 76dfe52fff
-r24171 380ce38936
-r24172 fa7838568e
-r24174 961b881659
-r24175 8fb1b1aaff
-r24176 8d9ecb70eb
-r24177 c332e580a3
-r24178 1038b708f2
-r24180 985c587364
-r24181 f61020bb96
-r24182 4d862deb3a
-r24183 9dc772f163
-r24184 25a2d72189
-r24185 566857e894
-r24186 ebf0aa14d0
-r24187 d8f00482ff
-r24188 abb43ce593
-r24189 d20e2b0e17
-r24190 232f4627d4
-r24191 10ef7a4d4b
-r24192 5905acc722
-r24194 2d0e42041a
-r24196 78914b6f23
-r24197 c6bfc6ed94
-r24199 2316be766b
-r24201 20fc7a364a
-r24202 639d471f4d
-r24205 1f189a0d91
-r24206 a4bbb15aa2
-r24207 d3701a5818
-r24208 7b19ec8b1b
-r24210 fcc962b197
-r24211 1065c911a1
-r24212 5c18620fa4
-r24213 2060b631ab
-r24214 a589cb084b
-r24215 cd579b9866
-r24216 2bfaf998ad
-r24217 23aee8758a
-r24218 c89ea6e3ae
-r24221 3467ad57e4
-r24222 c8e8d79870
-r24223 75fe0c8bd6
-r24224 496dc76118
-r24225 fa84b33190
-r24226 87809b72a3
-r24227 ac17c71b23
-r24228 5b9b417ae0
-r24229 9300aaf6a7
-r24230 07a44adf6f
-r24232 6d19219483
-r24233 27a658c86e
-r24234 756a086802
-r24235 c3130988e8
-r24236 13497cbd39
-r24237 c727015def
-r24238 5151d7865e
-r24239 dff00da93d
-r24240 75667b88b3
-r24241 d5fbd26715
-r24242 d34d0d5108
-r24243 48b2da0169
-r24244 96e4c57ac9
-r24245 7ac66ec3b4
-r24246
-r24247 47bea31877
-r24248 160b82a7dd
-r24249 82ffae1693
-r24250 854de25ee6
-r24252 5749084921
-r24254 1789df3815
-r24255 58be2cb1e7
-r24256 804a161227
-r24257 a681a6a2d0
-r24258 bd1efca55a
-r24259 8915ac8e0b
-r24260 d8da9f5d38
-r24261 c8f326e5f6
-r24262 2b0f0a57c7
-r24263 d54ad45ded
-r24264 8e380b6736
-r24266 e9f1ccb030
-r24267 7b7d177571
-r24268 02435237ac
-r24269 593256a6ec
-r24270 02fd6b6139
-r24272 1c5d8d2e68
-r24274 953e3767a0
-r24275 1584f3f018
-r24276 ce73a10d3c
-r24277 5c99d89642
-r24279 4ddfe877b2
-r24280 c7f0ca2897
-r24281 00384916e0
-r24282 6201a2c638
-r24283 ba5118b24c
-r24284 274be93704
-r24285 1887da0617
-r24286 aca0be3dc5
-r24287 f05000629d
-r24288 8e76ce6368
-r24289 2d6575b79b
-r24291 1e6f5d5bf2
-r24292 35d1cb18c7
-r24293 a1309ca93b
-r24294 b8a23b072f
-r24296 82d3f68819
-r24297 066861f6f8
-r24298 9f4c747c6d
-r24300 5ba01cd7c8
-r24302 38c668fcc7
-r24303 e91c0e25f1
-r24305 68d13416b5
-r24307 3f96a415e1
-r24308 801c5cd82e
-r24309 1b6f1d4d30
-r24310 c3ebada7e6
-r24311 6a570deed1
-r24312 fd1ca1e63c
-r24313 d221cef8aa
-r24314 a765a6ff94
-r24316 ebec416529
-r24317 9779036af8
-r24318 7a9aba47d5
-r24319 3594304e82
-r24320 3621100820
-r24321 d610e36fa5
-r24322 0848855e2e
-r24323 a7c77669bd
-r24325 be9a1788b5
-r24326 93498931b5
-r24327 1236b5d14b
-r24328 c9f6d65536
-r24329 8aaca8c135
-r24330 6961f66371
-r24332 6ae7873658
-r24333 82909349e3
-r24334 ed971ecaba
-r24336 633025cabd
-r24337 879c7f610d
-r24338 4449c5af35
-r24339 30b6187f15
-r24340 10ec23352c
-r24341 c9a2180b1b
-r24342 11b936a03a
-r24344 dd45d81acf
-r24345 b0b63f1901
-r24346 49e8a4eef6
-r24348 34d3f1cb95
-r24351 e0aeabba88
-r24352 ba236bdcdc
-r24353 bee568cb56
-r24354 4073555ee5
-r24355 fce8415e57
-r24356 34719ee9cb
-r24357 fdaa0a7a01
-r24360 a07df6427f
-r24361 2021f39362
-r24363 e42733e9fe
-r24364 e465571a4e
-r24365 8f0878683a
-r24366 ba1312d195
-r24367 4e0d7b8e22
-r24369 ebeb8c51e4
-r24370 a296cefe0c
-r24371 290c7cd008
-r24372 db62da7582
-r24374 6055b57403
-r24375 305e7aa380
-r24376
-r24377 e586206e08
-r24378 38adb1426f
-r24379 1f6814a8f1
-r24382 74bee3204d
-r24383 8e5144d8a9
-r24384 6ad9d0085e
-r24385 2cc16420f3
-r24386 ff0dd07133
-r24388 bcb42e12dc
-r24389 a3d2d3b1ce
-r24390 bc9a3475f3
-r24391 64660068dd
-r24393 603c3dae0f
-r24395 1ff7cd53e3
-r24396 2edab8991b
-r24397 ca392540e3
-r24398 5f491e5d03
-r24399 02e043c776
-r24400 b8c1203121
-r24401 fe94d62563
-r24403 7e2259fc94
-r24404 cb0d585411
-r24405 3689a29fca
-r24406 3b467cdfe1
-r24408 a6c075bc62
-r24409 c29b455562
-r24411 6dfc61ab72
-r24412 fff2721945
-r24413 8328a880b6
-r24414 783721e98a
-r24415 cabd899188
-r24416 2333e9af28
-r24417 8fb2df90cf
-r24418 0475b23ebd
-r24419 4e787be632
-r24420 6c5b98812b
-r24421 daf30ee2eb
-r24422 41c6dc0087
-r24424 9f964bcfd0
-r24425 cfeea7a25b
-r24427 f9d286cd66
-r24428 f8f8d378a4
-r24429 50cff4d634
-r24430 67c461b2d9
-r24432 be49752855
-r24433 8f245d95f6
-r24434 0254234328
-r24436 e86934018b
-r24437 ee4cc17eb7
-r24439 1f3c58a818
-r24440 13c59adf9f
-r24441 e64b94fcc9
-r24442 764072ffcb
-r24443 546588a134
-r24444 5602ec602a
-r24457 fbf7125dd8
-r24458 048fe68a1f
-r24459 7a29fc7de3
-r24460 e96dba0c9a
-r24461 4383277103
-r24462 06a98d22ce
-r24463 c450953875
-r24464 e6a60a05a1
-r24465 e23435247b
-r24466 9c5dfa18ed
-r24467 4bae7e8a92
-r24468 fe9a10c9a0
-r24469 f80801c675
-r24470 eb0b73b116
-r24472 c982243064
-r24473 32b05da169
-r24476 d6f3184fc8
-r24480 cc672b023e
-r24483 5647d73009
-r24484 ebcec5f4d6
-r24485 b3c85819bf
-r24486 90e5aea537
-r24490 821816a315
-r24492 d5d7953ab4
-r24494 f3b970b28c
-r24495 0554c37865
-r24496 86e8f5ae1d
-r24497 0e064a7a56
-r24498 a7d2d13732
-r24504 e7c2ab469c
-r24505 c565784711
-r24506 ffa29b1f31
-r24507 8f0ff8bc2a
-r24508 5bb967a3de
-r24509 01203c2844
-r24510 4380911a32
-r24511 4b0531b55a
-r24512 aa0cc8e415
-r24513 b503ea139a
-r24514 9b68c3c213
-r24515 fef8e61cb3
-r24516 36ac83da7f
-r24518 a30ae005c5
-r24519 db7431d209
-r24520 50eb40bcd6
-r24521 6eb6e8ca22
-r24523 72a0e8be61
-r24525 4d0cd60b0e
-r24526 b5d314af8e
-r24527 0b0a927a60
-r24528 9acb3f5609
-r24529 8230585c3a
-r24530 991b359976
-r24531 449fc76cf5
-r24532 7946facede
-r24533 455ee619fb
-r24534 8bf258ca83
-r24535 971653e40d
-r24536 063e8a9dfe
-r24537 fed7729dbb
-r24538 ad8efdf707
-r24539 8cbc17e8f1
-r24541 87eb32c61a
-r24542 fda6c9517e
-r24543 60d9a5127c
-r24544 e579152f73
-r24545 142405e1dd
-r24546 413feab04c
-r24547 8ca5a8fbbc
-r24548 39bbd26bc4
-r24551 0444c81889
-r24552 1323a61e68
-r24553 84671e1076
-r24554 3491672e86
-r24555 a45be8b285
-r24556 a5a18e80ec
-r24557 4a6c40fe6b
-r24558 5670f1f834
-r24559
-r24560 ae8e258bf4
-r24561 0dd018e2cb
-r24562 84b0acd214
-r24563 af011572ee
-r24564 d0e519a309
-r24567 469a08c1ed
-r24570 6b337cb02c
-r24573 3c34549d7d
-r24576 420df2a9a2
-r24578 5e829a82bc
-r24579 88fd5b9279
-r24583 70e6dc980f
-r24584 af3b3d3945
-r24591 15e491b4d2
-r24592 5083559781
-r24593 22d1ae7fa4
-r24594 c402bdde2e
-r24595 809bf414be
-r24596 2f5c6da837
-r24597 408fe0dc4b
-r24598 caba14ff4b
-r24599 628060af0f
-r24600 f84a12bfbb
-r24601 3e5cd92cbb
-r24602 9e0b5eb6c4
-r24603 0d324c4e10
-r24604 3387d04757
-r24605 e6d026304f
-r24607 40195b89b3
-r24608 fbdda78887
-r24609 c17e46682a
-r24610 4d25cc33ee
-r24611 54f560fe37
-r24612 1b4fc3f26e
-r24614 a1fe9d33bf
-r24615 f1af3e0766
-r24616 b6b0359b8a
-r24617 eb32c46d69
-r24618 d4392e047b
-r24619 214a04461b
-r24620 bd319586ed
-r24621 c1efef726c
-r24622 b3889b68af
-r24623 ebedbef6d1
-r24624 5ebbba7a71
-r24625 92693774c1
-r24626 ff5aec180e
-r24627 9e2b204400
-r24628 71d2aba042
-r24629 1caac54694
-r24630 88fbb71848
-r24631 21432085e1
-r24632 b34ef21d71
-r24633 1b14bfcb7f
-r24634 adc57219ae
-r24635 f21113d28a
-r24636 5691a3900d
-r24637 bbd5efa596
-r24638 386d506847
-r24639 96965c4459
-r24640 518cc3af73
-r24641 e74515bbd3
-r24642 b2ca0efb2d
-r24643 ab488babc6
-r24644 56b7e67051
-r24645 c81e94b5dd
-r24646 f88c979f85
-r24647 e94a62622d
-r24648 daa3b19439
-r24649 e5c6241bca
-r24651 c9b4254f94
-r24652 ac87dd2e0c
-r24653 06218608dc
-r24654 93732bf103
-r24655 b1cb4e114f
-r24656 661ce2922d
-r24657 40263b7fa6
-r24658 fe0e4b473f
-r24659 0444357cd5
-r24660 305f49ce8f
-r24661 9b3852f262
-r24662 9781aba3e5
-r24663 1fd0b31aec
-r24664 4df2e9335b
-r24665 a6ba30b8eb
-r24666 223428d1eb
-r24667 c345782c06
-r24672 9f70316820
-r24673 a689456253
-r24674 869e5e9793
-r24675 00b0be49a8
-r24676 557a0ebd03
-r24677 98b50d2f52
-r24678 7eccd78350
-r24679 edb78ae9db
-r24680 876760c6db
-r24681 749739d146
-r24682 23c937f345
-r24683 e06244cb55
-r24684 e50fbcc3b3
-r24685 fd27ca6263
-r24686
-r24687 1c1c65c8df
-r24688 804c401ffd
-r24689 f0a2dd936e
-r24690 329fd609f3
-r24691 7d15e93f56
-r24692 4415640dc4
-r24693 9c776fda54
-r24694 e830a7ce9e
-r24695 7ec0249519
-r24696 bbede17631
-r24697 4040d8511e
-r24698 f040879c81
-r24699 1cf60d304d
-r24700 f36e7acd02
-r24701 6a204df670
-r24702 f8f09796e8
-r24703 8088ca13c4
-r24704 da67f3b71e
-r24705 21f3cf0e80
-r24706 42dbce3295
-r24708 caee04079f
-r24709 4cf60d65bc
-r24710 8cd754f358
-r24711 b13ef720c0
-r24712 26c3f65241
-r24713 6eae720732
-r24714 8e093b517f
-r24715 8a2df2dc70
-r24716 8a64f16fe1
-r24717 35f82e66d1
-r24719 6b7ff287fc
-r24720 112dc4f2a8
-r24721 659f8ba673
-r24722 886e0a6a1c
-r24723 adb112fec4
-r24724 66956b745f
-r24727 a8f2ea50ac
-r24728 3eaae89020
-r24730 95ecae3469
-r24731 50f6c7c275
-r24732 7fba64d2d0
-r24733 7872efc614
-r24734 f229addbcb
-r24736 7d9d9d453a
-r24737 c6040a7bc6
-r24738 b6ab8af4f2
-r24739 ca05143ea7
-r24740 c28aed1ab1
-r24741 f31a20a99c
-r24742 afd1e7d293
-r24743 a3b106bf60
-r24744 4e9a38be50
-r24745 fe268d9778
-r24746 703bbdae73
-r24749 514d01c1ce
-r24750 185d5b50fd
-r24751 9b5cb18dbd
-r24752 3de96153e5
-r24753 af358131de
-r24754 9334ad0db2
-r24755 97b9978b85
-r24756 44ddee59a4
-r24757 b38f7fe290
-r24758 20d0a7dd22
-r24759 8198c1193c
-r24760 fa0ee266cd
-r24761 0b18e29225
-r24762 8707c9ecb3
-r24763 09028a4fa5
-r24764 09e192caea
-r24765 a0909c0573
-r24766 3de9030dca
-r24767 5ff4875db3
-r24768 bffb951f84
-r24769 50c93f63b8
-r24770 1765c49192
-r24771 3c8bc3ab73
-r24773 ed52bec270
-r24774 54fa0d6c3e
-r24776 493da996d8
-r24777 e0653db305
-r24778 b7bdf048b1
-r24779 52fbbcc824
-r24783 acffc823df
-r24784 7c47203ee2
-r24785 bf53d9f48e
-r24786 e6efa7b11f
-r24787 fa8f997a2d
-r24788 3fce9dfd7f
-r24790 5485932c5a
-r24795 b477d7389b
-r24796 9be2e54633
-r24798 21ea5ad627
-r24799 fe15d7eed7
-r24800 9388a634f5
-r24803 7c456cde62
-r24804 efd6b46e74
-r24805 f5b2972d2b
-r24806 9b8f5acf89
-r24807 97b620ae63
-r24808 6af1d5c526
-r24809 ffe789dd78
-r24810 50a4b393f7
-r24811 21121ff62e
-r24812 63c7c9d857
-r24813 9db7dbe440
-r24814 3e65235845
-r24815 bca5660e38
-r24816 add75447f4
-r24817 870679585a
-r24818 60463a8721
-r24819 290f3711d5
-r24820 de27ba74b9
-r24830 c79f8876aa
-r24831 6d653c3d07
-r24834 1a443ebb20
-r24835 6a988aeff0
-r24836 45f20c26c9
-r24837 b18773a988
-r24838 6a5a5ed217
-r24839 ff5cd2f6e8
-r24840 2700617052
-r24841 9a9f73b802
-r24842 199ec3c10f
-r24843 c5d9b7e6a9
-r24844 cc60527405
-r24845 6c1feb586b
-r24846 96ab92d67c
-r24847 8792dda476
-r24848 7f6ebc9762
-r24849 f335e44725
-r24850 80bb9cfb7b
-r24851 e439b24609
-r24852 95ae7765e8
-r24853 acc5311c15
-r24854 793796eee0
-r24855 b4749d3b1a
-r24856 8182349189
-r24857 a02b2daa2a
-r24858 269ea9ab57
-r24859 445ade0bbd
-r24860 f82acf5d37
-r24861 70f18a67e5
-r24862 cb74fc1c8a
-r24867 0bfaa0baf4
-r24868 3f1f0a4947
-r24873 4e96111f35
-r24881 7858ae7be5
-r24882 28723395ed
-r24883 e573f9b206
-r24884 00f6d557ed
-r24885 b38cddd20e
-r24886 93b4217797
-r24887 1c0df8f97e
-r24888 c937fd9570
-r24889 facc1b33fa
-r24890 5e499c5e43
-r24891 d70e69e8a8
-r24892 a0ea242f75
-r24893 4eb00a0a72
-r24894 57a00a46c8
-r24895 14cd653295
-r24896 311b7de861
-r24897 a6d0d9dd0d
-r24899 9654d51491
-r24900 a4c920acf1
-r24901 7a29a1ca3b
-r24902 4cd3e354ce
-r24903 6b58c8522d
-r24904 b72a9b1455
-r24909 41ac77599c
-r24919 1a92fb60e6
-r24920 a4d3c77616
-r24922 124cf3f9cb
-r24923 28149691da
-r24925 106a3ac9a7
-r24927 1e1c4d05db
-r24929 dacd4cab7e
-r24933 b6d24633e3
-r24934 4869a2b284
-r24941 2bd6b4ae40
-r24942 692f32f66b
-r24943 bf1da638cc
-r24944 48e9663489
-r24956 c989273edb
-r24957 11ebee0991
-r24958 ce5170fe02
-r24959 7720716567
-r24960 b7e7cf14bb
-r24961 feb1ba8ab3
-r24962 d5c7021dd7
-r24963 0e3282d99f
-r24964 15ed8925c9
-r24965 27edca2ca7
-r24966 a6032e86af
-r24967 782c73313e
-r24968 7127d82937
-r24973 a3d53243c6
-r24974 806a524f9a
-r24975 9bab5cc04e
-r24976 e75142424c
-r24977 6d2b5e14f8
-r24978 1e5194b41c
-r24979 fff93cd049
-r24980 1a9b0c9926
-r24981 5efdab9621
-r24982
-r24983 b4fd2ab8e8
-r24984 b389940697
-r24985 a22be1267a
-r24986 4074f0e1c2
-r24987 dbd1bbc81e
-r24988 9050263192
-r24989 fea604df16
-r24990 12fa84a6ed
-r24991 683adbd63e
-r24992 63735b31ef
-r24993 ccceeeb179
-r24994 7595671ec3
-r24995 4afa092314
-r24996 d1c806b2d3
-r24997 be35545354
-r24998 2beeb23cc7
-r24999 83703d1e44
-r25000 2a32395ff2
-r25001 e22d7f9915
-r25002 9cc4c5f9a3
-r25003 b4b884e0f8
-r25004 390f2d52ae
-r25005 3e75e7e462
-r25006 9d2c066436
-r25007 86e7c9b205
-r25008 850a689e75
-r25009 00569a3b47
-r25010 e6b0beaa4c
-r25015 d3ff7ee9fc
-r25028 3f19215781
-r25029 4f54ab68fe
-r25030 4b04c9c044
-r25031 d800ebd073
-r25032 d76dc724e3
-r25033 3adaa37cd2
-r25034 4689792757
-r25035 ccb438ff74
-r25036 94e1965b64
-r25037 c5bd18d46e
-r25038 75ec2ba72f
-r25039 1125a9cfab
-r25040 4c7d23b470
-r25041 a8926ae0b2
-r25042 6daacd386b
-r25043 82eaeed3b1
-r25044 35f7c2bde5
-r25045 edad717cc1
-r25046 ad328ff2c0
-r25047 1c2d44dda0
-r25048 fb061f22d4
-r25049 ed87ab5299
-r25050 46c8150743
-r25051 d838e10f7b
-r25052 92a2fd5397
-r25053 33d45626bd
-r25054 6b67a342ab
-r25055 6ebd6c4c07
-r25056 1ebbe029dd
-r25057 b9731954fb
-r25058 29cdb5837c
-r25059 b8575e9636
-r25060 fec42c1f3a
-r25061 5fa1978fac
-r25062 68808e80c4
-r25063 28e6744e23
-r25064 07fab88cee
-r25065 4e85b6fb33
-r25066 21e90dfb59
-r25067 c8f4316b37
-r25068 d73d4950c9
-r25069 8bba6eb9d3
-r25070 581a8c6ffe
-r25071 f0ca26ab84
-r25072 25d692b76f
-r25073 83c0929417
-r25074 b960944463
-r25075 58a147ae51
-r25076 a4772525b2
-r25077 1a11aef9c3
-r25078 f0cea787c7
-r25079 5b09130d85
-r25080 e0155ce582
-r25081 f44c01eab2
-r25082 21584ed38e
-r25083 32d2b15d5d
-r25084 b6d1953b85
-r25085 f02512706f
-r25086 4ba275137e
-r25087 7fa4ca91ff
-r25088 e4f800b205
-r25089 ebfbe58d36
-r25090 30f0befbfc
-r25091 0cebb74f67
-r25092 8b66af0cfe
-r25093 5de317f769
-r25094 3cbf6bf54e
-r25095 2a2d5d6af9
-r25096 413a076381
-r25097 5d20f0650e
-r25098 270c0cb80d
-r25099 916d5f2de0
-r25100 d8f3a17f5d
-r25101 08546513f4
-r25102 8e10b0579b
-r25103 60c8697f0c
-r25104 3a63a796c8
-r25105 1db8243e72
-r25106 814f7ef9f2
-r25107 e102fee1b9
-r25108 e572b6b687
-r25109 3299ee0046
-r25110 87b1b72769
-r25111 2e29f1475a
-r25112 d2fd3d61d1
-r25113 2627ab313f
-r25114 f0125bc591
-r25115 2b41d07155
-r25116 6f895f4cbd
-r25117 f57ac28712
-r25118 b054289bd7
-r25119 26ad0c9e8c
-r25120 c412771635
-r25121 dd511e1a1a
-r25122 b3b9dbaee2
-r25123 bb0e6e9102
-r25124 cf85a61beb
-r25125 7d5b6fa1ee
-r25126 d8a4b0e8fc
-r25127 e0757f1726
-r25128 3f97335832
-r25129 d4f8dc660a
-r25130 5c416166c2
-r25131 4b8810d3a3
-r25132 a546fc8f49
-r25133 a3b1d1130c
-r25134 b567bdc1b2
-r25135 79c5790d05
-r25136 e49ec10e93
-r25137 9853b5b829
-r25138 83db5e6600
-r25139 066ab070e6
-r25140 781726bf75
-r25141 31c213d164
-r25142 444ab55481
-r25143 dbf4bf263a
-r25144 a14da40419
-r25145 21115422de
-r25146 8ba9b511c2
-r25147 b924c4142d
-r25148 5dc127e69c
-r25149 034489b501
-r25150 438c7a4540
-r25151 cb9c2f8335
-r25152 d8a40e730f
-r25153 2a9781ee4c
-r25154 d8912db143
-r25155 7b7b242299
-r25156 8196473768
-r25157 924b5852fa
-r25158 6c87275af7
-r25160 94a00c3168
-r25161 77c01a9bac
-r25162 c23c21853a
-r25164 42fb66a2cb
-r25165 e0a4bbdb39
-r25166 7a1dc55abe
-r25167 84442a01ce
-r25168 1f38dbf299
-r25169 e365b51c04
-r25170 d7cc162132
-r25171 72a095dcdc
-r25172 fdfdd09d51
-r25202 349a1aade0
-r25204 30ccdc9da6
-r25206 a1375bf437
-r25207 d782ab3246
-r25208 fa2a197462
-r25209 bf65e48526
-r25210 9d02b4adea
-r25212 300cb9e1ee
-r25213 60085c5cf8
-r25214 3c5f893b78
-r25215 ab3e6f21ae
-r25216 60d0585371
-r25217 dcc07bd9f0
-r25219 4df206e640
-r25220 ba81847fd9
-r25224 6d3159db05
-r25225 835be39b53
-r25226 d858fc14ad
-r25227 552d7aa113
-r25228 f34c836cb6
-r25229 69b9d9858e
-r25230 54b26beb2c
-r25231 9b3c49a171
-r25232 f90c462b42
-r25233 9e7d7e021c
-r25234 257a7e65de
-r25235 0bfef30696
-r25236 c48953cbe1
-r25237 f7bca9a7bf
-r25238 124e2f95ae
-r25239 2c28fc4afa
-r25240 321439e32f
-r25241 302f9fb68a
-r25242 acd25f5732
-r25243 26829db804
-r25244 dbd2a2a626
-r25245 d0d8b498b8
-r25246 1bc91a26b2
-r25247 a21cb1b375
-r25248 262114974b
-r25249
-r25250 ce89d436b8
-r25251 2ef447e266
-r25252 9f4e1b050f
-r25253 49ebb3ec42
-r25254 4a862eac9d
-r25255 f0169872c9
-r25256 7d4cff1dc6
-r25257 9e1d24d642
-r25258 74db0a59ad
-r25259 8110e02ec2
-r25260 4b616e2ff3
-r25261 3f2a92765e
-r25262 9f39fc0124
-r25263 7ed18f3300
-r25264 80d5122f2c
-r25265 6cb88f36ff
-r25266 4977341da7
-r25267 e3085dadb3
-r25268 a10f699d7c
-r25269 66862fe9d8
-r25270 5eefefb73b
-r25271 6163cdcc23
-r25272 70da5a627f
-r25273 0fac26971e
-r25274 360f747c67
-r25275 cda484779f
-r25276 e032852d12
-r25277 d8e882ad5c
-r25278 3a2529f9df
-r25279 124103be21
-r25280 60974b90da
-r25281 038fef39ad
-r25282 8a0d130537
-r25283 c849eb7c7d
-r25284 c614e932d0
-r25285 5e49b41819
-r25286 733669230a
-r25287 d79493bb72
-r25292 a0476af6bc
-r25293 a4fb15861b
-r25294 2621ee6328
-r25295 9eaf24abe6
-r25296 3010da2247
-r25297 21c0730f7f
-r25298 31108f7518
-r25299 4c71fabc01
-r25300 207b5ef725
-r25301 12162603c4
-r25302 ad775b3239
-r25303 aa674f304d
-r25304 29e501db0b
-r25305 90725a50c4
-r25306 5ed007aab7
-r25307 15df85b047
-r25308 42a2169161
-r25309 e56c8c561f
-r25310 1fc6f7eb4e
-r25311 9a7744dcaf
-r25312 dbeab9b86f
-r25313 873b4b8b55
-r25314 a94747dc47
-r25315 18617f77d2
-r25316 87d050bf09
-r25317 a8e5a7be9f
-r25318 e8f46334b4
-r25319 88710b419a
-r25320 a0f1c4c4f7
-r25321 b2a1ced1a7
-r25322 658ba1b4e6
-r25323 44b9cf0ca9
-r25324 970d4132b6
-r25325 b2f1b87468
-r25326 d34bd62d07
-r25327 03f3cb5fcd
-r25328 3e9041b031
-r25329 00da8a8f07
-r25330 628c0265aa
-r25331 c0ddb8f941
-r25332 48d2c78144
-r25333 dde17e953f
-r25334 04a39e7981
-r25335 ce895bbb40
-r25336 aafc0fe172
-r25337 654c9ff6e6
-r25338 fb2e30e472
-r25341 f9f164d3c7
-r25351 5c61410fe5
-r25352 c3c1c65d5f
-r25353 b204a9360f
-r25366 8c8e8788fd
-r25367 ac2ecfb3af
-r25370 460f57d5d3
-r25372 9f9af2ad48
-r25376 1ad15b1f50
-r25382 68031b3af1
-r25383 401baad565
-r25387 6b09630977
-r25388 ac0bfa6220
-r25389 321ecd84d8
-r25390 209167a1b4
-r25391 5dbb616610
-r25392 892ecd2db7
-r25393 ac96200c92
-r25394 e0890be9a7
-r25402 900f7a8f5c
-r25403 1942bb6cd4
-r25406 cee5d977cb
-r25407 5bbb198b24
-r25408 cda84e7f21
-r25410 4e488a6059
-r25411 c8385cbf67
-r25412 2b15e8ce93
-r25414 eb3ee130ad
-r25415 4231a0bc06
-r25416 902c61f397
-r25417 9bdc1a0b6d
-r25418 b5865cd83f
-r25419 af412cd72e
-r25420 67a63278a6
-r25421 613f30f1cd
-r25422 9c7e267082
-r25423 d0c5e4be55
-r25424 c0db3f2d06
-r25425 4f5419eecb
-r25426 8c0fa605fb
-r25427 daa26379ce
-r25428 257b6c91a5
-r25429 60ee9924b7
-r25430 2b748e9ce7
-r25431 987c30ddfb
-r25432 74062e3529
-r25433 6f1552568c
-r25434 39e50a12d2
-r25435 cf4037a46c
-r25436 254ad276ca
-r25437 39ebbf6743
-r25438 a1a870a72c
-r25439 5aa8100a48
-r25440 0dda8885a9
-r25441 9a86215c18
-r25442 e02eecbbad
-r25445 c18878ab71
-r25446 209f7e7657
-r25447 234336d7b1
-r25448 f7f5b50848
-r25449 b39a7044d6
-r25450 92f32deabb
-r25451 8709b52eef
-r25452 6d45fddd4c
-r25453 4f4a80ad5b
-r25454 ead69ed245
-r25455 990fa046e6
-r25456 05382e2351
-r25457 2b31bc81ad
-r25458 6fe5754cec
-r25459 be31934db3
-r25460 8b28292b53
-r25461 5b11f250ce
-r25462 9e4bdd411c
-r25463 cda4650d4d
-r25464 2e8cad2cc2
-r25465 b2aba00207
-r25466 554fb11b0c
-r25467 c1aaf1fc7a
-r25468 97da3af7a4
-r25469 335a6bd99b
-r25470 84189c6b15
-r25471 c773c47fe9
-r25472 a584c40018
-r25473 31827a6881
-r25474 e90ef48c1b
-r25475 87aca40676
-r25482 333f540595
-r25483 e3e64e4365
-r25484 879e5af47d
-r25485 ff7416d88b
-r25486 386dddde53
-r25487 e4288e5143
-r25488 febd8857dd
-r25490 48fcd8a794
-r25491 03b1fb29c6
-r25492 7f45f9c67e
-r25493 69867e949d
-r25494 9185598c8b
-r25495 8b4d5de0b6
-r25496 acb91674c8
-r25497 0440f885e9
-r25498 3fff0d0caf
-r25499 5522aeafa7
-r25500 3d740f4f79
-r25505 03ac255fa7
-r25507 abc851a1de
-r25509 f309513c9f
-r25510 e43daf434b
-r25511 20859263f2
-r25518 d8359a20a0
-r25519 719549799e
-r25520 044099d4f1
-r25521 6ba1b9f3c9
-r25522
-r25523 7a5ea2758e
-r25524 bfb20c64a9
-r25525 64a2e3074e
-r25526 63f072fe9b
-r25527 7a49a9aea9
-r25528 96066dec30
-r25529 1bbf88a1fd
-r25530 e4559e4387
-r25531 6a3b465ba9
-r25533 19592c45ed
-r25534 7e99a7d380
-r25535 cecee085f3
-r25537 553bea21fb
-r25538 a707ec6fef
-r25539 cae9d2306e
-r25540 4b29535009
-r25541 80952759fb
-r25544 a93134b483
-r25545 e69822117c
-r25546 3a1463cd83
-r25549 0e74720c49
-r25559 48e8133cb0
-r25560 77175ede13
-r25561 e1a9fd9a7a
-r25562 ce0df1e1bf
-r25563 84fcf633d9
-r25564 b9785280a7
-r25565 e97be9ce13
-r25566 006cd77979
-r25567 fbb5b57d65
-r25568 febf1a0cd9
-r25569 2fdbabe0a2
-r25570 0a9d3e00a4
-r25571 b5bedbce22
-r25572 c4db95fdb8
-r25573 3efce112b5
-r25574 649b4262c4
-r25575 2c548eac23
-r25576 f0b042b335
-r25577 caaf429668
-r25578 6f881202be
-r25583 65bf9178c4
-r25584 6d717dc986
-r25585 d52e53ce4f
-r25586 8f3c3f5387
-r25587 dd050a6a63
-r25588 476e4816f8
-r25589 d8add367dd
-r25596 aade88f8a7
-r25598 0e0e2055f3
-r25599 0377cad8c6
-r25600 9954de923e
-r25601 6d10bd53c5
-r25602 9183117cb4
-r25603 13f30c385b
-r25604 6817244d64
-r25608 fa2deeb430
-r25609 4235635142
-r25610 0d379b728a
-r25611 0d99f59eba
-r25612 c4bb14e760
-r25613 2f4349e8dd
-r25614 7cb2054eb6
-r25615 f3114ec2a4
-r25616 ac9243fb9e
-r25617 8e489f66ec
-r25618 596be479f1
-r25619 620f339bba
-r25620 45d3adac9d
-r25621 68806429fb
-r25622 8cd3eae681
-r25625 c37e8f45cf
-r25626 52c1d019d6
-r25635 f32a32b1b3
-r25636 2c5f1e8b02
-r25637 65a785e177
-r25638 ca15d245fd
-r25639 bcdd1882f1
-r25640 9a40a521b2
-r25641 b2b068133a
-r25642 cbf8534ff7
-r25643 8e8518864f
-r25644 7b173d5bad
-r25645 aaaa019588
-r25646 e8aee14bbd
-r25647 2e7026c0b6
-r25648 d5c30508ca
-r25649 3949410af7
-r25650 acc4c04b0c
-r25651 ac7152b8bb
-r25652 0815b27995
-r25655 b2f3fb2713
-r25656 7cddbc6564
-r25657 17c0462861
-r25658 09b1a31309
-r25659 3b357972e9
-r25660 36bdc192b2
-r25661 be57a47dcf
-r25664 9ffe29d61a
-r25668 c69b0aecc6
-r25669 bd2381d654
-r25670 3b48cc7fe0
-r25671 a3ce6c471a
-r25672 fa0f48a5df
-r25673 fef6649b31
-r25674 7343e04415
-r25675 670f62de1d
-r25676 3defd7a0a0
-r25677 a26fc299ca
-r25678 127dd7654b
-r25679 bbd8480584
-r25680 be9e2991d9
-r25681 3f58f66c8b
-r25682 bfeef8a9d3
-r25683 0c25af0ec8
-r25684 2553cc1fdc
-r25685 f7e038361a
-r25686 5637b22d21
-r25687 e21d9b0a39
-r25688 c22bc18ab6
-r25696 f6d4d84dd7
-r25697 088094b1c8
-r25698 47a131ac36
-r25699 158e6e6106
-r25700 ffcb1847b4
-r25701 4e3a9a64a8
-r25702 dfd19afc50
-r25703 3491b3d79d
-r25704 6c56d71a17
-r25705 c0aebb1220
-r25706 b38f2a1df3
-r25707 5e501977f8
-r25708 afe1d6fa62
-r25709 7e47107efa
-r25710 7dc4723db3
-r25711 1111b27d0e
-r25712 7bfdac0b73
-r25713 2b699c3fdb
-r25714 3e24f4c48d
-r25715 5d5826812a
-r25716 274ce61990
-r25717 c62f666664
-r25719 87972677b8
-r25720 567e9f2980
-r25722 aeda72b2ea
-r25723 0d5660cbcf
-r25724 660d80f682
-r25725 e412524fee
-r25726 a90fbf59ae
-r25727 e3efea04c2
-r25728 b1f7de6ef4
-r25737 e4879d785d
-r25738 287b935ea3
-r25739 7dfb214aaa
-r25742 148f4ef194
-r25743 8c9d01fffa
-r25744 1765432085
-r25745 288faf969a
-r25746 eeaec410f0
-r25747 888444b175
-r25748 9ef01e6885
-r25749 444914a881
-r25750 f4e4a8a588
-r25751 c567ad0922
-r25752 f7a4cdd56f
-r25753 08845f2ce3
-r25754 26ddf17b21
-r25755 82eb1aa430
-r25756 3a1332c451
-r25757 8987550566
-r25758 34387c7184
-r25759 02ac8de5c0
-r25761 4529141cc1
-r25762 f9aa83a6e5
-r25765 1c4765a416
-r25766 6116b8db81
-r25767 6663d12daa
-r25768 5355c120ef
-r25769 2891464fba
-r25770 a2e9a1b465
-r25771 b939e8fbab
-r25772 ff5619e1f0
-r25773 55109d0d25
-r25778 beadafa2d8
-r25779 3503dac971
-r25780 2b4b8bbe9d
-r25782 0d730957dd
-r25783 77d90e3aea
-r25784 e3bbd95afa
-r25785 7ab032f25a
-r25786 5d283f3f68
-r25787 d1a7af8e27
-r25788 10938bfc06
-r25789 ea562b4177
-r25790 97b41d36b6
-r25791 c7f14dbbcc
-r25792 b1c420e48b
-r25793 daffb123fd
-r25796 1e0f7dcb4f
-r25797 0afd6d1b19
-r25798 77aae5843a
-r25799 bcd155beb9
-r25800 e8451c2a8b
-r25801 e98c864cbb
-r25802 497e6321a0
-r25806 4646937ff8
-r25807 2adf5a0613
-r25808 2c1a1192ce
-r25809 bc4468cdd2
-r25810 1706358bdc
-r25811 4e86106b5b
-r25812 d08296f063
-r25813 8821b0f220
-r25814 ca47241bf8
-r25817 063f2c4984
-r25820 0ef5e8a645
-r25821 4b4acbd819
-r25822 168f8065ea
-r25823 d3f0fa824b
-r25824 4f5159f0ed
-r25826 e3b58d0c99
-r25827 1bd14badd7
-r25828 bca8959a1a
-r25829 fcd0998f1e
-r25830 9ea2cefb20
-r25831 e52053f10b
-r25832 58bc507ee1
-r25833 5690452698
-r25834 5575b8c368
-r25835 4d2499a835
-r25836 f434a6d49e
-r25837 7d772368d5
-r25838 581fad662c
-r25839 3778505276
-r25840 240fb16547
-r25841 6974cca537
-r25843 2d2a3e92de
-r25844 a98d0903a8
-r25845 23ab7e3c9a
-r25846 d0a36c66cb
-r25847 ee365acb17
-r25848 d6eb989388
-r25849 75890493a0
-r25850 fb2353db6c
-r25852 8fc7a72a2b
-r25853 8337964e31
-r25854 5fb68614da
-r25855 ac7b8020eb
-r25856 0816035d76
-r25857 612f87b3d3
-r25858 24eb4c5bb5
-r25859 3921e5be74
-r25860 dd8706fc11
-r25861 98b904db87
-r25862 8704ed2fc9
-r25863 d5b81b6cb1
-r25864 8394676c1e
-r25865 891a6e466b
-r25866 8a9fd64129
-r25867 dabe26bb1e
-r25868 421605022d
-r25869 f262ab507e
-r25870 ad3dada12c
-r25871 0172051d24
-r25872 acb1c39dbd
-r25873 4afae5be74
-r25874 3a195c71ba
-r25875 c7ec0385c7
-r25877 0c97d8c73f
-r25879 290f687fb6
-r25880 81fda510a7
-r25881 fa3c892017
-r25882 dbcc393e57
-r25884 1df8d23b47
-r25885 36adada0d5
-r25886 78db538e1d
-r25887 70996f8583
-r25888 6b70b7d23a
-r25889 9bdbc5bb34
-r25890 170089943b
-r25891 ffb65f0061
-r25893 5f0ef121a1
-r25894 893e8b6391
-r25899 daf6f0d5dd
-r25900 09188cd820
-r25901 4505c2b05c
-r25902 eb2d18b945
-r25903 49f352d890
-r25904 6111702474
-r25905 b005cd5798
-r25906 456aee6cad
-r25907 1b68611e04
-r25908 bcf53cbe91
-r25909 6c22499c40
-r25910 d1f89f473a
-r25911 48a26b9c2b
-r25912 2d3fe5733c
-r25913 1f3fe09a78
-r25914 62b0182834
-r25916 8de176f454
-r25917 bf0b9fcf84
-r25918 c0407608be
-r25919 0ba09556cd
-r25920 07c3e9c8c6
-r25921 1754813beb
-r25922 684d1901d9
-r25923 934f8015a2
-r25924 69b3cd5092
-r25928 b7b81ca286
-r25929
-r25930 b6778be919
-r25931 938eab16f8
-r25932 5852fd01b7
-r25935 22d125f1e3
-r25936 53427f86cd
-r25937 5df51cc5a6
-r25938 8006cc6760
-r25941 f4991fcffc
-r25942 508101158c
-r25943 1d4f2d4aa3
-r25944 54435d633e
-r25945 8901935da8
-r25946 4474d9ba20
-r25947 761faecd9f
-r25948 152be020c4
-r25949 affa7911f7
-r25950 d56a8a5d1c
-r25952 d6f9361e4b
-r25953 c8683ff5bf
-r25954 1c0105dec7
-r25957 5816db58e1
-r25958 15b9785d30
-r25959 838a09f2a9
-r25962 a0a045f5c0
-r25963 481096f2c5
-r25964 106180d020
-r25965 0362b6af90
-r25966 5cc3dad991
-r25968 27c8266eb6
-r25969 4eda3043c3
-r25970 bcc5eebedb
-r25971 f9fb5ca997
-r25972 173d9473a1
-r25973 f0bd9a805f
-r25974 7876a574d5
-r25976 7121c6a8db
-r25977 5d6844e9b6
-r25978 a38f03ba96
-r25979 9f9932bd20
-r25980 88e2cfae3d
-r25981 10f7a8c465
-r25982 d01ab1ba46
-r25983 7f4fa0ec6f
-r25984 042fdbc42a
-r25985 f194a29a53
-r25986 7918510f4d
-r25987 78315845b1
-r25988 f308e5d703
-r25989 1016522ec9
-r25990 bac7d17ab1
-r25992 d917d7c8a1
-r25993 ea5aac152d
-r25994 b6a300f3ac
-r25995 bc2bd6e67a
-r25996 0c4ad65950
-r25997 e864f48338
-r25998 89ceefb747
-r26000 01141595e9
-r26001 38a646ce5c
-r26002 46050d6ec4
-r26003 167309afd1
-r26004 b80ad1f452
-r26005 e6497919b3
-r26006 76e35fa141
-r26007 dc3fdb0d49
-r26008 e65ba2a5c2
-r26009 7e643d3e4a
-r26010 85e7755ef6
-r26011 3ba3b39b93
-r26012 ce5d909de9
-r26013 7abc466d64
-r26014 8a64ed85b9
-r26015 0a31808f5f
-r26016 b7395e9f50
-r26017 5f2be94ca4
-r26018 e7fc002d33
-r26019 5270d614f0
-r26020 3b0fd925a8
-r26023 44741eee53
-r26024 89d2dd52ef
-r26025 955b852dfd
-r26026 7c2c8c8adf
-r26027 e386ebdff8
-r26030 47c9911a12
-r26031 7eb6f102e8
-r26032 334872e33b
-r26033 214c145943
-r26034 6d5a16b382
-r26035 943d2cfb07
-r26036 eeb111c41d
-r26037 053e224677
-r26038 c6cc1bbafc
-r26039 e3fcce9c0b
-r26040 f9278123eb
-r26041 eb0643210f
-r26042 e86f07fdd4
-r26043 3b8db0dd75
-r26044 b34615a1e1
-r26045 cd69603589
-r26046 ac03178903
-r26047 a17be60676
-r26048 03112a3a3d
-r26049 370841db4b
-r26050 1189476b0e
-r26051 ae054a1663
-r26052 aa1219dcdb
-r26053 4fca89bfd0
-r26054 817579904b
-r26055 b93c4a9f97
-r26056 25ecde037f
-r26057 f191dca582
-r26058 579e999fbf
-r26059 bbde90f3dc
-r26060 23d7024e71
-r26061 667227b796
-r26062 4213eb4d56
-r26063 8e965f00e4
-r26064 4cfca8a7f6
-r26065 60fb9ec19b
-r26066 93717598b7
-r26067 2b069593c8
-r26068 32a753546e
-r26069 5fb26c6a88
-r26070 1b98d1fa2a
-r26072 afc755916f
-r26073 37201dd3cd
-r26074 172563dfbb
-r26075 b194689ada
-r26077 e4c5e04b06
-r26078 0bea2ab5f6
-r26079 311d813910
-r26080 66bf8db3f1
-r26081 4e987a3cf0
-r26082 f69d3e34dd
-r26083 88ab644173
-r26084 3c24983f42
-r26085 ee5644056a
-r26086 3e04761ce2
-r26087 ca37db37e9
-r26088 6dbd2dac27
-r26089 9c4f14411f
-r26090
-r26091 8eba9acbc4
-r26092 91dbfb2a8f
-r26093 fe38e54ca1
diff --git a/docs/svn-to-sha1-missing.txt b/docs/svn-to-sha1-missing.txt
deleted file mode 100644
index 6971257579..0000000000
--- a/docs/svn-to-sha1-missing.txt
+++ /dev/null
@@ -1,140 +0,0 @@
-# Shas are from https://github.com/paulp/legacy-svn-scala-full
-r309 | 45ffe9aa78
-r449 | 4bed839e59
-r1683 | 7bd4d88483
-r2051 | b23c8e0ecc
-r2197 | c0d1934836
-r3834 | 14d772c56b
-r4479 | 6520d1237f
-r4681 | d1884e972a
-r4683 | 1bc760309d
-r5529 | 8fa51577d6
-r5535 | a316dfdb36
-r5558 | c5a0f08b5e
-r5587 | acfdcee6d7
-r5643 | 0a61670c04
-r5715 | 3eb67c07e1
-r5830 | 86d29d352f
-r5878 | dc991d50da
-r6664 | eb9e4a73f4
-r6948 | 0cb34d506c
-r6952 | 19c934a4de
-r7733 | cf4d26c3d5
-r7936 | c91a40fd4a
-r8191 | 07b14e5e78
-r8532 | cb3a221dc9
-r9120 | 0358410b8c
-r9127 | 4a99565c4d
-r9374 | 81944e8c6f
-r9981 | c8a3383d6e
-r10088 | b0c5bd3c71
-r10521 | df7c409574
-r10522 | 2f7e5a7a45
-r10523 | 676dccd266
-r10661 | 2543f36ad6
-r10708 | d24c570712
-r10767 | 8f9e7589d1
-r10814 | fa8e526415
-r10818 | bdafefa11f
-r12022 | 1842903cd6
-r12333 | ac3b782c26
-r13582 | 66e547e5d7
-r13616 | 4323db0fe6
-r13706 | 0170a864c0
-r13713 | 746a6c03d0
-r13744 | 3485f71caf
-r13988 | f4508f3f91
-r14316 | 787260e7a7
-r14571 | d0fa3c1d43
-r14877 | 37db26c6d7
-r14878 | 66e9bab99b
-r14928 | 3e741d62de
-r15179 | dc53a9887a
-r15181 | e2b387e7a5
-r15343 | e3b0ad33d7
-r15349 | 4f280665c2
-r15659 | 306e59ef39
-r16569 | 126b7403f8
-r16689 | 6a6ab0cbcd
-r16690 | 8ea9a17905
-r16694 | 70e81644e2
-r16695 | fee7bc4772
-r16696 | 0537dbe80a
-r17089 | 25ca913ffb
-r17697 | 47612b688f
-r18364 | ec4670e120
-r18704 | 973010f034
-r18714 | cc69b10717
-r18736 | ee4e13af03
-r18786 | 60feb7dba9
-r18821 | a3ae86b245
-r19523 | 59829c478b
-r19534 | 8206ded007
-r20984 | ec5360d68d
-r21215 | 87a8a7b3ed
-r21341 | afd1ce73e0
-r21419 | 1aedfd0433
-r21834 | 0964721434
-r21837 | 3e180cbb8a
-r21914 | 2b17044a88
-r21919 | 0cdc3778f6
-r21941 | cfee7f5b4a
-r22007 | 97fd29a709
-r22048 | 6a22c267d5
-r22174 | 48e967ea18
-r22180 | b6cdb65735
-r22194 | 8d839e950d
-r22197 | f288be3a1f
-r22248 | bfc7b37042
-r22249 | 64363b019a
-r22279 | 914b8eb08b
-r22281 | d495f6f3cd
-r22296 | 164ffdcce3
-r22300 | 8b4bb765db
-r22316 | 6c59c8c68f
-r22356 | f1912c197d
-r22359 | 51b5c2a504
-r22371 | 767a1147c9
-r22372 | f85daa6911
-r22373 | 5908717a04
-r22375 | 5b73be9a15
-r22396 | b5a49161ce
-r22409 | f0f5ce5102
-r22410 | 46976a50ca
-r22417 | 07cb720be3
-r22421 | 734023d64f
-r22423 | c7f1dbe2d1
-r22479 | 4f73f40c49
-r22493 | 12f498d4a1
-r22532 | 080efc62da
-r22534 | 2e62d6991c
-r22550 | a03e9494fc
-r22580 | a3eb24ff8b
-r22599 | c5082d61d8
-r22627 | 14e121bc33
-r22631 | 5988b2a472
-r22652 | 92438a01f5
-r22765 | 46a68d025c
-r22917 | c0c3a20428
-r22952 | 611211e5f8
-r23203 | c8ad56f269
-r23437 | 63b3d5cee1
-r23656 | 2c6625e236
-r23715 | dda53a171e
-r23869 | 26507816f5
-r23978 | b2345752fb
-r24033 | 09041c59aa
-r24122 | 2bf6b6d6dd
-r24246 | a150ac383b
-r24376 | 861fda78b5
-r24450 | fe95545d68
-r24456 | d3456d776b
-r24482 | d8311274d1
-r24559 | 75c9b12581
-r24686 | a7841e490c
-r24982 | d4ce3b2c21
-r25203 | 029167f940
-r25249 | 288a6b856d
-r25522 | cacd228c5b
-r25929 | 710aba4df0
-r26090 | 93e5faca79
diff --git a/project/VersionUtil.scala b/project/VersionUtil.scala
index fde55a5969..7c4909697f 100644
--- a/project/VersionUtil.scala
+++ b/project/VersionUtil.scala
@@ -20,7 +20,7 @@ object VersionUtil {
)
lazy val generatePropertiesFileSettings = Seq[Setting[_]](
- copyrightString := "Copyright 2002-2016, LAMP/EPFL",
+ copyrightString := "Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.",
resourceGenerators in Compile += generateVersionPropertiesFile.map(file => Seq(file)).taskValue,
generateVersionPropertiesFile := generateVersionPropertiesFileImpl.value
)
@@ -149,10 +149,10 @@ object VersionUtil {
def bootstrapDep(baseDir: File, path: String, libName: String): ModuleID = {
val sha = IO.read(baseDir / path / s"$libName.jar.desired.sha1").split(' ')(0)
bootstrapOrganization(path) % libName % sha from
- s"https://dl.bintray.com/typesafe/scala-sha-bootstrap/org/scala-lang/bootstrap/$sha/$path/$libName.jar"
+ s"https://repo.lightbend.com/typesafe/scala-sha-bootstrap/org/scala-lang/bootstrap/$sha/$path/$libName.jar"
}
- /** Copy a boostrap dependency JAR that is on the classpath to a file */
+ /** Copy a bootstrap dependency JAR that is on the classpath to a file */
def copyBootstrapJar(cp: Seq[Attributed[File]], baseDir: File, path: String, libName: String): Unit = {
val org = bootstrapOrganization(path)
val resolved = cp.find { a =>
diff --git a/project/build.properties b/project/build.properties
index 43b8278c68..35c88bab7d 100644
--- a/project/build.properties
+++ b/project/build.properties
@@ -1 +1 @@
-sbt.version=0.13.11
+sbt.version=0.13.12
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 0a5b8f3dd4..e056de55ec 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -19,4 +19,4 @@ buildInfoKeys := Seq[BuildInfoKey](buildClasspath)
buildInfoPackage := "scalabuild"
-libraryDependencies += "com.typesafe" %% "mima-reporter" % "0.1.8"
+libraryDependencies += "com.typesafe" %% "mima-reporter" % "0.1.11"
diff --git a/scripts/common b/scripts/common
index 95389e5495..6c870f720f 100644
--- a/scripts/common
+++ b/scripts/common
@@ -19,7 +19,7 @@ mkdir -p $IVY_CACHE
rm -rf $IVY_CACHE/cache/org.scala-lang
SBT_CMD=${sbtCmd-sbt}
-SBT_CMD="$SBT_CMD -sbt-version 0.13.11"
+SBT_CMD="$SBT_CMD -sbt-version 0.13.12"
# temp dir where all 'non-build' operation are performed
TMP_ROOT_DIR=$(mktemp -d -t pr-scala.XXXX)
@@ -168,8 +168,8 @@ function generateRepositoriesConfig() {
fi
cat >> "$sbtRepositoryConfig" << EOF
jcenter-cache: $jcenterCacheUrl
- typesafe-ivy-releases: https://dl.bintray.com/typesafe/ivy-releases/, [organisation]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
- sbt-plugin-releases: https://dl.bintray.com/sbt/sbt-plugin-releases/, [organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
+ typesafe-ivy-releases: https://repo.lightbend.com/typesafe/ivy-releases/, [organisation]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
+ sbt-plugin-releases: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/, [organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
maven-central
local
EOF
diff --git a/scripts/jobs/integrate/bootstrap b/scripts/jobs/integrate/bootstrap
index bd509061b7..5340bda0e1 100644..100755
--- a/scripts/jobs/integrate/bootstrap
+++ b/scripts/jobs/integrate/bootstrap
@@ -90,7 +90,9 @@ publishSonatypeTaskModules=${publishSonatypeTaskModules-"publishSigned"}
forceRebuild=${forceRebuild-no}
-sbtBuildTask="testAll" # TESTING leave empty to avoid the sanity check
+sbtBuildTask=${sbtBuildTask-"testAll"} # TESTING leave empty to avoid the sanity check
+testStability=${testStability-yes}
+
clean="clean" # TESTING leave empty to speed up testing
baseDir=${WORKSPACE-`pwd`}
@@ -529,6 +531,15 @@ bootstrap() {
# clear ivy cache (and to be sure, local as well), so the next round of sbt builds sees the fresh scala
rm -rf $baseDir/ivy2
+ # TODO: create PR with following commit (note that release will have been tagged already)
+ # git commit versions.properties -m"Bump versions.properties for $SCALA_VER."
+}
+
+testStability() {
+ echo "### Testing stability"
+
+ cd $baseDir
+
# Run stability tests using the just built version as "quick" and a new version as "strap"
mv build/quick quick1
rm -rf build/
@@ -542,9 +553,6 @@ bootstrap() {
mv build/quick build/strap
mv quick1 build/quick
$scriptsDir/stability-test.sh
-
- # TODO: create PR with following commit (note that release will have been tagged already)
- # git commit versions.properties -m"Bump versions.properties for $SCALA_VER."
}
# assumes we just bootstrapped, and current directory is $baseDir
@@ -591,6 +599,10 @@ removeExistingBuilds
bootstrap
+if [ "$testStability" == "yes" ]
+ then testStability
+fi
+
if [ "$publishToSonatype" == "yes" ]
then publishSonatype
fi
diff --git a/spec/01-lexical-syntax.md b/spec/01-lexical-syntax.md
index 4e92c7cf7b..e4764c10dc 100644
--- a/spec/01-lexical-syntax.md
+++ b/spec/01-lexical-syntax.md
@@ -41,7 +41,7 @@ classes (Unicode general category given in parentheses):
1. Parentheses `‘(’ | ‘)’ | ‘[’ | ‘]’ | ‘{’ | ‘}’ `.
1. Delimiter characters ``‘`’ | ‘'’ | ‘"’ | ‘.’ | ‘;’ | ‘,’ ``.
1. Operator characters. These consist of all printable ASCII characters
- `\u0020` - `\u007F` which are in none of the sets above, mathematical
+ (`\u0020` - `\u007E`) that are in none of the sets above, mathematical
symbols (`Sm`) and other symbols (`So`).
## Identifiers
diff --git a/spec/05-classes-and-objects.md b/spec/05-classes-and-objects.md
index d1a1a8739d..739fd28eb1 100644
--- a/spec/05-classes-and-objects.md
+++ b/spec/05-classes-and-objects.md
@@ -7,9 +7,9 @@ chapter: 5
# Classes and Objects
```ebnf
-TmplDef ::= [`case'] `class' ClassDef
- | [`case'] `object' ObjectDef
- | `trait' TraitDef
+TmplDef ::= [‘case’] ‘class’ ClassDef
+ | [‘case’] ‘object’ ObjectDef
+ | ‘trait’ TraitDef
```
[Classes](#class-definitions) and [objects](#object-definitions)
@@ -20,11 +20,11 @@ are both defined in terms of _templates_.
```ebnf
ClassTemplate ::= [EarlyDefs] ClassParents [TemplateBody]
TraitTemplate ::= [EarlyDefs] TraitParents [TemplateBody]
-ClassParents ::= Constr {`with' AnnotType}
-TraitParents ::= AnnotType {`with' AnnotType}
-TemplateBody ::= [nl] `{' [SelfType] TemplateStat {semi TemplateStat} `}'
-SelfType ::= id [`:' Type] `=>'
- | this `:' Type `=>'
+ClassParents ::= Constr {‘with’ AnnotType}
+TraitParents ::= AnnotType {‘with’ AnnotType}
+TemplateBody ::= [nl] ‘{’ [SelfType] TemplateStat {semi TemplateStat} ‘}’
+SelfType ::= id [‘:’ Type] ‘=>’
+ | this ‘:’ Type ‘=>’
```
A _template_ defines the type signature, behavior and initial state of a
@@ -145,7 +145,7 @@ def delayedInit(body: => Unit)
### Constructor Invocations
```ebnf
-Constr ::= AnnotType {`(' [Exprs] `)'}
+Constr ::= AnnotType {‘(’ [Exprs] ‘)’}
```
Constructor invocations define the type, members, and initial state of
@@ -410,7 +410,7 @@ necessary to make subtyping decidable[^kennedy]).
### Early Definitions
```ebnf
-EarlyDefs ::= `{' [EarlyDef {semi EarlyDef}] `}' `with'
+EarlyDefs ::= ‘{’ [EarlyDef {semi EarlyDef}] ‘}’ ‘with’
EarlyDef ::= {Annotation} {Modifier} PatVarDef
```
@@ -478,14 +478,14 @@ body, it would be initialized after the constructor of
```ebnf
Modifier ::= LocalModifier
| AccessModifier
- | `override'
-LocalModifier ::= `abstract'
- | `final'
- | `sealed'
- | `implicit'
- | `lazy'
-AccessModifier ::= (`private' | `protected') [AccessQualifier]
-AccessQualifier ::= `[' (id | `this') `]'
+ | ‘override’
+LocalModifier ::= ‘abstract’
+ | ‘final’
+ | ‘sealed’
+ | ‘implicit’
+ | ‘lazy’
+AccessModifier ::= (‘private’ | ‘protected’) [AccessQualifier]
+AccessQualifier ::= ‘[’ (id | ‘this’) ‘]’
```
Member definitions may be preceded by modifiers which affect the
@@ -668,16 +668,16 @@ constructor `private` ([example](#example-private-constructor)).
## Class Definitions
```ebnf
-TmplDef ::= `class' ClassDef
+TmplDef ::= ‘class’ ClassDef
ClassDef ::= id [TypeParamClause] {Annotation}
[AccessModifier] ClassParamClauses ClassTemplateOpt
ClassParamClauses ::= {ClassParamClause}
- [[nl] `(' implicit ClassParams `)']
-ClassParamClause ::= [nl] `(' [ClassParams] ')'
-ClassParams ::= ClassParam {`,' ClassParam}
-ClassParam ::= {Annotation} {Modifier} [(`val' | `var')]
- id [`:' ParamType] [`=' Expr]
-ClassTemplateOpt ::= `extends' ClassTemplate | [[`extends'] TemplateBody]
+ [[nl] ‘(’ implicit ClassParams ‘)’]
+ClassParamClause ::= [nl] ‘(’ [ClassParams] ‘)’
+ClassParams ::= ClassParam {‘,’ ClassParam}
+ClassParam ::= {Annotation} {Modifier} [(‘val’ | ‘var’)]
+ id [‘:’ ParamType] [‘=’ Expr]
+ClassTemplateOpt ::= ‘extends’ ClassTemplate | [[‘extends’] TemplateBody]
```
The most general form of class definition is
@@ -768,12 +768,12 @@ class Sensitive private () {
### Constructor Definitions
```ebnf
-FunDef ::= `this' ParamClause ParamClauses
- (`=' ConstrExpr | [nl] ConstrBlock)
+FunDef ::= ‘this’ ParamClause ParamClauses
+ (‘=’ ConstrExpr | [nl] ConstrBlock)
ConstrExpr ::= SelfInvocation
| ConstrBlock
-ConstrBlock ::= `{' SelfInvocation {semi BlockStat} `}'
-SelfInvocation ::= `this' ArgumentExprs {ArgumentExprs}
+ConstrBlock ::= ‘{’ SelfInvocation {semi BlockStat} ‘}’
+SelfInvocation ::= ‘this’ ArgumentExprs {ArgumentExprs}
```
A class may have additional constructors besides the primary
@@ -836,7 +836,7 @@ third one constructs a list with a given head and tail.
### Case Classes
```ebnf
-TmplDef ::= `case' `class' ClassDef
+TmplDef ::= ‘case’ ‘class’ ClassDef
```
If a class definition is prefixed with `case`, the class is said
@@ -967,9 +967,9 @@ directly extend `Expr` must be in the same source file as
## Traits
```ebnf
-TmplDef ::= `trait' TraitDef
+TmplDef ::= ‘trait’ TraitDef
TraitDef ::= id [TypeParamClause] TraitTemplateOpt
-TraitTemplateOpt ::= `extends' TraitTemplate | [[`extends'] TemplateBody]
+TraitTemplateOpt ::= ‘extends’ TraitTemplate | [[‘extends’] TemplateBody]
```
A _trait_ is a class that is meant to be added to some other class
diff --git a/spec/06-expressions.md b/spec/06-expressions.md
index 9df9249373..30fd94c1a8 100644
--- a/spec/06-expressions.md
+++ b/spec/06-expressions.md
@@ -7,44 +7,44 @@ chapter: 6
# Expressions
```ebnf
-Expr ::= (Bindings | id | `_') `=>' Expr
+Expr ::= (Bindings | id | ‘_’) ‘=>’ Expr
| Expr1
-Expr1 ::= `if' `(' Expr `)' {nl} Expr [[semi] `else' Expr]
- | `while' `(' Expr `)' {nl} Expr
- | `try' (`{' Block `}' | Expr) [`catch' `{' CaseClauses `}'] [`finally' Expr]
- | `do' Expr [semi] `while' `(' Expr ')'
- | `for' (`(' Enumerators `)' | `{' Enumerators `}') {nl} [`yield'] Expr
- | `throw' Expr
- | `return' [Expr]
- | [SimpleExpr `.'] id `=' Expr
- | SimpleExpr1 ArgumentExprs `=' Expr
+Expr1 ::= ‘if’ ‘(’ Expr ‘)’ {nl} Expr [[semi] ‘else’ Expr]
+ | ‘while’ ‘(’ Expr ‘)’ {nl} Expr
+ | ‘try’ (‘{’ Block ‘}’ | Expr) [‘catch’ ‘{’ CaseClauses ‘}’] [‘finally’ Expr]
+ | ‘do’ Expr [semi] ‘while’ ‘(’ Expr ‘)’
+ | ‘for’ (‘(’ Enumerators ‘)’ | ‘{’ Enumerators ‘}’) {nl} [‘yield’] Expr
+ | ‘throw’ Expr
+ | ‘return’ [Expr]
+ | [SimpleExpr ‘.’] id ‘=’ Expr
+ | SimpleExpr1 ArgumentExprs ‘=’ Expr
| PostfixExpr
| PostfixExpr Ascription
- | PostfixExpr `match' `{' CaseClauses `}'
+ | PostfixExpr ‘match’ ‘{’ CaseClauses ‘}’
PostfixExpr ::= InfixExpr [id [nl]]
InfixExpr ::= PrefixExpr
| InfixExpr id [nl] InfixExpr
-PrefixExpr ::= [`-' | `+' | `~' | `!'] SimpleExpr
-SimpleExpr ::= `new' (ClassTemplate | TemplateBody)
+PrefixExpr ::= [‘-’ | ‘+’ | ‘~’ | ‘!’] SimpleExpr
+SimpleExpr ::= ‘new’ (ClassTemplate | TemplateBody)
| BlockExpr
- | SimpleExpr1 [`_']
+ | SimpleExpr1 [‘_’]
SimpleExpr1 ::= Literal
| Path
- | `_'
- | `(' [Exprs] `)'
- | SimpleExpr `.' id s
+ | ‘_’
+ | ‘(’ [Exprs] ‘)’
+ | SimpleExpr ‘.’ id s
| SimpleExpr TypeArgs
| SimpleExpr1 ArgumentExprs
| XmlExpr
-Exprs ::= Expr {`,' Expr}
+Exprs ::= Expr {‘,’ Expr}
BlockExpr ::= ‘{’ CaseClauses ‘}’
| ‘{’ Block ‘}’
Block ::= BlockStat {semi BlockStat} [ResultExpr]
ResultExpr ::= Expr1
- | (Bindings | ([`implicit'] id | `_') `:' CompoundType) `=>' Block
-Ascription ::= `:' InfixType
- | `:' Annotation {Annotation}
- | `:' `_' `*'
+ | (Bindings | ([‘implicit’] id | ‘_’) ‘:’ CompoundType) ‘=>’ Block
+Ascription ::= ‘:’ InfixType
+ | ‘:’ Annotation {Annotation}
+ | ‘:’ ‘_’ ‘*’
```
Expressions are composed of operators and operands. Expression forms are
@@ -100,7 +100,7 @@ A reference to any other member of the "null" object causes a
```ebnf
SimpleExpr ::= Path
- | SimpleExpr `.' id
+ | SimpleExpr ‘.’ id
```
A designator refers to a named term. It can be a _simple name_ or
@@ -151,8 +151,8 @@ by a definition overriding $m$.
## This and Super
```ebnf
-SimpleExpr ::= [id `.'] `this'
- | [id '.'] `super' [ClassQualifier] `.' id
+SimpleExpr ::= [id ‘.’] ‘this’
+ | [id ‘.’] ‘super’ [ClassQualifier] ‘.’ id
```
The expression `this` can appear in the statement part of a
@@ -175,7 +175,9 @@ in the least proper supertype of the innermost template containing the
reference. It evaluates to the member $m'$ in the actual supertype of
that template which is equal to $m$ or which overrides $m$. The
statically referenced member $m$ must be a type or a
-method. <!-- explanation: so that we need not create several fields for overriding vals -->
+method.
+
+<!-- explanation: so that we need not create several fields for overriding vals -->
If it is
a method, it must be concrete, or the template
@@ -232,10 +234,10 @@ depending on whether `B` is mixed in with class `Root` or `A`.
```ebnf
SimpleExpr ::= SimpleExpr1 ArgumentExprs
-ArgumentExprs ::= `(' [Exprs] `)'
- | `(' [Exprs `,'] PostfixExpr `:' `_' `*' ')'
+ArgumentExprs ::= ‘(’ [Exprs] ‘)’
+ | ‘(’ [Exprs ‘,’] PostfixExpr ‘:’ ‘_’ ‘*’ ‘)’
| [nl] BlockExpr
-Exprs ::= Expr {`,' Expr}
+Exprs ::= Expr {‘,’ Expr}
```
An application `$f(e_1 , \ldots , e_m)$` applies the function `$f$` to the argument expressions `$e_1, \ldots , e_m$`. For this expression to be well-typed, the function must be *applicable* to its arguments, which is defined next by case analysis on $f$'s type.
@@ -404,7 +406,7 @@ On the Java platform version 7 and later, the methods `invoke` and `invokeExact`
## Method Values
```ebnf
-SimpleExpr ::= SimpleExpr1 `_'
+SimpleExpr ::= SimpleExpr1 ‘_’
```
The expression `$e$ _` is well-formed if $e$ is of method
@@ -459,7 +461,7 @@ and the expected result type.
## Tuples
```ebnf
-SimpleExpr ::= `(' [Exprs] `)'
+SimpleExpr ::= ‘(’ [Exprs] ‘)’
```
A _tuple expression_ `($e_1 , \ldots , e_n$)` is an alias
@@ -471,7 +473,7 @@ The empty tuple
## Instance Creation Expressions
```ebnf
-SimpleExpr ::= `new' (ClassTemplate | TemplateBody)
+SimpleExpr ::= ‘new’ (ClassTemplate | TemplateBody)
```
A _simple instance creation expression_ is of the form
@@ -603,7 +605,7 @@ the existentially quantified type
PostfixExpr ::= InfixExpr [id [nl]]
InfixExpr ::= PrefixExpr
| InfixExpr id [nl] InfixExpr
-PrefixExpr ::= [`-' | `+' | `!' | `~'] SimpleExpr
+PrefixExpr ::= [‘-’ | ‘+’ | ‘!’ | ‘~’] SimpleExpr
```
Expressions can be constructed from operands and operators.
@@ -733,7 +735,7 @@ The re-interpretation occurs if the following two conditions are fulfilled.
## Typed Expressions
```ebnf
-Expr1 ::= PostfixExpr `:' CompoundType
+Expr1 ::= PostfixExpr ‘:’ CompoundType
```
The _typed expression_ $e: T$ has type $T$. The type of
@@ -752,7 +754,7 @@ Here are examples of well-typed and ill-typed expressions.
## Annotated Expressions
```ebnf
-Expr1 ::= PostfixExpr `:' Annotation {Annotation}
+Expr1 ::= PostfixExpr ‘:’ Annotation {Annotation}
```
An _annotated expression_ `$e$: @$a_1$ $\ldots$ @$a_n$`
@@ -762,8 +764,8 @@ expression $e$.
## Assignments
```ebnf
-Expr1 ::= [SimpleExpr `.'] id `=' Expr
- | SimpleExpr1 ArgumentExprs `=' Expr
+Expr1 ::= [SimpleExpr ‘.’] id ‘=’ Expr
+ | SimpleExpr1 ArgumentExprs ‘=’ Expr
```
The interpretation of an assignment to a simple variable `$x$ = $e$`
@@ -847,7 +849,7 @@ def matmul(xss: Array[Array[Double]], yss: Array[Array[Double]]) = {
## Conditional Expressions
```ebnf
-Expr1 ::= `if' `(' Expr `)' {nl} Expr [[semi] `else' Expr]
+Expr1 ::= ‘if’ ‘(’ Expr ‘)’ {nl} Expr [[semi] ‘else’ Expr]
```
The _conditional expression_ `if ($e_1$) $e_2$ else $e_3$` chooses
@@ -873,7 +875,7 @@ evaluated as if it was `if ($e_1$) $e_2$ else ()`.
## While Loop Expressions
```ebnf
-Expr1 ::= `while' `(' Expr ')' {nl} Expr
+Expr1 ::= ‘while’ ‘(’ Expr ‘)’ {nl} Expr
```
The _while loop expression_ `while ($e_1$) $e_2$` is typed and
@@ -888,7 +890,7 @@ def whileLoop(cond: => Boolean)(body: => Unit): Unit =
## Do Loop Expressions
```ebnf
-Expr1 ::= `do' Expr [semi] `while' `(' Expr ')'
+Expr1 ::= ‘do’ Expr [semi] ‘while’ ‘(’ Expr ‘)’
```
The _do loop expression_ `do $e_1$ while ($e_2$)` is typed and
@@ -898,11 +900,11 @@ A semicolon preceding the `while` symbol of a do loop expression is ignored.
## For Comprehensions and For Loops
```ebnf
-Expr1 ::= `for' (`(' Enumerators `)' | `{' Enumerators `}')
- {nl} [`yield'] Expr
+Expr1 ::= ‘for’ (‘(’ Enumerators ‘)’ | ‘{’ Enumerators ‘}’)
+ {nl} [‘yield’] Expr
Enumerators ::= Generator {semi Generator}
-Generator ::= Pattern1 `<-' Expr {[semi] Guard | semi Pattern1 `=' Expr}
-Guard ::= `if' PostfixExpr
+Generator ::= Pattern1 ‘<-’ Expr {[semi] Guard | semi Pattern1 ‘=’ Expr}
+Guard ::= ‘if’ PostfixExpr
```
A _for loop_ `for ($\mathit{enums}\,$) $e$` executes expression $e$
@@ -1046,7 +1048,7 @@ The code above makes use of the fact that `map`, `flatMap`,
## Return Expressions
```ebnf
-Expr1 ::= `return' [Expr]
+Expr1 ::= ‘return’ [Expr]
```
A _return expression_ `return $e$` must occur inside the body of some
@@ -1083,7 +1085,7 @@ and will propagate up the call stack.
## Throw Expressions
```ebnf
-Expr1 ::= `throw' Expr
+Expr1 ::= ‘throw’ Expr
```
A _throw expression_ `throw $e$` evaluates the expression
@@ -1100,8 +1102,8 @@ is `scala.Nothing`.
## Try Expressions
```ebnf
-Expr1 ::= `try' (`{' Block `}' | Expr) [`catch' `{' CaseClauses `}']
- [`finally' Expr]
+Expr1 ::= ‘try’ (‘{’ Block ‘}’ | Expr) [‘catch’ ‘{’ CaseClauses ‘}’]
+ [‘finally’ Expr]
```
A _try expression_ is of the form `try { $b$ } catch $h$`
@@ -1152,10 +1154,10 @@ for `try { try { $b$ } catch $e_1$ } finally $e_2$`.
## Anonymous Functions
```ebnf
-Expr ::= (Bindings | [`implicit'] id | `_') `=>' Expr
-ResultExpr ::= (Bindings | ([`implicit'] id | `_') `:' CompoundType) `=>' Block
-Bindings ::= `(' Binding {`,' Binding} `)'
-Binding ::= (id | `_') [`:' Type]
+Expr ::= (Bindings | [‘implicit’] id | ‘_’) ‘=>’ Expr
+ResultExpr ::= (Bindings | ([‘implicit’] id | ‘_’) ‘:’ CompoundType) ‘=>’ Block
+Bindings ::= ‘(’ Binding {‘,’ Binding} ‘)’
+Binding ::= (id | ‘_’) [‘:’ Type]
```
The anonymous function of arity $n$, `($x_1$: $T_1 , \ldots , x_n$: $T_n$) => e` maps parameters $x_i$ of types $T_i$ to a result given by expression $e$. The scope of each formal parameter $x_i$ is $e$. Formal parameters must have pairwise distinct names.
@@ -1213,7 +1215,7 @@ _ => 5 // The function that ignores its argument
### Placeholder Syntax for Anonymous Functions
```ebnf
-SimpleExpr1 ::= `_'
+SimpleExpr1 ::= ‘_’
```
An expression (of syntactic category `Expr`)
@@ -1359,6 +1361,7 @@ Note that a function literal that targets a SAM is not necessarily compiled to t
It follows that:
- if class `C` defines a constructor, it must be accessible and must define exactly one, empty, argument list;
+ - class `C` cannot be `final` or `sealed` (for simplicity we ignore the possibility of SAM conversion in the same compilation unit as the sealed class);
- `m` cannot be polymorphic;
- it must be possible to derive a fully-defined type `U` from `S` by inferring any unknown type parameters of `C`.
diff --git a/spec/08-pattern-matching.md b/spec/08-pattern-matching.md
index 00f9099bea..ecaaa04c2b 100644
--- a/spec/08-pattern-matching.md
+++ b/spec/08-pattern-matching.md
@@ -56,7 +56,7 @@ patterns.
### Variable Patterns
```ebnf
- SimplePattern ::= `_'
+ SimplePattern ::= ‘_’
| varid
```
@@ -69,8 +69,8 @@ which is treated as if it was a fresh variable on each occurrence.
### Typed Patterns
```ebnf
- Pattern1 ::= varid `:' TypePat
- | `_' `:' TypePat
+ Pattern1 ::= varid ‘:’ TypePat
+ | ‘_’ ‘:’ TypePat
```
A _typed pattern_ $x: T$ consists of a pattern variable $x$ and a
@@ -83,7 +83,7 @@ that value.
### Pattern Binders
```ebnf
- Pattern2 ::= varid `@' Pattern3
+ Pattern2 ::= varid ‘@’ Pattern3
```
A _pattern binder_ `$x$@$p$` consists of a pattern variable $x$ and a
@@ -144,7 +144,7 @@ argument of `f` are equal.
### Constructor Patterns
```ebnf
-SimplePattern ::= StableId `(' [Patterns] `)
+SimplePattern ::= StableId ‘(’ [Patterns] ‘)’
```
A _constructor pattern_ is of the form $c(p_1 , \ldots , p_n)$ where $n
@@ -170,7 +170,7 @@ repeated parameter. This is further discussed [here](#pattern-sequences).
### Tuple Patterns
```ebnf
- SimplePattern ::= `(' [Patterns] `)'
+ SimplePattern ::= ‘(’ [Patterns] ‘)’
```
A _tuple pattern_ `($p_1 , \ldots , p_n$)` is an alias
@@ -181,7 +181,7 @@ where $n \geq 2$. The empty tuple
### Extractor Patterns
```ebnf
- SimplePattern ::= StableId `(' [Patterns] `)'
+ SimplePattern ::= StableId ‘(’ [Patterns] ‘)’
```
An _extractor pattern_ $x(p_1 , \ldots , p_n)$ where $n \geq 0$ is of
@@ -241,7 +241,7 @@ val y = x match {
### Pattern Sequences
```ebnf
-SimplePattern ::= StableId `(' [Patterns `,'] [varid `@'] `_' `*' `)'
+SimplePattern ::= StableId ‘(’ [Patterns ‘,’] [varid ‘@’] ‘_’ ‘*’ ‘)’
```
A _pattern sequence_ $p_1 , \ldots , p_n$ appears in two contexts.
@@ -277,7 +277,7 @@ shorthand for the constructor or extractor pattern $\mathit{op}(p, q_1
### Pattern Alternatives
```ebnf
- Pattern ::= Pattern1 { `|' Pattern1 }
+ Pattern ::= Pattern1 { ‘|’ Pattern1 }
```
A _pattern alternative_ `$p_1$ | $\ldots$ | $p_n$`
@@ -441,7 +441,7 @@ complexity.
### Type parameter inference for constructor patterns
Assume a constructor pattern $C(p_1 , \ldots , p_n)$ where class $C$
-has type type parameters $a_1 , \ldots , a_n$. These type parameters
+has type parameters $a_1 , \ldots , a_n$. These type parameters
are inferred in the same way as for the typed pattern
`(_: $C[a_1 , \ldots , a_n]$)`.
@@ -521,9 +521,9 @@ function's declared result type, `Number`.
## Pattern Matching Expressions
```ebnf
- Expr ::= PostfixExpr `match' `{' CaseClauses `}'
+ Expr ::= PostfixExpr ‘match’ ‘{’ CaseClauses ‘}’
CaseClauses ::= CaseClause {CaseClause}
- CaseClause ::= `case' Pattern [Guard] `=>' Block
+ CaseClause ::= ‘case’ Pattern [Guard] ‘=>’ Block
```
A _pattern matching expression_
@@ -638,7 +638,7 @@ conforms to its expected type, `T`.
## Pattern Matching Anonymous Functions
```ebnf
- BlockExpr ::= `{' CaseClauses `}'
+ BlockExpr ::= ‘{’ CaseClauses ‘}’
```
An anonymous function can be defined by a sequence of cases
diff --git a/spec/10-xml-expressions-and-patterns.md b/spec/10-xml-expressions-and-patterns.md
index b70fb86471..ea93cc8d8e 100644
--- a/spec/10-xml-expressions-and-patterns.md
+++ b/spec/10-xml-expressions-and-patterns.md
@@ -76,8 +76,8 @@ AttValue ::= ‘"’ {CharQ | CharRef} ‘"’
ScalaExpr ::= Block
-CharData ::= { CharNoRef } $\textit{ without}$ {CharNoRef}`{'CharB {CharNoRef}
- $\textit{ and without}$ {CharNoRef}`]]>'{CharNoRef}
+CharData ::= { CharNoRef } $\textit{ without}$ {CharNoRef}‘{’CharB {CharNoRef}
+ $\textit{ and without}$ {CharNoRef}‘]]>’{CharNoRef}
```
<!-- {% raw %} stupid liquid borks on the double brace below; brace yourself, liquid! -->
diff --git a/spec/13-syntax-summary.md b/spec/13-syntax-summary.md
index 44c481f9f6..dd042824f4 100644
--- a/spec/13-syntax-summary.md
+++ b/spec/13-syntax-summary.md
@@ -11,7 +11,7 @@ The following descriptions of Scala tokens uses literal characters `‘c’` whe
_Unicode escapes_ are used to represent the Unicode character with the given hexadecimal code:
```ebnf
-UnicodeEscape ::= ‘\‘ ‘u‘ {‘u‘} hexDigit hexDigit hexDigit hexDigit
+UnicodeEscape ::= ‘\’ ‘u’ {‘u’} hexDigit hexDigit hexDigit hexDigit
hexDigit ::= ‘0’ | … | ‘9’ | ‘A’ | … | ‘F’ | ‘a’ | … | ‘f’
```
@@ -30,7 +30,7 @@ delim ::= ‘`’ | ‘'’ | ‘"’ | ‘.’ | ‘;’ | ‘,’
opchar ::= // printableChar not matched by (whiteSpace | upper | lower |
// letter | digit | paren | delim | opchar | Unicode_Sm | Unicode_So)
printableChar ::= // all characters in [\u0020, \u007F] inclusive
-charEscapeSeq ::= ‘\‘ (‘b‘ | ‘t‘ | ‘n‘ | ‘f‘ | ‘r‘ | ‘"‘ | ‘'‘ | ‘\‘)
+charEscapeSeq ::= ‘\’ (‘b’ | ‘t’ | ‘n’ | ‘f’ | ‘r’ | ‘"’ | ‘'’ | ‘\’)
op ::= opchar {opchar}
varid ::= lower idrest
@@ -129,18 +129,18 @@ grammar:
Expr ::= (Bindings | [‘implicit’] id | ‘_’) ‘=>’ Expr
| Expr1
- Expr1 ::= `if' `(' Expr `)' {nl} Expr [[semi] `else' Expr]
- | `while' `(' Expr `)' {nl} Expr
- | `try' (`{' Block `}' | Expr) [`catch' `{' CaseClauses `}'] [`finally' Expr]
- | `do' Expr [semi] `while' `(' Expr `)'
- | `for' (`(' Enumerators `)' | `{' Enumerators `}') {nl} [`yield'] Expr
- | `throw' Expr
- | `return' [Expr]
- | [SimpleExpr `.'] id `=' Expr
- | SimpleExpr1 ArgumentExprs `=' Expr
+ Expr1 ::= ‘if’ ‘(’ Expr ‘)’ {nl} Expr [[semi] ‘else’ Expr]
+ | ‘while’ ‘(’ Expr ‘)’ {nl} Expr
+ | ‘try’ (‘{’ Block ‘}’ | Expr) [‘catch’ ‘{’ CaseClauses ‘}’] [‘finally’ Expr]
+ | ‘do’ Expr [semi] ‘while’ ‘(’ Expr ‘)’
+ | ‘for’ (‘(’ Enumerators ‘)’ | ‘{’ Enumerators ‘}’) {nl} [‘yield’] Expr
+ | ‘throw’ Expr
+ | ‘return’ [Expr]
+ | [SimpleExpr ‘.’] id ‘=’ Expr
+ | SimpleExpr1 ArgumentExprs ‘=’ Expr
| PostfixExpr
| PostfixExpr Ascription
- | PostfixExpr `match' `{' CaseClauses `}'
+ | PostfixExpr ‘match’ ‘{’ CaseClauses ‘}’
PostfixExpr ::= InfixExpr [id [nl]]
InfixExpr ::= PrefixExpr
| InfixExpr id [nl] InfixExpr
@@ -213,7 +213,7 @@ grammar:
[[nl] ‘(’ ‘implicit’ ClassParams ‘)’]
ClassParamClause ::= [nl] ‘(’ [ClassParams] ‘)’
ClassParams ::= ClassParam {‘,’ ClassParam}
- ClassParam ::= {Annotation} {Modifier} [(`val' | `var')]
+ ClassParam ::= {Annotation} {Modifier} [(‘val’ | ‘var’)]
id ‘:’ ParamType [‘=’ Expr]
Bindings ::= ‘(’ Binding {‘,’ Binding} ‘)’
Binding ::= (id | ‘_’) [‘:’ Type]
diff --git a/spec/README.md b/spec/README.md
index 1a201fc97c..9fd7c9f6ae 100644
--- a/spec/README.md
+++ b/spec/README.md
@@ -12,7 +12,7 @@ We use Jekyll 2 and [Redcarpet](https://github.com/vmg/redcarpet) to generate th
## Building
-Travis CI builds the spec automatically on every commit to master and publishes to http://www.scala-lang.org/files/archive/spec/2.11/.
+Travis CI builds the spec automatically after every merged pull release and publishes to http://www.scala-lang.org/files/archive/spec/2.12/.
To preview locally, run `bundle exec jekyll serve -d build/spec/ -s spec/ -w --baseurl=""` (in the root of your checkout of scala/scala),
and open http://0.0.0.0:4000/. Jekyll will rebuild as you edit the markdown, but make sure to restart it when you change `_config.yml`.
diff --git a/spec/_config.yml b/spec/_config.yml
index 74ec602f8f..60e80ee05c 100644
--- a/spec/_config.yml
+++ b/spec/_config.yml
@@ -1,4 +1,4 @@
-baseurl: /files/archive/spec/2.11
+baseurl: /files/archive/spec/2.12
safe: true
lsi: false
highlighter: null
diff --git a/spec/_layouts/default.yml b/spec/_layouts/default.yml
index 7e205f8835..06d8c1c118 100644
--- a/spec/_layouts/default.yml
+++ b/spec/_layouts/default.yml
@@ -31,7 +31,7 @@
<body>
<header>
- <nav id="chapters"><a id="github" href="https://github.com/scala/scala/tree/2.11.x/spec"><img src="public/images/github-logo@2x.png" alt="Edit at Github"></a>{% assign sorted_pages = site.pages | sort:"name" %}{% for post in sorted_pages %}{% if post.chapter >= 0 %}<a href="{{site.baseurl}}{{ post.url }}">{{post.chapter}} {{ post.title }}</a>{% endif %}{% endfor %}</nav>
+ <nav id="chapters"><a id="github" href="https://github.com/scala/scala/tree/2.12.x/spec"><img src="public/images/github-logo@2x.png" alt="Edit at GitHub"></a>{% assign sorted_pages = site.pages | sort:"name" %}{% for post in sorted_pages %}{% if post.chapter >= 0 %}<a href="{{site.baseurl}}{{ post.url }}">{{post.chapter}} {{ post.title }}</a>{% endif %}{% endfor %}</nav>
</header>
<aside class="left"><nav id="toc"></nav></aside>
diff --git a/spec/_layouts/toc.yml b/spec/_layouts/toc.yml
index 4da7d41bea..dfd92eb114 100644
--- a/spec/_layouts/toc.yml
+++ b/spec/_layouts/toc.yml
@@ -19,9 +19,9 @@
<div id="header-main">
<img id="scala-logo" src="public/images/scala-spiral-white.png" />
<span id="title">Scala Language Specification</span>
- <a id="github" href="https://github.com/scala/scala/tree/2.11.x/spec"><img src="public/images/github-logo@2x.png" alt="Edit at Github"></a>
+ <a id="github" href="https://github.com/scala/scala/tree/2.12.x/spec"><img src="public/images/github-logo@2x.png" alt="Edit at GitHub"></a>
</div>
- <div id="header-sub">Version 2.11</div>
+ <div id="header-sub">Version 2.12</div>
</header>
<main>
{{ content }}
diff --git a/spec/id_dsa_travis.enc b/spec/id_dsa_travis.enc
index a9a4036807..16bbd569dc 100644
--- a/spec/id_dsa_travis.enc
+++ b/spec/id_dsa_travis.enc
@@ -1,15 +1,68 @@
-U2FsdGVkX1/RKhLZeL93vFQikKRRkoa3rqt6Kbs7cJStmcTI+DohoRUidRaeSULa
-+xXQCwaSDs4+l1HdW2R4ZV62AVGhvIeKEZxc449c6qT9+wUd2PKkDghuJCy1dLTo
-2OdFLDeop0X32bsauzPQGWwrpb/Llck4KeKffJq2257Hu6T/HnzSfDnvXbjAsVeH
-ZLeXURAyDAdK9vFmFzFiEEztLkW8E3ZVyrk7Qa3GPNpmATiBdhVM8d0JJptKVgwQ
-mZfhbItLrj490sPd5zpUFKAxJjPoKIa75n/+u4butn+ON97vr7xOy6ElX7HSJUgr
-FJdVJgcO7lki0j+lfJVAP0zLnH80CgOkOJSq0Sso/ofs+lQIobo8fQqIdmoqV3z2
-KpYrgnqap1U2+ekIUKsUxk4LuO8uJhwPeMJs6FoDb+O4Aauqpy9242+P05gWkQVd
-KVWRcHVE7DulS8Fp/o5GXJUdw+rdxvQ/voJ8i0HbYpp6UcmQwBheQMSmqtp5+ML9
-rBiBe2sr7pahqI5NKoF3iZCkZW74ge3/GP2d6m2tpOzD+IfdFDXQ/r8DbK2Dvwvz
-eutOb0zrUtua2e2zvvpVxldPVpXA7A1hE0P3lns9o+TqNhEauTQimQ8/X51BHO6E
-Ap4odrf2odocacY5VC4LFYDO3vat0wSTpi6SxkemUMX5yB7euqwD3ZrMcbpPFR1B
-IU5XxW20NxUo8n+WuMUNkXTgk/Cr4OUiavVv4oLsHkmgD9LN3IYI6Rj/DSCzSbDx
-hyWc7R47iu9f5okQScx62DwVK3AyAuVWer94x0Kj8AcIRwU/VwiXjnZ59I89AKTN
-sjZJw1FfpJPqYs7fPtEiotUdaJHzJH8tiEWFrtOTuOg3h6fy0KJTPVh0WjcGXfb6
-Uh1SEgeHtMSUVhq8nd8LGQ==
+U2FsdGVkX18jJJg9lNGgRS0cQhIsqc2UqBkuqZ1rEPKDdtU585GIP+ODcQ9dNPel
+xguQyy8Y0nU4Op5eJO9q/4Fnlf9cUfPfbKfs6QXBw5vNHL53fuslhhoaFhLRW1og
+dBSVq4Kv02HJjtbo/ZBXu8E4ppYoNzmsEbRkICWMmxFIXpQmiIts6TmN3gC9SedE
++EXdALOvYCUxJ5CLhlPz8kNsNBUSLZkeCvREDhUtOzCxTBfZXCZWDNxaNOOVB+ce
+s11el19t+o87u7GAGuujvCiwtAWQ9cbxlME0MXp3NROBJ9TzKBWFHBH0LZGFxkR+
+kXn32EqdH9AQOKC4UWtjgtuZuFRlkVyLyAWtxG8hNxRoj4ddDWalg5BW87Fvd8Pl
+Z7YErJbNbLufbHCxbdIfgoxWQIrMoHl87er26HLA7Ryzm1jngEwMQJJLfVdetYJB
+E220NngADIt/oSXSCfFQKxbXrchZfjRHS47HBsd0/anhBGIKt4Gmmk4B8FtTO8H2
+m8QaVgzPEC+2ap/mi3DFg8LJO9PwJkbWRMAcdI7QXuy0P1wKR3Xnx/JxnVCJtqv6
+ISNdbKlzUAGTZHGFOo+GWjJuzNC6oo/jwjdLDrggEAR2mzqa9n0NG0yuq3xvU+pF
+MWUadYBcJ9FwTWbw4BJPsLokmCpqFTjnLm5kaqv8E+Qfo/xcXtWkMwXE3Carbi5k
+hXqvqNglYBECrsScnoEgv/R2nGrOE54FX1TGvnPY0e0OSI8dGbcDRNOhura/4KMl
+iU3XYzBtxrJ6WI8RVCWOUYYwLUmEfbZZbAvVvSUvys7089RaQNOQQ+jcAyHqX+6A
+DKkaA44x3vx5X//81qZMSE/iwLLaCykMjKnnils12mQqqrkfQAW4E8T00s273EV0
+/EyeDIr5gUKOIlhdrNfcKGe9y8+8jZkZe56bjg7TbbLeJf73Gdapk3FXCpxX3UGn
+ZqWR8a6b4cwatH4yTnYff5dYA/0OtMm72zyxh7Sze0BPG8o3r0aw6cPFScEeE1fy
+1PyR0+gYGlbEWVpoMJa1kByesaNkPHHC9+XnKu/ANxuFRaxs0W65fOGLszCIEnN0
+x96KiUCZYw6KfH3bYtRV47Nrq7H/9nNMdvPAajkRJM/1+Uf9ps9ygVYPGdA+ShNB
+Me1tJmobunuacdRrSnfA2VIQTOTzxGDz82CUjJGHYPXo3Pd71EVhY6CL+4Ufgn1s
+GZ6aoHKzlG10BOv2j5fEvnkeY1oky2M13Jbi20qQwkrWvKDnvFiQ/HUzZZAzXs3l
+rxhBrnA9T9lPfcH3WOqFHI2v629iQvZdqLrw0Gvnz1E13ktiCXhWgjmF3J1PN/t2
+vq7ATZqIlYCelD2frbrzx41Y67qykGU8uDvTOkWDWMYGXzoFZCTW1ldDLvz8x4Pl
+aEP6x5CglGQlEVdye9CPXEagl3eEbj3MVPteBMVS51so9DwWXuT9hiUiRhlhY+7G
+pd7K84fRtxeqJ46/sYaDYXFMwblu/j88V3y7QL2uJESWbtxulFURUppeEnqDqrQD
+Y7pe4UoG6FTuBEhP20K7T90j8ieFp4zPd/kd0OYxvln2JVF5AxDLiyJUN/R9UCnq
+QTaa3P3cmgBKANsNAQs5GfoDAOmlxEqmFiO9Xpmowvax+8hX8oxLjETaa6t5N0Wp
+HQUIJehQvuKJj3du8D4/w6oIsPNLG0fsYu0LH3nsmwlk/DBifUutpZzoFGxZdZSM
+Hhy25pFSRlxhlECJ3TcCt/LcX3av5115L0bXDmLwIr6LuiL7sQt0vJRNL+ut2E5n
+MMapoKAp4SEbJLLCg8S0Poo189WROd4D/skmzdCj4VDk3fOrWVnfZ2LIrySnyUOP
+CUs9LTmce6GzS06DVSlbymSiNnKGJHwGSlfN2f2FKalvgCQYN3PSe1stNNX9TzzE
+SdPAowzCf9/9WQnh215trjsjPPz7Pc0Xrh4zm4dM72Ek+v9dqOBpExdtLhF0MdIw
+R7ZTMSxDx2GoWTWPO/CIL3U6+q/oO50vCzDrOYBI2z3dbgvgqCBzcvc7IzUhEMgp
+UQHleTqTfBGkKSfBYT46+9k332JfDAUqKfElfrlxX3gG3thRYNZeUfxsi5tSD1E0
+wF9X0ST4Ab/hje9maF5UgTAmkHy3mZgsykElTrlWs34/jaKlMKxoNIlbk2WdV7VB
+wrrIV1YPRC1/jYRnD35Fltv7drI26+3oDq8df9CK8DrNh6uCEIzZ/ohWIeL0zL2K
+mDhwHHZwxj9HSGZWBs7pmDXy0WSb/TIkQ9TAy9Sv3kYJmH6GLV7eyYRrDHZQzDL9
+R6jfz0D4nZE9/hfV9lonaeVo80nyv+qAopMnv8hbiWTuWfmvCGSFr4qrHrkfnJHW
+INHl6VVBEaoiX0bgHn+9AcymHy4hmixhmP/8HOFF47BdFiRLYlN9qYZY/jPo/EKF
+Z6LIIFFxrQyJEay2k/cZoVeJ/vYgq/n8lV8W1gWhGKQKTNt83FcVFLfzmqKjXx+K
+urroGtF2+LiHu1Vf439Z33GtouRAS94/tKKAWahKbDlSZAt8wF2PFq0u5JZdOtq+
++09UFqkq6xf55w7SMqk7uvNDNVxpJ5k1R8/gYAn2cxTqc9eNJqwb3uKp0lDUDeM/
+nOtUKQjqnuIz/FTCQVgDKSeTiLo51U9Mb6OL8zuCPzZe8MDvRmjDqXNkHGbkINDV
+Uw3VzfFPKexpxukwB7dit7Hxc7hRJM7Rg0J0tL5bWH03W642zqffJ2DTsSpNaq8U
+Eac3UW0Vyw1utZ6mK+GDQvybIguao9vKt9Qvuiybbf5XUBLlHxOV61fVZLhj2Zes
+A8qXr7hR+jozhZ8zMyYhOOPyEbecIjtEyfHzdh+eCW2Oi7jQ23iA1OWuEzi1c7rA
+TBaoUpb7SEqEXmKw7GoP5bFBW3zfvAxI577P2mOpmwSFRoGTVIEBxRhPpuHYPnjG
+WwhDqLQqZ/fMPzWFz0VpSDgp7RdmtWhSV1TT+SAW799f4bUXpwB5/qHK4XzGMd7G
+GDJTrA9bGCmEiSWedQlThcbJzDhXDoslAjZyMPwQqS9OiogMui1olXV+I6HYyyNI
+dTqcyFOxe5gbS4oHjjuwjJknOSdKPX6fPMCNGJda9v8u/wzAshrTJJyet33SZpNl
+jUAjeEBAWEx4Yb+IaHUtdsDEaJxU0nBhGRJqBQVvhLXfFqo8E5fVj+ji+/Qi2Q3C
+wo47ORC61/w9q22JHH4xl3t1QlCt6Bpcry6bO4dwA164sWHtiJ/OA72I7+RvbjlI
+FjgBK68Az1Y2F7NG0/WnSOV1ktSWV0zhRYbpRoNq6mE97iT2h4hC6tBcCL4YzQZy
+Id1NcbRzcn/fq5NJ+DXoA+dzYhNT9612dasun8qZE83NPHjC90KhvpZ3KrtKvxfR
+mtTVxAvGSQ5PdI0n4QZVloXBIjv7tp/fYfB+aKwVprr7nBOn+SZIhuPhRaXAT3Uv
++g0q+qKgep7wBozFgP0863gfe7vXbUhTwyXQjbqnh8dWo4fQR7nFYJ/S25c3Ggbj
+HcUplLQJ4JZmC9zhD2qCbRiqGe1s6kLRykK9c/GpIfCKFtOJnV0WJRxbSTXv+weG
+ctWYHSO/fvmW5SH5ZC6vjCA/fMvX4bZ2LeH/HJMg/v4g05vKriVBBujsSMA5bBRi
++59BkZwdz82LvaPxcooMALJxMbMWxCeOakl8pTXOwg9OWOr2clQUkKFgRMPLuOPs
+gIlwTLrWgYIAB5vGE9RqO1J959BjPUVbdO22UBXzoMPx0ERRvzvUyqFWwjayTlQu
+40UNaSIdO9U+LtDCX8eRkqBP5LyI0vqlZP4HYIjoCIamYqrxO8AeJV6aYln1G72k
+iY7iFmXc0Y0FwXbn1Ud5dwPomOwd1HP4nex7SCDJNhD0w3FaDvsqrPzjTGolDA33
+nmizSx2c8mLnXfu3I8j+WKZbEd4M5UmNnImy0HNYN86sHMZmXH+7e9F7cxKcnHQG
+ZeEmPWmVhxSowWC0BvB6OTbSQu6ypSPRYLN4/aWKUA5TlWG6LC3o8ooYwpr/dZX/
+Bz3AmI38kKAL0ZeBmbZF7cQcC5jVL+cZdn6Mh1LxCtqkKFeiU5Cxey2t90tkYpi8
+AZJZdwePL6XcHpOdzDE/4IcxDbEiEdYn/XYG2fGMOqwYblVFoWFbuI08FKcbq8lc
+n8dRsfHU3SbtIjtvstldcqPF0MMRroyHe3pLbJfeLwfcey89bv329bWSvVo53Wih
+wyByW2Z2wfeVLO6wC52UClpZEIK2WAcDfunrbpP/4AmJq84SXmCwvZ7va7c9Kjnh
+7I1zZpE8klFhsyW6WXhwrFF+Uq7jfA+dwe+3AJOiD++H5HFgAW7BNyfmrw5Iqjac
diff --git a/src/compiler/scala/tools/nsc/CompilerCommand.scala b/src/compiler/scala/tools/nsc/CompilerCommand.scala
index 3879d7b425..24da6ba487 100644
--- a/src/compiler/scala/tools/nsc/CompilerCommand.scala
+++ b/src/compiler/scala/tools/nsc/CompilerCommand.scala
@@ -103,15 +103,7 @@ class CompilerCommand(arguments: List[String], val settings: Settings) {
val components = global.phaseNames // global.phaseDescriptors // one initializes
s"Phase graph of ${components.size} components output to ${genPhaseGraph.value}*.dot."
}
- // would be nicer if we could ask all the options for their helpful messages
- else {
- val sb = new StringBuilder
- allSettings foreach {
- case s if s.isHelping => sb append s.help
- case _ =>
- }
- sb.toString
- }
+ else allSettings.filter(_.isHelping).map(_.help).mkString("\n\n")
}
/**
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index 32c446e16a..64ed687c07 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -614,7 +614,7 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
pickler -> "serialize symbol tables",
refChecks -> "reference/override checking, translate nested objects",
uncurry -> "uncurry, translate function values to anonymous classes",
- fields -> "synthesize accessors and fields, including bitmaps for lazy vals",
+ fields -> "synthesize accessors and fields, add bitmaps for lazy vals",
tailCalls -> "replace tail calls by jumps",
specializeTypes -> "@specialized-driven class and method specialization",
explicitOuter -> "this refs to outer pointers",
@@ -676,7 +676,7 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
}
/** A description of the phases that will run in this configuration, or all if -Ydebug. */
- def phaseDescriptions: String = phaseHelp("description", elliptically = true, phasesDescMap)
+ def phaseDescriptions: String = phaseHelp("description", elliptically = !settings.debug, phasesDescMap)
/** Summary of the per-phase values of nextFlags and newFlags, shown under -Xshow-phases -Ydebug. */
def phaseFlagDescriptions: String = {
@@ -687,7 +687,7 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
else if (ph.phaseNewFlags != 0L && ph.phaseNextFlags != 0L) fstr1 + " " + fstr2
else fstr1 + fstr2
}
- phaseHelp("new flags", elliptically = false, fmt)
+ phaseHelp("new flags", elliptically = !settings.debug, fmt)
}
/** Emit a verbose phase table.
@@ -699,7 +699,7 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
* @param elliptically whether to truncate the description with an ellipsis (...)
* @param describe how to describe a component
*/
- def phaseHelp(title: String, elliptically: Boolean, describe: SubComponent => String) = {
+ private def phaseHelp(title: String, elliptically: Boolean, describe: SubComponent => String): String = {
val Limit = 16 // phase names should not be absurdly long
val MaxCol = 80 // because some of us edit on green screens
val maxName = phaseNames map (_.length) max
@@ -714,13 +714,13 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
// built-in string precision merely truncates
import java.util.{ Formattable, FormattableFlags, Formatter }
def dotfmt(s: String) = new Formattable {
- def elliptically(s: String, max: Int) = (
+ def foreshortened(s: String, max: Int) = (
if (max < 0 || s.length <= max) s
else if (max < 4) s.take(max)
else s.take(max - 3) + "..."
)
override def formatTo(formatter: Formatter, flags: Int, width: Int, precision: Int) {
- val p = elliptically(s, precision)
+ val p = foreshortened(s, precision)
val w = if (width > 0 && p.length < width) {
import FormattableFlags.LEFT_JUSTIFY
val leftly = (flags & LEFT_JUSTIFY) == LEFT_JUSTIFY
@@ -746,7 +746,7 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
else (p.phaseName, describe(p))
fmt.format(name, idOf(p), text)
}
- line1 :: line2 :: (phaseDescriptors map mkText) mkString
+ (line1 :: line2 :: (phaseDescriptors map mkText)).mkString
}
/** Returns List of (phase, value) pairs, including only those
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala b/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala
index bac84a4959..0b07e12917 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala
@@ -297,14 +297,14 @@ abstract class BCodeBodyBuilder extends BCodeSkelBuilder {
case app : Apply =>
generatedType = genApply(app, expectedType)
- case app @ ApplyDynamic(qual, Literal(Constant(boostrapMethodRef: Symbol)) :: staticAndDynamicArgs) =>
- val numStaticArgs = boostrapMethodRef.paramss.head.size - 3 /*JVM provided args*/
+ case app @ ApplyDynamic(qual, Literal(Constant(bootstrapMethodRef: Symbol)) :: staticAndDynamicArgs) =>
+ val numStaticArgs = bootstrapMethodRef.paramss.head.size - 3 /*JVM provided args*/
val (staticArgs, dynamicArgs) = staticAndDynamicArgs.splitAt(numStaticArgs)
- val boostrapDescriptor = staticHandleFromSymbol(boostrapMethodRef)
+ val bootstrapDescriptor = staticHandleFromSymbol(bootstrapMethodRef)
val bootstrapArgs = staticArgs.map({case t @ Literal(c: Constant) => bootstrapMethodArg(c, t.pos)})
val descriptor = methodBTypeFromMethodType(qual.symbol.info, false)
genLoadArguments(dynamicArgs, qual.symbol.info.params.map(param => typeToBType(param.info)))
- mnode.visitInvokeDynamicInsn(qual.symbol.name.encoded, descriptor.descriptor, boostrapDescriptor, bootstrapArgs : _*)
+ mnode.visitInvokeDynamicInsn(qual.symbol.name.encoded, descriptor.descriptor, bootstrapDescriptor, bootstrapArgs : _*)
case ApplyDynamic(qual, args) => sys.error("No invokedynamic support yet.")
@@ -613,7 +613,7 @@ abstract class BCodeBodyBuilder extends BCodeSkelBuilder {
}
argsSize match {
case 1 => bc newarray elemKind
- case _ => // this is currently dead code is Scalac, unlike in Dotty
+ case _ => // this is currently dead code in Scalac, unlike in Dotty
val descr = ("[" * argsSize) + elemKind.descriptor // denotes the same as: arrayN(elemKind, argsSize).descriptor
mnode.visitMultiANewArrayInsn(descr, argsSize)
}
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BCodeSyncAndTry.scala b/src/compiler/scala/tools/nsc/backend/jvm/BCodeSyncAndTry.scala
index 3e53419573..466793010f 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BCodeSyncAndTry.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BCodeSyncAndTry.scala
@@ -73,9 +73,11 @@ abstract class BCodeSyncAndTry extends BCodeBodyBuilder {
/* ------ (4) exception-handler version of monitor-exit code.
* Reached upon abrupt termination of (2).
* Protected by whatever protects the whole synchronized expression.
+ * null => "any" exception in bytecode, like we emit for finally.
+ * Important not to use j/l/Throwable which dooms the method to a life of interpretation! (SD-233)
* ------
*/
- protect(startProtected, endProtected, currProgramPoint(), jlThrowableRef)
+ protect(startProtected, endProtected, currProgramPoint(), null)
locals.load(monitor)
emit(asm.Opcodes.MONITOREXIT)
emit(asm.Opcodes.ATHROW)
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala b/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala
index 09e82de89b..edb75514e8 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala
@@ -114,7 +114,7 @@ class BTypesFromSymbols[G <: Global](val global: G) extends BTypes {
if (classSym == NothingClass) srNothingRef
else if (classSym == NullClass) srNullRef
else {
- val internalName = classSym.javaBinaryName.toString
+ val internalName = classSym.javaBinaryNameString
classBTypeFromInternalName.getOrElse(internalName, {
// The new ClassBType is added to the map in its constructor, before we set its info. This
// allows initializing cyclic dependencies, see the comment on variable ClassBType._info.
@@ -625,7 +625,7 @@ class BTypesFromSymbols[G <: Global](val global: G) extends BTypes {
*/
def mirrorClassClassBType(moduleClassSym: Symbol): ClassBType = {
assert(isTopLevelModuleClass(moduleClassSym), s"not a top-level module class: $moduleClassSym")
- val internalName = moduleClassSym.javaBinaryName.dropModule.toString
+ val internalName = moduleClassSym.javaBinaryNameString.stripSuffix(nme.MODULE_SUFFIX_STRING)
classBTypeFromInternalName.getOrElse(internalName, {
val c = ClassBType(internalName)
// class info consistent with BCodeHelpers.genMirrorClass
@@ -642,7 +642,7 @@ class BTypesFromSymbols[G <: Global](val global: G) extends BTypes {
}
def beanInfoClassClassBType(mainClass: Symbol): ClassBType = {
- val internalName = mainClass.javaBinaryName.toString + "BeanInfo"
+ val internalName = mainClass.javaBinaryNameString + "BeanInfo"
classBTypeFromInternalName.getOrElse(internalName, {
val c = ClassBType(internalName)
c.info = Right(ClassInfo(
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala
index 0a54767f76..6593d4b725 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala
@@ -337,7 +337,7 @@ abstract class GenBCode extends BCodeSyncAndTry {
bTypes.initializeCoreBTypes()
bTypes.javaDefinedClasses.clear()
bTypes.javaDefinedClasses ++= currentRun.symSource collect {
- case (sym, _) if sym.isJavaDefined => sym.javaBinaryName.toString
+ case (sym, _) if sym.isJavaDefined => sym.javaBinaryNameString
}
Statistics.stopTimer(BackendStats.bcodeInitTimer, initStart)
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/CallGraph.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/CallGraph.scala
index b088b5ee48..e0fd77bb54 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/opt/CallGraph.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/CallGraph.scala
@@ -27,7 +27,7 @@ class CallGraph[BT <: BTypes](val btypes: BT) {
*
* Indexing the call graph by the containing MethodNode and the invocation MethodInsnNode allows
* finding callsites efficiently. For example, an inlining heuristic might want to know all
- * callsites withing a callee method.
+ * callsites within a callee method.
*
* Note that the call graph is not guaranteed to be complete: callsites may be missing. In
* particular, if a method is very large, all of its callsites might not be in the hash map.
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/ClosureOptimizer.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/ClosureOptimizer.scala
index 081830d61d..35ee5ba13d 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/opt/ClosureOptimizer.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/ClosureOptimizer.scala
@@ -325,8 +325,7 @@ class ClosureOptimizer[BT <: BTypes](val btypes: BT) {
insns.insertBefore(invocation, new InsnNode(DUP))
INVOKESPECIAL
}
- val isInterface = bodyOpcode == INVOKEINTERFACE
- val bodyInvocation = new MethodInsnNode(bodyOpcode, lambdaBodyHandle.getOwner, lambdaBodyHandle.getName, lambdaBodyHandle.getDesc, isInterface)
+ val bodyInvocation = new MethodInsnNode(bodyOpcode, lambdaBodyHandle.getOwner, lambdaBodyHandle.getName, lambdaBodyHandle.getDesc, lambdaBodyHandle.isInterface)
ownerMethod.instructions.insertBefore(invocation, bodyInvocation)
val bodyReturnType = Type.getReturnType(lambdaBodyHandle.getDesc)
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala
index fedacdac41..65d1e20d69 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala
@@ -47,7 +47,7 @@ import scala.tools.nsc.backend.jvm.opt.BytecodeUtils._
* note that eliminating empty handlers and stale local variable descriptors is required for
* correctness, see the comment in the body of `methodOptimizations`.
*
- * box-unbox elimination (eliminates box-unbox pairs withing the same method)
+ * box-unbox elimination (eliminates box-unbox pairs within the same method)
* + enables UPSTREAM:
* - nullness optimizations (a box extraction operation (unknown nullness) may be rewritten to
* a read of a non-null local. example in doc comment of box-unbox implementation)
diff --git a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
index 7b4c55c2af..822e0f16bf 100644
--- a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
+++ b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
@@ -751,11 +751,19 @@ class MutableSettings(val errorFn: String => Unit)
override def isHelping: Boolean = sawHelp
override def help: String = {
- val choiceLength = choices.map(_.length).max + 1
- val formatStr = s" %-${choiceLength}s %s"
- choices.zipAll(descriptions, "", "").map {
- case (arg, descr) => formatStr.format(arg, descr)
- } mkString (f"$descr%n", f"%n", "")
+ val describe: ((String, String)) => String = {
+ val choiceWidth = choices.map(_.length).max + 1
+ val formatStr = s" %-${choiceWidth}s %s"
+ locally {
+ case (choice, description) => formatStr.format(choice, description)
+ }
+ }
+ val verboseDefault = default match {
+ case Some("_" :: Nil) => Some("All choices are enabled by default." :: Nil)
+ case _ => default
+ }
+ val orelse = verboseDefault.map(_.mkString(f"%nDefault: ", ", ", f"%n")).getOrElse("")
+ choices.zipAll(descriptions, "", "").map(describe).mkString(f"${descr}%n", f"%n", orelse)
}
def clear(): Unit = {
diff --git a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
index e10fa3a114..5eb99e0d98 100644
--- a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
+++ b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
@@ -38,11 +38,8 @@ trait ScalaSettings extends AbsScalaSettings
/** If any of these settings is enabled, the compiler should print a message and exit. */
def infoSettings = List[Setting](version, help, Xhelp, Yhelp, showPlugins, showPhases, genPhaseGraph)
- /** Any -option:help? */
- private def multihelp = allSettings exists { case s => s.isHelping case _ => false }
-
- /** Is an info setting set? */
- def isInfo = (infoSettings exists (_.isSetByUser)) || multihelp
+ /** Is an info setting set? Any -option:help? */
+ def isInfo = infoSettings.exists(_.isSetByUser) || allSettings.exists(_.isHelping)
/** Disable a setting */
def disable(s: Setting) = allSettings -= s
@@ -139,7 +136,7 @@ trait ScalaSettings extends AbsScalaSettings
helpArg = "mode",
descr = "Generate forwarder methods in classes inhering concrete methods from traits.",
choices = List("true", "junit", "false"),
- default = "junit",
+ default = "true",
choicesHelp = List(
"Always generate mixin forwarders.",
"Generate mixin forwarders for JUnit-annotated methods (JUnit 4 does not support default methods).",
@@ -147,7 +144,7 @@ trait ScalaSettings extends AbsScalaSettings
object mixinForwarderChoices {
def isTruthy = XmixinForceForwarders.value == "true"
- def isJunit = isTruthy || XmixinForceForwarders.value == "junit"
+ def isAtLeastJunit = isTruthy || XmixinForceForwarders.value == "junit"
}
// XML parsing options
diff --git a/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala b/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
index c2d0f5ccec..d3c7ba4d76 100644
--- a/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
+++ b/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
@@ -87,16 +87,16 @@ abstract class BrowsingLoaders extends GlobalSymbolLoaders {
if (packagePrefix == root.fullName) {
enterClass(root, name.toString, new SourcefileLoader(src))
entered += 1
- } else println("prefixes differ: "+packagePrefix+","+root.fullName)
+ } else log("prefixes differ: "+packagePrefix+","+root.fullName)
case ModuleDef(_, name, _) =>
if (packagePrefix == root.fullName) {
val module = enterModule(root, name.toString, new SourcefileLoader(src))
entered += 1
if (name == nme.PACKAGEkw) {
- println("open package module: "+module)
+ log("open package module: "+module)
openPackageModule(module, root)
}
- } else println("prefixes differ: "+packagePrefix+","+root.fullName)
+ } else log("prefixes differ: "+packagePrefix+","+root.fullName)
case _ =>
}
}
@@ -121,7 +121,7 @@ abstract class BrowsingLoaders extends GlobalSymbolLoaders {
browseTopLevel(root, src)
} catch {
case ex: syntaxAnalyzer.MalformedInput =>
- println("[%s] caught malformed input exception at offset %d: %s".format(src, ex.offset, ex.msg))
+ log(s"[$src] caught malformed input exception at offset ${ex.offset}: ${ex.msg}")
super.enterToplevelsFromSource(root, name, src)
}
}
diff --git a/src/compiler/scala/tools/nsc/transform/AccessorSynthesis.scala b/src/compiler/scala/tools/nsc/transform/AccessorSynthesis.scala
index 120ee5c26e..a1923ead21 100644
--- a/src/compiler/scala/tools/nsc/transform/AccessorSynthesis.scala
+++ b/src/compiler/scala/tools/nsc/transform/AccessorSynthesis.scala
@@ -326,16 +326,7 @@ trait AccessorSynthesis extends Transform with ast.TreeDSL {
*
* This way the inliner should optimize the fast path because the method body is small enough.
*/
- def expandLazyClassMember(lazyVar: Symbol, lazyAccessor: Symbol, transformedRhs: Tree, nullables: Map[Symbol, List[Symbol]]): Tree = {
- // use cast so that specialization can turn null.asInstanceOf[T] into null.asInstanceOf[Long]
- def nullify(sym: Symbol) =
- Select(thisRef, sym.accessedOrSelf) === gen.mkAsInstanceOf(NULL, sym.info.resultType)
-
- val nulls = nullables.getOrElse(lazyAccessor, Nil) map nullify
-
- if (nulls.nonEmpty)
- log("nulling fields inside " + lazyAccessor + ": " + nulls)
-
+ def expandLazyClassMember(lazyVar: global.Symbol, lazyAccessor: global.Symbol, transformedRhs: global.Tree): Tree = {
val slowPathSym = slowPathFor(lazyAccessor)
val rhsAtSlowDef = transformedRhs.changeOwner(lazyAccessor -> slowPathSym)
@@ -346,7 +337,7 @@ trait AccessorSynthesis extends Transform with ast.TreeDSL {
def needsInit = mkTest(lazyAccessor)
val doInit = Block(List(storeRes), mkSetFlag(lazyAccessor))
// the slow part of double-checked locking (TODO: is this the most efficient pattern? https://github.come/scala/scala-dev/issues/204)
- val slowPathRhs = Block(gen.mkSynchronized(thisRef)(If(needsInit, doInit, EmptyTree)) :: nulls, selectVar)
+ val slowPathRhs = Block(gen.mkSynchronized(thisRef)(If(needsInit, doInit, EmptyTree)) :: Nil, selectVar)
// The lazy accessor delegates to the compute method if needed, otherwise just accesses the var (it was initialized previously)
// `if ((bitmap&n & MASK) == 0) this.l$compute() else l$`
@@ -358,59 +349,6 @@ trait AccessorSynthesis extends Transform with ast.TreeDSL {
}
}
- /** Map lazy values to the fields they should null after initialization. */
- // TODO: fix
- def lazyValNullables(clazz: Symbol, templStats: List[Tree]): Map[Symbol, List[Symbol]] = {
- // if there are no lazy fields, take the fast path and save a traversal of the whole AST
- if (!clazz.info.decls.exists(_.isLazy)) Map()
- else {
- // A map of single-use fields to the lazy value that uses them during initialization.
- // Each field has to be private and defined in the enclosing class, and there must
- // be exactly one lazy value using it.
- //
- // Such fields will be nulled after the initializer has memoized the lazy value.
- val singleUseFields: Map[Symbol, List[Symbol]] = {
- val usedIn = mutable.HashMap[Symbol, List[Symbol]]() withDefaultValue Nil
-
- object SingleUseTraverser extends Traverser {
- override def traverse(tree: Tree) {
- tree match {
- // assignment targets don't count as a dereference -- only check the rhs
- case Assign(_, rhs) => traverse(rhs)
- case tree: RefTree if tree.symbol != NoSymbol =>
- val sym = tree.symbol
- // println(s"$sym in ${sym.owner} from $currentOwner ($tree)")
- if ((sym.hasAccessorFlag || (sym.isTerm && !sym.isMethod)) && sym.isPrivate && !sym.isLazy // non-lazy private field or its accessor
- && !definitions.isPrimitiveValueClass(sym.tpe.resultType.typeSymbol) // primitives don't hang on to significant amounts of heap
- && sym.owner == currentOwner.enclClass && !(currentOwner.isGetter && currentOwner.accessed == sym)) {
-
- // println("added use in: " + currentOwner + " -- " + tree)
- usedIn(sym) ::= currentOwner
- }
- super.traverse(tree)
- case _ => super.traverse(tree)
- }
- }
- }
- templStats foreach SingleUseTraverser.apply
- // println("usedIn: " + usedIn)
-
- // only consider usages from non-transient lazy vals (SI-9365)
- val singlyUsedIn = usedIn filter { case (_, member :: Nil) => member.isLazy && !member.accessed.hasAnnotation(TransientAttr) case _ => false } toMap
-
- // println("singlyUsedIn: " + singlyUsedIn)
- singlyUsedIn
- }
-
- val map = mutable.Map[Symbol, Set[Symbol]]() withDefaultValue Set()
- // invert the map to see which fields can be nulled for each non-transient lazy val
- for ((field, users) <- singleUseFields; lazyFld <- users) map(lazyFld) += field
-
- map.mapValues(_.toList sortBy (_.id)).toMap
- }
- }
-
-
class SynthInitCheckedAccessorsIn(protected val clazz: Symbol) extends SynthCheckedAccessorsTreesInClass with CheckInitAccessorSymbolSynth {
private object addInitBitsTransformer extends Transformer {
private def checkedGetter(lhs: Tree)(pos: Position) = {
diff --git a/src/compiler/scala/tools/nsc/transform/Constructors.scala b/src/compiler/scala/tools/nsc/transform/Constructors.scala
index 8d362f13dd..92823bafb2 100644
--- a/src/compiler/scala/tools/nsc/transform/Constructors.scala
+++ b/src/compiler/scala/tools/nsc/transform/Constructors.scala
@@ -527,7 +527,7 @@ abstract class Constructors extends Statics with Transform with TypingTransforme
super.transform(tree)
else if (canBeSupplanted(tree.symbol))
gen.mkAttributedIdent(parameter(tree.symbol)) setPos tree.pos
- else if (tree.symbol.outerSource == clazz)
+ else if (tree.symbol.outerSource == clazz && !isDelayedInitSubclass)
gen.mkAttributedIdent(parameterNamed(nme.OUTER)) setPos tree.pos
else
super.transform(tree)
@@ -710,13 +710,19 @@ abstract class Constructors extends Statics with Transform with TypingTransforme
// Initialize all parameters fields that must be kept.
val paramInits = paramAccessors filterNot omittableSym map { acc =>
- // Check for conflicting symbol amongst parents: see bug #1960.
- // It would be better to mangle the constructor parameter name since
- // it can only be used internally, but I think we need more robust name
- // mangling before we introduce more of it.
- val conflict = clazz.info.nonPrivateMember(acc.name) filter (s => (s ne acc) && s.isGetter && !s.isOuterField && s.enclClass.isTrait)
- if (conflict ne NoSymbol)
- reporter.error(acc.pos, "parameter '%s' requires field but conflicts with %s".format(acc.name, conflict.fullLocationString))
+ // Check for conflicting field mixed in for a val/var defined in a parent trait (neg/t1960.scala).
+ // Since the fields phase has already mixed in fields, we can just look for
+ // an existing decl with the local variant of our paramaccessor's name.
+ //
+ // TODO: mangle the constructor parameter name (it can only be used internally), though we probably first need more robust name mangling
+
+ // sometimes acc is a field with a local name (when it's a val/var constructor param) --> exclude the `acc` itself when looking for conflicting decl
+ // sometimes it's not (just a constructor param) --> any conflicting decl is a problem
+ val conflict = clazz.info.decl(acc.name.localName).filter(sym => sym ne acc)
+ if (conflict ne NoSymbol) {
+ val orig = exitingTyper(clazz.info.nonPrivateMember(acc.name).filter(_ hasFlag ACCESSOR))
+ reporter.error(acc.pos, s"parameter '${acc.name}' requires field but conflicts with ${(orig orElse conflict).fullLocationString}")
+ }
val accSetter =
if (clazz.isTrait) acc.setterIn(clazz, hasExpandedName = true)
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala
index 69240b07a1..25475515aa 100644
--- a/src/compiler/scala/tools/nsc/transform/Erasure.scala
+++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala
@@ -258,7 +258,7 @@ abstract class Erasure extends InfoTransform
// Anything which could conceivably be a module (i.e. isn't known to be
// a type parameter or similar) must go through here or the signature is
// likely to end up with Foo<T>.Empty where it needs Foo<T>.Empty$.
- def fullNameInSig(sym: Symbol) = "L" + enteringJVM(sym.javaBinaryName)
+ def fullNameInSig(sym: Symbol) = "L" + enteringJVM(sym.javaBinaryNameString)
def jsig(tp0: Type, existentiallyBound: List[Symbol] = Nil, toplevel: Boolean = false, primitiveOK: Boolean = true): String = {
val tp = tp0.dealias
@@ -1093,7 +1093,7 @@ abstract class Erasure extends InfoTransform
// See SI-5568.
tree setSymbol Object_getClass
} else {
- devWarning(s"The symbol '${fn.symbol}' was interecepted but didn't match any cases, that means the intercepted methods set doesn't match the code")
+ devWarning(s"The symbol '${fn.symbol}' was intercepted but didn't match any cases, that means the intercepted methods set doesn't match the code")
tree
}
} else qual match {
@@ -1209,7 +1209,7 @@ abstract class Erasure extends InfoTransform
try super.transform(tree1).clearType()
finally tpt setType specialErasure(tree1.symbol)(tree1.symbol.tpe).resultType
- case ApplyDynamic(qual, Literal(Constant(boostrapMethodRef: Symbol)) :: _) =>
+ case ApplyDynamic(qual, Literal(Constant(bootstrapMethodRef: Symbol)) :: _) =>
tree
case _ =>
super.transform(tree1).clearType()
diff --git a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
index f3d5ceb0f0..7d50c12852 100644
--- a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
+++ b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
@@ -8,7 +8,7 @@ package tools.nsc
package transform
import symtab._
-import Flags.{ CASE => _, _ }
+import Flags.{CASE => _, _}
import scala.collection.mutable.ListBuffer
/** This class ...
diff --git a/src/compiler/scala/tools/nsc/transform/Fields.scala b/src/compiler/scala/tools/nsc/transform/Fields.scala
index a383b65192..0fe7a82b15 100644
--- a/src/compiler/scala/tools/nsc/transform/Fields.scala
+++ b/src/compiler/scala/tools/nsc/transform/Fields.scala
@@ -22,7 +22,7 @@ import symtab.Flags._
* in the first (closest in the subclassing lattice) subclass (not a trait) of a trait.
*
* For lazy vals and modules, we emit accessors that using double-checked locking (DCL) to balance thread safety
- * and performance. A lazy val gets a compute method for the DCL's slow path, for a module it's all done in the accessor.
+ * and performance. For both lazy vals and modules, the a compute method contains the DCL's slow path.
*
* Local lazy vals do not receive bitmaps, but use a Lazy*Holder that has the volatile init bit and the computed value.
* See `mkLazyLocalDef`.
@@ -193,23 +193,8 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
// not be emitted as ACC_FINAL. They are FINAL in the Scala sense, though: cannot be overridden.
private final val ModuleOrLazyFieldFlags = FINAL | PrivateLocal | SYNTHETIC | NEEDS_TREES
- private def newModuleVarSymbol(owner: Symbol, module: Symbol, tp: Type): TermSymbol = {
-// println(s"new module var in $site for $module of type $tp")
- val flags = MODULEVAR | (if (owner.isClass) ModuleOrLazyFieldFlags else 0)
-
- val moduleVar =
- (owner.newVariable(nme.moduleVarName(module.name.toTermName), module.pos.focus, flags)
- setInfo tp
- addAnnotation VolatileAttr)
-
- moduleOrLazyVarOf(module) = moduleVar
-
- moduleVar
- }
-
- private def moduleInit(module: Symbol) = {
+ private def moduleInit(module: Symbol, moduleVar: Symbol) = {
// println(s"moduleInit for $module in ${module.ownerChain} --> ${moduleVarOf.get(module)}")
- val moduleVar = moduleOrLazyVarOf(module)
def moduleVarRef = gen.mkAttributedRef(moduleVar)
// for local modules, we synchronize on the owner of the method that owns the module
@@ -236,7 +221,10 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
*
* TODO: optimize using local variable?
*/
- Block(If(needsInit, gen.mkSynchronized(monitorHolder)(If(needsInit, init, EmptyTree)), EmptyTree) :: Nil, moduleVarRef)
+ val computeName = nme.newLazyValSlowComputeName(module.name)
+ val computeMethod = DefDef(NoMods, computeName, Nil, ListOfNil, TypeTree(UnitTpe), gen.mkSynchronized(monitorHolder)(If(needsInit, init, EmptyTree)))
+ Block(computeMethod :: If(needsInit, Apply(Ident(computeName), Nil), EmptyTree) :: Nil,
+ gen.mkCast(moduleVarRef, module.info.resultType))
}
// NoSymbol for lazy accessor sym with unit result type
@@ -303,6 +291,10 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
lazyCallingSuper setInfo tp
}
+ private def classNeedsInfoTransform(cls: Symbol): Boolean = {
+ !(cls.isPackageClass || cls.isJavaDefined) && (currentRun.compiles(cls) || refChecks.isSeparatelyCompiledScalaSuperclass(cls))
+ }
+
def apply(tp0: Type): Type = tp0 match {
// TODO: make less destructive (name changes, decl additions, flag setting --
// none of this is actually undone when travelling back in time using atPhase)
@@ -358,21 +350,32 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
ClassInfoType(parents, allDecls, clazz)
} else tp
+
+ case tp@ClassInfoType(parents, oldDecls, clazz) if !classNeedsInfoTransform(clazz) => tp
+
// mix in fields & accessors for all mixed in traits
+ case tp@ClassInfoType(parents, oldDecls, clazz) =>
- case tp@ClassInfoType(parents, oldDecls, clazz) if !clazz.isPackageClass =>
val site = clazz.thisType
// setter conflicts cannot arise independently from a getter conflict, since a setter without a getter does not a val definition make
- def accessorConflictsExistingVal(accessor: Symbol): Boolean = {
- val existingGetter = oldDecls.lookup(accessor.name.getterName)
-// println(s"$existingGetter from $accessor to ${accessor.name.getterName}")
- val tp = fieldTypeOfAccessorIn(accessor, site)
- (existingGetter ne NoSymbol) && (tp matches (site memberInfo existingGetter).resultType) // !existingGetter.isDeferred && -- see (3)
- }
+ def getterConflictsExistingVal(getter: Symbol): Boolean =
+ getter.isGetter && {
+ val existingGetter = oldDecls.lookup(getter.name)
+ (existingGetter ne NoSymbol) &&
+ ((site memberInfo existingGetter) matches (site memberInfo getter))
+ }
+
+ def newModuleVarMember(module: Symbol): TermSymbol = {
+ val moduleVar =
+ (clazz.newVariable(nme.moduleVarName(module.name.toTermName), module.pos.focus, MODULEVAR | ModuleOrLazyFieldFlags)
+ setInfo site.memberType(module).resultType
+ addAnnotation VolatileAttr)
- def newModuleVarMember(member: Symbol): TermSymbol =
- newModuleVarSymbol(clazz, member, site.memberType(member).resultType)
+ moduleOrLazyVarOf(module) = moduleVar
+
+ moduleVar
+ }
def newLazyVarMember(member: Symbol): TermSymbol =
Fields.this.newLazyVarMember(clazz, member, site.memberType(member).resultType)
@@ -440,7 +443,7 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
}
// don't cause conflicts, skip overridden accessors contributed by supertraits (only act on the last overriding one)
// see pos/trait_fields_dependent_conflict.scala and neg/t1960.scala
- else if (accessorConflictsExistingVal(member) || isOverriddenAccessor(member, clazz)) Nil
+ else if (getterConflictsExistingVal(member) || isOverriddenAccessor(member, clazz)) Nil
else if (member hasFlag MODULE) {
val moduleVar = newModuleVarMember(member)
List(moduleVar, newModuleAccessor(member, clazz, moduleVar))
@@ -522,7 +525,9 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
def mkTypedValDef(sym: Symbol, rhs: Tree = EmptyTree) = typedPos(sym.pos)(ValDef(sym, rhs)).asInstanceOf[ValDef]
/**
- * Desugar a local `lazy val x: Int = rhs` into
+ * Desugar a local `lazy val x: Int = rhs`
+ * or a local `object x { ...}` (the rhs will be instantiating the module's class) into:
+ *
* ```
* val x$lzy = new scala.runtime.LazyInt()
* def x$lzycompute(): Int =
@@ -532,22 +537,24 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
* }
* def x(): Int = if (x$lzy.initialized()) x$lzy.value() else x$lzycompute()
* ```
+ *
+ * The expansion is the same for local lazy vals and local objects,
+ * except for the suffix of the underlying val's name ($lzy or $module)
*/
- private def mkLazyLocalDef(lazyVal: Symbol, rhs: Tree): Tree = {
+ private def mkLazyLocalDef(lazySym: Symbol, rhs: Tree): Tree = {
import CODE._
- import scala.reflect.NameTransformer.LAZY_LOCAL_SUFFIX_STRING
- val owner = lazyVal.owner
+ import scala.reflect.{NameTransformer => nx}
+ val owner = lazySym.owner
- val lazyValType = lazyVal.tpe.resultType
+ val lazyValType = lazySym.tpe.resultType
val refClass = lazyHolders.getOrElse(lazyValType.typeSymbol, LazyRefClass)
val isUnit = refClass == LazyUnitClass
val refTpe = if (refClass != LazyRefClass) refClass.tpe else appliedType(refClass.typeConstructor, List(lazyValType))
- val lazyName = lazyVal.name.toTermName
- val pos = lazyVal.pos.focus
+ val lazyName = lazySym.name.toTermName
+ val pos = lazySym.pos.focus
- // used twice: once in the same owner as the lazy val, another time inside the compute method
- val localLazyName = lazyName append LAZY_LOCAL_SUFFIX_STRING
+ val localLazyName = lazyName append (if (lazySym.isModule) nx.MODULE_VAR_SUFFIX_STRING else nx.LAZY_LOCAL_SUFFIX_STRING)
// The lazy holder val need not be mutable, as we write to its field.
// In fact, it MUST not be mutable to avoid capturing it as an ObjectRef in lambdalift
@@ -567,14 +574,14 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
val computerSym =
owner.newMethod(lazyName append nme.LAZY_SLOW_SUFFIX, pos, ARTIFACT | PRIVATE) setInfo MethodType(Nil, lazyValType)
- val rhsAtComputer = rhs.changeOwner(lazyVal -> computerSym)
+ val rhsAtComputer = rhs.changeOwner(lazySym -> computerSym)
val computer = mkAccessor(computerSym)(gen.mkSynchronized(Ident(holderSym))(
If(initialized, getValue,
if (isUnit) Block(rhsAtComputer :: Nil, Apply(initialize, Nil))
else Apply(initialize, rhsAtComputer :: Nil))))
- val accessor = mkAccessor(lazyVal)(
+ val accessor = mkAccessor(lazySym)(
If(initialized, getValue,
Apply(Ident(computerSym), Nil)))
@@ -582,68 +589,87 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
// remove STABLE: prevent replacing accessor call of type Unit by BoxedUnit.UNIT in erasure
// remove ACCESSOR: prevent constructors from eliminating the method body if the lazy val is
// lifted into a trait (TODO: not sure about the details here)
- lazyVal.resetFlag(STABLE | ACCESSOR)
+ lazySym.resetFlag(STABLE | ACCESSOR)
Thicket(mkTypedValDef(holderSym, New(refTpe)) :: computer :: accessor :: Nil)
}
// synth trees for accessors/fields and trait setters when they are mixed into a class
- def fieldsAndAccessors(clazz: Symbol): List[ValOrDefDef] = {
- def fieldAccess(accessor: Symbol): List[Tree] = {
- val fieldName = accessor.localName
- val field = clazz.info.decl(fieldName)
- // The `None` result denotes an error, but it's refchecks' job to report it (this fallback is for robustness).
- // This is the result of overriding a val with a def, so that no field is found in the subclass.
- if (field.exists) List(Select(This(clazz), field))
- else Nil
- }
-
- def getterBody(getter: Symbol): List[Tree] = {
+ def fieldsAndAccessors(clazz: Symbol): List[Tree] = {
+ // scala/scala-dev#219
+ // Cast to avoid spurious mismatch in paths containing trait vals that have
+ // not been rebound to accessors in the subclass we're in now.
+ // For example, for a lazy val mixed into a class, the lazy var's info
+ // will not refer to symbols created during our info transformer,
+ // so if its type depends on a val that is now implemented after the info transformer,
+ // we'll get a mismatch when assigning `rhs` to `lazyVarOf(getter)`.
+ // TODO: could we rebind more aggressively? consider overriding in type equality?
+ def cast(tree: Tree, pt: Type) = gen.mkAsInstanceOf(tree, pt)
+
+ // Could be NoSymbol, which denotes an error, but it's refchecks' job to report it (this fallback is for robustness).
+ // This is the result of overriding a val with a def, so that no field is found in the subclass.
+ def fieldAccess(accessor: Symbol): Symbol =
+ afterOwnPhase { clazz.info.decl(accessor.localName) }
+
+ def getterBody(getter: Symbol): Tree =
// accessor created by newMatchingModuleAccessor for a static module that does need an accessor
// (because there's a matching member in a super class)
- if (getter.asTerm.referenced.isModule) {
- List(gen.mkAttributedRef(clazz.thisType, getter.asTerm.referenced))
- } else {
+ if (getter.asTerm.referenced.isModule)
+ mkAccessor(getter)(cast(Select(This(clazz), getter.asTerm.referenced), getter.info.resultType))
+ else {
val fieldMemoization = fieldMemoizationIn(getter, clazz)
- if (fieldMemoization.constantTyped) List(gen.mkAttributedQualifier(fieldMemoization.tp)) // TODO: drop when we no longer care about producing identical bytecode
- else fieldAccess(getter)
+ // TODO: drop getter for constant? (when we no longer care about producing identical bytecode?)
+ if (fieldMemoization.constantTyped) mkAccessor(getter)(gen.mkAttributedQualifier(fieldMemoization.tp))
+ else fieldAccess(getter) match {
+ case NoSymbol => EmptyTree
+ case fieldSel => mkAccessor(getter)(cast(Select(This(clazz), fieldSel), getter.info.resultType))
+ }
}
- }
// println(s"accessorsAndFieldsNeedingTrees for $templateSym: $accessorsAndFieldsNeedingTrees")
- def setterBody(setter: Symbol): List[Tree] = {
+ def setterBody(setter: Symbol): Tree =
// trait setter in trait
- if (clazz.isTrait) List(EmptyTree)
+ if (clazz.isTrait) mkAccessor(setter)(EmptyTree)
// trait setter for overridden val in class
- else if (checkAndClearOverriddenTraitSetter(setter)) List(mkTypedUnit(setter.pos))
+ else if (checkAndClearOverriddenTraitSetter(setter)) mkAccessor(setter)(mkTypedUnit(setter.pos))
// trait val/var setter mixed into class
- else fieldAccess(setter) map (fieldSel => Assign(fieldSel, Ident(setter.firstParam)))
- }
+ else fieldAccess(setter) match {
+ case NoSymbol => EmptyTree
+ case fieldSel => afterOwnPhase { // the assign only type checks after our phase (assignment to val)
+ mkAccessor(setter)(Assign(Select(This(clazz), fieldSel), cast(Ident(setter.firstParam), fieldSel.info)))
+ }
+ }
- def moduleAccessorBody(module: Symbol): List[Tree] = List(
+ def moduleAccessorBody(module: Symbol): Tree =
// added during synthFieldsAndAccessors using newModuleAccessor
// a module defined in a trait by definition can't be static (it's a member of the trait and thus gets a new instance for every outer instance)
- if (clazz.isTrait) EmptyTree
+ if (clazz.isTrait) mkAccessor(module)(EmptyTree)
// symbol created by newModuleAccessor for a (non-trait) class
- else moduleInit(module)
- )
+ else {
+ mkAccessor(module)(moduleInit(module, moduleOrLazyVarOf(module)))
+ }
val synthAccessorInClass = new SynthLazyAccessorsIn(clazz)
- def superLazy(getter: Symbol): List[ValOrDefDef] = {
+ def superLazy(getter: Symbol): Tree = {
assert(!clazz.isTrait)
- // this contortion was the only way I can get the super select to be type checked correctly.. TODO: why does SelectSuper not work?
- val rhs = Apply(Select(Super(This(clazz), tpnme.EMPTY), getter.name), Nil)
- explodeThicket(synthAccessorInClass.expandLazyClassMember(lazyVarOf(getter), getter, rhs, Map.empty)).asInstanceOf[List[ValOrDefDef]]
+ // this contortion was the only way I can get the super select to be type checked correctly..
+ // TODO: why does SelectSuper not work?
+ val selectSuper = Select(Super(This(clazz), tpnme.EMPTY), getter.name)
+
+ val lazyVar = lazyVarOf(getter)
+ val rhs = cast(Apply(selectSuper, Nil), lazyVar.info)
+
+ synthAccessorInClass.expandLazyClassMember(lazyVar, getter, rhs)
}
- clazz.info.decls.toList.filter(checkAndClearNeedsTrees) flatMap {
- case module if module hasAllFlags (MODULE | METHOD) => moduleAccessorBody(module) map mkAccessor(module)
+ (afterOwnPhase { clazz.info.decls } toList) filter checkAndClearNeedsTrees map {
+ case module if module hasAllFlags (MODULE | METHOD) => moduleAccessorBody(module)
case getter if getter hasAllFlags (LAZY | METHOD) => superLazy(getter)
- case setter if setter.isSetter => setterBody(setter) map mkAccessor(setter)
- case getter if getter.hasFlag(ACCESSOR) => getterBody(getter) map mkAccessor(getter)
- case field if !(field hasFlag METHOD) => Some(mkTypedValDef(field)) // vals/vars and module vars (cannot have flags PACKAGE | JAVA since those never receive NEEDS_TREES)
- case _ => None
- }
+ case setter if setter.isSetter => setterBody(setter)
+ case getter if getter.hasFlag(ACCESSOR) => getterBody(getter)
+ case field if !(field hasFlag METHOD) => mkTypedValDef(field) // vals/vars and module vars (cannot have flags PACKAGE | JAVA since those never receive NEEDS_TREES)
+ case _ => EmptyTree
+ } filterNot (_ == EmptyTree) // there will likely be many EmptyTrees, but perhaps no thicket blocks that need expanding
}
def rhsAtOwner(stat: ValOrDefDef, newOwner: Symbol): Tree =
@@ -689,12 +715,12 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
// note that `LazyAccessorTreeSynth` is pretty lightweight
// (it's just a bunch of methods that all take a `clazz` parameter, which is thus stored as a field)
val synthAccessorInClass = new SynthLazyAccessorsIn(currOwner)
- synthAccessorInClass.expandLazyClassMember(lazyVarOf(statSym), statSym, transformedRhs, nullables.getOrElse(currOwner, Map.empty))
+ synthAccessorInClass.expandLazyClassMember(lazyVarOf(statSym), statSym, transformedRhs)
}
// drop the val for (a) constant (pure & not-stored) and (b) not-stored (but still effectful) fields
case ValDef(mods, _, _, rhs) if (rhs ne EmptyTree) && !excludedAccessorOrFieldByFlags(statSym)
- && fieldMemoizationIn(statSym, currOwner).constantTyped =>
+ && currOwner.isClass && fieldMemoizationIn(statSym, currOwner).constantTyped =>
EmptyThicket
case ModuleDef(_, _, impl) =>
@@ -702,8 +728,9 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
val cd = super.transform(ClassDef(statSym.moduleClass, impl) setType NoType)
if (currOwner.isClass) cd
else { // local module -- symbols cannot be generated by info transformer, so do it all here
- val moduleVar = newModuleVarSymbol(currOwner, statSym, statSym.info.resultType)
- Thicket(cd :: mkTypedValDef(moduleVar) :: mkAccessor(statSym)(moduleInit(statSym)) :: Nil)
+ val Block(stats, _) = mkLazyLocalDef(statSym, gen.newModule(statSym, statSym.info.resultType))
+
+ Thicket(cd :: stats)
}
case tree =>
@@ -717,16 +744,15 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
if (stat.isTerm) atOwner(exprOwner)(transform(stat))
else transform(stat)
- private val nullables = perRunCaches.newMap[Symbol, Map[Symbol, List[Symbol]]]
-
override def transformStats(stats: List[Tree], exprOwner: Symbol): List[Tree] = {
val addedStats =
- if (!currentOwner.isClass) Nil // TODO: || currentOwner.isPackageClass
- else afterOwnPhase { fieldsAndAccessors(currentOwner) }
-
- val inRealClass = currentOwner.isClass && !(currentOwner.isPackageClass || currentOwner.isTrait)
- if (inRealClass)
- nullables(currentOwner) = lazyValNullables(currentOwner, stats)
+ if (!currentOwner.isClass || currentOwner.isPackageClass) Nil
+ else {
+ val thickets = fieldsAndAccessors(currentOwner)
+ if (thickets exists mustExplodeThicket)
+ thickets flatMap explodeThicket
+ else thickets
+ }
val newStats =
stats mapConserve (if (exprOwner != currentOwner) transformTermsAtExprOwner(exprOwner) else transform)
diff --git a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
index 74e6c58388..798cfcd072 100644
--- a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
+++ b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
@@ -104,8 +104,31 @@ abstract class LambdaLift extends InfoTransform {
/** Buffers for lifted out classes and methods */
private val liftedDefs = new LinkedHashMap[Symbol, List[Tree]]
+ val delayedInitDummies = new mutable.HashMap[Symbol, Symbol]
+
+ /**
+ * For classes capturing locals, LambdaLift uses `local.logicallyEnclosingMember` to decide
+ * whether an access to the local is re-written to the field or constructor parameter. If the
+ * access is in a constructor statement, the constructor parameter is used.
+ *
+ * For DelayedInit subclasses, constructor statements end up in the synthetic init method
+ * instead of the constructor itself, so the access should go to the field. This method changes
+ * `logicallyEnclosingMember` in this case to return a temprorary symbol corresponding to that
+ * method.
+ */
+ private def logicallyEnclosingMember(sym: Symbol): Symbol = {
+ if (sym.isLocalDummy) {
+ val enclClass = sym.enclClass
+ if (enclClass.isSubClass(DelayedInitClass))
+ delayedInitDummies.getOrElseUpdate(enclClass, enclClass.newMethod(nme.delayedInit))
+ else
+ enclClass.primaryConstructor
+ } else if (sym.isMethod || sym.isClass || sym == NoSymbol) sym
+ else logicallyEnclosingMember(sym.owner)
+ }
+
private def isSameOwnerEnclosure(sym: Symbol) =
- sym.owner.logicallyEnclosingMember == currentOwner.logicallyEnclosingMember
+ logicallyEnclosingMember(sym.owner) == logicallyEnclosingMember(currentOwner)
/** Mark symbol `sym` as being free in `enclosure`, unless `sym`
* is defined in `enclosure` or there is a class between `enclosure`s owner
@@ -139,9 +162,9 @@ abstract class LambdaLift extends InfoTransform {
*/
private def markFree(sym: Symbol, enclosure: Symbol): Boolean = {
// println(s"mark free: ${sym.fullLocationString} marked free in $enclosure")
- (enclosure == sym.owner.logicallyEnclosingMember) || {
- debuglog("%s != %s".format(enclosure, sym.owner.logicallyEnclosingMember))
- if (enclosure.isPackageClass || !markFree(sym, enclosure.skipConstructor.owner.logicallyEnclosingMember)) false
+ (enclosure == logicallyEnclosingMember(sym.owner)) || {
+ debuglog("%s != %s".format(enclosure, logicallyEnclosingMember(sym.owner)))
+ if (enclosure.isPackageClass || !markFree(sym, logicallyEnclosingMember(enclosure.skipConstructor.owner))) false
else {
val ss = symSet(free, enclosure)
if (!ss(sym)) {
@@ -184,14 +207,14 @@ abstract class LambdaLift extends InfoTransform {
if (sym == NoSymbol) {
assert(name == nme.WILDCARD)
} else if (sym.isLocalToBlock) {
- val owner = currentOwner.logicallyEnclosingMember
+ val owner = logicallyEnclosingMember(currentOwner)
if (sym.isTerm && !sym.isMethod) markFree(sym, owner)
else if (sym.isMethod) markCalled(sym, owner)
//symSet(called, owner) += sym
}
case Select(_, _) =>
if (sym.isConstructor && sym.owner.isLocalToBlock)
- markCalled(sym, currentOwner.logicallyEnclosingMember)
+ markCalled(sym, logicallyEnclosingMember(currentOwner))
case _ =>
}
super.traverse(tree)
@@ -283,17 +306,18 @@ abstract class LambdaLift extends InfoTransform {
private def proxy(sym: Symbol) = {
def searchIn(enclosure: Symbol): Symbol = {
- if (enclosure eq NoSymbol) throw new IllegalArgumentException("Could not find proxy for "+ sym.defString +" in "+ sym.ownerChain +" (currentOwner= "+ currentOwner +" )")
- debuglog("searching for " + sym + "(" + sym.owner + ") in " + enclosure + " " + enclosure.logicallyEnclosingMember)
+ if (enclosure eq NoSymbol)
+ throw new IllegalArgumentException("Could not find proxy for "+ sym.defString +" in "+ sym.ownerChain +" (currentOwner= "+ currentOwner +" )")
+ debuglog("searching for " + sym + "(" + sym.owner + ") in " + enclosure + " " + logicallyEnclosingMember(enclosure))
val proxyName = proxyNames.getOrElse(sym, sym.name)
- val ps = (proxies get enclosure.logicallyEnclosingMember).toList.flatten find (_.name == proxyName)
+ val ps = (proxies get logicallyEnclosingMember(enclosure)).toList.flatten find (_.name == proxyName)
ps getOrElse searchIn(enclosure.skipConstructor.owner)
}
debuglog("proxy %s from %s has logical enclosure %s".format(
sym.debugLocationString,
currentOwner.debugLocationString,
- sym.owner.logicallyEnclosingMember.debugLocationString)
+ logicallyEnclosingMember(sym.owner).debugLocationString)
)
if (isSameOwnerEnclosure(sym)) sym
@@ -319,7 +343,14 @@ abstract class LambdaLift extends InfoTransform {
else if (clazz.isStaticOwner) gen.mkAttributedQualifier(clazz.thisType)
else outerValue match {
case EmptyTree => prematureSelfReference()
- case o => outerPath(o, currentClass.outerClass, clazz)
+ case o =>
+ val path = outerPath(o, currentClass.outerClass, clazz)
+ if (path.tpe <:< clazz.tpeHK) path
+ else {
+ // SI-9920 The outer accessor might have an erased type of the self type of a trait,
+ // rather than the trait itself. Add a cast if necessary.
+ gen.mkAttributedCast(path, clazz.tpeHK)
+ }
}
}
diff --git a/src/compiler/scala/tools/nsc/transform/Mixin.scala b/src/compiler/scala/tools/nsc/transform/Mixin.scala
index 582c51b90d..56d11d85a6 100644
--- a/src/compiler/scala/tools/nsc/transform/Mixin.scala
+++ b/src/compiler/scala/tools/nsc/transform/Mixin.scala
@@ -10,6 +10,7 @@ package transform
import symtab._
import Flags._
import scala.annotation.tailrec
+import scala.collection.mutable
abstract class Mixin extends InfoTransform with ast.TreeDSL with AccessorSynthesis {
@@ -218,9 +219,10 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL with AccessorSynthes
def genForwarder(required: Boolean): Unit = {
val owner = member.owner
if (owner.isJavaDefined && owner.isInterface && !clazz.parentSymbols.contains(owner)) {
- val text = s"Unable to implement a mixin forwarder for $member in $clazz unless interface ${owner.name} is directly extended by $clazz."
- if (required) reporter.error(clazz.pos, text)
- else warning(clazz.pos, text)
+ if (required) {
+ val text = s"Unable to implement a mixin forwarder for $member in $clazz unless interface ${owner.name} is directly extended by $clazz."
+ reporter.error(clazz.pos, text)
+ }
} else
cloneAndAddMixinMember(mixinClass, member).asInstanceOf[TermSymbol] setAlias member
}
@@ -259,7 +261,7 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL with AccessorSynthes
}
def generateJUnitForwarder: Boolean = {
- settings.mixinForwarderChoices.isJunit &&
+ settings.mixinForwarderChoices.isAtLeastJunit &&
member.annotations.nonEmpty &&
JUnitAnnotations.exists(annot => annot.exists && member.hasAnnotation(annot))
}
@@ -363,11 +365,13 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL with AccessorSynthes
private val rootContext =
erasure.NoContext.make(EmptyTree, rootMirror.RootClass, newScope)
+ private val nullables = mutable.AnyRefMap[Symbol, Map[Symbol, List[Symbol]]]()
/** The first transform; called in a pre-order traversal at phase mixin
* (that is, every node is processed before its children).
* What transform does:
* - For every non-trait class, add all mixed in members to the class info.
+ * - For every non-trait class, assign null to singly used private fields after use in lazy initialization.
*/
private def preTransform(tree: Tree): Tree = {
val sym = tree.symbol
@@ -381,12 +385,86 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL with AccessorSynthes
else if (currentOwner.isTrait)
publicizeTraitMethods(currentOwner)
+ if (!currentOwner.isTrait)
+ nullables(currentOwner) = lazyValNullables(currentOwner, body)
+
tree
+ case dd: DefDef if dd.symbol.name.endsWith(nme.LAZY_SLOW_SUFFIX) =>
+ val fieldsToNull = nullables.getOrElse(sym.enclClass, Map()).getOrElse(sym, Nil)
+ if (fieldsToNull.isEmpty) dd
+ else {
+ deriveDefDef(dd) {
+ case blk@Block(stats, expr) =>
+ assert(dd.symbol.originalOwner.isClass, dd.symbol)
+ def nullify(sym: Symbol) =
+ Select(gen.mkAttributedThis(sym.enclClass), sym.accessedOrSelf) === NULL
+ val stats1 = stats ::: fieldsToNull.map(nullify)
+ treeCopy.Block(blk, stats1, expr)
+ case tree =>
+ devWarning("Unexpected tree shape in lazy slow path")
+ tree
+ }
+ }
case _ => tree
}
}
+ /** Map lazy values to the fields they should null after initialization. */
+ def lazyValNullables(clazz: Symbol, templStats: List[Tree]): Map[Symbol, List[Symbol]] = {
+ // if there are no lazy fields, take the fast path and save a traversal of the whole AST
+ if (!clazz.info.decls.exists(_.isLazy)) Map()
+ else {
+ // A map of single-use fields to the lazy value that uses them during initialization.
+ // Each field has to be private and defined in the enclosing class, and there must
+ // be exactly one lazy value using it.
+ //
+ // Such fields will be nulled after the initializer has memoized the lazy value.
+ val singleUseFields: Map[Symbol, List[Symbol]] = {
+ val usedIn = mutable.HashMap[Symbol, List[Symbol]]() withDefaultValue Nil
+
+ object SingleUseTraverser extends Traverser {
+ override def traverse(tree: Tree) {
+ tree match {
+ // assignment targets don't count as a dereference -- only check the rhs
+ case Assign(_, rhs) => traverse(rhs)
+ case tree: RefTree if tree.symbol != NoSymbol =>
+ val sym = tree.symbol
+ // println(s"$sym in ${sym.owner} from $currentOwner ($tree)")
+ if ((sym.hasAccessorFlag || (sym.isTerm && !sym.isMethod)) && sym.isPrivate && !sym.isLazy && !sym.isModule // non-lazy private field or its accessor
+ && !definitions.isPrimitiveValueClass(sym.tpe.resultType.typeSymbol) // primitives don't hang on to significant amounts of heap
+ && sym.owner == currentOwner.enclClass && !(currentOwner.isGetter && currentOwner.accessed == sym)) {
+
+ // println("added use in: " + currentOwner + " -- " + tree)
+ usedIn(sym) ::= currentOwner
+ }
+ super.traverse(tree)
+ case _ => super.traverse(tree)
+ }
+ }
+ }
+ templStats foreach SingleUseTraverser.apply
+ // println("usedIn: " + usedIn)
+
+ // only consider usages from non-transient lazy vals (SI-9365)
+ val singlyUsedIn = usedIn.filter {
+ case (_, member :: Nil) if member.name.endsWith(nme.LAZY_SLOW_SUFFIX) =>
+ val lazyAccessor = member.owner.info.decl(member.name.stripSuffix(nme.LAZY_SLOW_SUFFIX))
+ !lazyAccessor.accessedOrSelf.hasAnnotation(TransientAttr)
+ case _ => false
+ }.toMap
+
+ // println("singlyUsedIn: " + singlyUsedIn)
+ singlyUsedIn
+ }
+
+ val map = mutable.Map[Symbol, Set[Symbol]]() withDefaultValue Set()
+ // invert the map to see which fields can be nulled for each non-transient lazy val
+ for ((field, users) <- singleUseFields; lazyFld <- users) map(lazyFld) += field
+
+ map.mapValues(_.toList sortBy (_.id)).toMap
+ }
+ }
/** Add all new definitions to a non-trait class
*
diff --git a/src/compiler/scala/tools/nsc/typechecker/ConstantFolder.scala b/src/compiler/scala/tools/nsc/typechecker/ConstantFolder.scala
index 2cd4785fbf..8b62409076 100644
--- a/src/compiler/scala/tools/nsc/typechecker/ConstantFolder.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/ConstantFolder.scala
@@ -103,13 +103,13 @@ abstract class ConstantFolder {
case nme.XOR => Constant(x.longValue ^ y.longValue)
case nme.AND => Constant(x.longValue & y.longValue)
case nme.LSL if x.tag <= IntTag
- => Constant(x.intValue << y.longValue.toInt) // TODO: remove .toInt once starr includes the fix for SI-9516 (2.12.0-M5)
+ => Constant(x.intValue << y.longValue)
case nme.LSL => Constant(x.longValue << y.longValue)
case nme.LSR if x.tag <= IntTag
- => Constant(x.intValue >>> y.longValue.toInt) // TODO: remove .toInt once starr includes the fix for SI-9516 (2.12.0-M5)
+ => Constant(x.intValue >>> y.longValue)
case nme.LSR => Constant(x.longValue >>> y.longValue)
case nme.ASR if x.tag <= IntTag
- => Constant(x.intValue >> y.longValue.toInt) // TODO: remove .toInt once starr includes the fix for SI-9516 (2.12.0-M5)
+ => Constant(x.intValue >> y.longValue)
case nme.ASR => Constant(x.longValue >> y.longValue)
case nme.EQ => Constant(x.longValue == y.longValue)
case nme.NE => Constant(x.longValue != y.longValue)
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 8034d056d7..106b076eef 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -95,6 +95,15 @@ abstract class RefChecks extends Transform {
)
}
+ private val separatelyCompiledScalaSuperclass = perRunCaches.newAnyRefMap[Symbol, Unit]()
+ final def isSeparatelyCompiledScalaSuperclass(sym: Symbol) = if (globalPhase.refChecked){
+ separatelyCompiledScalaSuperclass.contains(sym)
+ } else {
+ // conservative approximation in case someone in pre-refchecks phase asks for `exitingFields(someClass.info)`
+ // and we haven't run the refchecks tree transform which populates `separatelyCompiledScalaSuperclass`
+ false
+ }
+
class RefCheckTransformer(unit: CompilationUnit) extends Transformer {
var localTyper: analyzer.Typer = typer
@@ -854,6 +863,8 @@ abstract class RefChecks extends Transform {
// println("validate base type "+tp)
val baseClass = tp.typeSymbol
if (baseClass.isClass) {
+ if (!baseClass.isTrait && !baseClass.isJavaDefined && !currentRun.compiles(baseClass) && !separatelyCompiledScalaSuperclass.contains(baseClass))
+ separatelyCompiledScalaSuperclass.update(baseClass, ())
val index = clazz.info.baseTypeIndex(baseClass)
if (index >= 0) {
if (seenTypes(index) forall (tp1 => !(tp1 <:< tp)))
diff --git a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
index 963a9dea02..8b1b2f35c5 100644
--- a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
@@ -148,7 +148,7 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT
absSym =>
reporter.error(sel.pos, s"${sym.fullLocationString} cannot be directly accessed from $clazz because ${absSym.owner} redeclares it as abstract")
}
- } else if (mix != tpnme.EMPTY) {
+ } else {
// SD-143: a call super[T].m that resolves to A.m cannot be translated to correct bytecode if
// - A is a class (not a trait / interface), but not the direct superclass. Invokespecial
// would select an overriding method in the direct superclass, rather than A.m.
@@ -162,7 +162,7 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT
else hasClassOverride(member, subclass.superClass)
}
val owner = sym.owner
- if (!owner.isTrait && owner != clazz.superClass && hasClassOverride(sym, clazz.superClass)) {
+ if (mix != tpnme.EMPTY && !owner.isTrait && owner != clazz.superClass && hasClassOverride(sym, clazz.superClass)) {
reporter.error(sel.pos,
s"cannot emit super call: the selected $sym is declared in $owner, which is not the direct superclass of $clazz.\n" +
s"An unqualified super call (super.${sym.name}) would be allowed.")
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index d8183ea8df..7d48c548a1 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -1060,8 +1060,13 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
@inline def tpdPos(transformed: Tree) = typedPos(tree.pos, mode, pt)(transformed)
@inline def tpd(transformed: Tree) = typed(transformed, mode, pt)
- @inline def warnValueDiscard(): Unit =
- if (!isPastTyper && settings.warnValueDiscard) context.warning(tree.pos, "discarded non-Unit value")
+ @inline def warnValueDiscard(): Unit = if (!isPastTyper && settings.warnValueDiscard) {
+ def isThisTypeResult = (tree, tree.tpe) match {
+ case (Apply(Select(receiver, _), _), SingleType(_, sym)) => sym == receiver.symbol
+ case _ => false
+ }
+ if (!isThisTypeResult) context.warning(tree.pos, "discarded non-Unit value")
+ }
@inline def warnNumericWiden(): Unit =
if (!isPastTyper && settings.warnNumericWiden) context.warning(tree.pos, "implicit numeric widening")
diff --git a/src/compiler/scala/tools/nsc/util/StackTracing.scala b/src/compiler/scala/tools/nsc/util/StackTracing.scala
index 0765bb923f..c6749a13f3 100644
--- a/src/compiler/scala/tools/nsc/util/StackTracing.scala
+++ b/src/compiler/scala/tools/nsc/util/StackTracing.scala
@@ -8,7 +8,7 @@ private[util] trait StackTracing extends Any {
/** Format a stack trace, returning the prefix consisting of frames that satisfy
* a given predicate.
- * The format is similar to the typical case described in the JavaDoc
+ * The format is similar to the typical case described in the Javadoc
* for [[java.lang.Throwable#printStackTrace]].
* If a stack trace is truncated, it will be followed by a line of the form
* `... 3 elided`, by analogy to the lines `... 3 more` which indicate
@@ -19,25 +19,18 @@ private[util] trait StackTracing extends Any {
def stackTracePrefixString(e: Throwable)(p: StackTraceElement => Boolean): String = {
import collection.mutable.{ ArrayBuffer, ListBuffer }
import compat.Platform.EOL
- import scala.util.Properties.isJavaAtLeast
-
- val sb = ListBuffer.empty[String]
type TraceRelation = String
val Self = new TraceRelation("")
val CausedBy = new TraceRelation("Caused by: ")
val Suppressed = new TraceRelation("Suppressed: ")
- val suppressable = isJavaAtLeast("1.7")
-
- def clazz(e: Throwable) = e.getClass.getName
+ def clazz(e: Throwable): String = e.getClass.getName
def because(e: Throwable): String = e.getCause match { case null => null ; case c => header(c) }
def msg(e: Throwable): String = e.getMessage match { case null => because(e) ; case s => s }
def txt(e: Throwable): String = msg(e) match { case null => "" ; case s => s": $s" }
def header(e: Throwable): String = s"${clazz(e)}${txt(e)}"
- val indent = "\u0020\u0020"
-
val seen = new ArrayBuffer[Throwable](16)
def unseen(t: Throwable) = {
def inSeen = seen exists (_ eq t)
@@ -46,28 +39,25 @@ private[util] trait StackTracing extends Any {
interesting
}
+ val sb = ListBuffer.empty[String]
+
+ // format the stack trace, skipping the shared trace
def print(e: Throwable, r: TraceRelation, share: Array[StackTraceElement], indents: Int): Unit = if (unseen(e)) {
val trace = e.getStackTrace
- val frames = (
- if (share.nonEmpty) {
- val spare = share.reverseIterator
- val trimmed = trace.reverse dropWhile (spare.hasNext && spare.next == _)
- trimmed.reverse
- } else trace
- )
- val prefix = frames takeWhile p
- val margin = indent * indents
- val indented = margin + indent
+ val frames = if (share.isEmpty) trace else {
+ val spare = share.reverseIterator
+ val trimmed = trace.reverse dropWhile (spare.hasNext && spare.next == _)
+ trimmed.reverse
+ }
+ val prefix = frames takeWhile p
+ val margin = " " * indents
+ val indent = margin + " "
sb append s"${margin}${r}${header(e)}"
- prefix foreach (f => sb append s"${indented}at $f")
- if (frames.size < trace.size) sb append s"$indented... ${trace.size - frames.size} more"
- if (r == Self && prefix.size < frames.size) sb append s"$indented... ${frames.size - prefix.size} elided"
+ prefix foreach (f => sb append s"${margin} at $f")
+ if (frames.size < trace.size) sb append s"${margin} ... ${trace.size - frames.size} more"
+ if (r == Self && prefix.size < frames.size) sb append s"${margin} ... ${frames.size - prefix.size} elided"
print(e.getCause, CausedBy, trace, indents)
- if (suppressable) {
- import scala.language.reflectiveCalls
- type Suppressing = { def getSuppressed(): Array[Throwable] }
- for (s <- e.asInstanceOf[Suppressing].getSuppressed) print(s, Suppressed, frames, indents + 1)
- }
+ e.getSuppressed foreach (t => print(t, Suppressed, frames, indents + 1))
}
print(e, Self, share = Array.empty, indents = 0)
diff --git a/src/eclipse/README.md b/src/eclipse/README.md
index f67fa26e5e..c7a4827341 100644
--- a/src/eclipse/README.md
+++ b/src/eclipse/README.md
@@ -57,10 +57,10 @@ If it doesn’t compile
=====================
The likely reason is that the build path of the imported projects isn’t correct. This can happen for instance
-when the [version.properties](https://github.com/scala/scala/blob/master/versions.properties) file is updated,
+when the [versions.properties](https://github.com/scala/scala/blob/master/versions.properties) file is updated,
and Eclipse .classpath of the different projects isn’t updated accordingly. The fix is simple, manually inspect
the build path of each project and make sure the version of the declared dependencies is in sync with the version
-declared in the `version.properties` file. If it isn’t, update it manually and, when done, don’t forget to share
+declared in the `versions.properties` file. If it isn’t, update it manually and, when done, don’t forget to share
your changes via a pull request.
(We are aware this is cumbersome. If you feel like scripting the process, pull requests are of course welcome.)
diff --git a/src/ensime/.ensime.SAMPLE b/src/ensime/.ensime.SAMPLE
deleted file mode 100644
index 10801816b7..0000000000
--- a/src/ensime/.ensime.SAMPLE
+++ /dev/null
@@ -1,17 +0,0 @@
-(
- :disable-source-load-on-startup t
- :disable-scala-jars-on-classpath t
- :root-dir "c:/Projects/Kepler"
- :sources (
- "c:/Projects/Kepler/src/library"
- "c:/Projects/Kepler/src/reflect"
- "c:/Projects/Kepler/src/compiler"
- )
- :compile-deps (
- "c:/Projects/Kepler/build/asm/classes"
- "c:/Projects/Kepler/build/locker/classes/library"
- "c:/Projects/Kepler/build/locker/classes/reflect"
- "c:/Projects/Kepler/build/locker/classes/compiler"
- )
- :target "c:/Projects/Kepler/build/classes"
-) \ No newline at end of file
diff --git a/src/ensime/README.md b/src/ensime/README.md
deleted file mode 100644
index 302d47b8a7..0000000000
--- a/src/ensime/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-Ensime project files
-=====================
-
-Rename .ensime.SAMPLE to .ensime and replace sample paths with real paths to your sources and build results.
-After that you're good to go with one of the ENSIME-enabled text editors.
-
-Editors that know how to talk to ENSIME servers:
-1) Emacs via https://github.com/aemoncannon/ensime
-2) jEdit via https://github.com/djspiewak/ensime-sidekick
-3) TextMate via https://github.com/mads379/ensime.tmbundle
-4) Sublime Text 2 via https://github.com/sublimescala/sublime-ensime
diff --git a/src/interactive/scala/tools/nsc/interactive/CompilerControl.scala b/src/interactive/scala/tools/nsc/interactive/CompilerControl.scala
index cb12cebc49..462f4432cd 100644
--- a/src/interactive/scala/tools/nsc/interactive/CompilerControl.scala
+++ b/src/interactive/scala/tools/nsc/interactive/CompilerControl.scala
@@ -101,11 +101,11 @@ trait CompilerControl { self: Global =>
* the given sources at the head of the list of to-be-compiled sources.
*/
def askReload(sources: List[SourceFile], response: Response[Unit]) = {
- val superseeded = scheduler.dequeueAll {
+ val superseded = scheduler.dequeueAll {
case ri: ReloadItem if ri.sources == sources => Some(ri)
case _ => None
}
- superseeded.foreach(_.response.set(()))
+ superseded.foreach(_.response.set(()))
postWorkItem(new ReloadItem(sources, response))
}
diff --git a/src/library/scala/collection/GenTraversableLike.scala b/src/library/scala/collection/GenTraversableLike.scala
index d730996be2..1cd126f94f 100644
--- a/src/library/scala/collection/GenTraversableLike.scala
+++ b/src/library/scala/collection/GenTraversableLike.scala
@@ -24,7 +24,7 @@ import scala.annotation.migration
* is found.
* @define bfinfo an implicit value of class `CanBuildFrom` which determines
* the result class `That` from the current representation type `Repr` and
- * and the new element type `B`.
+ * the new element type `B`.
* @define orderDependent
*
* Note: might return different results for different runs, unless the
diff --git a/src/library/scala/collection/GenTraversableOnce.scala b/src/library/scala/collection/GenTraversableOnce.scala
index d3096a872c..f87f7654bc 100644
--- a/src/library/scala/collection/GenTraversableOnce.scala
+++ b/src/library/scala/collection/GenTraversableOnce.scala
@@ -96,7 +96,7 @@ trait GenTraversableOnce[+A] extends Any {
*/
def size: Int
- /** The size of this $coll if it is can be cheaply computed
+ /** The size of this $coll, if it can be cheaply computed
*
* @return the number of elements in this $coll, or -1 if the size cannot be determined cheaply
*/
diff --git a/src/library/scala/collection/SeqLike.scala b/src/library/scala/collection/SeqLike.scala
index a26765027c..2d662257e5 100644
--- a/src/library/scala/collection/SeqLike.scala
+++ b/src/library/scala/collection/SeqLike.scala
@@ -113,7 +113,7 @@ trait SeqLike[+A, +Repr] extends Any with IterableLike[A, Repr] with GenSeqLike[
}
def indexWhere(p: A => Boolean, from: Int): Int = {
- var i = from
+ var i = from max 0
val it = iterator.drop(from)
while (it.hasNext) {
if (p(it.next())) return i
diff --git a/src/library/scala/collection/TraversableLike.scala b/src/library/scala/collection/TraversableLike.scala
index be2f427ea4..c9482fe0a2 100644
--- a/src/library/scala/collection/TraversableLike.scala
+++ b/src/library/scala/collection/TraversableLike.scala
@@ -605,22 +605,69 @@ trait TraversableLike[+A, +Repr] extends Any
* applied to this $coll. By default the string prefix is the
* simple name of the collection class $coll.
*/
- def stringPrefix : String = {
+ def stringPrefix: String = {
+ /* This method is written in a style that avoids calling `String.split()`
+ * as well as methods of java.lang.Character that require the Unicode
+ * database information. This is mostly important for Scala.js, so that
+ * using the collection library does automatically bring java.util.regex.*
+ * and the Unicode database in the generated code.
+ *
+ * This algorithm has the additional benefit that it won't allocate
+ * anything except the result String in the common case, where the class
+ * is not an inner class (i.e., when the result contains no '.').
+ */
val fqn = repr.getClass.getName
- val cls = {
- val idx1 = fqn.lastIndexOf('.' : Int)
- if (idx1 != -1) fqn.substring(idx1 + 1) else fqn
+ var pos: Int = fqn.length - 1
+
+ // Skip trailing $'s
+ while (pos != -1 && fqn.charAt(pos) == '$') {
+ pos -= 1
+ }
+ if (pos == -1 || fqn.charAt(pos) == '.') {
+ return ""
}
- val parts = cls.split('$')
- val last = parts.length - 1
- parts.zipWithIndex.foldLeft("") { case (z, (s, i)) =>
- if (s.isEmpty) z
- else if (i != last && s.forall(java.lang.Character.isDigit)) "" // drop prefix in method-local classes
- else if (i == 0 || java.lang.Character.isUpperCase(s.charAt(0))) {
- if (z.isEmpty) s else z + '.' + s
+
+ var result: String = ""
+ while (true) {
+ // Invariant: if we enter the loop, there is a non-empty part
+
+ // Look for the beginning of the part, remembering where was the last non-digit
+ val partEnd = pos + 1
+ while (pos != -1 && fqn.charAt(pos) <= '9' && fqn.charAt(pos) >= '0') {
+ pos -= 1
+ }
+ val lastNonDigit = pos
+ while (pos != -1 && fqn.charAt(pos) != '$' && fqn.charAt(pos) != '.') {
+ pos -= 1
+ }
+ val partStart = pos + 1
+
+ // A non-last part which contains only digits marks a method-local part -> drop the prefix
+ if (pos == lastNonDigit && partEnd != fqn.length) {
+ return result
+ }
+
+ // Skip to the next part, and determine whether we are the end
+ while (pos != -1 && fqn.charAt(pos) == '$') {
+ pos -= 1
+ }
+ val atEnd = pos == -1 || fqn.charAt(pos) == '.'
+
+ // Handle the actual content of the part (we ignore parts that are likely synthetic)
+ def isPartLikelySynthetic = {
+ val firstChar = fqn.charAt(partStart)
+ (firstChar > 'Z' && firstChar < 0x7f) || (firstChar < 'A')
+ }
+ if (atEnd || !isPartLikelySynthetic) {
+ val part = fqn.substring(partStart, partEnd)
+ result = if (result.isEmpty) part else part + '.' + result
+ if (atEnd)
+ return result
}
- else z
}
+
+ // dead code
+ result
}
/** Creates a non-strict view of this $coll.
diff --git a/src/library/scala/collection/immutable/Set.scala b/src/library/scala/collection/immutable/Set.scala
index 3a8ee8b0be..047ea736bd 100644
--- a/src/library/scala/collection/immutable/Set.scala
+++ b/src/library/scala/collection/immutable/Set.scala
@@ -65,6 +65,7 @@ object Set extends ImmutableSetFactory[Set] {
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Set[A]] = setCanBuildFrom[A]
/** An optimized representation for immutable empty sets */
+ @SerialVersionUID(-2443710944435909512L)
private object EmptySet extends AbstractSet[Any] with Set[Any] with Serializable {
override def size: Int = 0
def contains(elem: Any): Boolean = false
diff --git a/src/library/scala/collection/immutable/StringLike.scala b/src/library/scala/collection/immutable/StringLike.scala
index 155d25d933..af8703293f 100644
--- a/src/library/scala/collection/immutable/StringLike.scala
+++ b/src/library/scala/collection/immutable/StringLike.scala
@@ -139,6 +139,7 @@ self =>
/** Returns this string with first character converted to upper case.
* If the first character of the string is capitalized, it is returned unchanged.
+ * This method does not convert characters outside the Basic Multilingual Plane (BMP).
*/
def capitalize: String =
if (toString == null) null
diff --git a/src/library/scala/collection/mutable/ListBuffer.scala b/src/library/scala/collection/mutable/ListBuffer.scala
index 02fcced3ac..3bb7004184 100644
--- a/src/library/scala/collection/mutable/ListBuffer.scala
+++ b/src/library/scala/collection/mutable/ListBuffer.scala
@@ -386,6 +386,25 @@ final class ListBuffer[A]
this
}
+ /** Selects the last element.
+ *
+ * Runs in constant time.
+ *
+ * @return the last element of this buffer.
+ * @throws NoSuchElementException if this buffer is empty.
+ */
+ override def last: A =
+ if (last0 eq null) throw new NoSuchElementException("last of empty ListBuffer")
+ else last0.head
+
+ /** Optionally selects the last element.
+ *
+ * Runs in constant time.
+ *
+ * @return `Some` of the last element of this buffer if the buffer is nonempty, `None` if it is empty.
+ */
+ override def lastOption: Option[A] = if (last0 eq null) None else Some(last0.head)
+
/** Returns an iterator over this `ListBuffer`. The iterator will reflect
* changes made to the underlying `ListBuffer` beyond the next element;
* the next element's value is cached so that `hasNext` and `next` are
diff --git a/src/library/scala/concurrent/Future.scala b/src/library/scala/concurrent/Future.scala
index c0398605a6..6c1c9a0c80 100644
--- a/src/library/scala/concurrent/Future.scala
+++ b/src/library/scala/concurrent/Future.scala
@@ -116,7 +116,7 @@ trait Future[+T] extends Awaitable[T] {
@deprecated("use `foreach` or `onComplete` instead (keep in mind that they take total rather than partial functions)", "2.12.0")
def onSuccess[U](pf: PartialFunction[T, U])(implicit executor: ExecutionContext): Unit = onComplete {
case Success(v) =>
- pf.applyOrElse[T, Any](v, Predef.conforms[T]) // Exploiting the cached function to avoid MatchError
+ pf.applyOrElse[T, Any](v, Predef.identity[T]) // Exploiting the cached function to avoid MatchError
case _ =>
}
@@ -141,7 +141,7 @@ trait Future[+T] extends Awaitable[T] {
@deprecated("use `onComplete` or `failed.foreach` instead (keep in mind that they take total rather than partial functions)", "2.12.0")
def onFailure[U](@deprecatedName('callback) pf: PartialFunction[Throwable, U])(implicit executor: ExecutionContext): Unit = onComplete {
case Failure(t) =>
- pf.applyOrElse[Throwable, Any](t, Predef.conforms[Throwable]) // Exploiting the cached function to avoid MatchError
+ pf.applyOrElse[Throwable, Any](t, Predef.identity[Throwable]) // Exploiting the cached function to avoid MatchError
case _ =>
}
@@ -528,7 +528,7 @@ trait Future[+T] extends Awaitable[T] {
def andThen[U](pf: PartialFunction[Try[T], U])(implicit executor: ExecutionContext): Future[T] =
transform {
result =>
- try pf.applyOrElse[Try[T], Any](result, Predef.conforms[Try[T]])
+ try pf.applyOrElse[Try[T], Any](result, Predef.identity[Try[T]])
catch { case NonFatal(t) => executor reportFailure t }
result
diff --git a/src/library/scala/inline.scala b/src/library/scala/inline.scala
index dc55af301c..f6d7c7569e 100644
--- a/src/library/scala/inline.scala
+++ b/src/library/scala/inline.scala
@@ -29,7 +29,7 @@ package scala
* }
* }}}
*
- * Note: parentheses are required when annotating a callsite withing a larger expression.
+ * Note: parentheses are required when annotating a callsite within a larger expression.
*
* {{{
* def t1 = f1(1) + f1(1): @noinline // equivalent to (f1(1) + f1(1)): @noinline
diff --git a/src/library/scala/noinline.scala b/src/library/scala/noinline.scala
index a427e170f4..0cd5ef9f64 100644
--- a/src/library/scala/noinline.scala
+++ b/src/library/scala/noinline.scala
@@ -29,7 +29,7 @@ package scala
* }
* }}}
*
- * Note: parentheses are required when annotating a callsite withing a larger expression.
+ * Note: parentheses are required when annotating a callsite within a larger expression.
*
* {{{
* def t1 = f1(1) + f1(1): @noinline // equivalent to (f1(1) + f1(1)): @noinline
diff --git a/src/library/scala/reflect/ClassManifestDeprecatedApis.scala b/src/library/scala/reflect/ClassManifestDeprecatedApis.scala
index 30a99340cc..cd46f0ff76 100644
--- a/src/library/scala/reflect/ClassManifestDeprecatedApis.scala
+++ b/src/library/scala/reflect/ClassManifestDeprecatedApis.scala
@@ -205,15 +205,18 @@ object ClassManifestFactory {
case m: ClassManifest[_] => m.asInstanceOf[ClassManifest[T]].arrayManifest
}
+ @SerialVersionUID(1L)
+ private class AbstractTypeClassManifest[T](prefix: OptManifest[_], name: String, clazz: jClass[_], args: OptManifest[_]*) extends ClassManifest[T] {
+ override def runtimeClass = clazz
+ override val typeArguments = args.toList
+ override def toString = prefix.toString+"#"+name+argString
+ }
+
/** ClassManifest for the abstract type `prefix # name`. `upperBound` is not
* strictly necessary as it could be obtained by reflection. It was
* added so that erasure can be calculated without reflection. */
def abstractType[T](prefix: OptManifest[_], name: String, clazz: jClass[_], args: OptManifest[_]*): ClassManifest[T] =
- new ClassManifest[T] {
- override def runtimeClass = clazz
- override val typeArguments = args.toList
- override def toString = prefix.toString+"#"+name+argString
- }
+ new AbstractTypeClassManifest(prefix, name, clazz)
/** ClassManifest for the abstract type `prefix # name`. `upperBound` is not
* strictly necessary as it could be obtained by reflection. It was
@@ -221,15 +224,12 @@ object ClassManifestFactory {
* todo: remove after next bootstrap
*/
def abstractType[T](prefix: OptManifest[_], name: String, upperbound: ClassManifest[_], args: OptManifest[_]*): ClassManifest[T] =
- new ClassManifest[T] {
- override def runtimeClass = upperbound.runtimeClass
- override val typeArguments = args.toList
- override def toString = prefix.toString+"#"+name+argString
- }
+ new AbstractTypeClassManifest(prefix, name, upperbound.runtimeClass)
}
/** Manifest for the class type `clazz[args]`, where `clazz` is
* a top-level or static class */
+@SerialVersionUID(1L)
private class ClassTypeManifest[T](
prefix: Option[OptManifest[_]],
val runtimeClass: jClass[_],
diff --git a/src/library/scala/reflect/ClassTag.scala b/src/library/scala/reflect/ClassTag.scala
index eb3aeeecfc..30ceadceeb 100644
--- a/src/library/scala/reflect/ClassTag.scala
+++ b/src/library/scala/reflect/ClassTag.scala
@@ -119,6 +119,7 @@ object ClassTag {
val Nothing : ClassTag[scala.Nothing] = Manifest.Nothing
val Null : ClassTag[scala.Null] = Manifest.Null
+ @SerialVersionUID(1L)
private class GenericClassTag[T](val runtimeClass: jClass[_]) extends ClassTag[T]
def apply[T](runtimeClass1: jClass[_]): ClassTag[T] =
diff --git a/src/library/scala/reflect/Manifest.scala b/src/library/scala/reflect/Manifest.scala
index 9c38864194..8e5ba6376e 100644
--- a/src/library/scala/reflect/Manifest.scala
+++ b/src/library/scala/reflect/Manifest.scala
@@ -87,6 +87,7 @@ object ManifestFactory {
def valueManifests: List[AnyValManifest[_]] =
List(Byte, Short, Char, Int, Long, Float, Double, Boolean, Unit)
+ @SerialVersionUID(1L)
private class ByteManifest extends AnyValManifest[scala.Byte]("Byte") {
def runtimeClass = java.lang.Byte.TYPE
override def newArray(len: Int): Array[Byte] = new Array[Byte](len)
@@ -96,6 +97,7 @@ object ManifestFactory {
}
val Byte: AnyValManifest[Byte] = new ByteManifest
+ @SerialVersionUID(1L)
private class ShortManifest extends AnyValManifest[scala.Short]("Short") {
def runtimeClass = java.lang.Short.TYPE
override def newArray(len: Int): Array[Short] = new Array[Short](len)
@@ -105,6 +107,7 @@ object ManifestFactory {
}
val Short: AnyValManifest[Short] = new ShortManifest
+ @SerialVersionUID(1L)
private class CharManifest extends AnyValManifest[scala.Char]("Char") {
def runtimeClass = java.lang.Character.TYPE
override def newArray(len: Int): Array[Char] = new Array[Char](len)
@@ -114,6 +117,7 @@ object ManifestFactory {
}
val Char: AnyValManifest[Char] = new CharManifest
+ @SerialVersionUID(1L)
private class IntManifest extends AnyValManifest[scala.Int]("Int") {
def runtimeClass = java.lang.Integer.TYPE
override def newArray(len: Int): Array[Int] = new Array[Int](len)
@@ -123,6 +127,7 @@ object ManifestFactory {
}
val Int: AnyValManifest[Int] = new IntManifest
+ @SerialVersionUID(1L)
private class LongManifest extends AnyValManifest[scala.Long]("Long") {
def runtimeClass = java.lang.Long.TYPE
override def newArray(len: Int): Array[Long] = new Array[Long](len)
@@ -132,6 +137,7 @@ object ManifestFactory {
}
val Long: AnyValManifest[Long] = new LongManifest
+ @SerialVersionUID(1L)
private class FloatManifest extends AnyValManifest[scala.Float]("Float") {
def runtimeClass = java.lang.Float.TYPE
override def newArray(len: Int): Array[Float] = new Array[Float](len)
@@ -141,6 +147,7 @@ object ManifestFactory {
}
val Float: AnyValManifest[Float] = new FloatManifest
+ @SerialVersionUID(1L)
private class DoubleManifest extends AnyValManifest[scala.Double]("Double") {
def runtimeClass = java.lang.Double.TYPE
override def newArray(len: Int): Array[Double] = new Array[Double](len)
@@ -150,6 +157,7 @@ object ManifestFactory {
}
val Double: AnyValManifest[Double] = new DoubleManifest
+ @SerialVersionUID(1L)
private class BooleanManifest extends AnyValManifest[scala.Boolean]("Boolean") {
def runtimeClass = java.lang.Boolean.TYPE
override def newArray(len: Int): Array[Boolean] = new Array[Boolean](len)
@@ -159,6 +167,7 @@ object ManifestFactory {
}
val Boolean: AnyValManifest[Boolean] = new BooleanManifest
+ @SerialVersionUID(1L)
private class UnitManifest extends AnyValManifest[scala.Unit]("Unit") {
def runtimeClass = java.lang.Void.TYPE
override def newArray(len: Int): Array[Unit] = new Array[Unit](len)
@@ -175,6 +184,7 @@ object ManifestFactory {
private val NothingTYPE = classOf[scala.runtime.Nothing$]
private val NullTYPE = classOf[scala.runtime.Null$]
+ @SerialVersionUID(1L)
private class AnyManifest extends PhantomManifest[scala.Any](ObjectTYPE, "Any") {
override def newArray(len: Int) = new Array[scala.Any](len)
override def <:<(that: ClassManifest[_]): Boolean = (that eq this)
@@ -182,6 +192,7 @@ object ManifestFactory {
}
val Any: Manifest[scala.Any] = new AnyManifest
+ @SerialVersionUID(1L)
private class ObjectManifest extends PhantomManifest[java.lang.Object](ObjectTYPE, "Object") {
override def newArray(len: Int) = new Array[java.lang.Object](len)
override def <:<(that: ClassManifest[_]): Boolean = (that eq this) || (that eq Any)
@@ -191,6 +202,7 @@ object ManifestFactory {
val AnyRef: Manifest[scala.AnyRef] = Object.asInstanceOf[Manifest[scala.AnyRef]]
+ @SerialVersionUID(1L)
private class AnyValPhantomManifest extends PhantomManifest[scala.AnyVal](ObjectTYPE, "AnyVal") {
override def newArray(len: Int) = new Array[scala.AnyVal](len)
override def <:<(that: ClassManifest[_]): Boolean = (that eq this) || (that eq Any)
@@ -198,6 +210,7 @@ object ManifestFactory {
}
val AnyVal: Manifest[scala.AnyVal] = new AnyValPhantomManifest
+ @SerialVersionUID(1L)
private class NullManifest extends PhantomManifest[scala.Null](NullTYPE, "Null") {
override def newArray(len: Int) = new Array[scala.Null](len)
override def <:<(that: ClassManifest[_]): Boolean =
@@ -206,6 +219,7 @@ object ManifestFactory {
}
val Null: Manifest[scala.Null] = new NullManifest
+ @SerialVersionUID(1L)
private class NothingManifest extends PhantomManifest[scala.Nothing](NothingTYPE, "Nothing") {
override def newArray(len: Int) = new Array[scala.Nothing](len)
override def <:<(that: ClassManifest[_]): Boolean = (that ne null)
@@ -213,6 +227,7 @@ object ManifestFactory {
}
val Nothing: Manifest[scala.Nothing] = new NothingManifest
+ @SerialVersionUID(1L)
private class SingletonTypeManifest[T <: AnyRef](value: AnyRef) extends Manifest[T] {
lazy val runtimeClass = value.getClass
override lazy val toString = value.toString + ".type"
@@ -243,6 +258,7 @@ object ManifestFactory {
def classType[T](prefix: Manifest[_], clazz: Predef.Class[_], args: Manifest[_]*): Manifest[T] =
new ClassTypeManifest[T](Some(prefix), clazz, args.toList)
+ @SerialVersionUID(1L)
private abstract class PhantomManifest[T](_runtimeClass: Predef.Class[_],
override val toString: String) extends ClassTypeManifest[T](None, _runtimeClass, Nil) {
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
@@ -252,6 +268,7 @@ object ManifestFactory {
/** Manifest for the class type `clazz[args]`, where `clazz` is
* a top-level or static class. */
+ @SerialVersionUID(1L)
private class ClassTypeManifest[T](prefix: Option[Manifest[_]],
val runtimeClass: Predef.Class[_],
override val typeArguments: List[Manifest[_]]) extends Manifest[T] {
@@ -264,6 +281,7 @@ object ManifestFactory {
def arrayType[T](arg: Manifest[_]): Manifest[Array[T]] =
arg.asInstanceOf[Manifest[T]].arrayManifest
+ @SerialVersionUID(1L)
private class AbstractTypeManifest[T](prefix: Manifest[_], name: String, upperBound: Predef.Class[_], args: Seq[Manifest[_]]) extends Manifest[T] {
def runtimeClass = upperBound
override val typeArguments = args.toList
@@ -276,6 +294,7 @@ object ManifestFactory {
def abstractType[T](prefix: Manifest[_], name: String, upperBound: Predef.Class[_], args: Manifest[_]*): Manifest[T] =
new AbstractTypeManifest[T](prefix, name, upperBound, args)
+ @SerialVersionUID(1L)
private class WildcardManifest[T](lowerBound: Manifest[_], upperBound: Manifest[_]) extends Manifest[T] {
def runtimeClass = upperBound.runtimeClass
override def toString =
@@ -289,6 +308,7 @@ object ManifestFactory {
def wildcardType[T](lowerBound: Manifest[_], upperBound: Manifest[_]): Manifest[T] =
new WildcardManifest[T](lowerBound, upperBound)
+ @SerialVersionUID(1L)
private class IntersectionTypeManifest[T](parents: Seq[Manifest[_]]) extends Manifest[T] {
def runtimeClass = parents.head.runtimeClass
override def toString = parents.mkString(" with ")
diff --git a/src/library/scala/reflect/NameTransformer.scala b/src/library/scala/reflect/NameTransformer.scala
index ae36f5edc2..bdf5165df5 100644
--- a/src/library/scala/reflect/NameTransformer.scala
+++ b/src/library/scala/reflect/NameTransformer.scala
@@ -13,15 +13,16 @@ package reflect
* Also provides some constants.
*/
object NameTransformer {
- // XXX Short term: providing a way to alter these without having to recompile
- // the compiler before recompiling the compiler.
- val MODULE_SUFFIX_STRING = sys.props.getOrElse("SCALA_MODULE_SUFFIX_STRING", "$")
- val NAME_JOIN_STRING = sys.props.getOrElse("SCALA_NAME_JOIN_STRING", "$")
- val MODULE_INSTANCE_NAME = "MODULE$"
- val LOCAL_SUFFIX_STRING = " "
- val LAZY_LOCAL_SUFFIX_STRING = "$lzy"
- val SETTER_SUFFIX_STRING = "_$eq"
- val TRAIT_SETTER_SEPARATOR_STRING = "$_setter_$"
+ // TODO: reduce duplication with and in StdNames
+ // I made these constants because we cannot change them without bumping our major version anyway.
+ final val NAME_JOIN_STRING = "$"
+ final val MODULE_SUFFIX_STRING = "$"
+ final val MODULE_INSTANCE_NAME = "MODULE$"
+ final val LOCAL_SUFFIX_STRING = " "
+ final val LAZY_LOCAL_SUFFIX_STRING = "$lzy"
+ final val MODULE_VAR_SUFFIX_STRING = "$module"
+ final val SETTER_SUFFIX_STRING = "_$eq"
+ final val TRAIT_SETTER_SEPARATOR_STRING = "$_setter_$"
private val nops = 128
private val ncodes = 26 * 26
diff --git a/src/library/scala/sys/process/ProcessBuilder.scala b/src/library/scala/sys/process/ProcessBuilder.scala
index 9713b712fc..fe4c30ee50 100644
--- a/src/library/scala/sys/process/ProcessBuilder.scala
+++ b/src/library/scala/sys/process/ProcessBuilder.scala
@@ -90,19 +90,19 @@ import ProcessBuilder._
*
* If not specified, the input of the external commands executed with `run` or
* `!` will not be tied to anything, and the output will be redirected to the
- * stdout and stderr of the Scala process. For the methods `!!` and `lines`, no
+ * stdout and stderr of the Scala process. For the methods `!!` and `lineStream`, no
* input will be provided, and the output will be directed according to the
* semantics of these methods.
*
* Some methods will cause stdin to be used as input. Output can be controlled
- * with a [[scala.sys.process.ProcessLogger]] -- `!!` and `lines` will only
+ * with a [[scala.sys.process.ProcessLogger]] -- `!!` and `lineStream` will only
* redirect error output when passed a `ProcessLogger`. If one desires full
* control over input and output, then a [[scala.sys.process.ProcessIO]] can be
* used with `run`.
*
- * For example, we could silence the error output from `lines_!` like this:
+ * For example, we could silence the error output from `lineStream_!` like this:
* {{{
- * val etcFiles = "find /etc" lines_! ProcessLogger(line => ())
+ * val etcFiles = "find /etc" lineStream_! ProcessLogger(line => ())
* }}}
*
* ==Extended Example==
diff --git a/src/library/scala/sys/process/package.scala b/src/library/scala/sys/process/package.scala
index ff0fd920c9..bf4287dfc3 100644
--- a/src/library/scala/sys/process/package.scala
+++ b/src/library/scala/sys/process/package.scala
@@ -25,7 +25,7 @@ package scala.sys {
*
* {{{
* import scala.sys.process._
- * "ls" #| "grep .scala" #&& Seq("sh", "-c", "scalac *.scala") #|| "echo nothing found" lines
+ * "ls" #| "grep .scala" #&& Seq("sh", "-c", "scalac *.scala") #|| "echo nothing found" lineStream
* }}}
*
* We describe below the general concepts and architecture of the package,
@@ -92,7 +92,7 @@ package scala.sys {
*
* - Return status of the process (`!` methods)
* - Output of the process as a `String` (`!!` methods)
- * - Continuous output of the process as a `Stream[String]` (`lines` methods)
+ * - Continuous output of the process as a `Stream[String]` (`lineStream` methods)
* - The `Process` representing it (`run` methods)
*
* Some simple examples of these methods:
@@ -109,7 +109,7 @@ package scala.sys {
* // a Stream[String]
* def sourceFilesAt(baseDir: String): Stream[String] = {
* val cmd = Seq("find", baseDir, "-name", "*.scala", "-type", "f")
- * cmd.lines
+ * cmd.lineStream
* }
* }}}
*
@@ -167,8 +167,8 @@ package scala.sys {
* def sourceFilesAt(baseDir: String): (Stream[String], StringBuffer) = {
* val buffer = new StringBuffer()
* val cmd = Seq("find", baseDir, "-name", "*.scala", "-type", "f")
- * val lines = cmd lines_! ProcessLogger(buffer append _)
- * (lines, buffer)
+ * val lineStream = cmd lineStream_! ProcessLogger(buffer append _)
+ * (lineStream, buffer)
* }
* }}}
*
diff --git a/src/library/scala/util/Either.scala b/src/library/scala/util/Either.scala
index 169786d31b..7bded972f2 100644
--- a/src/library/scala/util/Either.scala
+++ b/src/library/scala/util/Either.scala
@@ -55,31 +55,31 @@ package util
* val left23: Left[Double, Int] = Left(23.0)
* val left42 = Left(42.0)
*
- * for (
- * a <- right1;
- * b <- right2;
+ * for {
+ * a <- right1
+ * b <- right2
* c <- right3
- * ) yield a + b + c // Right(6)
+ * } yield a + b + c // Right(6)
*
- * for (
- * a <- right1;
- * b <- right2;
+ * for {
+ * a <- right1
+ * b <- right2
* c <- left23
- * ) yield a + b + c // Left(23.0)
+ * } yield a + b + c // Left(23.0)
*
- * for (
- * a <- right1;
- * b <- left23;
+ * for {
+ * a <- right1
+ * b <- left23
* c <- right2
- * ) yield a + b + c // Left(23.0)
+ * } yield a + b + c // Left(23.0)
*
* // It is advisable to provide the type of the “missing” value (especially the right value for `Left`)
* // as otherwise that type might be infered as `Nothing` without context:
- * for (
- * a <- left23;
- * b <- right1;
+ * for {
+ * a <- left23
+ * b <- right1
* c <- left42 // type at this position: Either[Double, Nothing]
- * ) yield a + b + c
+ * } yield a + b + c
* // ^
* // error: ambiguous reference to overloaded definition,
* // both method + in class Int of type (x: Char)Int
@@ -95,13 +95,15 @@ sealed abstract class Either[+A, +B] extends Product with Serializable {
/**
* Projects this `Either` as a `Left`.
*/
- @deprecated("use swap instead", "2.12.0")
def left = Either.LeftProjection(this)
/**
* Projects this `Either` as a `Right`.
+ *
+ * Because `Either` is right-biased, this method is not normally needed.
+ * (It is retained in the API for now for easy cross-compilation between Scala
+ * 2.11 and 2.12.)
*/
- @deprecated("Either is now right-biased", "2.12.0")
def right = Either.RightProjection(this)
/**
@@ -134,10 +136,10 @@ sealed abstract class Either[+A, +B] extends Product with Serializable {
* @example {{{
* val right = Right(2)
* val left = Left(3)
- * for (
- * r1 <- right;
+ * for {
+ * r1 <- right
* r2 <- left.swap
- * ) yield r1 * r2 // Right(6)
+ * } yield r1 * r2 // Right(6)
* }}}
*/
def swap: Either[B, A] = this match {
@@ -245,7 +247,7 @@ sealed abstract class Either[+A, +B] extends Product with Serializable {
/**
* Returns `true` if `Left` or returns the result of the application of
- * the given function to the `Right` value.
+ * the given predicate to the `Right` value.
*
* {{{
* Right(12).forall(_ > 10) // true
@@ -260,7 +262,7 @@ sealed abstract class Either[+A, +B] extends Product with Serializable {
/**
* Returns `false` if `Left` or returns the result of the application of
- * the given function to the `Right` value.
+ * the given predicate to the `Right` value.
*
* {{{
* Right(12).exists(_ > 10) // true
@@ -426,7 +428,10 @@ object Either {
/**
* Projects an `Either` into a `Left`.
*
- * This allows for-comprehensions over Either instances - for example {{{
+ * This allows for-comprehensions over the left side of Either instances,
+ * reversing Either's usual right-bias.
+ *
+ * For example {{{
* for (s <- Left("flower").left) yield s.length // Left(6)
* }}}
*
@@ -472,7 +477,6 @@ object Either {
* @author <a href="mailto:research@workingmouse.com">Tony Morris</a>, Workingmouse
* @version 1.0, 11/10/2008
*/
- @deprecated("use swap instead", "2.12.0")
final case class LeftProjection[+A, +B](e: Either[A, B]) {
/**
* Returns the value from this `Left` or throws `java.util.NoSuchElementException`
@@ -624,19 +628,13 @@ object Either {
/**
* Projects an `Either` into a `Right`.
*
- * This allows for-comprehensions over Either instances - for example {{{
- * for (s <- Right("flower").right) yield s.length // Right(6)
- * }}}
- *
- * Continuing the analogy with [[scala.Option]], a `RightProjection` declares
- * that `Right` should be analogous to `Some` in some code.
- *
- * Analogous to `LeftProjection`, see example usage in its documentation above.
+ * Because `Either` is already right-biased, this class is not normally needed.
+ * (It is retained in the library for now for easy cross-compilation between Scala
+ * 2.11 and 2.12.)
*
* @author <a href="mailto:research@workingmouse.com">Tony Morris</a>, Workingmouse
* @version 1.0, 11/10/2008
*/
- @deprecated("Either is now right-biased", "2.12.0")
final case class RightProjection[+A, +B](e: Either[A, B]) {
/**
diff --git a/src/library/scala/util/Properties.scala b/src/library/scala/util/Properties.scala
index a176748cd6..9d62bfe6ef 100644
--- a/src/library/scala/util/Properties.scala
+++ b/src/library/scala/util/Properties.scala
@@ -105,7 +105,7 @@ private[scala] trait PropertiesTrait {
* or "version (unknown)" if it cannot be determined.
*/
val versionString = "version " + scalaPropOrElse("version.number", "(unknown)")
- val copyrightString = scalaPropOrElse("copyright.string", "Copyright 2002-2016, LAMP/EPFL")
+ val copyrightString = scalaPropOrElse("copyright.string", "Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.")
/** This is the encoding to use reading in source files, overridden with -encoding.
* Note that it uses "prop" i.e. looks in the scala jar, not the system properties.
@@ -168,29 +168,61 @@ private[scala] trait PropertiesTrait {
/** Compares the given specification version to the specification version of the platform.
*
- * @param version a specification version of the form "major.minor"
- * @return `true` iff the specification version of the current runtime
- * is equal to or higher than the version denoted by the given string.
- * @throws NumberFormatException if the given string is not a version string
+ * @param version a specification version number (legacy forms acceptable)
+ * @return `true` if the specification version of the current runtime
+ * is equal to or higher than the version denoted by the given string.
+ * @throws NumberFormatException if the given string is not a version string
*
- * @example {{{
- * // In this example, the runtime's Java specification is assumed to be at version 1.7.
- * isJavaAtLeast("1.6") // true
- * isJavaAtLeast("1.7") // true
- * isJavaAtLeast("1.8") // false
- * }}}
+ * @example {{{
+ * // In this example, the runtime's Java specification is assumed to be at version 8.
+ * isJavaAtLeast("1.8") // true
+ * isJavaAtLeast("8") // true
+ * isJavaAtLeast("9") // false
+ * isJavaAtLeast("9.1") // false
+ * isJavaAtLeast("1.9") // throws
+ * }}}
*/
def isJavaAtLeast(version: String): Boolean = {
- def parts(x: String) = {
- val i = x.indexOf('.')
- if (i < 0) throw new NumberFormatException("Not a version: " + x)
- (x.substring(0, i), x.substring(i+1, x.length))
+ def versionOf(s: String, depth: Int): (Int, String) =
+ s.indexOf('.') match {
+ case 0 =>
+ (-2, s.substring(1))
+ case 1 if depth == 0 && s.charAt(0) == '1' =>
+ val r0 = s.substring(2)
+ val (v, r) = versionOf(r0, 1)
+ val n = if (v > 8 || r0.isEmpty) -2 else v // accept 1.8, not 1.9 or 1.
+ (n, r)
+ case -1 =>
+ val n = if (!s.isEmpty) s.toInt else if (depth == 0) -2 else 0
+ (n, "")
+ case i =>
+ val r = s.substring(i + 1)
+ val n = if (depth < 2 && r.isEmpty) -2 else s.substring(0, i).toInt
+ (n, r)
+ }
+ def compareVersions(s: String, v: String, depth: Int): Int = {
+ if (depth >= 3) 0
+ else {
+ val (sn, srest) = versionOf(s, depth)
+ val (vn, vrest) = versionOf(v, depth)
+ if (vn < 0) -2
+ else if (sn < vn) -1
+ else if (sn > vn) 1
+ else compareVersions(srest, vrest, depth + 1)
+ }
+ }
+ compareVersions(javaSpecVersion, version, 0) match {
+ case -2 => throw new NumberFormatException(s"Not a version: $version")
+ case i => i >= 0
}
- val (v, _v) = parts(version)
- val (s, _s) = parts(javaSpecVersion)
- s.toInt >= v.toInt && _s.toInt >= _v.toInt
}
+ /** Tests whether the major version of the platform specification is at least the given value.
+ *
+ * @param version a major version number
+ */
+ def isJavaAtLeast(version: Int): Boolean = isJavaAtLeast(version.toString)
+
// provide a main method so version info can be obtained by running this
def main(args: Array[String]) {
val writer = new PrintWriter(Console.err, true)
diff --git a/src/manual/scala/man1/scala.scala b/src/manual/scala/man1/scala.scala
index 9f97dd546c..3cfa9f8cb1 100644
--- a/src/manual/scala/man1/scala.scala
+++ b/src/manual/scala/man1/scala.scala
@@ -144,17 +144,14 @@ object scala extends Command {
Mono("-nocompdaemon") & " or " & Mono("-nc") & " option can be used to " &
"prevent this.",
- "If " & Mono("scala") & " is run from an sbaz(1) directory, " &
- "then it will add to its classpath any jars installed in the " &
- "lib directory of the sbaz directory. Additionally, if no " &
- "-classpath option is specified, then " & Mono("scala") &
+ "If no -classpath option is specified, then " & Mono("scala") &
" will add " & Quote(".") & ", the current directory, to the " &
"end of the classpath.")
val options = Section("OPTIONS",
"If any compiler options are specified, they must be first in the " &
- "command line and must be followed by a bare hypen (" & Quote("-") &
+ "command line and must be followed by a bare hyphen (" & Quote("-") &
") character. " &
"If no arguments are specified after the optional compiler arguments, " &
"then an interactive Scala shell is started. Otherwise, either a " &
diff --git a/src/reflect/scala/reflect/internal/Definitions.scala b/src/reflect/scala/reflect/internal/Definitions.scala
index 0f7cf07f08..fc7e184918 100644
--- a/src/reflect/scala/reflect/internal/Definitions.scala
+++ b/src/reflect/scala/reflect/internal/Definitions.scala
@@ -840,14 +840,14 @@ trait Definitions extends api.StandardDefinitions {
*
* The method must be monomorphic and have exactly one parameter list.
* The class defining the method is a supertype of `tp` that
- * has a public no-arg primary constructor.
+ * has a public no-arg primary constructor and it can be subclassed (not final or sealed).
*/
def samOf(tp: Type): Symbol = if (!doSam) NoSymbol else if (!isNonRefinementClassType(unwrapToClass(tp))) NoSymbol else {
// look at erased type because we (only) care about what ends up in bytecode
// (e.g., an alias type is fine as long as is compiles to a single-abstract-method)
val tpSym: Symbol = erasure.javaErasure(tp).typeSymbol
- if (tpSym.exists && tpSym.isClass
+ if (tpSym.exists && tpSym.isClass && !(tpSym hasFlag (FINAL | SEALED))
// if tp has a constructor (its class is not a trait), it must be public and must not take any arguments
// (implementation restriction: implicit argument lists are excluded to simplify type inference in adaptToSAM)
&& { val ctor = tpSym.primaryConstructor
diff --git a/src/reflect/scala/reflect/internal/StdNames.scala b/src/reflect/scala/reflect/internal/StdNames.scala
index 1a6c84b19e..2e820a68e0 100644
--- a/src/reflect/scala/reflect/internal/StdNames.scala
+++ b/src/reflect/scala/reflect/internal/StdNames.scala
@@ -92,14 +92,15 @@ trait StdNames {
def flattenedName(segments: Name*): NameType =
compactify(segments mkString NAME_JOIN_STRING)
- val NAME_JOIN_STRING: String = NameTransformer.NAME_JOIN_STRING
- val MODULE_SUFFIX_STRING: String = NameTransformer.MODULE_SUFFIX_STRING
- val LOCAL_SUFFIX_STRING: String = NameTransformer.LOCAL_SUFFIX_STRING
- val LAZY_LOCAL_SUFFIX_STRING: String = NameTransformer.LAZY_LOCAL_SUFFIX_STRING
-
- val TRAIT_SETTER_SEPARATOR_STRING: String = NameTransformer.TRAIT_SETTER_SEPARATOR_STRING
-
- val SINGLETON_SUFFIX: String = ".type"
+ // TODO: what is the purpose of all this duplication!?!?!
+ // I made these constants because we cannot change them without bumping our major version anyway.
+ final val NAME_JOIN_STRING = NameTransformer.NAME_JOIN_STRING
+ final val MODULE_SUFFIX_STRING = NameTransformer.MODULE_SUFFIX_STRING
+ final val MODULE_VAR_SUFFIX_STRING = NameTransformer.MODULE_VAR_SUFFIX_STRING
+ final val LOCAL_SUFFIX_STRING = NameTransformer.LOCAL_SUFFIX_STRING
+ final val LAZY_LOCAL_SUFFIX_STRING = NameTransformer.LAZY_LOCAL_SUFFIX_STRING
+ final val TRAIT_SETTER_SEPARATOR_STRING = NameTransformer.TRAIT_SETTER_SEPARATOR_STRING
+ final val SINGLETON_SUFFIX = ".type"
val ANON_CLASS_NAME: NameType = "$anon"
val DELAMBDAFY_LAMBDA_CLASS_NAME: NameType = "$lambda"
@@ -108,7 +109,7 @@ trait StdNames {
val EMPTY_PACKAGE_NAME: NameType = "<empty>"
val IMPORT: NameType = "<import>"
val MODULE_SUFFIX_NAME: NameType = MODULE_SUFFIX_STRING
- val MODULE_VAR_SUFFIX: NameType = "$module"
+ val MODULE_VAR_SUFFIX: NameType = MODULE_VAR_SUFFIX_STRING
val PACKAGE: NameType = "package"
val ROOT: NameType = "<root>"
val SPECIALIZED_SUFFIX: NameType = "$sp"
diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala
index ac025e50ae..f870ecfc15 100644
--- a/src/reflect/scala/reflect/internal/Symbols.scala
+++ b/src/reflect/scala/reflect/internal/Symbols.scala
@@ -2166,7 +2166,6 @@ trait Symbols extends api.Symbols { self: SymbolTable =>
final def logicallyEnclosingMember: Symbol =
if (isLocalDummy) enclClass.primaryConstructor
else if (isMethod || isClass || this == NoSymbol) this
- else if (this == NoSymbol) { devWarningDumpStack("NoSymbol.logicallyEnclosingMember", 15); this }
else owner.logicallyEnclosingMember
/** The top-level class containing this symbol. */
diff --git a/src/reflect/scala/reflect/internal/TypeDebugging.scala b/src/reflect/scala/reflect/internal/TypeDebugging.scala
index 63f897cd32..e9050b4e33 100644
--- a/src/reflect/scala/reflect/internal/TypeDebugging.scala
+++ b/src/reflect/scala/reflect/internal/TypeDebugging.scala
@@ -110,7 +110,7 @@ trait TypeDebugging {
val hi_s = if (noPrint(hi)) "" else " <: " + ptTree(hi)
lo_s + hi_s
case _ if (t.symbol eq null) || (t.symbol eq NoSymbol) => to_s(t)
- case _ => "" + t.symbol.tpe
+ case _ => "" + t.symbol.rawInfo.safeToString
}
def ptTypeParam(td: TypeDef): String = {
val TypeDef(_, name, tparams, rhs) = td
diff --git a/src/repl-jline/scala/tools/nsc/interpreter/jline/JLineReader.scala b/src/repl-jline/scala/tools/nsc/interpreter/jline/JLineReader.scala
index 95964e18d9..912ac26329 100644
--- a/src/repl-jline/scala/tools/nsc/interpreter/jline/JLineReader.scala
+++ b/src/repl-jline/scala/tools/nsc/interpreter/jline/JLineReader.scala
@@ -32,11 +32,14 @@ class InteractiveReader(completer: () => Completion) extends interpreter.Interac
private val consoleReader = {
val reader = new JLineConsoleReader()
- reader setPaginationEnabled interpreter.`package`.isPaged
+ reader setPaginationEnabled interpreter.isPaged
- // ASAP
+ // turn off magic !
reader setExpandEvents false
+ // enable detecting pasted tab char (when next char is immediately available) which is taken raw, not completion
+ reader setCopyPasteDetection true
+
reader setHistory history.asInstanceOf[JHistory]
reader
@@ -91,11 +94,19 @@ private class JLineConsoleReader extends jconsole.ConsoleReader with interpreter
printColumns_(items: List[String])
}
+ // Workaround for JLine weirdness. (See https://github.com/scala/scala-dev/issues/240)
+ // Emit control characters as-is, instead of representing them as e.g. "^J" (for '\n').
+ // `rawPrint` is package protected in jline.console.ConsoleReader, while `rawPrintln` is private
+ // Copy/paste part of it as `_rawPrint` (to avoid name clash);
+ // the super class impl also sets `cursorOk`, but that's out of reach for us.
+ private def _rawPrint(str: String) = getOutput.write(str)
+ private def rawPrintln(str: String) = { _rawPrint(str); println() }
+
private def printColumns_(items: List[String]): Unit = if (items exists (_ != "")) {
val grouped = tabulate(items)
var linesLeft = if (isPaginationEnabled()) height - 1 else Int.MaxValue
grouped foreach { xs =>
- println(xs.mkString)
+ rawPrintln(xs.mkString)
linesLeft -= 1
if (linesLeft <= 0) {
linesLeft = emulateMore()
@@ -106,7 +117,7 @@ private class JLineConsoleReader extends jconsole.ConsoleReader with interpreter
}
def readOneKey(prompt: String) = {
- this.print(prompt)
+ _rawPrint(prompt)
this.flush()
this.readCharacter()
}
diff --git a/src/repl/scala/tools/nsc/MainGenericRunner.scala b/src/repl/scala/tools/nsc/MainGenericRunner.scala
index a09e797e07..894157ff6c 100644
--- a/src/repl/scala/tools/nsc/MainGenericRunner.scala
+++ b/src/repl/scala/tools/nsc/MainGenericRunner.scala
@@ -49,10 +49,6 @@ class MainGenericRunner {
def isI = !settings.loadfiles.isDefault
def dashi = settings.loadfiles.value
- // Deadlocks on startup under -i unless we disable async.
- if (isI)
- settings.Yreplsync.value = true
-
def combinedCode = {
val files = if (isI) dashi map (file => File(file).slurp()) else Nil
val str = if (isE) List(dashe) else Nil
@@ -98,7 +94,7 @@ class MainGenericRunner {
if (!command.ok)
errorFn(f"%n$shortUsageMsg")
else if (shouldStopWithInfo)
- errorFn(command getInfoMessage sampleCompiler, isFailure = false)
+ errorFn(command.getInfoMessage(sampleCompiler), isFailure = false)
else
run()
}
diff --git a/src/repl/scala/tools/nsc/interpreter/IMain.scala b/src/repl/scala/tools/nsc/interpreter/IMain.scala
index 44784aa953..65f2c95f73 100644
--- a/src/repl/scala/tools/nsc/interpreter/IMain.scala
+++ b/src/repl/scala/tools/nsc/interpreter/IMain.scala
@@ -1203,7 +1203,7 @@ class IMain(initialSettings: Settings, protected val out: JPrintWriter) extends
/** Utility methods for the Interpreter. */
object IMain {
- /** Dummy identifier fragement inserted at the cursor before presentation compilation. Needed to support completion of `global.def<TAB>` */
+ /** Dummy identifier fragment inserted at the cursor before presentation compilation. Needed to support completion of `global.def<TAB>` */
val DummyCursorFragment = "_CURSOR_"
// The two name forms this is catching are the two sides of this assignment:
diff --git a/test/benchmarks/project/plugins.sbt b/test/benchmarks/project/plugins.sbt
index e11aa29f3b..aa49ad9872 100644
--- a/test/benchmarks/project/plugins.sbt
+++ b/test/benchmarks/project/plugins.sbt
@@ -1,2 +1,2 @@
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
-addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.2.6")
+addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.2.16")
diff --git a/test/files/neg/t1960.check b/test/files/neg/t1960.check
index de0907b4a9..bb6d3d3548 100644
--- a/test/files/neg/t1960.check
+++ b/test/files/neg/t1960.check
@@ -1,4 +1,7 @@
-t1960.scala:5: error: parameter 'p' requires field but conflicts with variable p in trait TBase
-class Aclass (p: Int) extends TBase { def g() { f(p) } }
- ^
-one error found
+t1960.scala:2: error: parameter 'vr' requires field but conflicts with variable vr in trait T
+class C(vr: Int, vl: Int) extends T { def ref = vr + vl }
+ ^
+t1960.scala:2: error: parameter 'vl' requires field but conflicts with value vl in trait T
+class C(vr: Int, vl: Int) extends T { def ref = vr + vl }
+ ^
+two errors found
diff --git a/test/files/neg/t1960.scala b/test/files/neg/t1960.scala
index 5311940b5a..f4fdb341c6 100644
--- a/test/files/neg/t1960.scala
+++ b/test/files/neg/t1960.scala
@@ -1,5 +1,2 @@
-object ClassFormatErrorExample extends App { new Aclass(1) }
-
-trait TBase { var p:Int = 0; def f(p1: Int) {} }
-
-class Aclass (p: Int) extends TBase { def g() { f(p) } }
+trait T { var vr: Int = 0 ; val vl: Int = 0 }
+class C(vr: Int, vl: Int) extends T { def ref = vr + vl }
diff --git a/test/files/neg/t4749.check b/test/files/neg/t4749.check
index 6bd2550097..3539140954 100644
--- a/test/files/neg/t4749.check
+++ b/test/files/neg/t4749.check
@@ -26,7 +26,7 @@ t4749.scala:26: warning: Fail6 has a main method with parameter type Array[Strin
object Fail6 {
^
t4749.scala:42: warning: Win3 has a main method with parameter type Array[String], but bippy.Win3 will not be a runnable program.
- Reason: main methods cannot refer to type parameters or abstract types.
+ Reason: main method must have exact signature (Array[String])Unit
object Win3 extends WinBippy[Unit] { }
^
error: No warnings can be incurred under -Xfatal-warnings.
diff --git a/test/files/neg/t5148.check b/test/files/neg/t5148.check
new file mode 100644
index 0000000000..1f58c235ce
--- /dev/null
+++ b/test/files/neg/t5148.check
@@ -0,0 +1,16 @@
+error: missing or invalid dependency detected while loading class file 'Imports.class'.
+Could not access term memberHandlers in class scala.tools.nsc.interpreter.IMain,
+because it (or its dependencies) are missing. Check your build definition for
+missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
+A full rebuild may help if 'Imports.class' was compiled against an incompatible version of scala.tools.nsc.interpreter.IMain.
+error: missing or invalid dependency detected while loading class file 'Imports.class'.
+Could not access type Wrapper in class scala.tools.nsc.interpreter.IMain.Request,
+because it (or its dependencies) are missing. Check your build definition for
+missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
+A full rebuild may help if 'Imports.class' was compiled against an incompatible version of scala.tools.nsc.interpreter.IMain.Request.
+error: missing or invalid dependency detected while loading class file 'Imports.class'.
+Could not access type Request in class scala.tools.nsc.interpreter.IMain,
+because it (or its dependencies) are missing. Check your build definition for
+missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
+A full rebuild may help if 'Imports.class' was compiled against an incompatible version of scala.tools.nsc.interpreter.IMain.
+three errors found
diff --git a/test/files/pos/t5148.scala b/test/files/neg/t5148.scala
index fca64e57df..fca64e57df 100644
--- a/test/files/pos/t5148.scala
+++ b/test/files/neg/t5148.scala
diff --git a/test/files/neg/t6446-additional.check b/test/files/neg/t6446-additional.check
index 23df978cd9..9d4af37b98 100644
--- a/test/files/neg/t6446-additional.check
+++ b/test/files/neg/t6446-additional.check
@@ -10,7 +10,7 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- fields 11 synthesize accessors and fields, including bitmaps for la...
+ fields 11 synthesize accessors and fields, add bitmaps for lazy vals
tailcalls 12 replace tail calls by jumps
specialize 13 @specialized-driven class and method specialization
explicitouter 14 this refs to outer pointers
diff --git a/test/files/neg/t6446-missing.check b/test/files/neg/t6446-missing.check
index c0a8fea140..65b5e5dc09 100644
--- a/test/files/neg/t6446-missing.check
+++ b/test/files/neg/t6446-missing.check
@@ -11,7 +11,7 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- fields 11 synthesize accessors and fields, including bitmaps for la...
+ fields 11 synthesize accessors and fields, add bitmaps for lazy vals
tailcalls 12 replace tail calls by jumps
specialize 13 @specialized-driven class and method specialization
explicitouter 14 this refs to outer pointers
diff --git a/test/files/neg/t6446-show-phases.check b/test/files/neg/t6446-show-phases.check
index cf8595db5d..373f63e5b2 100644
--- a/test/files/neg/t6446-show-phases.check
+++ b/test/files/neg/t6446-show-phases.check
@@ -10,7 +10,7 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- fields 11 synthesize accessors and fields, including bitmaps for la...
+ fields 11 synthesize accessors and fields, add bitmaps for lazy vals
tailcalls 12 replace tail calls by jumps
specialize 13 @specialized-driven class and method specialization
explicitouter 14 this refs to outer pointers
diff --git a/test/files/neg/t7494-no-options.check b/test/files/neg/t7494-no-options.check
index 138d2fe9a3..1bf5c23711 100644
--- a/test/files/neg/t7494-no-options.check
+++ b/test/files/neg/t7494-no-options.check
@@ -11,7 +11,7 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- fields 11 synthesize accessors and fields, including bitmaps for la...
+ fields 11 synthesize accessors and fields, add bitmaps for lazy vals
tailcalls 12 replace tail calls by jumps
specialize 13 @specialized-driven class and method specialization
explicitouter 14 this refs to outer pointers
diff --git a/test/files/pos/issue244.scala b/test/files/pos/issue244.scala
new file mode 100644
index 0000000000..f9189c9313
--- /dev/null
+++ b/test/files/pos/issue244.scala
@@ -0,0 +1,2 @@
+trait T { lazy val overloaded: String = "a" }
+class C extends T { def overloaded(a: String): String = "b" }
diff --git a/test/files/pos/sd219.scala b/test/files/pos/sd219.scala
new file mode 100644
index 0000000000..3c3f4962f0
--- /dev/null
+++ b/test/files/pos/sd219.scala
@@ -0,0 +1,11 @@
+class Global { class Name }
+
+trait CommonPrintUtils {
+ val global: Global
+
+ lazy val precedence: global.Name => Int = ???
+}
+
+trait CompilerProvider { val global: Global = ??? }
+
+class AbstractPrinter extends CommonPrintUtils with CompilerProvider \ No newline at end of file
diff --git a/test/files/pos/shapeless-regression.scala b/test/files/pos/shapeless-regression.scala
new file mode 100644
index 0000000000..f3a1ed1ba0
--- /dev/null
+++ b/test/files/pos/shapeless-regression.scala
@@ -0,0 +1,16 @@
+class W[T <: AnyRef](val t: T) {
+ val v: T {} = t
+}
+
+object W {
+ def apply[T <: AnyRef](t: T) = new W[t.type](t)
+}
+
+object RightAssoc {
+ def ra_:[T](t: T): Unit = ()
+}
+
+object Boom {
+ W("fooo").v ra_: RightAssoc
+}
+
diff --git a/test/files/pos/t9020.scala b/test/files/pos/t9020.scala
index 16e31e2572..c77a63cb1a 100644
--- a/test/files/pos/t9020.scala
+++ b/test/files/pos/t9020.scala
@@ -8,3 +8,9 @@ test/files/pos/t9020.scala:2: warning: discarded non-Unit value
^
one warning found
*/
+
+trait DiscardThis {
+ import collection.mutable.ListBuffer
+ val b = ListBuffer.empty[String]
+ def add(s: String): Unit = b += s
+}
diff --git a/test/files/pos/t9918/package.scala b/test/files/pos/t9918/package.scala
new file mode 100644
index 0000000000..9bd8ac9a69
--- /dev/null
+++ b/test/files/pos/t9918/package.scala
@@ -0,0 +1 @@
+package object pkg extends T
diff --git a/test/files/pos/t9918/t9918.scala b/test/files/pos/t9918/t9918.scala
new file mode 100644
index 0000000000..ec9a146579
--- /dev/null
+++ b/test/files/pos/t9918/t9918.scala
@@ -0,0 +1,3 @@
+package pkg
+
+trait T { object O }
diff --git a/test/files/pos/t9920.scala b/test/files/pos/t9920.scala
new file mode 100644
index 0000000000..8612618cc4
--- /dev/null
+++ b/test/files/pos/t9920.scala
@@ -0,0 +1,6 @@
+object Test {
+ def o = {
+ def i: Int = { i; 0 }
+ i
+ }
+}
diff --git a/test/files/pos/t9943.scala b/test/files/pos/t9943.scala
new file mode 100644
index 0000000000..0d4717ccbb
--- /dev/null
+++ b/test/files/pos/t9943.scala
@@ -0,0 +1,9 @@
+class Foo[T] {
+ def toMap[K, V](implicit ev: Foo[T] <:< Foo[(K, V)]): Foo[Map[K, V]] = null
+ def toMap[K](keySelector: T => K): Foo[Map[K, T]] = null
+}
+
+object Foo {
+ (??? : Foo[Int]) toMap (_ % 2)
+ (??? : Foo[(Int, String)]).toMap
+}
diff --git a/test/files/presentation/t8085.check b/test/files/presentation/t8085.check
index 921ca7528b..0e85de45f9 100644
--- a/test/files/presentation/t8085.check
+++ b/test/files/presentation/t8085.check
@@ -1,3 +1,2 @@
reload: NodeScalaSuite.scala
-open package module: package object nodescala
Test OK
diff --git a/test/files/presentation/t8085b.check b/test/files/presentation/t8085b.check
index 921ca7528b..0e85de45f9 100644
--- a/test/files/presentation/t8085b.check
+++ b/test/files/presentation/t8085b.check
@@ -1,3 +1,2 @@
reload: NodeScalaSuite.scala
-open package module: package object nodescala
Test OK
diff --git a/test/files/run/SD-235.scala b/test/files/run/SD-235.scala
new file mode 100644
index 0000000000..eb79c6fe71
--- /dev/null
+++ b/test/files/run/SD-235.scala
@@ -0,0 +1,39 @@
+class C {
+ var ORef: Object = null
+ def test = {
+ object O {
+ assert(!Thread.holdsLock(C.this))
+ assert(Thread.holdsLock(ORef))
+ }
+ val captor = new { def oh = O }
+ val refField = captor.getClass.getDeclaredFields.last
+ refField.setAccessible(true)
+ assert(refField.getType.toString.contains("LazyRef"), refField)
+ ORef = refField.get(captor)
+ O
+ }
+}
+
+class D {
+ var ORef: Object = null
+ def test = {
+ lazy val O = {
+ assert(!Thread.holdsLock(D.this))
+ assert(Thread.holdsLock(ORef))
+ "O"
+ }
+ val captor = new { def oh = O }
+ val refField = captor.getClass.getDeclaredFields.last
+ refField.setAccessible(true)
+ assert(refField.getType.toString.contains("LazyRef"), refField)
+ ORef = refField.get(captor)
+ O
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ new C().test
+ new D().test
+ }
+}
diff --git a/test/files/run/delambdafy_t6028.check b/test/files/run/delambdafy_t6028.check
index eaba70ee1a..86cb1d5e97 100644
--- a/test/files/run/delambdafy_t6028.check
+++ b/test/files/run/delambdafy_t6028.check
@@ -15,7 +15,7 @@ package <empty> {
}
};
def bar(barParam: String): Object = {
- @volatile var MethodLocalObject$module: runtime.VolatileObjectRef = scala.runtime.VolatileObjectRef.zero();
+ lazy <artifact> val MethodLocalObject$module: scala.runtime.LazyRef = new scala.runtime.LazyRef();
T.this.MethodLocalObject$1(barParam, MethodLocalObject$module)
};
def tryy(tryyParam: String): Function0 = {
@@ -42,12 +42,14 @@ package <empty> {
<synthetic> <stable> <artifact> def $outer(): T = MethodLocalObject$2.this.$outer;
<synthetic> <stable> <artifact> def $outer(): T = MethodLocalObject$2.this.$outer
};
- final <stable> private[this] def MethodLocalObject$1(barParam$1: String, MethodLocalObject$module$1: runtime.VolatileObjectRef): T#MethodLocalObject$2.type = {
- if (MethodLocalObject$module$1.elem.$asInstanceOf[T#MethodLocalObject$2.type]().eq(null))
- T.this.synchronized[Unit](if (MethodLocalObject$module$1.elem.$asInstanceOf[T#MethodLocalObject$2.type]().eq(null))
- MethodLocalObject$module$1.elem = new T#MethodLocalObject$2.type(T.this, barParam$1));
- MethodLocalObject$module$1.elem.$asInstanceOf[T#MethodLocalObject$2.type]()
- };
+ final <artifact> private[this] def MethodLocalObject$lzycompute$1(barParam$1: String, MethodLocalObject$module$1: scala.runtime.LazyRef): T#MethodLocalObject$2.type = MethodLocalObject$module$1.synchronized[T#MethodLocalObject$2.type](if (MethodLocalObject$module$1.initialized())
+ MethodLocalObject$module$1.value().$asInstanceOf[T#MethodLocalObject$2.type]()
+ else
+ MethodLocalObject$module$1.initialize(new T#MethodLocalObject$2.type(T.this, barParam$1)).$asInstanceOf[T#MethodLocalObject$2.type]());
+ final private[this] def MethodLocalObject$1(barParam$1: String, MethodLocalObject$module$1: scala.runtime.LazyRef): T#MethodLocalObject$2.type = if (MethodLocalObject$module$1.initialized())
+ MethodLocalObject$module$1.value().$asInstanceOf[T#MethodLocalObject$2.type]()
+ else
+ T.this.MethodLocalObject$lzycompute$1(barParam$1, MethodLocalObject$module$1);
final <artifact> private[this] def $anonfun$tryy$1(tryyParam$1: String, tryyLocal$1: runtime.ObjectRef): Unit = try {
tryyLocal$1.elem = tryyParam$1
} finally ()
diff --git a/test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala b/test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala
index cb8719a235..eaafbf08e1 100644
--- a/test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala
+++ b/test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala
@@ -24,8 +24,8 @@ object Macro {
import c.universe._
pat match {
case l @ Literal(Constant(pat: String)) =>
- val boostrapSym = typeOf[test.Bootstrap].companion.member(TermName("bootstrap"))
- Indy(boostrapSym, l :: Nil, text :: Nil)
+ val bootstrapSym = typeOf[test.Bootstrap].companion.member(TermName("bootstrap"))
+ Indy(bootstrapSym, l :: Nil, text :: Nil)
case _ =>
q"_root_.java.util.regex.Pattern.compile($pat).matcher($text)"
}
diff --git a/test/files/run/indy-via-macro/macro_1.scala b/test/files/run/indy-via-macro/macro_1.scala
index 66e319e262..26daad7deb 100644
--- a/test/files/run/indy-via-macro/macro_1.scala
+++ b/test/files/run/indy-via-macro/macro_1.scala
@@ -23,8 +23,8 @@ object Macro {
import c.universe._
s match {
case l @ Literal(Constant(s: String)) =>
- val boostrapSym = typeOf[test.Bootstrap].companion.member(TermName("bootstrap"))
- Indy(boostrapSym, l :: Nil)
+ val bootstrapSym = typeOf[test.Bootstrap].companion.member(TermName("bootstrap"))
+ Indy(bootstrapSym, l :: Nil)
case _ =>
q"_root_.java.util.regex.Pattern.compile($s)"
}
diff --git a/test/files/run/local_obj.scala b/test/files/run/local_obj.scala
new file mode 100644
index 0000000000..25123f7078
--- /dev/null
+++ b/test/files/run/local_obj.scala
@@ -0,0 +1,9 @@
+class C {
+ val z = 2
+ def mod = { object x { val y = z } ; x.y }
+}
+
+object Test extends App {
+ val c = new C
+ assert(c.mod == c.z, s"${c.mod} != ${c.z}")
+}
diff --git a/test/files/run/mixin-signatures.check b/test/files/run/mixin-signatures.check
index 9961992e2d..77bff79ac8 100644
--- a/test/files/run/mixin-signatures.check
+++ b/test/files/run/mixin-signatures.check
@@ -1,23 +1,19 @@
class Test$bar1$ {
- public default java.lang.String Foo1.f(java.lang.Object)
- generic: public default java.lang.String Foo1.f(T)
+ public java.lang.String Test$bar1$.f(java.lang.Object)
public java.lang.Object Test$bar1$.f(java.lang.Object) <bridge> <synthetic>
public java.lang.String Test$bar1$.g(java.lang.String)
public java.lang.Object Test$bar1$.g(java.lang.Object) <bridge> <synthetic>
public java.lang.String Test$bar1$.g(java.lang.Object) <bridge> <synthetic>
- public default java.lang.Object Base.h(java.lang.Object)
- generic: public default R Base.h(T)
+ public java.lang.Object Test$bar1$.h(java.lang.Object)
}
class Test$bar2$ {
- public default java.lang.Object Foo2.f(java.lang.String)
- generic: public default R Foo2.f(java.lang.String)
+ public java.lang.Object Test$bar2$.f(java.lang.String)
public java.lang.Object Test$bar2$.f(java.lang.Object) <bridge> <synthetic>
public java.lang.String Test$bar2$.g(java.lang.String)
public java.lang.Object Test$bar2$.g(java.lang.Object) <bridge> <synthetic>
public java.lang.Object Test$bar2$.g(java.lang.String) <bridge> <synthetic>
- public default java.lang.Object Base.h(java.lang.Object)
- generic: public default R Base.h(T)
+ public java.lang.Object Test$bar2$.h(java.lang.Object)
}
class Test$bar3$ {
@@ -27,8 +23,7 @@ class Test$bar3$ {
public java.lang.String Test$bar3$.g(java.lang.String)
public java.lang.Object Test$bar3$.g(java.lang.Object) <bridge> <synthetic>
public java.lang.String Test$bar3$.g(java.lang.Object) <bridge> <synthetic>
- public default java.lang.Object Base.h(java.lang.Object)
- generic: public default R Base.h(T)
+ public java.lang.Object Foo3.h(java.lang.Object)
}
class Test$bar4$ {
@@ -38,8 +33,7 @@ class Test$bar4$ {
public java.lang.String Test$bar4$.g(java.lang.String)
public java.lang.Object Test$bar4$.g(java.lang.Object) <bridge> <synthetic>
public java.lang.Object Test$bar4$.g(java.lang.String) <bridge> <synthetic>
- public default java.lang.Object Base.h(java.lang.Object)
- generic: public default R Base.h(T)
+ public java.lang.Object Foo4.h(java.lang.Object)
}
class Test$bar5$ {
@@ -51,8 +45,7 @@ class Test$bar5$ {
public java.lang.Object Test$bar5$.g(java.lang.Object) <bridge> <synthetic>
public java.lang.Object Test$bar5$.g(java.lang.String) <bridge> <synthetic>
public java.lang.String Test$bar5$.g(java.lang.Object) <bridge> <synthetic>
- public default java.lang.Object Base.h(java.lang.Object)
- generic: public default R Base.h(T)
+ public java.lang.Object Test$bar5$.h(java.lang.Object)
}
interface Foo1 {
diff --git a/test/files/run/programmatic-main.check b/test/files/run/programmatic-main.check
index cf8595db5d..373f63e5b2 100644
--- a/test/files/run/programmatic-main.check
+++ b/test/files/run/programmatic-main.check
@@ -10,7 +10,7 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- fields 11 synthesize accessors and fields, including bitmaps for la...
+ fields 11 synthesize accessors and fields, add bitmaps for lazy vals
tailcalls 12 replace tail calls by jumps
specialize 13 @specialized-driven class and method specialization
explicitouter 14 this refs to outer pointers
diff --git a/test/files/run/sd242.scala b/test/files/run/sd242.scala
new file mode 100644
index 0000000000..acd51ec893
--- /dev/null
+++ b/test/files/run/sd242.scala
@@ -0,0 +1,13 @@
+trait T {
+ def test: Unit = {
+ byName("".toString)
+ ()
+ }
+
+ @inline
+ final def byName(action: => Unit) = action
+}
+
+object Test extends App {
+ (new T {}).test
+}
diff --git a/test/files/run/t5293-map.scala b/test/files/run/t5293-map.scala
deleted file mode 100644
index ad1bbcfe30..0000000000
--- a/test/files/run/t5293-map.scala
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-import scala.collection.JavaConverters._
-
-
-
-object Test extends App {
-
- def bench(label: String)(body: => Unit): Long = {
- val start = System.nanoTime
-
- 0.until(10).foreach(_ => body)
-
- val end = System.nanoTime
-
- //println("%s: %s ms".format(label, (end - start) / 1000.0 / 1000.0))
-
- end - start
- }
-
- def benchJava(values: java.util.Map[Int, Int]) = {
- bench("Java Map") {
- val m = new java.util.HashMap[Int, Int]
-
- m.putAll(values)
- }
- }
-
- def benchScala(values: Iterable[(Int, Int)]) = {
- bench("Scala Map") {
- val m = new scala.collection.mutable.HashMap[Int, Int]
-
- m ++= values
- }
- }
-
- def benchScalaSorted(values: Iterable[(Int, Int)]) = {
- bench("Scala Map sorted") {
- val m = new scala.collection.mutable.HashMap[Int, Int]
-
- m ++= values.toArray.sorted
- }
- }
-
- def benchScalaPar(values: Iterable[(Int, Int)]) = {
- bench("Scala ParMap") {
- val m = new scala.collection.parallel.mutable.ParHashMap[Int, Int] map { x => x }
-
- m ++= values
- }
- }
-
- val total = 50000
- val values = (0 until total) zip (0 until total)
- val map = scala.collection.mutable.HashMap.empty[Int, Int]
-
- map ++= values
-
- // warmup
- for (x <- 0 until 5) {
- benchJava(map.asJava)
- benchScala(map)
- benchScalaPar(map)
- benchJava(map.asJava)
- benchScala(map)
- benchScalaPar(map)
- }
-
- val javamap = benchJava(map.asJava)
- val scalamap = benchScala(map)
- val scalaparmap = benchScalaPar(map)
-
- // println(javamap)
- // println(scalamap)
- // println(scalaparmap)
-
- assert(scalamap < (javamap * 10), "scalamap: " + scalamap + " vs. javamap: " + javamap)
- assert(scalaparmap < (javamap * 10), "scalaparmap: " + scalaparmap + " vs. javamap: " + javamap)
-}
-
-
-
-
-
-
-
-
diff --git a/test/files/run/t5293.scala b/test/files/run/t5293.scala
deleted file mode 100644
index c42c967b42..0000000000
--- a/test/files/run/t5293.scala
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-import scala.collection.JavaConverters._
-
-
-
-object Test extends App {
-
- def bench(label: String)(body: => Unit): Long = {
- val start = System.nanoTime
-
- 0.until(10).foreach(_ => body)
-
- val end = System.nanoTime
-
- //println("%s: %s ms".format(label, (end - start) / 1000.0 / 1000.0))
-
- end - start
- }
-
- def benchJava(values: java.util.Collection[Int]) = {
- bench("Java Set") {
- val set = new java.util.HashSet[Int]
-
- set.addAll(values)
- }
- }
-
- def benchScala(values: Iterable[Int]) = {
- bench("Scala Set") {
- val set = new scala.collection.mutable.HashSet[Int]
-
- set ++= values
- }
- }
-
- def benchScalaSorted(values: Iterable[Int]) = {
- bench("Scala Set sorted") {
- val set = new scala.collection.mutable.HashSet[Int]
-
- set ++= values.toArray.sorted
- }
- }
-
- def benchScalaPar(values: Iterable[Int]) = {
- bench("Scala ParSet") {
- val set = new scala.collection.parallel.mutable.ParHashSet[Int] map { x => x }
-
- set ++= values
- }
- }
-
- val values = 0 until 50000
- val set = scala.collection.mutable.HashSet.empty[Int]
-
- set ++= values
-
- // warmup
- for (x <- 0 until 5) {
- benchJava(set.asJava)
- benchScala(set)
- benchScalaPar(set)
- benchJava(set.asJava)
- benchScala(set)
- benchScalaPar(set)
- }
-
- val javaset = benchJava(set.asJava)
- val scalaset = benchScala(set)
- val scalaparset = benchScalaPar(set)
-
- assert(scalaset < (javaset * 8), "scalaset: " + scalaset + " vs. javaset: " + javaset)
- assert(scalaparset < (javaset * 8), "scalaparset: " + scalaparset + " vs. javaset: " + javaset)
-}
-
-
-
-
-
-
-
-
diff --git a/test/files/run/t5652.check b/test/files/run/t5652.check
index 3c039d68aa..1acd924c68 100644
--- a/test/files/run/t5652.check
+++ b/test/files/run/t5652.check
@@ -4,5 +4,6 @@ public static int T1.f0$(T1)
public static void T1.$init$(T1)
public int A1.f1()
public static final int A1.A1$$g$2()
+public int A2.f0()
public int A2.f2()
public static final int A2.A2$$g$1()
diff --git a/test/files/run/t6028.check b/test/files/run/t6028.check
index d6cc452bbf..05634fa8eb 100644
--- a/test/files/run/t6028.check
+++ b/test/files/run/t6028.check
@@ -15,7 +15,7 @@ package <empty> {
}
};
def bar(barParam: Int): Object = {
- @volatile var MethodLocalObject$module: runtime.VolatileObjectRef = scala.runtime.VolatileObjectRef.zero();
+ lazy <artifact> val MethodLocalObject$module: scala.runtime.LazyRef = new scala.runtime.LazyRef();
T.this.MethodLocalObject$1(barParam, MethodLocalObject$module)
};
def tryy(tryyParam: Int): Function0 = {
@@ -54,12 +54,14 @@ package <empty> {
<synthetic> <stable> <artifact> def $outer(): T = MethodLocalObject$2.this.$outer;
<synthetic> <stable> <artifact> def $outer(): T = MethodLocalObject$2.this.$outer
};
- final <stable> private[this] def MethodLocalObject$1(barParam$1: Int, MethodLocalObject$module$1: runtime.VolatileObjectRef): T#MethodLocalObject$2.type = {
- if (MethodLocalObject$module$1.elem.$asInstanceOf[T#MethodLocalObject$2.type]().eq(null))
- T.this.synchronized[Unit](if (MethodLocalObject$module$1.elem.$asInstanceOf[T#MethodLocalObject$2.type]().eq(null))
- MethodLocalObject$module$1.elem = new T#MethodLocalObject$2.type(T.this, barParam$1));
- MethodLocalObject$module$1.elem.$asInstanceOf[T#MethodLocalObject$2.type]()
- };
+ final <artifact> private[this] def MethodLocalObject$lzycompute$1(barParam$1: Int, MethodLocalObject$module$1: scala.runtime.LazyRef): T#MethodLocalObject$2.type = MethodLocalObject$module$1.synchronized[T#MethodLocalObject$2.type](if (MethodLocalObject$module$1.initialized())
+ MethodLocalObject$module$1.value().$asInstanceOf[T#MethodLocalObject$2.type]()
+ else
+ MethodLocalObject$module$1.initialize(new T#MethodLocalObject$2.type(T.this, barParam$1)).$asInstanceOf[T#MethodLocalObject$2.type]());
+ final private[this] def MethodLocalObject$1(barParam$1: Int, MethodLocalObject$module$1: scala.runtime.LazyRef): T#MethodLocalObject$2.type = if (MethodLocalObject$module$1.initialized())
+ MethodLocalObject$module$1.value().$asInstanceOf[T#MethodLocalObject$2.type]()
+ else
+ T.this.MethodLocalObject$lzycompute$1(barParam$1, MethodLocalObject$module$1);
@SerialVersionUID(value = 0) final <synthetic> class $anonfun$tryy$1 extends scala.runtime.AbstractFunction0$mcV$sp with Serializable {
def <init>($outer: T, tryyParam$1: Int, tryyLocal$1: runtime.IntRef): <$anon: Function0> = {
$anonfun$tryy$1.super.<init>();
diff --git a/test/files/run/t8549.scala b/test/files/run/t8549.scala
index d13743feb1..7ec3635ab6 100644
--- a/test/files/run/t8549.scala
+++ b/test/files/run/t8549.scala
@@ -79,7 +79,7 @@ object Test extends App {
}
}
- // Generated on 20160720-18:56:11 with Scala version 2.12.0-local-5815f9a)
+ // Generated on 20160930-16:09:23 with Scala version 2.12.0-local-ffc8e3e)
overwrite.foreach(updateComment)
check(Some(1))("rO0ABXNyAApzY2FsYS5Tb21lESLyaV6hi3QCAAFMAAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hyAAxzY2FsYS5PcHRpb27+aTf92w5mdAIAAHhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAE=")
@@ -95,10 +95,10 @@ object Test extends App {
import collection.{ mutable, immutable }
class C
- check(reflect.classTag[C])("rO0ABXNyACZzY2FsYS5yZWZsZWN0LkNsYXNzVGFnJEdlbmVyaWNDbGFzc1RhZy5VPJBpc7h/AgABTAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzczt4cHZyAAZUZXN0JEMAAAAAAAAAAAAAAHhw")
- check(reflect.classTag[Int])("rO0ABXNyAClzY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSRJbnRNYW5pZmVzdFbjh2PQL01qAgAAeHIAHHNjYWxhLnJlZmxlY3QuQW55VmFsTWFuaWZlc3QAAAAAAAAAAQIAAUwACHRvU3RyaW5ndAASTGphdmEvbGFuZy9TdHJpbmc7eHB0AANJbnQ=")
- check(reflect.classTag[String])("rO0ABXNyACZzY2FsYS5yZWZsZWN0LkNsYXNzVGFnJEdlbmVyaWNDbGFzc1RhZy5VPJBpc7h/AgABTAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzczt4cHZyABBqYXZhLmxhbmcuU3RyaW5noPCkOHo7s0ICAAB4cA==")
- check(reflect.classTag[Object])("rO0ABXNyACxzY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSRPYmplY3RNYW5pZmVzdIWY9dplxtUqAgAAeHIALXNjYWxhLnJlZmxlY3QuTWFuaWZlc3RGYWN0b3J5JFBoYW50b21NYW5pZmVzdK84oD+ykYf5AgABTAAIdG9TdHJpbmd0ABJMamF2YS9sYW5nL1N0cmluZzt4cgAvc2NhbGEucmVmbGVjdC5NYW5pZmVzdEZhY3RvcnkkQ2xhc3NUeXBlTWFuaWZlc3TQb2e0Lu/6HQIAA0wABnByZWZpeHQADkxzY2FsYS9PcHRpb247TAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzcztMAA10eXBlQXJndW1lbnRzdAAhTHNjYWxhL2NvbGxlY3Rpb24vaW1tdXRhYmxlL0xpc3Q7eHBzcgALc2NhbGEuTm9uZSRGUCT2U8qUrAIAAHhyAAxzY2FsYS5PcHRpb27+aTf92w5mdAIAAHhwdnIAEGphdmEubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwc3IAMnNjYWxhLmNvbGxlY3Rpb24uaW1tdXRhYmxlLkxpc3QkU2VyaWFsaXphdGlvblByb3h5AAAAAAAAAAEDAAB4cHNyACxzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0U2VyaWFsaXplRW5kJIpcY1v3UwttAgAAeHB4dAAGT2JqZWN0")
+ check(reflect.classTag[C])("rO0ABXNyACZzY2FsYS5yZWZsZWN0LkNsYXNzVGFnJEdlbmVyaWNDbGFzc1RhZwAAAAAAAAABAgABTAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzczt4cHZyAAZUZXN0JEMAAAAAAAAAAAAAAHhw")
+ check(reflect.classTag[Int])("rO0ABXNyAClzY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSRJbnRNYW5pZmVzdAAAAAAAAAABAgAAeHIAHHNjYWxhLnJlZmxlY3QuQW55VmFsTWFuaWZlc3QAAAAAAAAAAQIAAUwACHRvU3RyaW5ndAASTGphdmEvbGFuZy9TdHJpbmc7eHB0AANJbnQ=")
+ check(reflect.classTag[String])("rO0ABXNyACZzY2FsYS5yZWZsZWN0LkNsYXNzVGFnJEdlbmVyaWNDbGFzc1RhZwAAAAAAAAABAgABTAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzczt4cHZyABBqYXZhLmxhbmcuU3RyaW5noPCkOHo7s0ICAAB4cA==")
+ check(reflect.classTag[Object])("rO0ABXNyACxzY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSRPYmplY3RNYW5pZmVzdAAAAAAAAAABAgAAeHIALXNjYWxhLnJlZmxlY3QuTWFuaWZlc3RGYWN0b3J5JFBoYW50b21NYW5pZmVzdAAAAAAAAAABAgABTAAIdG9TdHJpbmd0ABJMamF2YS9sYW5nL1N0cmluZzt4cgAvc2NhbGEucmVmbGVjdC5NYW5pZmVzdEZhY3RvcnkkQ2xhc3NUeXBlTWFuaWZlc3QAAAAAAAAAAQIAA0wABnByZWZpeHQADkxzY2FsYS9PcHRpb247TAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzcztMAA10eXBlQXJndW1lbnRzdAAhTHNjYWxhL2NvbGxlY3Rpb24vaW1tdXRhYmxlL0xpc3Q7eHBzcgALc2NhbGEuTm9uZSRGUCT2U8qUrAIAAHhyAAxzY2FsYS5PcHRpb27+aTf92w5mdAIAAHhwdnIAEGphdmEubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwc3IAMnNjYWxhLmNvbGxlY3Rpb24uaW1tdXRhYmxlLkxpc3QkU2VyaWFsaXphdGlvblByb3h5AAAAAAAAAAEDAAB4cHNyACxzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0U2VyaWFsaXplRW5kJIpcY1v3UwttAgAAeHB4dAAGT2JqZWN0")
// TODO SI-8576 unstable under -Xcheckinit
// check(Enum)( "rO0ABXNyAApUZXN0JEVudW0ketCIyQ8C23MCAAJMAAJWMXQAGUxzY2FsYS9FbnVtZXJhdGlvbiRWYWx1ZTtMAAJWMnQAF0xzY2FsYS9FbnVtZXJhdGlvbiRWYWw7eHIAEXNjYWxhLkVudW1lcmF0aW9udaDN3ZgOWY4CAAhJAAZuZXh0SWRJABtzY2FsYSRFbnVtZXJhdGlvbiQkYm90dG9tSWRJABhzY2FsYSRFbnVtZXJhdGlvbiQkdG9wSWRMABRWYWx1ZU9yZGVyaW5nJG1vZHVsZXQAIkxzY2FsYS9FbnVtZXJhdGlvbiRWYWx1ZU9yZGVyaW5nJDtMAA9WYWx1ZVNldCRtb2R1bGV0AB1Mc2NhbGEvRW51bWVyYXRpb24kVmFsdWVTZXQkO0wACG5leHROYW1ldAAbTHNjYWxhL2NvbGxlY3Rpb24vSXRlcmF0b3I7TAAXc2NhbGEkRW51bWVyYXRpb24kJG5tYXB0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL01hcDtMABdzY2FsYSRFbnVtZXJhdGlvbiQkdm1hcHEAfgAHeHAAAAArAAAAAAAAACtwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hNYXAAAAAAAAAAAQMAAHhwdw0AAALuAAAAAAAAAAQAeHNxAH4ACXcNAAAC7gAAAAEAAAAEAHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAqc3IAFXNjYWxhLkVudW1lcmF0aW9uJFZhbM9pZ6/J/O1PAgACSQAYc2NhbGEkRW51bWVyYXRpb24kVmFsJCRpTAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hyABdzY2FsYS5FbnVtZXJhdGlvbiRWYWx1ZWJpfC/tIR1RAgACTAAGJG91dGVydAATTHNjYWxhL0VudW1lcmF0aW9uO0wAHHNjYWxhJEVudW1lcmF0aW9uJCRvdXRlckVudW1xAH4AEnhwcQB+AAhxAH4ACAAAACpweHNyABFUZXN0JEVudW0kJGFub24kMVlIjlmE1sXaAgAAeHEAfgARcQB+AAhxAH4ACHEAfgAT")
@@ -163,7 +163,7 @@ object Test extends App {
// TODO SI-8576 Uninitialized field: IndexedSeqLike.scala: 56
// check(immutable.Stream(1, 2, 3))( "rO0ABXNyACZzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TdHJlYW0kQ29uc/ekjBXM3TlFAgADTAACaGR0ABJMamF2YS9sYW5nL09iamVjdDtMAAV0bEdlbnQAEUxzY2FsYS9GdW5jdGlvbjA7TAAFdGxWYWx0ACNMc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvU3RyZWFtO3hyACFzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TdHJlYW0552RDntM42gIAAHhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcgAtc2NhbGEuY29sbGVjdGlvbi5JdGVyYXRvciQkYW5vbmZ1biR0b1N0cmVhbSQxRWR4We0SX0UCAAFMAAYkb3V0ZXJ0ABtMc2NhbGEvY29sbGVjdGlvbi9JdGVyYXRvcjt4cHNyAChzY2FsYS5jb2xsZWN0aW9uLkluZGV4ZWRTZXFMaWtlJEVsZW1lbnRzGF+1cBwmcx0CAANJAANlbmRJAAVpbmRleEwABiRvdXRlcnQAIUxzY2FsYS9jb2xsZWN0aW9uL0luZGV4ZWRTZXFMaWtlO3hwAAAAAwAAAAFzcgArc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLldyYXBwZWRBcnJheSRvZkludMmRLBcI15VjAgABWwAFYXJyYXl0AAJbSXhwdXIAAltJTbpgJnbqsqUCAAB4cAAAAAMAAAABAAAAAgAAAANw")
- check(immutable.TreeSet[Int]())( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5UcmVlU2V0sRdVIDjbWAsCAAJMAAhvcmRlcmluZ3QAFUxzY2FsYS9tYXRoL09yZGVyaW5nO0wABHRyZWV0AC5Mc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQkKTb4nP6aAqoCAAB4cHA=")
+ check(immutable.TreeSet[Int]())( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5UcmVlU2V0sRdVIDjbWAsCAAJMAAhvcmRlcmluZ3QAFUxzY2FsYS9tYXRoL09yZGVyaW5nO0wABHRyZWV0AC5Mc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHA=")
// TODO SI-8576 unstable under -Xcheckinit
// check(immutable.TreeSet(1, 2, 3))( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5UcmVlU2V0sRdVIDjbWAsCAAJMAAhvcmRlcmluZ3QAFUxzY2FsYS9tYXRoL09yZGVyaW5nO0wABHRyZWV0AC5Mc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQkC4BMdr1Z51wCAAB4cHNyADFzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5SZWRCbGFja1RyZWUkQmxhY2tUcmVlzRxnCKenVAECAAB4cgAsc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWVrqCSyHJbsMgIABUkABWNvdW50TAADa2V5dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEbGVmdHEAfgACTAAFcmlnaHRxAH4AAkwABXZhbHVlcQB+AAh4cAAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAnNxAH4ABgAAAAFzcQB+AAoAAAABcHBzcgAXc2NhbGEucnVudGltZS5Cb3hlZFVuaXR0pn1HHezLmgIAAHhwc3EAfgAGAAAAAXNxAH4ACgAAAANwcHEAfgAQcQB+ABA=")
@@ -179,12 +179,12 @@ object Test extends App {
check(mutable.HashMap())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAAAAAAABAB4")
check(mutable.HashMap(1 -> 1))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAABAAAABABzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXEAfgAEeA==")
check(mutable.HashSet(1, 2, 3))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaFNldAAAAAAAAAABAwAAeHB3DQAAAcIAAAADAAAABQBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAgAAAAJzcQB+AAIAAAADeA==")
- check(mutable.TreeMap[Int, Int]())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcNx8qC229ZvwAgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZU1hcCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQkKTb4nP6aAqoCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAABw")
- check(mutable.TreeMap(1 -> 1, 3 -> 6))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcNx8qC229ZvwAgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZU1hcCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQkKTb4nP6aAqoCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAAJzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSROb2RlGxHsFtValgACAAZaAANyZWRMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAARsZWZ0cQB+AAdMAAZwYXJlbnRxAH4AB0wABXJpZ2h0cQB+AAdMAAV2YWx1ZXEAfgAKeHAAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFwcHNxAH4ACQFzcQB+AAwAAAADcHEAfgALcHNxAH4ADAAAAAZxAH4ADg==")
- check(mutable.TreeMap(1 -> 1, 3 -> 6).range(1, 2))( "rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcCRUcmVlTWFwVmlldx7MCZxLhVQ8AgADTAAGJG91dGVydAAiTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9UcmVlTWFwO0wABGZyb210AA5Mc2NhbGEvT3B0aW9uO0wABXVudGlscQB+AAJ4cgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlRyZWVNYXDcfKgttvWb8AIAAkwACG9yZGVyaW5ndAAVTHNjYWxhL21hdGgvT3JkZXJpbmc7TAAmc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJFRyZWVNYXAkJHRyZWV0ACxMc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1JlZEJsYWNrVHJlZSRUcmVlO3hwc3IAGHNjYWxhLm1hdGguT3JkZXJpbmckSW50JCk2+Jz+mgKqAgAAeHBzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSRUcmVlAEynNPA1phUCAAJJAARzaXplTAAEcm9vdHQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJE5vZGU7eHAAAAACc3IAKnNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5SZWRCbGFja1RyZWUkTm9kZRsR7BbVWpYAAgAGWgADcmVkTAADa2V5dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEbGVmdHEAfgAKTAAGcGFyZW50cQB+AApMAAVyaWdodHEAfgAKTAAFdmFsdWVxAH4ADXhwAHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABcHBzcQB+AAwBc3EAfgAPAAAAA3BxAH4ADnBzcQB+AA8AAAAGcQB+ABFzcQB+AANxAH4ACHEAfgALc3IACnNjYWxhLlNvbWURIvJpXqGLdAIAAUwABXZhbHVlcQB+AA14cgAMc2NhbGEuT3B0aW9u/mk3/dsOZnQCAAB4cHEAfgARc3EAfgAWc3EAfgAPAAAAAg==")
- check(mutable.TreeSet[Int]())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldM10nxFQDpt4AgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZVNldCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQkKTb4nP6aAqoCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAABw")
- check(mutable.TreeSet(1, 3))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldM10nxFQDpt4AgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZVNldCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQkKTb4nP6aAqoCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAAJzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSROb2RlGxHsFtValgACAAZaAANyZWRMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAARsZWZ0cQB+AAdMAAZwYXJlbnRxAH4AB0wABXJpZ2h0cQB+AAdMAAV2YWx1ZXEAfgAKeHAAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFwcHNxAH4ACQFzcQB+AAwAAAADcHEAfgALcHBw")
- check(mutable.TreeSet(1, 3).range(1, 2))( "rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldCRUcmVlU2V0Vmlld2JdAzqy0DpGAgADTAAGJG91dGVydAAiTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9UcmVlU2V0O0wABGZyb210AA5Mc2NhbGEvT3B0aW9uO0wABXVudGlscQB+AAJ4cgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlRyZWVTZXTNdJ8RUA6beAIAAkwACG9yZGVyaW5ndAAVTHNjYWxhL21hdGgvT3JkZXJpbmc7TAAmc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJFRyZWVTZXQkJHRyZWV0ACxMc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1JlZEJsYWNrVHJlZSRUcmVlO3hwc3IAGHNjYWxhLm1hdGguT3JkZXJpbmckSW50JCk2+Jz+mgKqAgAAeHBzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSRUcmVlAEynNPA1phUCAAJJAARzaXplTAAEcm9vdHQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJE5vZGU7eHAAAAACc3IAKnNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5SZWRCbGFja1RyZWUkTm9kZRsR7BbVWpYAAgAGWgADcmVkTAADa2V5dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEbGVmdHEAfgAKTAAGcGFyZW50cQB+AApMAAVyaWdodHEAfgAKTAAFdmFsdWVxAH4ADXhwAHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABcHBzcQB+AAwBc3EAfgAPAAAAA3BxAH4ADnBwcHNxAH4AA3EAfgAIcQB+AAtzcgAKc2NhbGEuU29tZREi8mleoYt0AgABTAAFdmFsdWVxAH4ADXhyAAxzY2FsYS5PcHRpb27+aTf92w5mdAIAAHhwcQB+ABFzcQB+ABVzcQB+AA8AAAAC")
+ check(mutable.TreeMap[Int, Int]())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcNx8qC229ZvwAgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZU1hcCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAABw")
+ check(mutable.TreeMap(1 -> 1, 3 -> 6))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcNx8qC229ZvwAgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZU1hcCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAAJzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSROb2RlGxHsFtValgACAAZaAANyZWRMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAARsZWZ0cQB+AAdMAAZwYXJlbnRxAH4AB0wABXJpZ2h0cQB+AAdMAAV2YWx1ZXEAfgAKeHAAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFwcHNxAH4ACQFzcQB+AAwAAAADcHEAfgALcHNxAH4ADAAAAAZxAH4ADg==")
+ check(mutable.TreeMap(1 -> 1, 3 -> 6).range(1, 2))( "rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcCRUcmVlTWFwVmlldx7MCZxLhVQ8AgADTAAGJG91dGVydAAiTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9UcmVlTWFwO0wABGZyb210AA5Mc2NhbGEvT3B0aW9uO0wABXVudGlscQB+AAJ4cgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlRyZWVNYXDcfKgttvWb8AIAAkwACG9yZGVyaW5ndAAVTHNjYWxhL21hdGgvT3JkZXJpbmc7TAAmc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJFRyZWVNYXAkJHRyZWV0ACxMc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1JlZEJsYWNrVHJlZSRUcmVlO3hwc3IAGHNjYWxhLm1hdGguT3JkZXJpbmckSW50JPLu3IK7lc7nAgAAeHBzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSRUcmVlAEynNPA1phUCAAJJAARzaXplTAAEcm9vdHQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJE5vZGU7eHAAAAACc3IAKnNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5SZWRCbGFja1RyZWUkTm9kZRsR7BbVWpYAAgAGWgADcmVkTAADa2V5dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEbGVmdHEAfgAKTAAGcGFyZW50cQB+AApMAAVyaWdodHEAfgAKTAAFdmFsdWVxAH4ADXhwAHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABcHBzcQB+AAwBc3EAfgAPAAAAA3BxAH4ADnBzcQB+AA8AAAAGcQB+ABFzcQB+AANxAH4ACHEAfgALc3IACnNjYWxhLlNvbWURIvJpXqGLdAIAAUwABXZhbHVlcQB+AA14cgAMc2NhbGEuT3B0aW9u/mk3/dsOZnQCAAB4cHEAfgARc3EAfgAWc3EAfgAPAAAAAg==")
+ check(mutable.TreeSet[Int]())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldM10nxFQDpt4AgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZVNldCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAABw")
+ check(mutable.TreeSet(1, 3))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldM10nxFQDpt4AgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZVNldCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAAJzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSROb2RlGxHsFtValgACAAZaAANyZWRMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAARsZWZ0cQB+AAdMAAZwYXJlbnRxAH4AB0wABXJpZ2h0cQB+AAdMAAV2YWx1ZXEAfgAKeHAAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFwcHNxAH4ACQFzcQB+AAwAAAADcHEAfgALcHBw")
+ check(mutable.TreeSet(1, 3).range(1, 2))( "rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldCRUcmVlU2V0Vmlld2JdAzqy0DpGAgADTAAGJG91dGVydAAiTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9UcmVlU2V0O0wABGZyb210AA5Mc2NhbGEvT3B0aW9uO0wABXVudGlscQB+AAJ4cgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlRyZWVTZXTNdJ8RUA6beAIAAkwACG9yZGVyaW5ndAAVTHNjYWxhL21hdGgvT3JkZXJpbmc7TAAmc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJFRyZWVTZXQkJHRyZWV0ACxMc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1JlZEJsYWNrVHJlZSRUcmVlO3hwc3IAGHNjYWxhLm1hdGguT3JkZXJpbmckSW50JPLu3IK7lc7nAgAAeHBzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSRUcmVlAEynNPA1phUCAAJJAARzaXplTAAEcm9vdHQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJE5vZGU7eHAAAAACc3IAKnNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5SZWRCbGFja1RyZWUkTm9kZRsR7BbVWpYAAgAGWgADcmVkTAADa2V5dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEbGVmdHEAfgAKTAAGcGFyZW50cQB+AApMAAVyaWdodHEAfgAKTAAFdmFsdWVxAH4ADXhwAHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABcHBzcQB+AAwBc3EAfgAPAAAAA3BxAH4ADnBwcHNxAH4AA3EAfgAIcQB+AAtzcgAKc2NhbGEuU29tZREi8mleoYt0AgABTAAFdmFsdWVxAH4ADXhyAAxzY2FsYS5PcHRpb27+aTf92w5mdAIAAHhwcQB+ABFzcQB+ABVzcQB+AA8AAAAC")
// TODO SI-8576 Uninitialized field under -Xcheckinit
// check(new mutable.History())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGlzdG9yeUhuXxDIFJrsAgACSQAKbWF4SGlzdG9yeUwAA2xvZ3QAIExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUXVldWU7eHAAAAPoc3IAHnNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5RdWV1ZbjMURVfOuHHAgAAeHIAJHNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5NdXRhYmxlTGlzdFJpnjJ+gFbAAgADSQADbGVuTAAGZmlyc3QwdAAlTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9MaW5rZWRMaXN0O0wABWxhc3QwcQB+AAV4cAAAAABzcgAjc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkxpbmtlZExpc3Sak+nGCZHaUQIAAkwABGVsZW10ABJMamF2YS9sYW5nL09iamVjdDtMAARuZXh0dAAeTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9TZXE7eHBwcQB+AApxAH4ACg==")
check(mutable.LinkedHashMap(1 -> 2))( "rO0ABXNyACZzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuTGlua2VkSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAABAAAABABzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAgAAAAJ4")
@@ -194,7 +194,7 @@ object Test extends App {
// TODO SI-8576 unstable under -Xcheckinit
// check(mutable.ListBuffer(1, 2, 3))( "rO0ABXNyACNzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuTGlzdEJ1ZmZlci9y9I7QyWzGAwAEWgAIZXhwb3J0ZWRJAANsZW5MAAVsYXN0MHQAKUxzY2FsYS9jb2xsZWN0aW9uL2ltbXV0YWJsZS8kY29sb24kY29sb247TAAqc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJExpc3RCdWZmZXIkJHN0YXJ0dAAhTHNjYWxhL2NvbGxlY3Rpb24vaW1tdXRhYmxlL0xpc3Q7eHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4ABAAAAAJzcQB+AAQAAAADc3IALHNjYWxhLmNvbGxlY3Rpb24uaW1tdXRhYmxlLkxpc3RTZXJpYWxpemVFbmQkilxjW/dTC20CAAB4cHcFAAAAAAN4")
check(new mutable.StringBuilder(new java.lang.StringBuilder("123")))( "rO0ABXNyACZzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuU3RyaW5nQnVpbGRlcomvqgGv1tTxAgABTAAKdW5kZXJseWluZ3QAGUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjt4cHNyABdqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcjzV+xRaTGrLAwAAeHB3BAAAAAN1cgACW0OwJmaw4l2ErAIAAHhwAAAAEwAxADIAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeA==")
- check(mutable.UnrolledBuffer[Int]())( "rO0ABXNyACdzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVW5yb2xsZWRCdWZmZXIAAAAAAAAAAQMAAUwAA3RhZ3QAGExzY2FsYS9yZWZsZWN0L0NsYXNzVGFnO3hwc3IAKXNjYWxhLnJlZmxlY3QuTWFuaWZlc3RGYWN0b3J5JEludE1hbmlmZXN0VuOHY9AvTWoCAAB4cgAcc2NhbGEucmVmbGVjdC5BbnlWYWxNYW5pZmVzdAAAAAAAAAABAgABTAAIdG9TdHJpbmd0ABJMamF2YS9sYW5nL1N0cmluZzt4cHQAA0ludHcEAAAAAHg=")
+ check(mutable.UnrolledBuffer[Int]())( "rO0ABXNyACdzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVW5yb2xsZWRCdWZmZXIAAAAAAAAAAQMAAUwAA3RhZ3QAGExzY2FsYS9yZWZsZWN0L0NsYXNzVGFnO3hwc3IAKXNjYWxhLnJlZmxlY3QuTWFuaWZlc3RGYWN0b3J5JEludE1hbmlmZXN0AAAAAAAAAAECAAB4cgAcc2NhbGEucmVmbGVjdC5BbnlWYWxNYW5pZmVzdAAAAAAAAAABAgABTAAIdG9TdHJpbmd0ABJMamF2YS9sYW5nL1N0cmluZzt4cHQAA0ludHcEAAAAAHg=")
import collection.parallel
check(parallel.immutable.ParHashMap(1 -> 2))( "rO0ABXNyAC5zY2FsYS5jb2xsZWN0aW9uLnBhcmFsbGVsLmltbXV0YWJsZS5QYXJIYXNoTWFwAAAAAAAAAAECAANMAA9TY2FuTGVhZiRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9wYXJhbGxlbC9QYXJJdGVyYWJsZUxpa2UkU2NhbkxlYWYkO0wAD1NjYW5Ob2RlJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL3BhcmFsbGVsL1Bhckl0ZXJhYmxlTGlrZSRTY2FuTm9kZSQ7TAAEdHJpZXQAJExzY2FsYS9jb2xsZWN0aW9uL2ltbXV0YWJsZS9IYXNoTWFwO3hwcHBzcgA1c2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuSGFzaE1hcCRTZXJpYWxpemF0aW9uUHJveHkAAAAAAAAAAgMAAHhwdwQAAAABc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+AAcAAAACeA==")
diff --git a/test/files/run/t9697.check b/test/files/run/t9697.check
new file mode 100644
index 0000000000..2a4f01c14f
--- /dev/null
+++ b/test/files/run/t9697.check
@@ -0,0 +1 @@
+warning: there were 9 deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t9697.scala b/test/files/run/t9697.scala
new file mode 100644
index 0000000000..eb8e44f8fc
--- /dev/null
+++ b/test/files/run/t9697.scala
@@ -0,0 +1,204 @@
+object log {
+ val b = new collection.mutable.StringBuilder
+ def apply(s: Any): Unit = b.append(s)
+ def check(s: String) = {
+ val bs = b.toString
+ assert(s == bs, bs)
+ b.clear()
+ }
+}
+
+package t9697 {
+ abstract class WA extends DelayedInit {
+ override def delayedInit(x: => Unit): Unit = x
+ val waField = "4"
+ }
+
+ class C {
+ def b(s: String) = log(s)
+ val cField = "1"
+
+ {
+ val dummyLocal = "2"
+ new WA {
+ val anonField = "3"
+ b(cField)
+ b(dummyLocal)
+ b(anonField)
+ b(waField)
+ }
+ }
+ }
+}
+
+package sd229 {
+ class Broken {
+ def is(ee: AnyRef) = {
+ new Delayed {
+ log(ee)
+ }
+ }
+ }
+
+ class Delayed extends DelayedInit {
+ def delayedInit(x: => Unit): Unit = x
+ }
+}
+
+
+// already fixed in 2.11.8, crashes in 2.10.6
+package t4683a {
+ class A { log("a") }
+ class B { log("b") }
+ class Bug extends DelayedInit {
+ log("bug")
+ def foo(a: A): B = new B
+ def delayedInit(init: => Unit): Unit = init
+ }
+}
+
+// already fixed in 2.12.0-RC1, crashes in 2.11.8
+package t4683b {
+ class Entity extends DelayedInit {
+ def delayedInit(x: => Unit): Unit = x
+
+ class Field
+
+ protected def EntityField[T <: Entity: reflect.ClassTag] = new Field
+
+ def find[T <: Entity: reflect.ClassTag] {
+ Nil.map(dbo => {
+ class EntityHolder extends Entity {
+ val entity = EntityField[T]
+ }
+ })
+ log("find")
+ }
+ }
+}
+
+package t4683c {
+ trait T extends DelayedInit {
+ def delayedInit(body: => Unit) = {
+ log("init")
+ body
+ }
+ }
+}
+
+package t4683d {
+ class C extends DelayedInit {
+ def delayedInit(body: => Unit): Unit = body
+ }
+ class Injector {
+ def test: Object = {
+ val name = "k"
+ class crash extends C {
+ log(name)
+ }
+ new crash()
+ }
+ }
+}
+
+package t4683e {
+ class DelayedInitTest {
+ def a = log("uh")
+ class B extends DelayedInit {
+ a
+ def delayedInit(body: => Unit): Unit = body
+ }
+ }
+}
+
+package t4683f {
+ class Foo extends DelayedInit {
+ log("fooInit")
+ def delayedInit(newBody: => Unit): Unit = {
+ log("delayedInit")
+ inits = {
+ val f = () => newBody
+ if (inits == null) {
+ log("initsNull")
+ List(f)
+ } else
+ f :: inits
+ }
+ }
+ def foo = log("foo")
+ var inits: List[() => Unit] = Nil
+ }
+
+ class Bar extends Foo {
+ log("barInit")
+ def bar = foo
+ def newBaz: Foo = new Baz
+ private class Baz extends Foo {
+ log("bazInit")
+ bar
+ }
+ }
+}
+
+package t4683g {
+ trait MatExpWorld { self =>
+ class T extends Runner { val expWorld: self.type = self }
+ }
+
+ trait Runner extends DelayedInit {
+ def delayedInit(init: => Unit): Unit = init
+ val expWorld: MatExpWorld
+ }
+}
+
+
+object Test extends App {
+ new t9697.C()
+ log.check("1234")
+
+ new sd229.Broken().is("hi")
+ log.check("hi")
+
+ val a: t4683a.A = new t4683a.A
+ var b: t4683a.B = null
+ new t4683a.Bug {
+ val b = foo(a)
+ }
+ log.check("abugb")
+
+ new t4683b.Entity().find[t4683b.Entity]
+ log.check("find")
+
+ val f = (p1: Int) => new t4683c.T { log(p1) }
+ f(5)
+ log.check("init5")
+
+ new t4683d.Injector().test
+ log.check("k")
+
+ val dit = new t4683e.DelayedInitTest()
+ new dit.B()
+ log.check("uh")
+
+ val fuu = new t4683f.Foo
+ log.check("delayedInitinitsNull")
+ fuu.inits.foreach(_.apply())
+ log.check("fooInit")
+ assert(fuu.inits == Nil) // the (delayed) initializer of Foo sets the inits field to Nil
+
+ val brr = new t4683f.Bar
+ log.check("delayedInitinitsNulldelayedInit") // delayedInit is called once for each constructor
+ brr.inits.foreach(_.apply())
+ log.check("barInitfooInit")
+ assert(brr.inits == Nil)
+
+ val bzz = brr.newBaz
+ log.check("delayedInitinitsNulldelayedInit")
+ bzz.inits.foreach(_.apply())
+ log.check("bazInitfoofooInit")
+ assert(bzz.inits == Nil)
+
+ val mew = new t4683g.MatExpWorld { }
+ val mt = new mew.T
+ assert(mt.expWorld == mew)
+}
diff --git a/test/files/run/t9920.scala b/test/files/run/t9920.scala
new file mode 100644
index 0000000000..5dc32e99b7
--- /dev/null
+++ b/test/files/run/t9920.scala
@@ -0,0 +1,17 @@
+class C0
+trait T { self: C0 =>
+ def test = {
+ object Local
+
+ class C1 {
+ Local
+ }
+ new C1()
+ }
+}
+
+object Test extends C0 with T {
+ def main(args: Array[String]): Unit = {
+ test
+ }
+}
diff --git a/test/files/run/t9920b.scala b/test/files/run/t9920b.scala
new file mode 100644
index 0000000000..fab196b669
--- /dev/null
+++ b/test/files/run/t9920b.scala
@@ -0,0 +1,17 @@
+class C0
+trait T {
+ def test = {
+ object Local
+
+ class C1 {
+ Local
+ }
+ new C1()
+ }
+}
+
+object Test extends C0 with T {
+ def main(args: Array[String]): Unit = {
+ test
+ }
+}
diff --git a/test/files/run/t9920c.scala b/test/files/run/t9920c.scala
new file mode 100644
index 0000000000..9541dc650a
--- /dev/null
+++ b/test/files/run/t9920c.scala
@@ -0,0 +1,21 @@
+class C0
+trait T { self: C0 =>
+ def test = {
+ object Local
+
+ class C2 {
+ class C1 {
+ Local
+ }
+ T.this.toString
+ new C1
+ }
+ new C2()
+ }
+}
+
+object Test extends C0 with T {
+ def main(args: Array[String]): Unit = {
+ test
+ }
+}
diff --git a/test/files/run/t9920d.scala b/test/files/run/t9920d.scala
new file mode 100644
index 0000000000..debc99e199
--- /dev/null
+++ b/test/files/run/t9920d.scala
@@ -0,0 +1,14 @@
+class C { object O }
+trait T { _: C =>
+ def foo {
+ class D { O }
+ new D
+ }
+}
+
+
+object Test extends C with T {
+ def main(args: Array[String]): Unit = {
+ foo
+ }
+}
diff --git a/test/files/run/t9946a.scala b/test/files/run/t9946a.scala
new file mode 100644
index 0000000000..491fb31f7b
--- /dev/null
+++ b/test/files/run/t9946a.scala
@@ -0,0 +1,14 @@
+package p1 {
+ object O {
+ private case class N(a: Any)
+ lazy val x: AnyRef = N
+ lazy val y: AnyRef = new { assert(N != null) }
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ p1.O.x
+ p1.O.y
+ }
+}
diff --git a/test/files/run/t9946b.scala b/test/files/run/t9946b.scala
new file mode 100644
index 0000000000..ac102a38f7
--- /dev/null
+++ b/test/files/run/t9946b.scala
@@ -0,0 +1,12 @@
+class Test(private val x: String) {
+ lazy val y = x.reverse
+}
+object Test {
+ def getX(t: Test) = t.x
+ def main(args: Array[String]): Unit = {
+ val t = new Test("foo")
+ assert(t.y == "oof", t.y)
+ assert(t.x == "foo", t.x)
+ }
+}
+
diff --git a/test/files/run/t9946c.scala b/test/files/run/t9946c.scala
new file mode 100644
index 0000000000..f9fe68d48f
--- /dev/null
+++ b/test/files/run/t9946c.scala
@@ -0,0 +1,10 @@
+class Test(private[this] val x: String) {
+ lazy val y = x.reverse
+}
+object Test {
+ def main(args: Array[String]): Unit = {
+ val t = new Test("foo")
+ assert(t.y == "oof", t.y)
+ }
+}
+
diff --git a/test/files/run/trait-super-calls.scala b/test/files/run/trait-super-calls.scala
new file mode 100644
index 0000000000..df405d0f13
--- /dev/null
+++ b/test/files/run/trait-super-calls.scala
@@ -0,0 +1,127 @@
+object t1 {
+ trait T { def f = 1 }
+ trait U extends T
+ class C extends U { def t = super.f }
+}
+
+object t2 {
+ class A { def f = 1 }
+ trait T extends A { override def f = 2 }
+ class B extends A
+ class C extends B with T {
+ def t1 = super.f
+ def t2 = super[T].f
+ def t3 = super[B].f
+ }
+}
+
+object t3 {
+ class A { def f = 1 }
+ trait T extends A
+ class B extends A { override def f = 2 }
+ class C extends B with T {
+ def t1 = super.f
+ // def t2 = super[T].f // error: cannot emit super call (test exists)
+ def t3 = super[B].f
+ }
+}
+
+object t4 {
+ trait T1 { def f = 1 }
+ trait T2 { self: T1 => override def f = 2 }
+ trait U extends T1 with T2
+ class C extends U {
+ def t1 = super.f
+ def t2 = super[U].f
+ }
+}
+
+object t5 {
+ trait T { override def hashCode = -1 }
+ trait U extends T
+ class C extends U {
+ def t1 = super[U].hashCode
+ def t2 = super.hashCode
+ }
+}
+
+object t6 {
+ trait T { def f = 1 }
+ trait U1 extends T { override def f = 2 }
+ trait U2 extends T { override def f = 3 }
+ class C1 extends T with U1 with U2 {
+ def t1 = super.f
+ def t2 = super[T].f
+ def t3 = super[U1].f
+ def t4 = super[U2].f
+ }
+ class C2 extends T with U2 with U1 {
+ def t1 = super.f
+ }
+}
+
+object t7 {
+ trait T1 { def f = 1 }
+ trait T2 { _: T1 => override def f = 2 }
+ trait U extends T1 with T2
+ trait V extends U with T2
+ class C extends V {
+ def t1 = super.f
+ def t2 = super[V].f
+ }
+}
+
+object t8 {
+ trait HasNewBuilder { def newBuilder: Int }
+ trait GenericTraversableTemplate extends HasNewBuilder { def newBuilder = 0 }
+ trait Iterable extends GenericTraversableTemplate
+ trait MutMapLike extends HasNewBuilder { override def newBuilder = 1 }
+ trait MutMap extends Iterable with MutMapLike
+ class TrieMap extends MutMap with MutMapLike
+}
+
+object Test {
+ def e(a: Any, b: Any) = assert(a == b, s"expected: $b\ngot: $a")
+
+ def main(args: Array[String]): Unit = {
+ e(new t1.C().t, 1)
+
+ val c2 = new t2.C
+ e(c2.f, 2)
+ e(c2.t1, 2)
+ e(c2.t2, 2)
+ e(c2.t3, 1)
+
+ val c3 = new t3.C
+ e(c3.f, 2)
+ e(c3.t1, 2)
+ e(c3.t3, 2)
+
+ val c4 = new t4.C
+ e(c4.f, 2)
+ e(c4.t1, 2)
+ e(c4.t2, 2)
+
+ val c5 = new t5.C
+ e(c5.hashCode, -1)
+ e(c5.t1, -1)
+ e(c5.t2, -1)
+
+ val c6a = new t6.C1
+ val c6b = new t6.C2
+ e(c6a.f, 3)
+ e(c6a.t1, 3)
+ e(c6a.t2, 1)
+ e(c6a.t3, 2)
+ e(c6a.t4, 3)
+ e(c6b.f, 2)
+ e(c6b.t1, 2)
+
+ val c7 = new t7.C
+ e(c7.f, 2)
+ e(c7.t1, 2)
+ e(c7.t2, 2)
+
+ e(new t8.TrieMap().newBuilder, 1)
+ }
+}
diff --git a/test/junit/scala/collection/SeqLikeTest.scala b/test/junit/scala/collection/SeqLikeTest.scala
new file mode 100644
index 0000000000..2ab682299d
--- /dev/null
+++ b/test/junit/scala/collection/SeqLikeTest.scala
@@ -0,0 +1,19 @@
+package scala.collection
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Assert._
+import org.junit.Test
+
+@RunWith(classOf[JUnit4])
+class SeqLikeTest {
+
+ @Test def `SI-9936 indexWhere`(): Unit = {
+ assertEquals(2, "abcde".indexOf('c', -1))
+ assertEquals(2, "abcde".indexOf('c', -2))
+ assertEquals(2, "abcde".toVector.indexOf('c', -1))
+ assertEquals(2, "abcde".toVector.indexOf('c', -2))
+ assertEquals(2, "abcde".toVector.indexWhere(_ == 'c', -1))
+ assertEquals(2, "abcde".toVector.indexWhere(_ == 'c', -2))
+ }
+}
diff --git a/test/junit/scala/collection/TraversableLikeTest.scala b/test/junit/scala/collection/TraversableLikeTest.scala
index 8588956016..f703abf3e4 100644
--- a/test/junit/scala/collection/TraversableLikeTest.scala
+++ b/test/junit/scala/collection/TraversableLikeTest.scala
@@ -5,29 +5,65 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+object TraversableLikeTest {
+ abstract class FakeIndexedSeq[A] extends IndexedSeq[A] {
+ def apply(i: Int): A = ???
+ def length: Int = 0
+ }
+}
+
@RunWith(classOf[JUnit4])
class TraversableLikeTest {
+ import TraversableLikeTest._
+
// For test_SI9019; out here because as of test writing, putting this in a method would crash compiler
class Baz[@specialized(Int) A]() extends IndexedSeq[A] {
def apply(i: Int) = ???
def length: Int = 0
}
-
+
@Test
def test_SI9019 {
object Foo {
def mkBar = () => {
- class Bar extends IndexedSeq[Int] {
- def apply(i: Int) = ???
- def length: Int = 0
- }
+ class Bar extends FakeIndexedSeq[Int]
new Bar
}
+
+ def mkFalsePositiveToSyntheticTest = () => {
+ /* A class whose name tarts with an ASCII lowercase letter.
+ * It will be a false positive to the synthetic-part test.
+ */
+ class falsePositive extends FakeIndexedSeq[Int]
+ new falsePositive
+ }
+
+ def mkFrench = () => {
+ // For non-French speakers, this means "strange class name"
+ class ÉtrangeNomDeClasse extends FakeIndexedSeq[Int]
+ new ÉtrangeNomDeClasse
+ }
+
+ def mkFrenchLowercase = () => {
+ class étrangeNomDeClasseMinuscules extends FakeIndexedSeq[Int]
+ new étrangeNomDeClasseMinuscules
+ }
}
+
val bar = Foo.mkBar()
assertEquals("Bar", bar.stringPrefix) // Previously would have been outermost class, TraversableLikeTest
val baz = new Baz[Int]()
assertEquals("TraversableLikeTest.Baz", baz.stringPrefix) // Make sure we don't see specialization $mcI$sp stuff
+
+ // The false positive unfortunately produces an empty stringPrefix
+ val falsePositive = Foo.mkFalsePositiveToSyntheticTest()
+ assertEquals("", falsePositive.stringPrefix)
+
+ val french = Foo.mkFrench()
+ assertEquals("ÉtrangeNomDeClasse", french.stringPrefix)
+
+ val frenchLowercase = Foo.mkFrenchLowercase()
+ assertEquals("étrangeNomDeClasseMinuscules", frenchLowercase.stringPrefix)
}
}
diff --git a/test/junit/scala/collection/mutable/BitSetTest.scala b/test/junit/scala/collection/mutable/BitSetTest.scala
index e832194989..84b906e8d5 100644
--- a/test/junit/scala/collection/mutable/BitSetTest.scala
+++ b/test/junit/scala/collection/mutable/BitSetTest.scala
@@ -1,8 +1,8 @@
package scala.collection.mutable
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.{Test, Ignore}
@RunWith(classOf[JUnit4])
class BitSetTest {
diff --git a/test/junit/scala/collection/mutable/OpenHashMapTest.scala b/test/junit/scala/collection/mutable/OpenHashMapTest.scala
index 90f6be6ee5..e9f2a52bf6 100644
--- a/test/junit/scala/collection/mutable/OpenHashMapTest.scala
+++ b/test/junit/scala/collection/mutable/OpenHashMapTest.scala
@@ -1,13 +1,10 @@
package scala.collection.mutable
-import org.junit.{Ignore, Test}
import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.openjdk.jol.info.GraphLayout
-import org.openjdk.jol.info.GraphWalker
-import org.openjdk.jol.info.GraphVisitor
-import org.openjdk.jol.info.GraphPathRecord
+import org.openjdk.jol.info.{GraphPathRecord, GraphVisitor, GraphWalker}
/** Tests for [[OpenHashMap]]. */
@RunWith(classOf[JUnit4])
diff --git a/test/junit/scala/lang/primitives/BoxUnboxTest.scala b/test/junit/scala/lang/primitives/BoxUnboxTest.scala
index e4911f1af5..94413b69b4 100644
--- a/test/junit/scala/lang/primitives/BoxUnboxTest.scala
+++ b/test/junit/scala/lang/primitives/BoxUnboxTest.scala
@@ -17,98 +17,84 @@ class BoxUnboxTest extends RunTesting {
@Test
def boxUnboxInt(): Unit = {
- // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
- // Some fixes not yet available in M4 make the test fail when compiled with M4.
- val code =
- """import scala.tools.testing.AssertUtil._
- |import org.junit.Assert._
- |
- |def genericNull[T] = null.asInstanceOf[T] // allowed, see SI-4437, point 2
- |
- |val b = new Integer(1)
- |val u = 1
- |
- |assertEquals(1.toInt, u)
- |
- |assertEquals(Predef.int2Integer(1), b)
- |assertEquals(1: Integer, b)
- |assertEquals(Int.box(1), b)
- |assertEquals(1.asInstanceOf[Object], b)
- |
- |assertThrows[ClassCastException]("".asInstanceOf[Integer])
- |
- |assertEquals(Predef.Integer2int(b), u)
- |assertEquals(b: Int, u)
- |assertEquals(Int.unbox(b), u)
- |assertEquals(b.asInstanceOf[Int], u)
- |assertEquals(b.intValue, u)
- |assertEquals(b.toInt, u)
- |intWrapper(b).toInt
- |
- |assertThrows[ClassCastException](Int.unbox(""))
- |assertThrows[ClassCastException]("".asInstanceOf[Int])
- |
- |// null unboxing in various positions
- |
- |val n1 = Int.unbox(null)
- |assertEquals(n1, 0)
- |val n2 = Predef.Integer2int(null)
- |assertEquals(n2, 0)
- |val n3 = (null: Integer): Int
- |assertEquals(n3, 0)
- |val n4 = null.asInstanceOf[Int]
- |assertEquals(n4, 0)
- |val n5 = null.asInstanceOf[Int] == 0
- |assertTrue(n5)
- |val n6 = null.asInstanceOf[Int] == null
- |assertFalse(n6)
- |val n7 = null.asInstanceOf[Int] != 0
- |assertFalse(n7)
- |val n8 = null.asInstanceOf[Int] != null
- |assertTrue(n8)
- |
- |val mp = new java.util.HashMap[Int, Int]
- |val n9 = mp.get(0)
- |assertEquals(n9, 0)
- |val n10 = mp.get(0) == null // SI-602
- |assertThrows[AssertionError](assertFalse(n10)) // should not throw
- |
- |def f(a: Any) = "" + a
- |val n11 = f(null.asInstanceOf[Int])
- |assertEquals(n11, "0")
- |
- |def n12 = genericNull[Int]
- |assertEquals(n12, 0)
- """.stripMargin
-
- run[Unit](code)
+ import scala.tools.testing.AssertUtil._
+ import org.junit.Assert._
+
+ def genericNull[T] = null.asInstanceOf[T] // allowed, see SI-4437, point 2
+
+ val b = new Integer(1)
+ val u = 1
+
+ assertEquals(1.toInt, u)
+
+ assertEquals(Predef.int2Integer(1), b)
+ assertEquals(1: Integer, b)
+ assertEquals(Int.box(1), b)
+ assertEquals(1.asInstanceOf[Object], b)
+
+ assertThrows[ClassCastException]("".asInstanceOf[Integer])
+
+ assertEquals(Predef.Integer2int(b), u)
+ assertEquals(b: Int, u)
+ assertEquals(Int.unbox(b), u)
+ assertEquals(b.asInstanceOf[Int], u)
+ assertEquals(b.intValue, u)
+ assertEquals(b.toInt, u)
+ intWrapper(b).toInt
+
+ assertThrows[ClassCastException](Int.unbox(""))
+ assertThrows[ClassCastException]("".asInstanceOf[Int])
+
+ // null unboxing in various positions
+
+ val n1 = Int.unbox(null)
+ assertEquals(n1, 0)
+ val n2 = Predef.Integer2int(null)
+ assertEquals(n2, 0)
+ val n3 = (null: Integer): Int
+ assertEquals(n3, 0)
+ val n4 = null.asInstanceOf[Int]
+ assertEquals(n4, 0)
+ val n5 = null.asInstanceOf[Int] == 0
+ assertTrue(n5)
+ val n6 = null.asInstanceOf[Int] == null
+ assertFalse(n6)
+ val n7 = null.asInstanceOf[Int] != 0
+ assertFalse(n7)
+ val n8 = null.asInstanceOf[Int] != null
+ assertTrue(n8)
+
+ val mp = new java.util.HashMap[Int, Int]
+ val n9 = mp.get(0)
+ assertEquals(n9, 0)
+ val n10 = mp.get(0) == null // SI-602
+ assertThrows[AssertionError](assertFalse(n10)) // should not throw
+
+ def f(a: Any) = "" + a
+ val n11 = f(null.asInstanceOf[Int])
+ assertEquals(n11, "0")
+
+ def n12 = genericNull[Int]
+ assertEquals(n12, 0)
}
@Test
def numericConversions(): Unit = {
- // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
- val code =
- """import scala.tools.testing.AssertUtil._
- |import org.junit.Assert._
- |
- |val i1 = 1L.asInstanceOf[Int]
- |assertEquals(i1, 1)
- |assertThrows[ClassCastException] {
- | val i2 = (1L: Any).asInstanceOf[Int] // SI-1448, should not throw. see also SI-4437 point 1.
- | assertEquals(i2, 1)
- |}
- """.stripMargin
- run[Unit](code)
+ import scala.tools.testing.AssertUtil._
+ import org.junit.Assert._
+
+ val i1 = 1L.asInstanceOf[Int]
+ assertEquals(i1, 1)
+ assertThrows[ClassCastException] {
+ val i2 = (1L: Any).asInstanceOf[Int] // SI-1448, should not throw. see also SI-4437 point 1.
+ assertEquals(i2, 1)
+ }
}
@Test
def boxUnboxBoolean(): Unit = {
- // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
- val code =
- """val n1 = Option(null.asInstanceOf[Boolean])
- |n1
- """.stripMargin
- assertEquals(run[Option[Boolean]](code), Some(false))
+ val n1 = Option(null.asInstanceOf[Boolean])
+ assertEquals(n1, Some(false))
}
@Test
@@ -117,133 +103,126 @@ class BoxUnboxTest extends RunTesting {
// not conform to Object, but for Java-defined methods scalac makes an exception and treats them
// as Any. passing a Unit as Any makes the compiler go through another layer of boxing, so it
// can hide some bugs (where we actually have a null, but the compiler makes it a ()).
+ import scala.tools.testing.AssertUtil._
+ import org.junit.Assert._
+
+ var v = 0
+ def eff() = { v = 1 }
+ def chk() = { assert(v == 1); v = 0 }
+
+ val b = runtime.BoxedUnit.UNIT
+
+ assert(eff() == b); chk()
+ assert(Unit.box(eff()) == b); chk()
+ assert(().asInstanceOf[Object] == b)
+
+ Unit.unbox({eff(); b}); chk()
+ Unit.unbox({eff(); null}); chk()
+ assertThrows[ClassCastException](Unit.unbox({eff(); ""})); chk()
+
+ val n1 = null.asInstanceOf[Unit]
+ assert(n1 == b)
- // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
- val code =
- """import scala.tools.testing.AssertUtil._
- |import org.junit.Assert._
- |
- |var v = 0
- |def eff() = { v = 1 }
- |def chk() = { assert(v == 1); v = 0 }
- |
- |val b = runtime.BoxedUnit.UNIT
- |
- |assert(eff() == b); chk()
- |assert(Unit.box(eff()) == b); chk()
- |assert(().asInstanceOf[Object] == b)
- |
- |Unit.unbox({eff(); b}); chk()
- |Unit.unbox({eff(); null}); chk()
- |assertThrows[ClassCastException](Unit.unbox({eff(); ""})); chk()
- |
- |val n1 = null.asInstanceOf[Unit]
- |assert(n1 == b)
- |
- |val n2 = null.asInstanceOf[Unit] == b
- |assert(n2)
- |
- |def f(a: Any) = "" + a
- |val n3 = f(null.asInstanceOf[Unit])
- |assertEquals(n3, "()")
- """.stripMargin
- run[Unit](code)
+ val n2 = null.asInstanceOf[Unit] == b
+ assert(n2)
+
+ def f(a: Any) = "" + a
+ val n3 = f(null.asInstanceOf[Unit])
+ assertEquals(n3, "()")
}
@Test
def t9671(): Unit = {
- // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
- val code =
- """import scala.lang.primitives.BoxUnboxTest.VCI
- |
- |def f1(a: Any) = "" + a
- |def f2(a: AnyVal) = "" + a
- |def f3[T](a: T) = "" + a
- |def f4(a: Int) = "" + a
- |def f5(a: VCI) = "" + a
- |def f6(u: Unit) = "" + u
- |
- |def n1: AnyRef = null
- |def n2: Null = null
- |def n3: Any = null
- |def n4[T]: T = null.asInstanceOf[T]
- |
- |def npe(s: => String) = try { s; throw new Error() } catch { case _: NullPointerException => "npe" }
- |
- | f1(null.asInstanceOf[Int]) +
- | f1( n1.asInstanceOf[Int]) +
- | f1( n2.asInstanceOf[Int]) +
- | f1( n3.asInstanceOf[Int]) +
- | f1( n4[Int]) + // "null"
- |"-" +
- | f1(null.asInstanceOf[VCI]) +
- |npe(f1( n1.asInstanceOf[VCI])) + // SI-8097
- | f1( n2.asInstanceOf[VCI]) +
- |npe(f1( n3.asInstanceOf[VCI])) + // SI-8097
- | f1( n4[VCI]) + // "null"
- |"-" +
- | f1(null.asInstanceOf[Unit]) +
- | f1( n1.asInstanceOf[Unit]) +
- | f1( n2.asInstanceOf[Unit]) +
- | f1( n3.asInstanceOf[Unit]) +
- | f1( n4[Unit]) + // "null"
- |"-" +
- | f2(null.asInstanceOf[Int]) +
- | f2( n1.asInstanceOf[Int]) +
- | f2( n2.asInstanceOf[Int]) +
- | f2( n3.asInstanceOf[Int]) +
- | f2( n4[Int]) + // "null"
- |"-" +
- | f2(null.asInstanceOf[VCI]) +
- |npe(f2( n1.asInstanceOf[VCI])) + // SI-8097
- | f2( n2.asInstanceOf[VCI]) +
- |npe(f2( n3.asInstanceOf[VCI])) + // SI-8097
- | f2( n4[VCI]) + // "null"
- |"-" +
- | f2(null.asInstanceOf[Unit]) +
- | f2( n1.asInstanceOf[Unit]) +
- | f2( n2.asInstanceOf[Unit]) +
- | f2( n3.asInstanceOf[Unit]) +
- | f2( n4[Unit]) + // "null"
- |"-" +
- | f3(null.asInstanceOf[Int]) +
- | f3( n1.asInstanceOf[Int]) +
- | f3( n2.asInstanceOf[Int]) +
- | f3( n3.asInstanceOf[Int]) +
- | f3( n4[Int]) + // "null"
- |"-" +
- | f3(null.asInstanceOf[VCI]) +
- |npe(f3( n1.asInstanceOf[VCI])) + // SI-8097
- | f3( n2.asInstanceOf[VCI]) +
- |npe(f3( n3.asInstanceOf[VCI])) + // SI-8097
- | f3( n4[VCI]) + // "null"
- |"-" +
- | f3(null.asInstanceOf[Unit]) +
- | f3( n1.asInstanceOf[Unit]) +
- | f3( n2.asInstanceOf[Unit]) +
- | f3( n3.asInstanceOf[Unit]) +
- | f3( n4[Unit]) + // "null"
- |"-" +
- | f4(null.asInstanceOf[Int]) +
- | f4( n1.asInstanceOf[Int]) +
- | f4( n2.asInstanceOf[Int]) +
- | f4( n3.asInstanceOf[Int]) +
- | f4( n4[Int]) +
- |"-" +
- | f5(null.asInstanceOf[VCI]) +
- |npe(f5( n1.asInstanceOf[VCI])) + // SI-8097
- | f5( n2.asInstanceOf[VCI]) +
- |npe(f5( n3.asInstanceOf[VCI])) + // SI-8097
- |npe(f5( n4[VCI])) + // SI-8097
- |"-" +
- | f6(null.asInstanceOf[Unit]) +
- | f6( n1.asInstanceOf[Unit]) +
- | f6( n2.asInstanceOf[Unit]) +
- | f6( n3.asInstanceOf[Unit]) +
- | f6( n4[Unit]) // "null"
- """.stripMargin
-
- assertEquals(run[String](code),
+ import scala.lang.primitives.BoxUnboxTest.VCI
+
+ def f1(a: Any) = "" + a
+ def f2(a: AnyVal) = "" + a
+ def f3[T](a: T) = "" + a
+ def f4(a: Int) = "" + a
+ def f5(a: VCI) = "" + a
+ def f6(u: Unit) = "" + u
+
+ def n1: AnyRef = null
+ def n2: Null = null
+ def n3: Any = null
+ def n4[T]: T = null.asInstanceOf[T]
+
+ def npe(s: => String) = try { s; throw new Error() } catch { case _: NullPointerException => "npe" }
+
+ val result =
+ f1(null.asInstanceOf[Int]) +
+ f1( n1.asInstanceOf[Int]) +
+ f1( n2.asInstanceOf[Int]) +
+ f1( n3.asInstanceOf[Int]) +
+ f1( n4[Int]) + // "null"
+ "-" +
+ f1(null.asInstanceOf[VCI]) +
+ npe(f1( n1.asInstanceOf[VCI])) + // SI-8097
+ f1( n2.asInstanceOf[VCI]) +
+ npe(f1( n3.asInstanceOf[VCI])) + // SI-8097
+ f1( n4[VCI]) + // "null"
+ "-" +
+ f1(null.asInstanceOf[Unit]) +
+ f1( n1.asInstanceOf[Unit]) +
+ f1( n2.asInstanceOf[Unit]) +
+ f1( n3.asInstanceOf[Unit]) +
+ f1( n4[Unit]) + // "null"
+ "-" +
+ f2(null.asInstanceOf[Int]) +
+ f2( n1.asInstanceOf[Int]) +
+ f2( n2.asInstanceOf[Int]) +
+ f2( n3.asInstanceOf[Int]) +
+ f2( n4[Int]) + // "null"
+ "-" +
+ f2(null.asInstanceOf[VCI]) +
+ npe(f2( n1.asInstanceOf[VCI])) + // SI-8097
+ f2( n2.asInstanceOf[VCI]) +
+ npe(f2( n3.asInstanceOf[VCI])) + // SI-8097
+ f2( n4[VCI]) + // "null"
+ "-" +
+ f2(null.asInstanceOf[Unit]) +
+ f2( n1.asInstanceOf[Unit]) +
+ f2( n2.asInstanceOf[Unit]) +
+ f2( n3.asInstanceOf[Unit]) +
+ f2( n4[Unit]) + // "null"
+ "-" +
+ f3(null.asInstanceOf[Int]) +
+ f3( n1.asInstanceOf[Int]) +
+ f3( n2.asInstanceOf[Int]) +
+ f3( n3.asInstanceOf[Int]) +
+ f3( n4[Int]) + // "null"
+ "-" +
+ f3(null.asInstanceOf[VCI]) +
+ npe(f3( n1.asInstanceOf[VCI])) + // SI-8097
+ f3( n2.asInstanceOf[VCI]) +
+ npe(f3( n3.asInstanceOf[VCI])) + // SI-8097
+ f3( n4[VCI]) + // "null"
+ "-" +
+ f3(null.asInstanceOf[Unit]) +
+ f3( n1.asInstanceOf[Unit]) +
+ f3( n2.asInstanceOf[Unit]) +
+ f3( n3.asInstanceOf[Unit]) +
+ f3( n4[Unit]) + // "null"
+ "-" +
+ f4(null.asInstanceOf[Int]) +
+ f4( n1.asInstanceOf[Int]) +
+ f4( n2.asInstanceOf[Int]) +
+ f4( n3.asInstanceOf[Int]) +
+ f4( n4[Int]) +
+ "-" +
+ f5(null.asInstanceOf[VCI]) +
+ npe(f5( n1.asInstanceOf[VCI])) + // SI-8097
+ f5( n2.asInstanceOf[VCI]) +
+ npe(f5( n3.asInstanceOf[VCI])) + // SI-8097
+ npe(f5( n4[VCI])) + // SI-8097
+ "-" +
+ f6(null.asInstanceOf[Unit]) +
+ f6( n1.asInstanceOf[Unit]) +
+ f6( n2.asInstanceOf[Unit]) +
+ f6( n3.asInstanceOf[Unit]) +
+ f6( n4[Unit]) // "null"
+ assertEquals(result,
"0000null-0npe0npenull-()()()()null-0000null-0npe0npenull-()()()()null-0000null-0npe0npenull-()()()()null-00000-0npe0npenpe-()()()()null")
}
+
}
diff --git a/test/junit/scala/lang/traits/BytecodeTest.scala b/test/junit/scala/lang/traits/BytecodeTest.scala
index cf658288c4..ccf53fe3b1 100644
--- a/test/junit/scala/lang/traits/BytecodeTest.scala
+++ b/test/junit/scala/lang/traits/BytecodeTest.scala
@@ -17,6 +17,8 @@ import scala.tools.testing.BytecodeTesting._
class BytecodeTest extends BytecodeTesting {
import compiler._
+ val noForwardersCompiler = newCompiler(extraArgs = "-Xmixin-force-forwarders:false")
+
def checkForwarder(classes: Map[String, ClassNode], clsName: Symbol, target: String) = {
val f = getMethod(classes(clsName.name), "f")
assertSameCode(f, List(VarOp(ALOAD, 0), Invoke(INVOKESTATIC, target, "f$", s"(L$target;)I", true), Op(IRETURN)))
@@ -73,7 +75,7 @@ class BytecodeTest extends BytecodeTesting {
|class C20 extends T8
""".stripMargin
- val c = compileClasses(code).map(c => (c.name, c)).toMap
+ val c = noForwardersCompiler.compileClasses(code).map(c => (c.name, c)).toMap
val noForwarder = List('C1, 'C2, 'C3, 'C4, 'C10, 'C11, 'C12, 'C13, 'C16, 'C17)
for (cn <- noForwarder) assertEquals(getMethods(c(cn.name), "f"), Nil)
@@ -98,7 +100,7 @@ class BytecodeTest extends BytecodeTesting {
|trait T2 { def f(x: String) = 1 }
|class C extends T1 with T2
""".stripMargin
- val List(c, t1, t2) = compileClasses(code)
+ val List(c, t1, t2) = noForwardersCompiler.compileClasses(code)
assertEquals(getMethods(c, "f"), Nil)
}
@@ -129,7 +131,7 @@ class BytecodeTest extends BytecodeTesting {
|
|class K12 extends J2 with T2
""".stripMargin
- val c = compileClasses(code, List(j1, j2, j3, j4)).map(c => (c.name, c)).toMap
+ val c = noForwardersCompiler.compileClasses(code, List(j1, j2, j3, j4)).map(c => (c.name, c)).toMap
val noForwarder = List('K1, 'K2, 'K3, 'K4, 'K5, 'K6, 'K7, 'K8, 'K9, 'K10, 'K11)
for (cn <- noForwarder) assertEquals(getMethods(c(cn.name), "f"), Nil)
@@ -139,7 +141,7 @@ class BytecodeTest extends BytecodeTesting {
@Test
def invocationReceivers(): Unit = {
- val List(c1, c2, t, u) = compileClasses(invocationReceiversTestCode.definitions("Object"))
+ val List(c1, c2, t, u) = noForwardersCompiler.compileClasses(invocationReceiversTestCode.definitions("Object"))
// mixin forwarder in C1
assertSameCode(getMethod(c1, "clone"), List(VarOp(ALOAD, 0), Invoke(INVOKESTATIC, "T", "clone$", "(LT;)Ljava/lang/Object;", true), Op(ARETURN)))
assertInvoke(getMethod(c1, "f1"), "T", "clone")
@@ -149,7 +151,7 @@ class BytecodeTest extends BytecodeTesting {
assertInvoke(getMethod(c2, "f2"), "T", "clone")
assertInvoke(getMethod(c2, "f3"), "C1", "clone")
- val List(c1b, c2b, tb, ub) = compileClasses(invocationReceiversTestCode.definitions("String"))
+ val List(c1b, c2b, tb, ub) = noForwardersCompiler.compileClasses(invocationReceiversTestCode.definitions("String"))
def ms(c: ClassNode, n: String) = c.methods.asScala.toList.filter(_.name == n)
assert(ms(tb, "clone").length == 1)
assert(ms(ub, "clone").isEmpty)
@@ -235,8 +237,8 @@ class BytecodeTest extends BytecodeTesting {
"""trait T { def f = 1 }
|class C extends T
""".stripMargin
- val List(c1, _) = compileClasses(code)
- val List(c2, _) = newCompiler(extraArgs = "-Xmixin-force-forwarders:true").compileClasses(code)
+ val List(c1, _) = noForwardersCompiler.compileClasses(code)
+ val List(c2, _) = compileClasses(code)
assert(getMethods(c1, "f").isEmpty)
assertSameCode(getMethod(c2, "f"),
List(VarOp(ALOAD, 0), Invoke(INVOKESTATIC, "T", "f$", "(LT;)I", true), Op(IRETURN)))
@@ -301,7 +303,6 @@ class BytecodeTest extends BytecodeTesting {
@Test
def sd210(): Unit = {
- val forwardersCompiler = newCompiler(extraArgs = "-Xmixin-force-forwarders:true")
val jCode = List("interface A { default int m() { return 1; } }" -> "A.java")
@@ -311,14 +312,13 @@ class BytecodeTest extends BytecodeTesting {
|class C extends B1
""".stripMargin
- val List(_, c1a) = compileClasses(code1, jCode)
+ val List(_, c1a) = noForwardersCompiler.compileClasses(code1, jCode)
assert(getAsmMethods(c1a, "m").isEmpty) // ok, no forwarder
// here we test a warning. without `-Xmixin-force-forwarders:true`, the forwarder would not be
// generated, it is not necessary for correctness.
- val warn = "Unable to implement a mixin forwarder for method m in class C unless interface A is directly extended by class C"
- val List(_, c1b) = forwardersCompiler.compileClasses(code1, jCode, allowMessage = _.msg.contains(warn))
- assert(getAsmMethods(c1a, "m").isEmpty) // no forwarder
+ val List(_, c1b) = compileClasses(code1, jCode)
+ assert(getAsmMethods(c1b, "m").isEmpty) // no forwarder: it cannot be implemented because A is not a direct parent of C
val code2 =
@@ -366,6 +366,199 @@ class BytecodeTest extends BytecodeTesting {
val ins5 = getMethod(c5, "m").instructions
assert(ins5 contains Invoke(INVOKESTATIC, "AS", "m$", "(LAS;)I", true), ins5.stringLines)
}
+
+ @Test
+ def sd224(): Unit = {
+ val jCode = List("interface T { default int f() { return 1; } }" -> "T.java")
+ val code =
+ """trait U extends T
+ |class C extends U { def t = super.f }
+ """.stripMargin
+ val msg = "unable to emit super call unless interface T (which declares method f) is directly extended by class C"
+ val cls = compileClasses(code, jCode, allowMessage = _.msg contains msg)
+ assertEquals(cls, Nil)
+ }
+
+ def ifs(c: ClassNode, expected: List[String]) = assertEquals(expected, c.interfaces.asScala.toList.sorted)
+ def invSt(m: Method, receiver: String, method: String = "f$", itf: Boolean = true): Unit =
+ assert(m.instructions contains Invoke(INVOKESTATIC, receiver, method, s"(L$receiver;)I", itf), m.instructions.stringLines)
+ def invSp(m: Method, receiver: String, method: String = "f", sig: String = "()I", itf: Boolean = true): Unit =
+ assert(m.instructions contains Invoke(INVOKESPECIAL, receiver, method, sig, itf), m.instructions.stringLines)
+
+ @Test
+ def superCalls1(): Unit = {
+ val code =
+ """trait T { def f = 1 }
+ |trait U extends T
+ |class C extends U { def t = super.f }
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("U"))
+ invSt(getMethod(c, "t"), "T")
+ invSt(getMethod(c, "f"), "T")
+ }
+
+ @Test
+ def superCalls2(): Unit = {
+ val code =
+ """class A { def f = 1 }
+ |trait T extends A { override def f = 2 }
+ |class B extends A
+ |class C extends B with T {
+ | def t1 = super.f
+ | def t2 = super[T].f
+ | def t3 = super[B].f
+ |}
+ """.stripMargin
+ val List(_, _, c, _) = compileClasses(code)
+ invSt(getMethod(c, "f"), "T")
+ invSt(getMethod(c, "t1"), "T")
+ invSt(getMethod(c, "t2"), "T")
+ invSp(getMethod(c, "t3"), "A", itf = false)
+ }
+
+ @Test
+ def superCalls3(): Unit = {
+ val code =
+ """class A { def f = 1 }
+ |trait T extends A
+ |class B extends A { override def f = 2 }
+ |class C extends B with T {
+ | def t1 = super.f
+ | // def t2 = super[T].f // error: cannot emit super call. tested in sd143
+ | def t3 = super[B].f
+ |}
+ """.stripMargin
+ val List(_, _, c, _) = compileClasses(code)
+ invSp(getMethod(c, "t1"), "B", itf = false)
+ invSp(getMethod(c, "t3"), "B", itf = false)
+ assertEquals(getMethods(c, "f"), Nil)
+ }
+
+ @Test
+ def superCalls4(): Unit = {
+ val code =
+ """trait T1 { def f = 1 }
+ |trait T2 { self: T1 => override def f = 2 }
+ |trait U extends T1 with T2
+ |class C extends U {
+ | def t1 = super.f
+ | def t2 = super[U].f
+ |}
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("U"))
+ invSt(getMethod(c, "f"), "T2")
+ invSt(getMethod(c, "t1"), "T2")
+ invSt(getMethod(c, "t2"), "T2")
+ }
+
+ @Test
+ def superCalls5(): Unit = {
+ val code =
+ """trait T1 { def f = 1 }
+ |trait T2 { self: T1 => override def f = 2 }
+ |trait U extends T1 with T2
+ |class C extends U with T1 with T2
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("U")) // T1, T2 removed by minimizeParents
+ invSt(getMethod(c, "f"), "T2")
+ }
+
+ @Test
+ def superCalls6(): Unit = {
+ val code =
+ """trait T { override def hashCode = -1 }
+ |trait U extends T
+ |class C extends U {
+ | def t1 = super[U].hashCode
+ | def t2 = super.hashCode
+ |}
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("U"))
+ invSt(getMethod(c, "hashCode"), "T", "hashCode$")
+ invSt(getMethod(c, "t1"), "T", "hashCode$")
+ invSt(getMethod(c, "t2"), "T", "hashCode$")
+ }
+
+ @Test
+ def superCalls7(): Unit = {
+ val code =
+ """trait T { def f = 1 }
+ |trait U1 extends T { override def f = 2 }
+ |trait U2 extends T { override def f = 3 }
+ |class C1 extends T with U1 with U2 {
+ | def t1 = super.f
+ | def t2 = super[T].f
+ | def t3 = super[U1].f
+ | def t4 = super[U2].f
+ |}
+ |class C2 extends T with U2 with U1 {
+ | def t1 = super.f
+ |}
+ """.stripMargin
+ val List(c1, c2, _*) = compileClasses(code)
+ ifs(c1, List("U1", "U2"))
+ ifs(c2, List("U1", "U2"))
+ invSt(getMethod(c1, "f"), "U2")
+ invSt(getMethod(c1, "t1"), "U2")
+ invSt(getMethod(c1, "t2"), "T")
+ invSt(getMethod(c1, "t3"), "U1")
+ invSt(getMethod(c1, "t4"), "U2")
+ invSt(getMethod(c2, "f"), "U1")
+ invSt(getMethod(c2, "t1"), "U1")
+ }
+
+ @Test
+ def superCalls8(): Unit = {
+ val code =
+ """trait T1 { def f = 1 }
+ |trait T2 { _: T1 => override def f = 2 }
+ |trait U extends T1 with T2
+ |trait V extends U with T2
+ |class C extends V {
+ | def t1 = super.f
+ | def t2 = super[V].f
+ |}
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("V"))
+ invSt(getMethod(c, "f"), "T2")
+ invSt(getMethod(c, "t1"), "T2")
+ invSt(getMethod(c, "t2"), "T2")
+ }
+
+ @Test
+ def superCalls9(): Unit = {
+ val code =
+ """trait T { def f: Int }
+ |trait U1 extends T { def f = 0 }
+ |trait U2 extends T { override def f = 1 }
+ |trait V extends U1
+ |
+ |trait W1 extends V with U2
+ |class C1 extends W1 with U2
+ |
+ |trait W2 extends V with U2 { override def f = super[U2].f }
+ |class C2 extends W2 with U2
+ |
+ |trait W3 extends V with U2 { override def f = super.f }
+ |class C3 extends W3 with U2
+ """.stripMargin
+ val List(c1, c2, c3, _*) = compileClasses(code)
+
+ ifs(c1, List("W1"))
+ invSt(getMethod(c1, "f"), "U2")
+
+ ifs(c2, List("W2"))
+ invSt(getMethod(c2, "f"), "W2")
+
+ ifs(c3, List("W3"))
+ invSt(getMethod(c3, "W3$$super$f"), "U2")
+ invSt(getMethod(c3, "f"), "W3")
+ }
}
object invocationReceiversTestCode {
diff --git a/test/junit/scala/runtime/ScalaRunTimeTest.scala b/test/junit/scala/runtime/ScalaRunTimeTest.scala
index 5bfb12610e..ba3bf0b703 100644
--- a/test/junit/scala/runtime/ScalaRunTimeTest.scala
+++ b/test/junit/scala/runtime/ScalaRunTimeTest.scala
@@ -9,7 +9,7 @@ import org.junit.runners.JUnit4
@RunWith(classOf[JUnit4])
class ScalaRunTimeTest {
@Test
- def testStingOf() {
+ def testStringOf() {
import ScalaRunTime.stringOf
import scala.collection._
import parallel.ParIterable
diff --git a/test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala b/test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala
index b09a41969e..00b6d1cc42 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala
@@ -187,4 +187,12 @@ class BytecodeTest extends BytecodeTesting {
List(Label(0), LineNumber(2, Label(0)), VarOp(ALOAD, 0), Invoke(INVOKESPECIAL, "T", "t", "()V", true), Op(RETURN), Label(4))
)
}
+
+ @Test
+ def sd233(): Unit = {
+ val code = "def f = { println(1); synchronized(println(2)) }"
+ val m = compileMethod(code)
+ val List(ExceptionHandler(_, _, _, desc)) = m.handlers
+ assert(desc == None, desc)
+ }
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala b/test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala
index 38285fbce1..a28599cd92 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala
@@ -1,9 +1,7 @@
package scala.tools.nsc.backend.jvm
-import java.nio.file.{Files, Paths}
-
import org.junit.Assert._
-import org.junit.{Ignore, Test}
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala
index c23c60f7ad..42a2c417a0 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala
@@ -2,7 +2,7 @@ package scala.tools.nsc
package backend.jvm
package opt
-import org.junit.{Ignore, Test}
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -83,9 +83,7 @@ class BTypesFromClassfileTest extends BytecodeTesting {
sameBType(fromSymbol, fromClassfile)
}
- // Can be enabled when using 2.12.0-M5 as starr. This test works under a full boostrap, but not
- // when compiled with M4.
- @Test @Ignore
+ @Test
def compareClassBTypes(): Unit = {
// Note that not only these classes are tested, but also all their parents and all nested
// classes in their InnerClass attributes.
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala
index 85b44d9fa0..95b47f7d04 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala
@@ -198,7 +198,9 @@ class InlineWarningTest extends BytecodeTesting {
|Note that class A is defined in a Java source (mixed compilation), no bytecode is available.""".stripMargin
)
var c = 0
- compileClasses(sCode, javaCode = List((jCode, "A.java")), allowMessage = i => { c += 1; warns.exists(i.msg.contains)})
+ compileClasses(sCode, javaCode = List((jCode, "A.java")), allowMessage = i => { c += 1;
+ warns.exists(i.msg.contains)
+ })
assert(c == 2)
}
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala
index a2513cacdc..5362585642 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala
@@ -13,7 +13,7 @@ class InlinerSeparateCompilationTest {
val args = "-opt:l:classpath"
@Test
- def inlnieMixedinMember(): Unit = {
+ def inlineMixedinMember(): Unit = {
val codeA =
"""trait T {
| @inline def f = 0
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala
index 9999cdb376..a844c20a7f 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala
@@ -3,7 +3,7 @@ package backend.jvm
package opt
import org.junit.Assert._
-import org.junit.{Ignore, Test}
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -475,7 +475,7 @@ class InlinerTest extends BytecodeTesting {
| def t2 = this.f
|}
""".stripMargin
- val warn = "T::f()I is annotated @inline but cannot be inlined: the method is not final and may be overridden"
+ val warn = "::f()I is annotated @inline but cannot be inlined: the method is not final and may be overridden"
var count = 0
val List(c, t) = compile(code, allowMessage = i => {count += 1; i.msg contains warn})
assert(count == 2, count)
@@ -1486,9 +1486,7 @@ class InlinerTest extends BytecodeTesting {
assertSameSummary(getMethod(c, "t"), List(NEW, "<init>", ICONST_1, IRETURN)) // ICONST_1, U.f is inlined (not T.f)
}
- // Can be enabled when using 2.12.0-M5 as starr. This test works under a full boostrap, but not
- // when compiled with M4.
- @Test @Ignore
+ @Test
def inlineArrayForeach(): Unit = {
val code =
"""class C {
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala
index eae5385147..073eba7aa6 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala
@@ -105,9 +105,11 @@ class ScalaInlineInfoTest extends BytecodeTesting {
("x4$(LT;)I", MethodInlineInfo(true ,false,false)),
("x5()I", MethodInlineInfo(true, false,false)),
("x5$(LT;)I", MethodInlineInfo(true ,false,false)),
- ("L$1(Lscala/runtime/VolatileObjectRef;)LT$L$2$;", MethodInlineInfo(true, false,false)),
+ ("L$1(Lscala/runtime/LazyRef;)LT$L$2$;", MethodInlineInfo(true, false,false)),
("nest$1()I", MethodInlineInfo(true, false,false)),
- ("$init$(LT;)V", MethodInlineInfo(true,false,false))),
+ ("$init$(LT;)V", MethodInlineInfo(true,false,false)),
+ ("L$lzycompute$1(Lscala/runtime/LazyRef;)LT$L$2$;", MethodInlineInfo(true,false,false))
+ ),
None // warning
)
@@ -117,6 +119,10 @@ class ScalaInlineInfoTest extends BytecodeTesting {
val infoC = inlineInfo(c)
val expectC = InlineInfo(false, None, Map(
"O()LT$O$;" -> MethodInlineInfo(true ,false,false),
+ "f1()I" -> MethodInlineInfo(false,false,false),
+ "f3()I" -> MethodInlineInfo(false,false,false),
+ "f4()Ljava/lang/String;" -> MethodInlineInfo(false,true,false),
+ "f5()I" -> MethodInlineInfo(true,false,false),
"f6()I" -> MethodInlineInfo(false,false,false),
"x1()I" -> MethodInlineInfo(false,false,false),
"T$_setter_$x1_$eq(I)V" -> MethodInlineInfo(false,false,false),
@@ -126,9 +132,10 @@ class ScalaInlineInfoTest extends BytecodeTesting {
"x3_$eq(I)V" -> MethodInlineInfo(false,false,false),
"x4$lzycompute()I" -> MethodInlineInfo(true ,false,false),
"x4()I" -> MethodInlineInfo(false,false,false),
-// "x5()I" -> MethodInlineInfo(true ,false,false), -- there is no x5 in the class as it's implemented fully in the interface
"T$$super$toString()Ljava/lang/String;" -> MethodInlineInfo(true ,false,false),
- "<init>()V" -> MethodInlineInfo(false,false,false)),
+ "<init>()V" -> MethodInlineInfo(false,false,false),
+ "O$lzycompute$1()V" -> MethodInlineInfo(true,false,false)
+ ),
None)
assert(infoC == expectC, mapDiff(expectC.methodInfos, infoC.methodInfos) + infoC)
@@ -179,6 +186,7 @@ class ScalaInlineInfoTest extends BytecodeTesting {
val infoC = inlineInfo(c)
val expected = Map(
"<init>()V" -> MethodInlineInfo(false,false,false),
+ "O$lzycompute$1()V" -> MethodInlineInfo(true,false,false),
"O()LC$O$;" -> MethodInlineInfo(true,false,false))
assert(infoC.methodInfos == expected, mapDiff(infoC.methodInfos, expected))
assertSameMethods(c, expected.keySet)
diff --git a/test/junit/scala/tools/nsc/settings/SettingsTest.scala b/test/junit/scala/tools/nsc/settings/SettingsTest.scala
index 0f2d206273..24bfb3dcde 100644
--- a/test/junit/scala/tools/nsc/settings/SettingsTest.scala
+++ b/test/junit/scala/tools/nsc/settings/SettingsTest.scala
@@ -180,4 +180,71 @@ class SettingsTest {
assertThrows[IllegalArgumentException](check(expected = "2.11", "-Xsource", "2.11"), _ == "-Xsource requires an argument, the syntax is -Xsource:<version>")
assertThrows[IllegalArgumentException](check(expected = "2.11", "-Xsource:2.invalid"), _ contains "Bad version (2.invalid)")
}
+
+ // equal with stripped margins and normalized line endings
+ private def marginallyEquals(s1: String, s2: String): Boolean = {
+ def normally(s: String): String = s.stripMargin.lines.mkString("\n")
+ normally(s1) == normally(s2)
+ }
+
+ @Test def helpHasDefault(): Unit = {
+ val s = new MutableSettings(msg => throw new IllegalArgumentException(msg))
+ object mChoices extends s.MultiChoiceEnumeration {
+ val a = Choice("a", "help a")
+ val b = Choice("b", "help b")
+ val c = Choice("c", "help c")
+ }
+ val m = s.MultiChoiceSetting("-m", "args", "magic sauce", mChoices, Some(List("b")))
+
+ def check(args: String*)(t: s.MultiChoiceSetting[mChoices.type] => Boolean): Boolean = {
+ m.clear()
+ val (ok, rest) = s.processArguments(args.toList, processAll = true)
+ assert(rest.isEmpty)
+ t(m)
+ }
+
+ import mChoices._
+
+ assertTrue(check("-m")(_.value == Set(b)))
+ assertTrue(check("-m") { _ =>
+ val expected =
+ """|magic sauce
+ | a help a
+ | b help b
+ | c help c
+ |Default: b
+ |"""
+ marginallyEquals(expected, m.help)
+ })
+ }
+ @Test def helpHasDefaultAll(): Unit = {
+ val s = new MutableSettings(msg => throw new IllegalArgumentException(msg))
+ object mChoices extends s.MultiChoiceEnumeration {
+ val a = Choice("a", "help a")
+ val b = Choice("b", "help b")
+ val c = Choice("c", "help c")
+ }
+ val m = s.MultiChoiceSetting("-m", "args", "magic sauce", mChoices, Some(List("_")))
+
+ def check(args: String*)(t: s.MultiChoiceSetting[mChoices.type] => Boolean): Boolean = {
+ m.clear()
+ val (ok, rest) = s.processArguments(args.toList, processAll = true)
+ assert(rest.isEmpty)
+ t(m)
+ }
+
+ import mChoices._
+
+ assertTrue(check("-m")(_.value == Set(a, b, c)))
+ assertTrue(check("-m") { _ =>
+ val expected =
+ """|magic sauce
+ | a help a
+ | b help b
+ | c help c
+ |Default: All choices are enabled by default.
+ |"""
+ marginallyEquals(expected, m.help)
+ })
+ }
}
diff --git a/test/junit/scala/tools/nsc/symtab/StdNamesTest.scala b/test/junit/scala/tools/nsc/symtab/StdNamesTest.scala
index 91f94e09b6..5949008d8a 100644
--- a/test/junit/scala/tools/nsc/symtab/StdNamesTest.scala
+++ b/test/junit/scala/tools/nsc/symtab/StdNamesTest.scala
@@ -2,16 +2,17 @@ package scala.tools.nsc
package symtab
import org.junit.Assert._
-import scala.tools.testing.AssertUtil._
-import org.junit.{Ignore, Test}
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.tools.testing.AssertUtil._
+
@RunWith(classOf[JUnit4])
class StdNamesTest {
object symbolTable extends SymbolTableForUnitTesting
import symbolTable._
- import nme.{SPECIALIZED_SUFFIX, unspecializedName, splitSpecializedName}
+ import nme.{SPECIALIZED_SUFFIX, splitSpecializedName, unspecializedName}
@Test
def testNewTermNameInvalid(): Unit = {
diff --git a/test/junit/scala/util/SpecVersionTest.scala b/test/junit/scala/util/SpecVersionTest.scala
index e3e7a978f2..4639389dd9 100644
--- a/test/junit/scala/util/SpecVersionTest.scala
+++ b/test/junit/scala/util/SpecVersionTest.scala
@@ -6,13 +6,16 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.tools.testing.AssertUtil._
+
/** The java version property uses the spec version
- * and must work for all "major.minor" and fail otherwise.
+ * and must work for legacy "major.minor" and plain version_number,
+ * and fail otherwise.
*/
@RunWith(classOf[JUnit4])
class SpecVersionTest {
- val sut = new PropertiesTrait {
- override def javaSpecVersion = "1.7"
+ class TestProperties(versionAt: String) extends PropertiesTrait {
+ override def javaSpecVersion = versionAt
override protected def pickJarBasedOn: Class[_] = ???
override protected def propCategory: String = "test"
@@ -21,37 +24,80 @@ class SpecVersionTest {
override lazy val scalaProps = new java.util.Properties
}
+ @Test
+ def comparesJDK9Correctly(): Unit = {
+ val sut9 = new TestProperties("9")
+ assert(sut9 isJavaAtLeast "1")
+ assert(sut9 isJavaAtLeast "1.5")
+ assert(sut9 isJavaAtLeast "5")
+ assert(sut9 isJavaAtLeast "1.8")
+ assert(sut9 isJavaAtLeast "8")
+ assert(sut9 isJavaAtLeast "9")
+ assert(sut9.isJavaAtLeast(9))
+ assertFalse(sut9.isJavaAtLeast(10))
+ assertFalse(sut9.isJavaAtLeast("10"))
+ }
+
// SI-7265
@Test
def comparesCorrectly(): Unit = {
- assert(sut isJavaAtLeast "1.5")
- assert(sut isJavaAtLeast "1.6")
- assert(sut isJavaAtLeast "1.7")
- assert(!(sut isJavaAtLeast "1.8"))
- assert(!(sut isJavaAtLeast "1.71"))
- }
- @Test(expected = classOf[NumberFormatException])
- def badVersion(): Unit = {
- sut isJavaAtLeast "1.a"
+ val sut7 = new TestProperties("1.7")
+ assert(sut7 isJavaAtLeast "1")
+ assert(sut7 isJavaAtLeast "1.5")
+ assert(sut7 isJavaAtLeast "5")
+ assert(sut7 isJavaAtLeast "1.6")
+ assert(sut7 isJavaAtLeast "1.7")
+ assert(sut7.isJavaAtLeast(7))
+ assertFalse(sut7.isJavaAtLeast(9))
+ assertFalse(sut7 isJavaAtLeast "1.8")
+ assertFalse(sut7 isJavaAtLeast "9")
+ assertFalse(sut7 isJavaAtLeast "10")
}
- @Test(expected = classOf[NumberFormatException])
- def missingVersion(): Unit = {
- sut isJavaAtLeast "1"
- }
- @Test(expected = classOf[NumberFormatException])
- def noVersion(): Unit = {
- sut isJavaAtLeast ""
+
+ @Test def variousBadVersionStrings(): Unit = {
+ val sut = new TestProperties("9")
+ assertThrows[NumberFormatException](sut.isJavaAtLeast("1.9"), _ == "Not a version: 1.9")
+ assertThrows[NumberFormatException](sut.isJavaAtLeast("1."))
+ assertThrows[NumberFormatException](sut.isJavaAtLeast("1.8."))
+ assertThrows[NumberFormatException](sut.isJavaAtLeast("1.a"))
+ assertThrows[NumberFormatException](sut.isJavaAtLeast(""))
+ assertThrows[NumberFormatException](sut.isJavaAtLeast("."))
+ assertThrows[NumberFormatException](sut.isJavaAtLeast(".."))
+ assertThrows[NumberFormatException](sut.isJavaAtLeast(".5"))
+ assertThrows[NumberFormatException](sut.isJavaAtLeast("9-ea")) //version number, not version string
}
- @Test(expected = classOf[NumberFormatException])
- def dotOnly(): Unit = {
- sut isJavaAtLeast "."
+
+ @Test def `spec has minor or more`(): Unit = {
+ val sut = new TestProperties("9.2.5")
+ assert(sut.isJavaAtLeast(9))
+ assert(sut.isJavaAtLeast("9"))
+ assert(sut.isJavaAtLeast("9.0.1"))
+ assert(sut.isJavaAtLeast("9.2.1"))
+ assert(sut.isJavaAtLeast("8.3.1"))
+ assert(sut.isJavaAtLeast("8.3.1.1.1"))
+ assertFalse(sut.isJavaAtLeast("9.3.1"))
+ assertFalse(sut.isJavaAtLeast("10.3.1"))
}
- @Test(expected = classOf[NumberFormatException])
- def leadingDot(): Unit = {
- sut isJavaAtLeast ".5"
+
+ @Test def `compares only major minor security`(): Unit = {
+ val sut = new TestProperties("9.2.5.1.2.3")
+ assert(sut.isJavaAtLeast(9))
+ assert(sut.isJavaAtLeast("9"))
+ assert(sut.isJavaAtLeast("9.0.1"))
+ assert(sut.isJavaAtLeast("9.2.5.9.9.9"))
+ assertFalse(sut.isJavaAtLeast("9.2.6"))
}
- @Test(expected = classOf[NumberFormatException])
- def notASpec(): Unit = {
- sut isJavaAtLeast "1.7.1"
+
+ @Test def `futurely proofed`(): Unit = {
+ val sut = new TestProperties("10.2.5")
+ assert(sut.isJavaAtLeast(9))
+ assert(sut.isJavaAtLeast(10))
+ assert(sut.isJavaAtLeast("9"))
+ assert(sut.isJavaAtLeast("9.0.1"))
+ assert(sut.isJavaAtLeast("9.2.1"))
+ assert(sut.isJavaAtLeast("8.3.1"))
+ assert(sut.isJavaAtLeast("8.3.1.1.1"))
+ assert(sut.isJavaAtLeast("9.3.1"))
+ assertFalse(sut.isJavaAtLeast("10.3.1"))
}
}
diff --git a/tools/get-scala-commit-date b/tools/get-scala-commit-date
index b2e4e10770..6511ed98ca 100755
--- a/tools/get-scala-commit-date
+++ b/tools/get-scala-commit-date
@@ -10,8 +10,13 @@
[[ $# -eq 0 ]] || cd "$1"
-lastcommitdate=$(git log --format="%ci" HEAD | head -n 1 | cut -d ' ' -f 1)
-lastcommithours=$(git log --format="%ci" HEAD | head -n 1 | cut -d ' ' -f 2)
+if git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
+ lastcommitdate=$(git log --format="%ci" HEAD | head -n 1 | cut -d ' ' -f 1)
+ lastcommithours=$(git log --format="%ci" HEAD | head -n 1 | cut -d ' ' -f 2)
+else
+ lastcommitdate=$(date +%Y-%m-%d)
+ lastcommithours=$(date +%H:%M:%S)
+fi
# 20120324
echo "${lastcommitdate//-/}-${lastcommithours//:/}"
diff --git a/tools/get-scala-commit-sha b/tools/get-scala-commit-sha
index eab90a4215..18289c7ca8 100755
--- a/tools/get-scala-commit-sha
+++ b/tools/get-scala-commit-sha
@@ -10,9 +10,13 @@
[[ $# -eq 0 ]] || cd "$1"
-# printf %016s is not portable for 0-padding, has to be a digit.
-# so we're stuck disassembling it.
-hash=$(git log -1 --format="%H" HEAD)
-hash=${hash#g}
-hash=${hash:0:10}
+if git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
+ # printf %016s is not portable for 0-padding, has to be a digit.
+ # so we're stuck disassembling it.
+ hash=$(git log -1 --format="%H" HEAD)
+ hash=${hash#g}
+ hash=${hash:0:10}
+else
+ hash="unknown"
+fi
echo "$hash"
diff --git a/versions.properties b/versions.properties
index ed90768780..950f73baa1 100644
--- a/versions.properties
+++ b/versions.properties
@@ -1,25 +1,15 @@
-#Mon, 05 Oct 2015 14:25:00 +0000
-# NOTE: this file determines the content of the scala-distribution
-# via scala-dist-pom.xml and scala-library-all-pom.xml
-# when adding new properties that influence a release,
-# also add them to the update.versions mechanism in build.xml,
-# which is used by the release script scripts/jobs/integrate/bootstrap
+# Scala version used for bootstrapping. (This has no impact on the
+# final classfiles, since compiler and library are built first using
+# starr, then rebuilt using themselves.)
+starr.version=2.12.0-RC1-1e81a09
-# The scala version used for bootstrapping. This has no impact on the final classfiles:
-# there are two stages (locker and quick), so compiler and library are always built
-# with themselves. Stability is ensured by building a third stage (strap).
-starr.version=2.12.0-M5
-
-# These are the versions of the modules that go with this release.
-# These properties are used during PR validation and in dbuild builds.
-
-# The scala.binary.version determines how modules are resolved. For example, it
-# determines which partest artifact is being used for running the tests.
-# It has to be set in the following way:
+# Set in the following way:
# - After 2.x.0 is released, the binary version is 2.x.
# - During milestones and RCs, modules are cross-built against the full version.
# So the value is the full version (e.g. 2.12.0-M2).
-scala.binary.version=2.12.0-M5
+# Also determines how modules are resolved. For example, it determines which
+# partest artifact is being used for running the tests.
+scala.binary.version=2.12.0-RC1
# external modules shipped with distribution, as specified by scala-library-all's pom
scala-xml.version.number=1.0.5
@@ -27,14 +17,12 @@ scala-parser-combinators.version.number=1.0.4
scala-swing.version.number=2.0.0-M2
scala-swing.version.osgi=2.0.0.M2
jline.version=2.14.1
+# this one is shaded and embedded in scala-compiler.jar
scala-asm.version=5.1.0-scala-1
# external modules, used internally (not shipped)
partest.version.number=1.0.17
-# We've embedded these sources in partest-extras for now. After 2.12.0 is released
-# we can switch to a public release.
-# scalacheck.version.number=1.11.6
-# TODO: modularize the compiler
-#scala-compiler-doc.version.number=1.0.0-RC1
-#scala-compiler-interactive.version.number=1.0.0-RC1
+# TODO: We've embedded these sources in partest-extras for now.
+# after 2.12.0 is out, we can switch back to a public release.
+# scalacheck.version.number=1.11.6