diff --git a/.travis.yml b/.travis.yml
index 4d88ddb5ae..7c3cf2b13b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -54,6 +54,7 @@ stages:
script: sbt ++$TRAVIS_SCALA_VERSION coverage test &&
sbt ++$TRAVIS_SCALA_VERSION core/coverageReport &&
+ sbt ++$TRAVIS_SCALA_VERSION chain/coverageReport &&
sbt ++$TRAVIS_SCALA_VERSION coverageAggregate &&
sbt ++$TRAVIS_SCALA_VERSION coveralls
diff --git a/bitcoind-rpc-test/src/test/resources/logback-test.xml b/bitcoind-rpc-test/src/test/resources/logback-test.xml
deleted file mode 100644
index d8a7177a47..0000000000
--- a/bitcoind-rpc-test/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
- logs/rpc-test-application.log
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
-
-
-
-
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/BitcoindInstanceTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/BitcoindInstanceTest.scala
index 41b2d1412d..0decb45ca9 100644
--- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/BitcoindInstanceTest.scala
+++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/BitcoindInstanceTest.scala
@@ -34,20 +34,6 @@ class BitcoindInstanceTest extends BitcoindRpcTest {
pw.close()
}
- override def afterAll(): Unit = {}
-
- def addDatadirAndWrite(conf: BitcoindConfig): BitcoindConfig = {
- val tempDir = Files.createTempDirectory("")
- val confWithDatadir = conf.datadir match {
- case None =>
- conf.withOption("datadir", tempDir.toString)
- case Some(value) => conf
- }
- val tempfile = Paths.get(Properties.tmpDir, "bitcoin.conf")
- BitcoindRpcTestUtil.writeConfigToFile(confWithDatadir)
- confWithDatadir
- }
-
behavior of "BitcoindInstance"
it should "start a bitcoind with cookie based authentication" in {
@@ -58,7 +44,7 @@ class BitcoindInstanceTest extends BitcoindRpcTest {
|rpcport=${RpcUtil.randomPort}
""".stripMargin
- val conf = addDatadirAndWrite(BitcoindConfig(confStr))
+ val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir())
val instance = BitcoindInstance.fromConfig(conf)
assert(
instance.authCredentials
@@ -73,15 +59,15 @@ class BitcoindInstanceTest extends BitcoindRpcTest {
it should "start a bitcoind with user and password based authentication" in {
val confStr = s"""
- |daemon=1
- |regtest=1
- |rpcuser=foobar
- |rpcpassword=barfoo
- |port=${RpcUtil.randomPort}
- |rpcport=${RpcUtil.randomPort}
- """.stripMargin
+ |daemon=1
+ |regtest=1
+ |rpcuser=foobar
+ |rpcpassword=barfoo
+ |port=${RpcUtil.randomPort}
+ |rpcport=${RpcUtil.randomPort}
+ """.stripMargin
- val conf = addDatadirAndWrite(BitcoindConfig(confStr))
+ val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir())
val instance = BitcoindInstance.fromConfig(conf)
assert(
instance.authCredentials
@@ -106,14 +92,14 @@ class BitcoindInstanceTest extends BitcoindRpcTest {
val port = RpcUtil.randomPort
val rpcPort = RpcUtil.randomPort
val confStr = s"""
- |daemon=1
- |rpcauth=bitcoin-s:6d7580be1deb4ae52bc4249871845b09$$82b282e7c6493f6982a5a7af9fbb1b671bab702e2f31bbb1c016bb0ea1cc27ca
- |regtest=1
- |port=${RpcUtil.randomPort}
- |rpcport=${RpcUtil.randomPort}
- """.stripMargin
+ |daemon=1
+ |rpcauth=bitcoin-s:6d7580be1deb4ae52bc4249871845b09$$82b282e7c6493f6982a5a7af9fbb1b671bab702e2f31bbb1c016bb0ea1cc27ca
+ |regtest=1
+ |port=${RpcUtil.randomPort}
+ |rpcport=${RpcUtil.randomPort}
+ """.stripMargin
- val conf = addDatadirAndWrite(BitcoindConfig(confStr))
+ val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir())
val authCredentials =
BitcoindAuthCredentials.PasswordBased(username = "bitcoin-s",
password = "strong_password")
@@ -123,7 +109,7 @@ class BitcoindInstanceTest extends BitcoindRpcTest {
uri = new URI(s"http://localhost:$port"),
rpcUri = new URI(s"http://localhost:$rpcPort"),
authCredentials = authCredentials,
- datadir = conf.datadir.get
+ datadir = conf.datadir
)
for {
diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/MempoolRpcTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/MempoolRpcTest.scala
index f9fefd2c5b..1bbf86fb38 100644
--- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/MempoolRpcTest.scala
+++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/MempoolRpcTest.scala
@@ -28,18 +28,10 @@ class MempoolRpcTest extends BitcoindRpcTest {
case (client, otherClient) =>
val defaultConfig = BitcoindRpcTestUtil.standardConfig
- val datadir: Path = {
- val tempDirPrefix = null // because java APIs are bad
- Files.createTempDirectory(tempDirPrefix)
- }
-
val configNoBroadcast =
defaultConfig
- .withOption("datadir", datadir.toString())
.withOption("walletbroadcast", 0.toString)
- val _ = BitcoindRpcTestUtil.writeConfigToFile(configNoBroadcast)
-
val instanceWithoutBroadcast =
BitcoindInstance.fromConfig(configNoBroadcast)
diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/UtilRpcTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/UtilRpcTest.scala
index 162f5aa349..446192707e 100644
--- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/UtilRpcTest.scala
+++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/UtilRpcTest.scala
@@ -2,9 +2,9 @@ package org.bitcoins.rpc.common
import org.bitcoins.core.crypto.ECPrivateKey
import org.bitcoins.core.protocol.P2PKHAddress
+import org.bitcoins.core.script.ScriptType
import org.bitcoins.rpc.client.common.BitcoindRpcClient
import org.bitcoins.rpc.client.common.RpcOpts.AddressType
-import org.bitcoins.rpc.jsonmodels.RpcScriptType
import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
import org.bitcoins.testkit.util.BitcoindRpcTest
@@ -37,7 +37,7 @@ class UtilRpcTest extends BitcoindRpcTest {
decoded <- client.decodeScript(multisig.redeemScript)
} yield {
assert(decoded.reqSigs.contains(2))
- assert(decoded.typeOfScript.contains(RpcScriptType.MULTISIG))
+ assert(decoded.typeOfScript.contains(ScriptType.MULTISIG))
assert(decoded.addresses.get.contains(address))
}
}
diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindAuthCredentialsTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindAuthCredentialsTest.scala
index e341469d65..992e49ee13 100644
--- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindAuthCredentialsTest.scala
+++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindAuthCredentialsTest.scala
@@ -4,13 +4,14 @@ import org.bitcoins.testkit.util.BitcoinSUnitTest
import org.bitcoins.rpc.config.BitcoindAuthCredentials.CookieBased
import org.bitcoins.rpc.config.BitcoindAuthCredentials.PasswordBased
import org.bitcoins.core.config.RegTest
+import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
class BitcoindAuthCredentialsTest extends BitcoinSUnitTest {
it must "handle cookie based auth" in {
val confStr = """
|regtest=1
""".stripMargin
- val conf = BitcoindConfig(confStr)
+ val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir())
val auth = BitcoindAuthCredentials.fromConfig(conf)
val cookie = auth match {
case cookie: CookieBased => cookie
@@ -28,7 +29,7 @@ class BitcoindAuthCredentialsTest extends BitcoinSUnitTest {
|rpcuser=foo
|rpcpassword=bar
""".stripMargin
- val conf = BitcoindConfig(confStr)
+ val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir())
val auth = BitcoindAuthCredentials.fromConfig(conf)
val pass = auth match {
@@ -48,7 +49,7 @@ class BitcoindAuthCredentialsTest extends BitcoinSUnitTest {
|rpcpassword=bar
""".stripMargin
- val conf = BitcoindConfig(confStr)
+ val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir())
BitcoindAuthCredentials.fromConfig(conf) match {
case _: CookieBased => fail
case PasswordBased(username, password) =>
diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindConfigTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindConfigTest.scala
index 42ec466da8..0cb64f218f 100644
--- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindConfigTest.scala
+++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindConfigTest.scala
@@ -9,10 +9,11 @@ import org.bitcoins.testkit.util.BitcoindRpcTest
class BitcoindConfigTest extends BitcoinSUnitTest {
+ def tmpDir = BitcoindRpcTestUtil.tmpDir()
it must "have to/fromString symmetry" in {
val conf = BitcoindRpcTestUtil.standardConfig
val confStr = conf.toWriteableString
- val otherConf = BitcoindConfig(confStr)
+ val otherConf = BitcoindConfig(confStr, tmpDir)
val otherConfStr = otherConf.toWriteableString
assert(confStr == otherConfStr)
}
@@ -20,7 +21,8 @@ class BitcoindConfigTest extends BitcoinSUnitTest {
it must "parse networks" in {
val conf = BitcoindConfig("""
|regtest=1
- """.stripMargin)
+ """.stripMargin,
+ tmpDir)
assert(conf.network == RegTest)
}
@@ -35,7 +37,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest {
|rpcport=4000
""".stripMargin.split("\n")
- val conf = BitcoindConfig(confStr)
+ val conf = BitcoindConfig(confStr, tmpDir)
assert(conf.rpcport == 3000)
assert(conf.network == RegTest)
}
@@ -52,7 +54,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest {
|regtest.rpcport=3000
""".stripMargin.split("\n")
- val conf = BitcoindConfig(confStr)
+ val conf = BitcoindConfig(confStr, tmpDir)
assert(conf.rpcport == 4000)
assert(conf.network == RegTest)
}
@@ -67,7 +69,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest {
|regtest.rpcport=3000
""".stripMargin.split("\n")
- val conf = BitcoindConfig(confStr)
+ val conf = BitcoindConfig(confStr, tmpDir)
assert(conf.rpcport == TestNet3.rpcPort)
assert(conf.network == TestNet3)
}
@@ -87,7 +89,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest {
|rpcport=1000
""".stripMargin.split("\n")
- val conf = BitcoindConfig(confStr)
+ val conf = BitcoindConfig(confStr, tmpDir)
assert(conf.rpcport == 3000)
assert(conf.network == TestNet3)
assert(conf.username.contains("username"))
@@ -116,7 +118,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest {
|rpcuser=username
""".stripMargin.split("\n")
- val conf = BitcoindConfig(confStr)
+ val conf = BitcoindConfig(confStr, tmpDir)
assert(conf.rpcport == 4000)
assert(conf.network == RegTest)
assert(conf.username.contains("username"))
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindAuthCredentials.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindAuthCredentials.scala
index 859ef242d6..2b732cbd3e 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindAuthCredentials.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindAuthCredentials.scala
@@ -58,7 +58,7 @@ object BitcoindAuthCredentials extends BitcoinSLogger {
datadir: File = BitcoindConfig.DEFAULT_DATADIR)
extends BitcoindAuthCredentials {
- lazy private[bitcoins] val cookiePath = {
+ private[bitcoins] lazy val cookiePath = {
val middleSegment = network match {
case TestNet3 => "testnet3"
case MainNet => ""
@@ -87,7 +87,7 @@ object BitcoindAuthCredentials extends BitcoinSLogger {
}
def fromConfig(config: BitcoindConfig): BitcoindAuthCredentials = {
- val datadir = config.datadir.getOrElse(BitcoindConfig.DEFAULT_DATADIR)
+ val datadir = config.datadir
val username = config.username
val password = config.password
(username, password) match {
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindConfig.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindConfig.scala
index 25c0c49181..eacfcdb93d 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindConfig.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindConfig.scala
@@ -1,12 +1,13 @@
package org.bitcoins.rpc.config
-import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil}
import org.bitcoins.core.config._
import java.io.File
import java.nio.file.Files
+
import scala.util.Properties
import java.nio.file.Paths
-import java.net.URI
+import java.net.{InetSocketAddress, URI}
import java.nio.file.Path
/**
@@ -23,8 +24,27 @@ import java.nio.file.Path
*
* @see https://github.com/bitcoin/bitcoin/blob/master/doc/bitcoin-conf.md
*/
-abstract class BitcoindConfig extends BitcoinSLogger {
- private[bitcoins] def lines: Seq[String]
+case class BitcoindConfig(
+ private[bitcoins] val lines: Seq[String],
+ datadir: File)
+ extends BitcoinSLogger {
+
+ //create datadir and config if it DNE on disk
+ if (!datadir.exists()) {
+ logger.info(
+ s"datadir=${datadir.getAbsolutePath} does not exist, creating now")
+ datadir.mkdirs()
+ BitcoindConfig.writeConfigToFile(this, datadir)
+ }
+
+ private val confFile = datadir.toPath.resolve("bitcoin.conf")
+
+ //create bitcoin.conf file in datadir if it does not exist
+ if (!Files.exists(confFile)) {
+ logger.info(
+ s"bitcoin.conf in datadir=${datadir.getAbsolutePath} does not exist, creating now")
+ BitcoindConfig.writeConfigToFile(this, datadir)
+ }
/**
* Converts the config back to a string that can be written
@@ -187,16 +207,16 @@ abstract class BitcoindConfig extends BitcoinSLogger {
}.headOption
}
- lazy val datadir: Option[File] = getValue("datadir").map(new File(_))
-
lazy val username: Option[String] = getValue("rpcuser")
lazy val password: Option[String] = getValue("rpcpassword")
- lazy val zmqpubrawblock: Option[URI] =
- getValue("zmqpubrawblock").map(new URI(_))
- lazy val zmqpubrawtx: Option[URI] = getValue("zmqpubrawtx").map(new URI(_))
- lazy val zmqpubhashblock: Option[URI] =
- getValue("zmqpubhashblock").map(new URI(_))
- lazy val zmqpubhashtx: Option[URI] = getValue("zmqpubhashtx").map(new URI(_))
+ lazy val zmqpubrawblock: Option[InetSocketAddress] =
+ getValue("zmqpubrawblock").map(BitcoinSUtil.toInetSocketAddress)
+ lazy val zmqpubrawtx: Option[InetSocketAddress] =
+ getValue("zmqpubrawtx").map(BitcoinSUtil.toInetSocketAddress)
+ lazy val zmqpubhashblock: Option[InetSocketAddress] =
+ getValue("zmqpubhashblock").map(BitcoinSUtil.toInetSocketAddress)
+ lazy val zmqpubhashtx: Option[InetSocketAddress] =
+ getValue("zmqpubhashtx").map(BitcoinSUtil.toInetSocketAddress)
lazy val port: Int = getValue("port").map(_.toInt).getOrElse(network.port)
@@ -224,13 +244,14 @@ abstract class BitcoindConfig extends BitcoinSLogger {
/** Creates a new config with the given keys and values appended */
def withOption(key: String, value: String): BitcoindConfig = {
val ourLines = this.lines
- new BitcoindConfig {
+ val newLine = s"$key=$value"
+ val lines = newLine +: ourLines
+ val newConfig = BitcoindConfig(lines, datadir)
+ logger.debug(
+ s"Appending new config with $key=$value to datadir=${datadir.getAbsolutePath}")
+ BitcoindConfig.writeConfigToFile(newConfig, datadir)
- def lines: Seq[String] = {
- val newLine = s"$key=$value"
- newLine +: ourLines
- }
- }
+ newConfig
}
/** Creates a new config with the given key and values,
@@ -254,30 +275,30 @@ abstract class BitcoindConfig extends BitcoinSLogger {
network: NetworkParameters): BitcoindConfig =
withOption(key = s"${networkString(network)}.$key", value = value)
+ def withDatadir(newDatadir: File): BitcoindConfig = {
+ BitcoindConfig(lines, newDatadir)
+ }
+
}
-object BitcoindConfig {
+object BitcoindConfig extends BitcoinSLogger {
/** The empty `bitcoind` config */
- lazy val empty: BitcoindConfig = BitcoindConfig("")
-
- /** Constructs a `bitcoind` config from the given lines */
- def apply(config: Seq[String]): BitcoindConfig = new BitcoindConfig {
- val lines: Seq[String] = config
- }
+ lazy val empty: BitcoindConfig = BitcoindConfig("", DEFAULT_DATADIR)
/**
* Constructs a `bitcoind` config from the given string,
* by splitting it on newlines
*/
- def apply(config: String): BitcoindConfig =
- apply(config.split("\n"))
+ def apply(config: String, datadir: File): BitcoindConfig =
+ apply(config.split("\n"), datadir)
/** Reads the given path and construct a `bitcoind` config from it */
- def apply(config: Path): BitcoindConfig = apply(config.toFile)
+ def apply(config: Path): BitcoindConfig =
+ apply(config.toFile, config.getParent.toFile)
/** Reads the given file and construct a `bitcoind` config from it */
- def apply(config: File): BitcoindConfig = {
+ def apply(config: File, datadir: File = DEFAULT_DATADIR): BitcoindConfig = {
import scala.collection.JavaConverters._
val lines = Files
.readAllLines(config.toPath)
@@ -285,7 +306,7 @@ object BitcoindConfig {
.asScala
.toList
- apply(lines)
+ apply(lines, datadir)
}
/**
@@ -321,4 +342,25 @@ object BitcoindConfig {
.toPath()
.resolve("bitcoin.conf")
.toFile
+
+ /**
+ * Writes the config to the data directory within it, if it doesn't
+ * exist. Returns the written file.
+ */
+ def writeConfigToFile(config: BitcoindConfig, datadir: File): Path = {
+
+ val confStr = config.lines.mkString("\n")
+
+ Files.createDirectories(datadir.toPath)
+ val confFile = datadir.toPath.resolve("bitcoin.conf")
+
+ if (datadir == DEFAULT_DATADIR && confFile == DEFAULT_CONF_FILE) {
+ logger.warn(
+ s"We will not overrwrite the existing bitcoin.conf in default datadir")
+ } else {
+ Files.write(confFile, confStr.getBytes)
+ }
+
+ confFile
+ }
}
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindInstance.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindInstance.scala
index 5b1f888b13..aa963476a7 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindInstance.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindInstance.scala
@@ -50,6 +50,8 @@ sealed trait BitcoindInstance extends BitcoinSLogger {
case _: String => BitcoindVersion.Unknown
}
}
+
+ def p2pPort: Int = uri.getPort
}
object BitcoindInstance {
@@ -104,8 +106,7 @@ object BitcoindInstance {
val file = configPath.toFile()
fromConfigFile(file)
} else {
- fromConfig(
- BitcoindConfig.empty.withOption("datadir", configPath.toString))
+ fromConfig(BitcoindConfig.empty)
}
}
@@ -120,15 +121,9 @@ object BitcoindInstance {
require(file.exists, s"${file.getPath} does not exist!")
require(file.isFile, s"${file.getPath} is not a file!")
- val conf = BitcoindConfig(file)
+ val conf = BitcoindConfig(file, file.getParentFile)
- val confWithDatadir = if (conf.datadir.isEmpty) {
- conf.withOption("datadir", file.getParent.toString)
- } else {
- conf
- }
-
- fromConfig(confWithDatadir)
+ fromConfig(conf)
}
/** Constructs a `bitcoind` instance from the given config */
@@ -137,21 +132,11 @@ object BitcoindInstance {
): BitcoindInstance = {
val authCredentials = BitcoindAuthCredentials.fromConfig(config)
-
- config.datadir match {
- case None =>
- BitcoindInstance(config.network,
- config.uri,
- config.rpcUri,
- authCredentials,
- zmqConfig = ZmqConfig.fromConfig(config))
- case Some(datadir) =>
- BitcoindInstance(config.network,
- config.uri,
- config.rpcUri,
- authCredentials,
- zmqConfig = ZmqConfig.fromConfig(config),
- datadir = datadir)
- }
+ BitcoindInstance(config.network,
+ config.uri,
+ config.rpcUri,
+ authCredentials,
+ zmqConfig = ZmqConfig.fromConfig(config),
+ datadir = config.datadir)
}
}
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/ZmqConfig.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/ZmqConfig.scala
index 7d6603317f..3bcdc406d1 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/ZmqConfig.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/ZmqConfig.scala
@@ -1,27 +1,29 @@
package org.bitcoins.rpc.config
-import java.net.URI
+import java.net.InetSocketAddress
+
+import org.bitcoins.core.util.BitcoinSLogger
sealed trait ZmqConfig {
- def hashBlock: Option[URI]
- def rawBlock: Option[URI]
- def hashTx: Option[URI]
- def rawTx: Option[URI]
+ def hashBlock: Option[InetSocketAddress]
+ def rawBlock: Option[InetSocketAddress]
+ def hashTx: Option[InetSocketAddress]
+ def rawTx: Option[InetSocketAddress]
}
-object ZmqConfig {
+object ZmqConfig extends BitcoinSLogger {
private case class ZmqConfigImpl(
- hashBlock: Option[URI],
- rawBlock: Option[URI],
- hashTx: Option[URI],
- rawTx: Option[URI]
+ hashBlock: Option[InetSocketAddress],
+ rawBlock: Option[InetSocketAddress],
+ hashTx: Option[InetSocketAddress],
+ rawTx: Option[InetSocketAddress]
) extends ZmqConfig
def apply(
- hashBlock: Option[URI] = None,
- rawBlock: Option[URI] = None,
- hashTx: Option[URI] = None,
- rawTx: Option[URI] = None
+ hashBlock: Option[InetSocketAddress] = None,
+ rawBlock: Option[InetSocketAddress] = None,
+ hashTx: Option[InetSocketAddress] = None,
+ rawTx: Option[InetSocketAddress] = None
): ZmqConfig =
ZmqConfigImpl(hashBlock = hashBlock,
rawBlock = rawBlock,
@@ -33,7 +35,7 @@ object ZmqConfig {
* `localhost` and the same port
*/
def fromPort(port: Int): ZmqConfig = {
- val uri = new URI(s"tcp://localhost:$port")
+ val uri = new InetSocketAddress("tcp://127.0.0.1", port)
ZmqConfig(hashBlock = Some(uri),
rawBlock = Some(uri),
hashTx = Some(uri),
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/BlockchainResult.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/BlockchainResult.scala
index 8a124a71d4..1d8d7ea5cf 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/BlockchainResult.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/BlockchainResult.scala
@@ -1,8 +1,9 @@
package org.bitcoins.rpc.jsonmodels
-import org.bitcoins.core.crypto.{DoubleSha256DigestBE}
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
import org.bitcoins.core.currency.Bitcoins
import org.bitcoins.core.number.{Int32, UInt32}
+import org.bitcoins.core.protocol.blockchain.BlockHeader
import org.bitcoins.core.wallet.fee.BitcoinFeeUnit
sealed abstract class BlockchainResult
@@ -104,7 +105,26 @@ case class GetBlockHeaderResult(
chainwork: String,
previousblockhash: Option[DoubleSha256DigestBE],
nextblockhash: Option[DoubleSha256DigestBE])
- extends BlockchainResult
+ extends BlockchainResult {
+ def blockHeader: BlockHeader = {
+
+ //prevblockhash is only empty if we have the genesis block
+ //we assume the prevhash of the gensis block is the empty hash
+ val prevHash = {
+ if (height == 0 && previousblockhash.isEmpty) {
+ DoubleSha256DigestBE.empty
+ } else {
+ previousblockhash.get
+ }
+ }
+ BlockHeader(version = Int32(version),
+ previousBlockHash = prevHash.flip,
+ merkleRootHash = merkleroot.flip,
+ time = time,
+ nBits = bits,
+ nonce = nonce)
+ }
+}
case class ChainTip(
height: Int,
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RawTransactionResult.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RawTransactionResult.scala
index 62cdaf0aa4..48b9fa687f 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RawTransactionResult.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RawTransactionResult.scala
@@ -6,6 +6,7 @@ import org.bitcoins.core.number.UInt32
import org.bitcoins.core.protocol.script.{ScriptPubKey, ScriptSignature}
import org.bitcoins.core.protocol.transaction.{Transaction, TransactionInput}
import org.bitcoins.core.protocol.{BitcoinAddress, P2PKHAddress, P2SHAddress}
+import org.bitcoins.core.script.ScriptType
sealed abstract class RawTransactionResult
@@ -27,35 +28,17 @@ case class RpcTransactionOutput(
scriptPubKey: RpcScriptPubKey)
extends RawTransactionResult
-/**
- * @see [[https://github.com/bitcoin/bitcoin/blob/fa6180188b8ab89af97860e6497716405a48bab6/src/script/standard.cpp#L27 standard.cpp]]
- * from Bitcoin Core
- */
-sealed abstract class RpcScriptType extends RawTransactionResult
-
-object RpcScriptType {
- final case object NONSTANDARD extends RpcScriptType
- final case object PUBKEY extends RpcScriptType
- final case object PUBKEYHASH extends RpcScriptType
- final case object SCRIPTHASH extends RpcScriptType
- final case object MULTISIG extends RpcScriptType
- final case object NULLDATA extends RpcScriptType
- final case object WITNESS_V0_KEYHASH extends RpcScriptType
- final case object WITNESS_V0_SCRIPTHASH extends RpcScriptType
- final case object WITNESS_UNKNOWN extends RpcScriptType
-}
-
case class RpcScriptPubKey(
asm: String,
hex: String,
reqSigs: Option[Int],
- scriptType: RpcScriptType,
+ scriptType: ScriptType,
addresses: Option[Vector[BitcoinAddress]])
extends RawTransactionResult
case class DecodeScriptResult(
asm: String,
- typeOfScript: Option[RpcScriptType],
+ typeOfScript: Option[ScriptType],
reqSigs: Option[Int],
addresses: Option[Vector[P2PKHAddress]],
p2sh: P2SHAddress)
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RpcPsbtResult.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RpcPsbtResult.scala
index cdbbb7890a..d82d76c07a 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RpcPsbtResult.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RpcPsbtResult.scala
@@ -5,6 +5,7 @@ import org.bitcoins.core.currency.Bitcoins
import org.bitcoins.core.protocol.BitcoinAddress
import org.bitcoins.core.protocol.script.ScriptPubKey
import org.bitcoins.core.protocol.transaction.Transaction
+import org.bitcoins.core.script.ScriptType
import org.bitcoins.core.script.crypto.HashType
sealed abstract class RpcPsbtResult
@@ -40,7 +41,7 @@ final case class RpcPsbtInput(
final case class RpcPsbtScript(
asm: String, // todo(torkelrogstad) split into Vector[ScriptToken]?
hex: ScriptPubKey,
- scriptType: Option[RpcScriptType],
+ scriptType: Option[ScriptType],
address: Option[BitcoinAddress]
) extends RpcPsbtResult
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/WalletResult.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/WalletResult.scala
index aa9d3e66ba..da6fc67f70 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/WalletResult.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/WalletResult.scala
@@ -14,6 +14,7 @@ import org.bitcoins.core.number.UInt32
import org.bitcoins.core.protocol.BitcoinAddress
import org.bitcoins.core.protocol.script.{ScriptPubKey, WitnessVersion}
import org.bitcoins.core.protocol.transaction.Transaction
+import org.bitcoins.core.script.ScriptType
import org.bitcoins.core.wallet.fee.BitcoinFeeUnit
import org.bitcoins.rpc.client.common.RpcOpts.LabelPurpose
import org.joda.time.DateTime
@@ -198,7 +199,7 @@ case class AddressInfoResult(
iscompressed: Option[Boolean],
witness_version: Option[WitnessVersion],
witness_program: Option[String], // todo what's the correct type here?
- script: Option[RpcScriptType],
+ script: Option[ScriptType],
hex: Option[ScriptPubKey],
pubkeys: Option[Vector[ECPublicKey]],
sigsrequired: Option[Int],
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonReaders.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonReaders.scala
index c44264203e..a000c764e5 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonReaders.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonReaders.scala
@@ -20,6 +20,7 @@ import org.bitcoins.core.protocol.{
P2PKHAddress,
P2SHAddress
}
+import org.bitcoins.core.script.ScriptType
import org.bitcoins.core.script.crypto.HashType
import org.bitcoins.core.wallet.fee.{BitcoinFeeUnit, SatoshisPerByte}
import org.bitcoins.rpc.client.common.RpcOpts.LabelPurpose
@@ -448,7 +449,7 @@ object JsonReaders {
for {
asm <- (json \ "asm").validate[String]
hex <- (json \ "hex").validate[ScriptPubKey]
- scriptType <- (json \ "type").validateOpt[RpcScriptType]
+ scriptType <- (json \ "type").validateOpt[ScriptType]
address <- (json \ "address").validateOpt[BitcoinAddress]
} yield
RpcPsbtScript(asm = asm,
@@ -498,20 +499,11 @@ object JsonReaders {
}
- implicit object RpcScriptTypeReads extends Reads[RpcScriptType] {
- import RpcScriptType._
- override def reads(json: JsValue): JsResult[RpcScriptType] =
- json.validate[String].flatMap {
- case "nonstandard" => JsSuccess(NONSTANDARD)
- case "pubkey" => JsSuccess(PUBKEY)
- case "pubkeyhash" => JsSuccess(PUBKEYHASH)
- case "scripthash" => JsSuccess(SCRIPTHASH)
- case "multisig" => JsSuccess(MULTISIG)
- case "nulldata" => JsSuccess(NULLDATA)
- case "witness_v0_keyhash" => JsSuccess(WITNESS_V0_KEYHASH)
- case "witness_v0_scripthash" => JsSuccess(WITNESS_V0_SCRIPTHASH)
- case "witness_unknown" => JsSuccess(WITNESS_UNKNOWN)
- }
+ implicit object ScriptTypeReads extends Reads[ScriptType] {
+ override def reads(json: JsValue): JsResult[ScriptType] =
+ json
+ .validate[String]
+ .map(ScriptType.fromStringExn)
}
implicit object TestMempoolAcceptResultReads
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonSerializers.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonSerializers.scala
index 357ba45d00..741dd9ef24 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonSerializers.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonSerializers.scala
@@ -20,6 +20,7 @@ import org.bitcoins.core.protocol.{
P2PKHAddress,
P2SHAddress
}
+import org.bitcoins.core.script.ScriptType
import org.bitcoins.core.wallet.fee.BitcoinFeeUnit
import org.bitcoins.rpc.client.common.RpcOpts.AddressType
import org.bitcoins.rpc.jsonmodels._
@@ -87,7 +88,7 @@ object JsonSerializers {
((__ \ "asm").read[String] and
(__ \ "hex").read[String] and
(__ \ "reqSigs").readNullable[Int] and
- (__ \ "type").read[RpcScriptType] and
+ (__ \ "type").read[ScriptType] and
(__ \ "addresses").readNullable[Vector[BitcoinAddress]])(RpcScriptPubKey)
implicit val rpcTransactionOutputReads: Reads[RpcTransactionOutput] =
Json.reads[RpcTransactionOutput]
@@ -96,7 +97,7 @@ object JsonSerializers {
implicit val decodeScriptResultReads: Reads[DecodeScriptResult] =
((__ \ "asm").read[String] and
- (__ \ "type").readNullable[RpcScriptType] and
+ (__ \ "type").readNullable[ScriptType] and
(__ \ "reqSigs").readNullable[Int] and
(__ \ "addresses").readNullable[Vector[P2PKHAddress]] and
(__ \ "p2sh").read[P2SHAddress])(DecodeScriptResult)
@@ -359,7 +360,7 @@ object JsonSerializers {
implicit val walletCreateFundedPsbtResultReads: Reads[
WalletCreateFundedPsbtResult] = Json.reads[WalletCreateFundedPsbtResult]
- implicit val rpcScriptTypeReads: Reads[RpcScriptType] = RpcScriptTypeReads
+ implicit val scriptTypeReads: Reads[ScriptType] = ScriptTypeReads
implicit val testMempoolAcceptResultReads: Reads[TestMempoolAcceptResult] =
TestMempoolAcceptResultReads
diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala
index 6a8da924ca..fcab7bc15f 100644
--- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala
+++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala
@@ -17,6 +17,9 @@ import play.api.libs.json._
import scala.collection.mutable
+// for mapWrites below
+import scala.language.implicitConversions
+
object JsonWriters {
implicit object HashTypeWrites extends Writes[HashType] {
override def writes(hash: HashType): JsValue = hash match {
diff --git a/build.sbt b/build.sbt
index ac74e31c41..020c0eb2cc 100644
--- a/build.sbt
+++ b/build.sbt
@@ -6,7 +6,10 @@ import scala.util.Properties
cancelable in Global := true
-fork in Test := true
+//don't allow us to wipe all of our prod databases
+flywayClean / aggregate := false
+//allow us to wipe our test databases
+Test / flywayClean / aggregate := true
lazy val timestamp = new java.util.Date().getTime
@@ -57,6 +60,7 @@ lazy val commonSettings = List(
assemblyOption in assembly := (assemblyOption in assembly).value
.copy(includeScala = false),
licenses += ("MIT", url("http://opensource.org/licenses/MIT")),
+
/**
* Adding Ammonite REPL to test scope, can access both test and compile
* sources. Docs: http://ammonite.io/#Ammonite-REPL
@@ -76,9 +80,16 @@ lazy val commonSettings = List(
)
lazy val commonTestSettings = Seq(
- publish / skip := true
+ publish / skip := true,
) ++ commonSettings
+lazy val commonTestWithDbSettings = Seq(
+ // To make in-memory DBs work properly
+ Test / fork := true,
+ // To avoid deadlock issues with SQLite
+ Test / parallelExecution := false
+) ++ commonTestSettings
+
lazy val commonProdSettings = Seq(
Test / bloopGenerate := None
) ++ commonSettings
@@ -87,16 +98,22 @@ lazy val bitcoins = project
.in(file("."))
.aggregate(
secp256k1jni,
+ chain,
+ chainTest,
core,
coreTest,
- zmq,
bitcoindRpc,
bitcoindRpcTest,
bench,
eclairRpc,
eclairRpcTest,
+ node,
+ nodeTest,
+ wallet,
+ walletTest,
testkit,
- scripts
+ scripts,
+ zmq
)
.settings(commonSettings: _*)
.settings(crossScalaVersions := Nil)
@@ -207,14 +224,45 @@ lazy val coreTest = project
)
.enablePlugins()
+lazy val chainDbSettings = dbFlywaySettings("chaindb")
+lazy val chain = project
+ .in(file("chain"))
+ .settings(commonProdSettings: _*)
+ .settings(chainDbSettings: _*)
+ .settings(
+ name := "bitcoin-s-chain",
+ libraryDependencies ++= Deps.chain
+ ).dependsOn(core, dbCommons)
+ .enablePlugins(FlywayPlugin)
+
+lazy val chainTest = project
+ .in(file("chain-test"))
+ .settings(commonTestWithDbSettings: _*)
+ .settings(chainDbSettings: _*)
+ .settings(
+ name := "bitcoin-s-chain-test",
+ libraryDependencies ++= Deps.chainTest,
+ ).dependsOn(chain, core, testkit, zmq)
+ .enablePlugins(FlywayPlugin)
+
+
+lazy val dbCommons = project
+ .in(file("db-commons"))
+ .settings(commonSettings: _*)
+ .settings(
+ name := "bitcoin-s-db-commons",
+ libraryDependencies ++= Deps.dbCommons
+ ).dependsOn(core)
+ .enablePlugins()
+
+
lazy val zmq = project
.in(file("zmq"))
.settings(commonSettings: _*)
.settings(name := "bitcoin-s-zmq", libraryDependencies ++= Deps.bitcoindZmq)
.dependsOn(
core
- )
- .enablePlugins(GitVersioning)
+ ).enablePlugins(GitVersioning)
lazy val bitcoindRpc = project
.in(file("bitcoind-rpc"))
@@ -264,13 +312,56 @@ lazy val eclairRpcTest = project
.dependsOn(testkit)
.enablePlugins()
+lazy val nodeDbSettings = dbFlywaySettings("nodedb")
+lazy val node = {
+ project
+ .in(file("node"))
+ .settings(commonSettings: _*)
+ .settings(nodeDbSettings: _*)
+ .settings(
+ name := "bitcoin-s-node",
+ libraryDependencies ++= Deps.node
+ )
+ .dependsOn(
+ core,
+ chain,
+ dbCommons,
+ bitcoindRpc
+ ).enablePlugins(FlywayPlugin)
+}
+
+lazy val nodeTest = {
+ project
+ .in(file("node-test"))
+ .settings(commonTestWithDbSettings: _*)
+ .settings(nodeDbSettings: _*)
+ .settings(
+ name := "bitcoin-s-node-test",
+ // There's a weird issue with forking
+ // in node tests, for example this CI
+ // error: https://travis-ci.org/bitcoin-s/bitcoin-s-core/jobs/525018199#L1252
+ // It seems to be related to this
+ // Scalatest issue:
+ // https://github.com/scalatest/scalatest/issues/556
+ Test / fork := false,
+ libraryDependencies ++= Deps.nodeTest
+ ).dependsOn(
+ node,
+ testkit
+ ).enablePlugins(FlywayPlugin)
+}
+
lazy val testkit = project
.in(file("testkit"))
.settings(commonProdSettings: _*)
.dependsOn(
core,
+ chain,
bitcoindRpc,
- eclairRpc
+ eclairRpc,
+ node,
+ wallet,
+ zmq
)
.enablePlugins(GitVersioning)
@@ -304,6 +395,30 @@ lazy val docs = project
)
.enablePlugins(MdocPlugin, DocusaurusPlugin)
+lazy val walletDbSettings = dbFlywaySettings("walletdb")
+lazy val wallet = project
+ .in(file("wallet"))
+ .settings(commonProdSettings: _*)
+ .settings(walletDbSettings: _*)
+ .settings(
+ name := "bitcoin-s-wallet",
+ libraryDependencies ++= Deps.wallet
+ )
+ .dependsOn(core, dbCommons)
+ .enablePlugins(FlywayPlugin)
+
+lazy val walletTest = project
+ .in(file("wallet-test"))
+ .settings(commonTestWithDbSettings: _*)
+ .settings(walletDbSettings: _*)
+ .settings(
+ name := "bitcoin-s-wallet-test",
+ libraryDependencies ++= Deps.walletTest,
+ )
+ .dependsOn(core, testkit, wallet)
+ .enablePlugins(FlywayPlugin)
+
+
lazy val scripts = project
.in(file("scripts"))
.dependsOn(core, bitcoindRpc, eclairRpc, zmq)
@@ -312,6 +427,17 @@ lazy val scripts = project
name := "bitcoin-s-scripts",
libraryDependencies ++= Deps.scripts
)
+ .dependsOn(
+ bitcoindRpc,
+ chain,
+ core,
+ eclairRpc,
+ node,
+ secp256k1jni,
+ testkit,
+ wallet,
+ zmq
+ )
// Ammonite is invoked through running
// a main class it places in test sources
@@ -327,3 +453,52 @@ lazy val scripts = project
addCommandAlias("amm", "test:run")
publishArtifact in bitcoins := false
+
+def dbFlywaySettings(dbName: String): List[Setting[_]] = {
+ lazy val DB_HOST = "localhost"
+ lazy val DB_NAME = s"${dbName}.sqlite"
+ lazy val network = "unittest" //mainnet, testnet3, regtest, unittest
+
+ lazy val mainnetDir = s"${System.getenv("HOME")}/.bitcoin-s/mainnet/"
+ lazy val testnetDir = s"${System.getenv("HOME")}/.bitcoin-s/testnet3/"
+ lazy val regtestDir = s"${System.getenv("HOME")}/.bitcoin-s/regtest/"
+ lazy val unittestDir = s"${System.getenv("HOME")}/.bitcoin-s/unittest/"
+
+ lazy val dirs = List(mainnetDir,testnetDir,regtestDir,unittestDir)
+
+ //create directies if they DNE
+ dirs.foreach { d =>
+ val file = new File(d)
+ file.mkdirs()
+ val db = new File(d + DB_NAME)
+ db.createNewFile()
+ }
+
+ def makeNetworkSettings(directoryPath: String): List[Setting[_]] = List(
+ Test / flywayUrl := s"jdbc:sqlite:$directoryPath$DB_NAME",
+ Test / flywayLocations := List("nodedb/migration"),
+ Test / flywayUser := "nodedb",
+ Test / flywayPassword := "",
+ flywayUrl := s"jdbc:sqlite:$directoryPath$DB_NAME",
+ flywayUser := "nodedb",
+ flywayPassword := ""
+ )
+
+ lazy val mainnet = makeNetworkSettings(mainnetDir)
+
+ lazy val testnet3 = makeNetworkSettings(testnetDir)
+
+ lazy val regtest = makeNetworkSettings(regtestDir)
+
+ lazy val unittest = makeNetworkSettings(unittestDir)
+
+ network match {
+ case "mainnet" => mainnet
+ case "testnet3" => testnet3
+ case "regtest" => regtest
+ case "unittest" => unittest
+ case unknown: String => throw new IllegalArgumentException(s"Unknown network=${unknown}")
+ }
+}
+
+publishArtifact in bitcoins := false
\ No newline at end of file
diff --git a/chain-test/src/test/resources/block_headers.json b/chain-test/src/test/resources/block_headers.json
new file mode 100644
index 0000000000..f6be36f253
--- /dev/null
+++ b/chain-test/src/test/resources/block_headers.json
@@ -0,0 +1 @@
+["0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c","010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000982051fd1e4ba744bbbe680e1fee14677ba1a3c3540bf7b1cdb606e857233e0e61bc6649ffff001d01e36299","010000004860eb18bf1b1620e37e9490fc8a427514416fd75159ab86688e9a8300000000d5fdcc541e25de1c7a5addedf24858b8bb665c9f36ef744ee42c316022c90f9bb0bc6649ffff001d08d2bd61","01000000bddd99ccfda39da1b108ce1a5d70038d0a967bacb68b6b63065f626a0000000044f672226090d85db9a9f2fbfe5f0f9609b387af7be5b7fbb7a1767c831c9e995dbe6649ffff001d05e0ed6d","010000004944469562ae1c2c74d9a535e00b6f3e40ffbad4f2fda3895501b582000000007a06ea98cd40ba2e3288262b28638cec5337c1456aaf5eedc8e9e5a20f062bdf8cc16649ffff001d2bfee0a9","0100000085144a84488ea88d221c8bd6c059da090e88f8a2c99690ee55dbba4e00000000e11c48fecdd9e72510ca84f023370c9a38bf91ac5cae88019bee94d24528526344c36649ffff001d1d03e477","01000000fc33f596f822a0a1951ffdbf2a897b095636ad871707bf5d3162729b00000000379dfb96a5ea8c81700ea4ac6b97ae9a9312b2d4301a29580e924ee6761a2520adc46649ffff001d189c4c97","010000008d778fdc15a2d3fb76b7122a3b5582bea4f21f5a0c693537e7a03130000000003f674005103b42f984169c7d008370967e91920a6a5d64fd51282f75bc73a68af1c66649ffff001d39a59c86","010000004494c8cf4154bdcc0720cd4a59d9c9b285e4b146d45f061d2b6c967100000000e3855ed886605b6d4a99d5fa2ef2e9b0b164e63df3c4136bebf2d0dac0f1f7a667c86649ffff001d1c4b5666","01000000c60ddef1b7618ca2348a46e868afc26e3efc68226c78aa47f8488c4000000000c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd37047fca6649ffff001d28404f53","010000000508085c47cc849eb80ea905cc7800a3be674ffc57263cf210c59d8d00000000112ba175a1e04b14ba9e7ea5f76ab640affeef5ec98173ac9799a852fa39add320cd6649ffff001d1e2de565","01000000e915d9a478e3adf3186c07c61a22228b10fd87df343c92782ecc052c000000006e06373c80de397406dc3d19c90d71d230058d28293614ea58d6a57f8f5d32f8b8ce6649ffff001d173807f8","010000007330d7adf261c69891e6ab08367d957e74d4044bc5d9cd06d656be9700000000b8c8754fabb0ffeb04ca263a1368c39c059ca0d4af3151b876f27e197ebb963bc8d06649ffff001d3f596a0c","010000005e2b8043bd9f8db558c284e00ea24f78879736f4acd110258e48c2270000000071b22998921efddf90c75ac3151cacee8f8084d3e9cb64332427ec04c7d562994cd16649ffff001d37d1ae86","0100000089304d4ba5542a22fb616d1ca019e94222ee45c1ad95a83120de515c00000000560164b8bad7675061aa0f43ced718884bdd8528cae07f24c58bb69592d8afe185d36649ffff001d29cbad24","01000000378a6f6593e2f0251132d96616e837eb6999bca963f6675a0c7af180000000000d080260d107d269ccba9247cfc64c952f1d13514b49e9f1230b3a197a8b7450fa276849ffff001d38d8fb98","010000007384231257343f2fa3c55ee69ea9e676a709a06dcfd2f73e8c2c32b300000000442ee91b2b999fb15d61f6a88ecf2988e9c8ed48f002476128e670d3dac19fe706286849ffff001d049e12d6","01000000f5c46c41c30df6aaff3ae9f74da83e4b1cffdec89c009b39bb254a17000000005d6291c35a88fd9a3aef5843124400936fbf2c9166314addcaf5678e55b7e0a30f2c6849ffff001d07608493","0100000009f8fd6ba6f0b6d5c207e8fcbcf50f46876a5deffbac4701d7d0f13f0000000023ca63b851cadfd7099ae68eb22147d09394adb72a78e86b69c42deb6df225f92e2e6849ffff001d323741f2","01000000161126f0d39ec082e51bbd29a1dfb40b416b445ac8e493f88ce993860000000030e2a3e32abf1663a854efbef1b233c67c8cdcef5656fe3b4f28e52112469e9bae306849ffff001d16d1b42d","010000006f187fddd5e28aa1b4065daa5d9eae0c487094fb20cf97ca02b81c84000000005b7b25b51797f83192f9fd2c3871bfb27570a7d6b56d3a50760613d1a2fc1aeeab346849ffff001d36d95071","01000000d7c834e8ea05e2c2fddf4d82faf4c3e921027fa190f1b8372a7aa96700000000b41092b870cc096070ff3212c207c0881e3a2abafc1b92507941b4ef705917e0d9366849ffff001d2bd021d6","010000004f29f31e6dac13710ae72d54278b5c97ff6c1646e95b27d14263016f000000004349d6a4e94f05a736ac830754e76dfdf7f140c331f316d1a278517e1daf2e9e6b3a6849ffff001d28140f62","010000003b5e5b888c8c3da0f1d6c3969e63a7a9c1215a3360c8107a428db598000000008c4cc1b42c9dab1973890ecdfdee032079ed39892ad53a6546844d237634cfe1fb3a6849ffff001d255ab455","0100000082219cebbdc9bcb715efee535c13a44447e99dfaff6d552e9839d30c000000003e75f63c634ed5fb3d8e21de5fe143cfa63c8018fce0fa26cbc628378b9bc343953d6849ffff001d27ba00b1","010000005f411e0d7783fc274b4fea8597209d31d4a511e887a489cebb1f05fc00000000be2123ad48038313b8b726a51cb080bb5a8b81c4166401493b017d2d33520f9b063f6849ffff001d2337f131","010000002620766fa24558ad47e3a9623cd17ff4623668768dbea19ed5a1358e00000000dc1490b5ba227b1adbb2513f74e0252e8fe68b6c7de74c1a22adb63b14e8c16712466849ffff001d344eb75c","010000009810f0fa1817a4d2d371a069addaafab2ca99887abcc5bd2528e434100000000654f005a6e4b4b57b42343fb0e47f32079b4ebfe643c2ea4ea20e46c3af00c238d466849ffff001d364c8cb3","0100000081203520416c370fde3d6d46e82ed4332b5035bfba848ff97207357100000000bdaed84e0cbab735880d4763a1eb2df1ecd59dc261f3446db37bed5b6ccb99f331bf6849ffff001d2e5bd48e","010000004409709aff1b155be4f7a9ccef6121345050be74b4bad1d330940dbb00000000ec77d34cb2f84f3447c37ec1b4476e044e88478378998bd55d031f58f4e261c35fbf6849ffff001d32cb39a0","01000000cb9ba5a45252b335fe47a099c8935d01ff8eef2e598c2051631b7ac50000000031534f7571b5ea98c1318eed04937d6ff16582ba72c53552581c40828b6ce2f5cac16849ffff001d080315e8","01000000db643f0756bb4f6b25ce4a475b533d9ef75cd536e72df664fb9c91bc00000000cb527bd29495c02c9d6515de91ef264df333447e48ef730f3b66ffa8db3eb38630c46849ffff001d155dbb2a","01000000c4d369b723c2cf9be33cf00deb1dbfea0c8ccd12c415f29434ff009700000000c9c0fd0ae7b7973c42fc9e3dddc967b6e309570b720ff15414c08365f005992be3c56849ffff001d08e1c00d","01000000e3f6664d5af37062b934f983ed1033e2011b42c9b04735276c7ccbe5000000001012aaab3e3bffd34055aaa157bf78792d5c18f085635eda7046d89c08a0eabde3c86849ffff001d228c2240","01000000627985c0fc1a71e052a5af9420c9b99845432ae099f27a3dea7370a80000000074549b3151d6dd4ce77419d01710921b3211ed3280bf2e3af2c1f1a820063b2272ca6849ffff001d2243c024","010000008f31b4c405cfc212fa4e62840dc8d0c529ed53328bb1426c3bb23fa700000000e0af3bba9e962ce288d9e232d28a1ba9c85bd1e298890738a65b93ed97192b85a1cd6849ffff001d14cadde7","010000009b2d32c7828a80644b92b773357b557462a1470d4216e8b465a472b5000000005a4d7d92cd839cdb7dc448902438e4a4885721487de33900b34558bd6f255dd01dd06849ffff001d2ec3842f","01000000de44324d0f70a14985385f4399844b17925ca24e90b425f543d624f8000000007d282068b770b35b587a9fb4356491d5854bba3b60d7c1a129d37ed6b54e346dead36849ffff001d013eca85","01000000866f0cc679170b6a99e8b93e58dc276cf64f0379112d128e126dd9dd00000000689a44cb1c69d8aade6a37d48322b3e97099c25e4bcb228a9dd2739febda90e6c0d66849ffff001d0003e8ea","01000000ddd64fea2fd6e3b10b1456f2ad2a870ff5ff8ed524304d928eee197c000000006bcae7125656cc0d6b3dc563ab3e98d5496dcbd89785095138b143a48bc18414d7d66849ffff001d28000260","0100000012ad62326d4d1d7d32d2f169a1a816984f6298fdb5ccc3f606d5655600000000201e1ad44f0ae957771d2e60fa252594e7fcc75a51db4cdfb5fbaeb38612390490d96849ffff001d06216771","01000000aa698b967619b95c9181ebd256700651aaa1255fe503f59b391ff0b2000000005a8da000e1a2258630dd6f0286ddc24b7b0ef897f3447138c9a3ccb8b36cfa9e47dc6849ffff001d07e8fbd1","010000008b52bbd72c2f49569059f559c1b1794de5192e4f7d6d2b03c7482bad0000000083e4f8a9d502ed0c419075c1abb5d56f878a2e9079e5612bfb76a2dc37d9c42741dd6849ffff001d2b909dd6","01000000f528fac1bcb685d0cd6c792320af0300a5ce15d687c7149548904e31000000004e8985a786d864f21e9cbb7cbdf4bc9265fe681b7a0893ac55a8e919ce035c2f85de6849ffff001d385ccb7c","0100000050e593d3b22034cfc9884df842e85d398b5c3cfd77b1aa2a86f221ac000000005fafe0e1824bb9995f12eeb4183eaa1fde889f4590191cd63a92a61a1eee9a43f9e16849ffff001d30339e19","01000000f8000cd0261cdcd7215149ff2f0090c93b0857f0f720d0e8cdee782900000000d9a6665d16cf43ec412e38aef57098c9b5ff613bfefc1ceaa1781e5f087897f6bce46849ffff001d21be2da5","01000000bb36b800114609bfdd0019c02a411702d019a837402f1d466e00899100000000fa2fb24edda69806924fe1ef06bd073264d8b32f55eeaacab45a156563d0d4dd91e76849ffff001d0195ec60","010000008ec0e98eaa3378c803880364eb6d696974772bf8d9a9e3a229f4d50200000000f6ef70bb4846dffdefb6daa75c87d7021f01d7ed0590fb9d040993609c9c7bd1d8eb6849ffff001d20e842b0","01000000817ac590d6cd50e70cf710266e33382088e111e774a86af831455c1a000000008a15f1ddaef05f8acb0db86b2f4534f68d417f05de65a64073c3d0b7e0eded32d4ec6849ffff001d1b6910e0","01000000896e8271cf721a5db7b1dbae43b40eac2a7b0247870b06f47802968800000000595badffff2bb1453255880ba0f33d7be62a2f55b6f266bc26869d2715974c196aef6849ffff001d2c5bb2b3","01000000008de6ae7a37b4f26a763f4d65c5bc7feb1ad9e3ce0fff4190c067f0000000000913281db730c5cff987146330508c88cc3e642d1b9f5154854764fd547e0a54eaf26849ffff001d2e4a4c3d","0100000033aa0fa26441ead7005df4b0ad2e61405e80cb805e3c657f194df3260000000021184d335529aae22259315be42915b0360deeae97ec428a654014a3d2899ca00ff66849ffff001d0948811f","01000000632dfba41dda58eec7b6db8f75b25a69a38829915c82e6d1001e511c000000004f08f5265053c96c4eb51eac4ad3f5c668323f4b630af32a66915eeee678f9b36bf96849ffff001d399f07f1","01000000b5969273528cd8cee5b13a095762d731d9c5e30a21b4713ef255c6d600000000f54667bee8511d31bb173bcc6f15b0bf3dc42788a813439bfea9065f90586f3ca6fc6849ffff001d2c950522","0100000005ba6ff20c063f7f23b49c53d7004941241eb5347616f406333fdefc00000000b57076c0e5f498a6f06ef26c72e224cd7e25784ed6cd569e570988d5e59bdcd36afd6849ffff001d2edcf3b7","010000005b74dda1cc03078d30fe49722218667eb31524f22c59687ac30fe04e00000000ede29e76449491b0e2b766dc213c0e15bd7ab6eae48a7cb399c22a48621c5219cd016949ffff001d1b8557c3","0100000083527a686e27387544d284257d9238c5fe3d50fc9e6ceb5b8d8b4346000000000201df27519bd574817d5449758f744e42d648415d1370b17ac6448b6ccc9cfe20036949ffff001d05727a3e","01000000c0d1e5e651f40fd9b0a4fe024b79f15fa65f1d85bbf265582ccf93f0000000002837870b786929d9e30d651dcda7c3006a04b79d292261031a4235328b0f0fbc5c066949ffff001d1c00dd1d","01000000917354007e87c5ea0a1bea34d5275718a40d082bdd28717d7075f34f00000000e43721163a2bdbc80493a9e0b65d20b1ce63ec4c5ffadc39ea01e13d4e053596d4096949ffff001d1e2f1812","01000000f12ee37c151ee80a22be4f6ff155646addc588cf604e3cf354dfb4750000000095ca77f0c5dfd190be1eab32399d93555666cdadb8f44eb0636a608414b10d3c400b6949ffff001d160ab450","010000004aa5ae0b1842e2daa39a019e1a6cfad2306aae707b035f3ee571710f000000002d00540fb7aa5cf6fefc567912eeef891a19ac2f9fc055eafd229b1a73e1a182470f6949ffff001d02956322","01000000df2c4d42797dd61991b8df3033716f364b33f87a7cbd3494b8587ac400000000e1fe31bd4e94cd3a004849125ac5951703d34b33f3a90ca1ddc67ae4f8ed6eae2d116949ffff001d37466753","01000000c49052b367c9cfc10792aac007acdf986aa1e60fdbb87193cbd6732900000000eea3f31766c62e47ca1e9ccd303e37404887a570375079fa030b3e036ce71c7038146949ffff001d0552ee6b","010000002aa08c1efce70618d7370e0383a0b5801cafc5ecdc8108e34d93fe42000000004f0c28db6791823456c979edc21f8e9615a037c410299a745f2e7af03cf33107c8166949ffff001d22e2cd27","010000008e6285267ce431a52e3ef3c46eefc4a144f51195f3bf8489c891ffeb00000000a4d66fc5b10430fcfd14558e63d19b649a61ee95b71b1bcce948b1d53583dbebab176949ffff001d4f7aef04","0100000066184d75b89754b5363036a66b0aa70142ae537e9c2a64c5175f97310000000049935f8c517625d3560f23a3cdf82fef68779c99f4a92931c91d8c11517c5cf137196949ffff001d2dc932c1","010000005002c9b34042ac70ac8e36b1840672d69cb0ba6ada5effb6477de4aa00000000743a0389e4d8c9f60ad41025b797fd25e228123c4b54b5df20ed02ca97781df03c1b6949ffff001d21537e7a","010000000d765e68e3487bd6d3372dd9eeca050857cf6c9bdb171fcdbe34d363000000001567e4c48479995636794ce5ec794eb145c1194478f45bb0a45cc11d8cc27fb1581f6949ffff001d28d2dbc1","010000002bf72d8a5d6ea0889a5b52e19f53268423d644d3d61364174b859ccd00000000be23d982899e45eb4f5095cbc1c43ddc9495e93fd1e4f0bb3a20fd461412c5bd7a216949ffff001d14fc8df0","010000004c812cdb1077ddb53fa3da180758d29b49262cc37eeaf9ef74a8afbf000000000743ebb1940fb72a15cebc9dbe481ea7625c70790a56bedfb7d74e0ba8227880e3226949ffff001d182b34b3","0100000039e975250e63187ecb299082518f8da887198ea2b0834a1089cdacdd00000000b87adb107589f869ca344a457dec051371352b2f38be825d914139b568305faa7e256949ffff001d3a42e6fa","01000000cce04fcc1138bafcf657f97e31c30705b991827071233deb2eae63ba00000000cb9f33326bbf60634a0634c3bce1c4a7e43ac4bd3fe54a654ae35be3f6ac83fdab286949ffff001d2654f246","010000005714bd772bcbdb97a08d32cc82469cadbf7feb69bb4131a993bc7c7f00000000e19a9f3635b503e037212f13f6dd2b40a6b2d81379b9b341df3e33c14c22a3de8a2b6949ffff001d089368dd","010000007a127b3a7af982beab22647b6456c8cbe6dc43a290c65d87b2abc08200000000b4ff4753f29de2ec4aefcccbb72b113f820894587fb3b7e0218ca6cb648cb441d02f6949ffff001d39a360d5","010000005df242b278026fcf51ac4ba5cf5b590e58c2d1d76b2c09b25c52c98e00000000d6be02040ee5f8e52f2e925e6f70c73196064f99f20090bc73ea71516c5472d455336949ffff001d295b06ea","0100000056d42459d4e316593155b4fad15dd700b93e9d2eb9999490d49e98ec0000000048b6a7bcf2a59e336da83ee70ddd230fc7e2db16c3c2654494c5502dac012538ce356949ffff001d23c2373b","010000004ee5095194d71ca1b345ee9f27dbb6815ce4d5df9dc2c3c91ba364be0000000026366720a786e6615b3203909f8df77fc2e96d1afe593bd3d9623d19c481c947aa386949ffff001d1e6cbbe9","010000005878d514861163b782b54b2d4c6f6bbdaf22e41c2401e9f84522515a000000000e7dcba835e4c20485b614f252183b53921a8901049ea6ef22f09a42195601b5203b6949ffff001d22c63213","01000000ef06fa30dd7275529ae9d2677998c4d507a07517d28b23e6e08ed2e7000000004ca77b8b243eee32a9b06a8bea33abd5cf517bf68eed73e7fa951f4f30d2a17ec6446949ffff001de4acd41c","010000002f8b9d4d8ea162a1d2e5fe288b110bf80a92b963b2d30f40956c88a2000000002518bddd47990bc127da5579b114cc3976568c7d0fc8f5b7a4b90478076799fba76b6949ffff001d397d4eb2","010000002100cacac549da7d2a879cfbefc18cac6fbb9931d7da48c3e818e38600000000c654ae2f49a83f60d62dfafca02a221c9cb45ad96a5cb1539b22077bfa87d25e7d6d6949ffff001d32d01813","010000008fd40a92b8965c798cf25dcdd8395de4ef75f206337de4985a3262be0000000099add42809e35d9c89641de1e9497db2e70bbb283e9b9492599f879533654c5cf86e6949ffff001d30177cef","0100000086cff19f969df7040f27de690e7355436001cb3e361e7589526a077d00000000be4544845044c67df65f37d0ba8bb323fe457c141abe38eecdc2e530144bfb8103736949ffff001d31852f96","0100000053514b63574bf6c65d576578f6cb2ad0f6256de1454211ddfa2222160000000073cad1e2d193f0d27471b13eb4b1f356aa63de8dc78a58a9128a2115c6eb1e5647776949ffff001d140de59c","010000002b120517ca99a3d8361c2a9eef3126fff7c18e3ec365dc2201c315ca000000001d2e4b642f3d14c24f57f237d38acb8e4939855a8ca6ce7dab48e2cd85843d9ad97a6949ffff001d1622692a","010000004f8dceb614b17b5ac9c9368906ffb338aeb750a1dfe1adaa67eef59500000000b45cf14a7caeeb5fcb286d314ac2fa85f58df3d5156fa95c832f373930de9bc3b37e6949ffff001d36e9e4e2","01000000d143e6eb3910c5e54f55655e885727810105c04754ae1edeb349992100000000fc2bd82cfc026bb9594f5e92e7aae7f0c5750e6e7d8dd73812bc1fff792d2712aa806949ffff001d1d5b20d8","0100000053fb045b4d3ca149faca8e7ea53cdb3168bc58b875e47196b3a6b3f100000000406468307c915485a9c9eabe31cc853e68311176e07e71475c3e26888fb7b7ed30846949ffff001d2b740f74","010000003ce6c27ae14022e4b6ea0a5c3633d156e3e3a47509c1adf085371ba300000000f01258747019514aa5c475cddd59a309347280ead98d19d8df8f9f99eb56757938866949ffff001d18bcb4f8","010000004bd0b78e90c6b0f361f395535ac170980de0c8214380daefce31fd1100000000282c9db8313817b4835efab229872eae2b8b5011c2e90ed14e57192984da062359896949ffff001d15c6aed8","01000000c232af712ac8656ec1305f0eed1a024dfe6a4011897b753c58ecd97600000000c6752761b3f3db282dff2e4c43d1e44830dd42daf448f0398c2511925ccc949fae8a6949ffff001d14ee579d","010000002fbb2cf37990cba3a83ac9b3b465247d6d56c30898bb680920aa65f300000000671df2bb3376bb03ff686d80d2ffc4794cd7f720b49c9e6e09f494743dc984c1558d6949ffff001d0171077a","01000000b1c1b830fa67f2f425c668042dc7f050e114137be60d942a2bc9556e000000002d5f16b75aedef22d1331a6ef93329b3a1a3eb453564c93862fb6386b996b881a18e6949ffff001d05b824d3","01000000d2e151e4c85e327bd88a0d9fee0f5b37b0fc0d78c268d3460a0cd409000000005a92e14ed75457c0a01680433301e85dd78b7988e5dd9004c46d6d1712e1cb717d906949ffff001d07521665","01000000f0e44c20dc3e5d26a89301741c82703a423dc4e1803cc44cb3bcba6900000000905498df05eed30ba5bb145df31e8b185e947fcfd3b4f4b15a5623af5aa726329d926949ffff001d297eac72","01000000f02d0d0cfee875d2b128277f39a82378dfe0cc00d9aba9151fdba81f00000000c07d8b31b161830db5f6198d8933bba12c985618b18fcd6291acb4c2d8d82c8f0c956949ffff001d25d3778f","01000000cae10bd8c753c43529191bc15f2956f96c3c2e9498b3ee8dd506a42100000000d8855c4002ac58a052b1ad12af7179fecf988893093528f2a457beb5fb6b715fe1986949ffff001d275a6678","01000000063f92bbe049395e3bb6d865a6de0a5b26f4b6b01e90f4bfce381bc20000000090162a9c64459060f320a51253378106c6472a23a9dcd90588f0cc09d00d4dcc549c6949ffff001d212e6768","01000000cc91c80800b3a75d6542b82bc6d8d7024551f9bfb041ee1b0bb8ca0e00000000668b636991dd0638ddb442ee2b10e3184d87e2d059a43076e10512af8814d3d07da06949ffff001d32db67ca","010000009918d5221408b7a4325c754792ccad2b13e22e9f30dfcc0d965eeda80000000069a57920735cf77470917d6ddb01a83fe26fd9bcd71a360443c08d4d2d59a43372a46949ffff001d31070a95","0100000095194b8567fe2e8bbda931afd01a7acd399b9325cb54683e64129bcd00000000660802c98f18fd34fd16d61c63cf447568370124ac5f3be626c2e1c3c9f0052d19a76949ffff001d33f3c25d","010000009a22db7fd25e719abf9e8ccf869fbbc1e22fa71822a37efae054c17b00000000f7a5d0816883ec2f4d237082b47b4d3a6a26549d65ac50d8527b67ab4cb7e6cfadaa6949ffff001d15fa87f6","0100000084999d1fa0ae9b7eb8b75fa8ad765c6d467a6117015860dce4d89bb600000000ceefaf23adb1009753545c230a374c48851676ccb7d6f004b66dd302ceb5443b4eae6949ffff001d192e9d71","01000000192f62105285f84e7876b764dde15cc96e3689ccd39ff1131f18041600000000f38b91a939e7f81483f88ffcf3da8607fd928a093746a03b5eb4964ae0a4d2886bb16949ffff001d1541834f","01000000753fbb8b0a766119fe8e9347b55cf6f977bc961d7dff46b87c050921000000004bb7d646fe8e6678ab8829cc899a89f256b6cf19dbddd494a773b057c374002489b36949ffff001d1766221f","010000005bbeaaef7d3123d7367e9d68978f0cf8225a2815b3024e0125ef11fb00000000c87ac7e967e3b09e53e4bb31d4d9306465bd8500061c1819b15d451b46bdc95bb7b56949ffff001d2ac2b510","01000000aeb1c63f4aab6eb66f12f3c64949f43a4bbd1d13ffe777c3015c4d850000000080ee9dbb0f58c4e12269383c9735abb1c6f03065f40d5238ec6c3e5fec3a88189db96949ffff001d00002aa0","0100000014770aa562d6a32431289058ac1bcfafec815bee4bd2e7eb15197c870000000082232ac15c8d8642df8827fe5e3a297a758447f00c1ee9e51b2e578b22c5e5976dbc6949ffff001d2c5b65bf","01000000ebf2a13396772607b579e5313855d85deb6c2ff5eb4b896d17b0167e0000000002946a80f855fa6e59264de3b84da0ce975ab6d0806a90288bb2cb7f4e782b2016c06949ffff001d049add3f","01000000cf247ab093cae5a6698f9f3fa5e9bd885ef6589f2e5e5cdd9dd6af420000000030b2b4faab68a1669e4eda67442919f25561f8df26237de4760425433f7f00a33ec26949ffff001d359e2d4e","01000000aeabc567c5d100b902623137777ee19e9d5b758170acbde0c4cc5d3f00000000c780aae409a4f0992ffad17806e5f339c7b641cbc8562c04fd7319fc835edeab03c66949ffff001d01b4c881","010000005be5ce66b835f9b908c0f1680a009734919fda6f3a81a15861360ea300000000974ea41630fe3addd397cec0f06ee4aae825f9c2d6d789b082d5f2c646e2a3e7a9c96949ffff001d0405f8f2","01000000356c1a09522af6e71ed56b162cdddd491942547becde82b8d86d6a4d00000000ad1e219b43cca3ca0cdc2f17cab1a4b34a681eb17175916aa2dcee017011383479cb6949ffff001d08e0347b","0100000037c36afea0a92552871867226ae9c9107ab0fb2f66de0f64c98027ce00000000e1e5c48a2c1e53c4db2764dc5bab527232d2d31f476240b39e567e256c269021bfce6949ffff001d047b1301","010000006d7c6757b8cec3eaee4805a548bc2f4f083807d70606e48d83769101000000007c23a96d8cf18a918a19e68c5fee3454b5d09ec88b1f63b6c906685495027bca43d16949ffff001d2cb49bb1","01000000bd1ec9370830746c6d00b96f75c786438df4124833b6c4240cd47d5d00000000a4e0c85f9b755b1611de231958c1d7ddf51186095a5ac3d9dee1b1d78594d53e9bd26949ffff001d23df49a8","01000000c8ae056e45843ecabc6328e036bb92a3fa8acddb53c273fd39a5492c00000000a9be635b8f87de2c48a738f3e8201f3353c2044d05f44f9aabc4a59c6905865ce4d46949ffff001d2798e910","01000000713c6c20e18ace81b09f7de4367c8e81a89711ebd6e96ee05e80f27b00000000fb4361f015fd0ba2b6d7baf685f0cf6eacf1397f84b2744ff063e63ce76ebfbb3bd76949ffff001d2ddd0ec7","01000000c8c43b8c6a02ca773a2817bda6caf2c608c190e903518d7ef132bf9900000000c28142c6baf94b86be7c50af14abe462faa489979826773ff4a932a299cf51448cd86949ffff001d1b00da30","01000000f34115cb9177628f46ef37f45deb3e04761dab5d0b88acc3324958540000000068087c53b8717afb90c642f009b8fb9b490e8215e242737f36adaa0690c09737bddc6949ffff001d06a64e69","010000006a4690e6ba50e286b8c63c826399a6ac73be3f479f17406cdf90468700000000f5e6a6e8945968936187c5bcfbcd35db4c259198b38779e494938d18fc5ed641e7e06949ffff001d36a19bef","010000002ac91bab86c12ddf776b1408c8d94700c05502961e0dd5e637cee16800000000ff7ec13a3709b78b7a29035e7c10fa4363afae9d786e2a7ca497db08cc07d93879e36949ffff001d203e2d0b","010000009b5230635b6e8eb413d75661c3b07285145a6f5c38f151015286608a00000000efdb9fea5b31617d311cd69f6f54fc938c6d0da6f659d1fab97f84c9d9b637d6c9e56949ffff001d1f92e6cf","010000007a844a2d5e3211fbc9562904b9951b2503cc877e0541545686d1988d0000000009ae88a66180549143c5ab25014dba8b985672f1806827a4f4b5f9778cef44b97fe96949ffff001d14a906f4","01000000a0aaf794ab3acf94f717ee74fcd635cc01badadb296aa11dfde4bba3000000008e27364c36456cfac6156408768d45af49a465f35aae702bc48ce63f97401b6146eb6949ffff001d05adf26f","01000000214f1824d6b2eb5f201c6780488187fe72c608bd66f078b51c2baece000000006ac9cb0d762ee58fba505cf59b6d36f2e82ed40cfe19f1016cff52eb7ae34f0d17ef6949ffff001d00566038","01000000169995432bd5a5855c37b0437a5e1584955fef197af1147b67fd4a2f00000000c8196e93d912864d817e2a81e07f7cb1a026e3fa5ca80b4c1e1e55bfed4a61289bf16949ffff001d20dcfff5","01000000fa2347d35699e4fff52d432daf752b9ddcc0c0f0e3a96e19d3805e7f00000000e1ac834e2c6e79465b2fd284f7ca1feda75d155a88ff8bd2b9c1113c4120480aadf96949ffff001d5c6cab17","010000005b6672f14e399b1ec67140ad0367e63506347d266fc865332a757a4600000000bcfed99e7c1771baa0582d46dba9c84268a31f9023c259a0b9027171e1a69a5f2bfa6949ffff001d2638702a","01000000f018084fc61ea557815ad3e8a2fff8058c865e8060c86dea337ba0dd00000000bea5824628bd47b2edeb32cb6a46225a2b74c498a9fd4c5077bb259ffa381f9a58fe6949ffff001d1622a06b","01000000ebf0aa9d07b693713c4562044354111303dcf300be82240a6bb284180000000036ba73991a7ac5d0a454e2e019e237d3b1e4838de39b93207ee2b0cc5bbf00921d026a49ffff001d059e1ff5","01000000a1597c83840b54c99a7206effcc252335f2e5daa369cde117e9139a600000000f91fc47ead0859d5f3f8a33f73fd64abd16a21a3b96ef48d52e893741499969a75046a49ffff001d98df280e","0100000067ce0cc7d592a1aefe86fa83ac6101bbcc0d736bd7a0ac91529422c000000000e4a9a2663a445292d046b21dfb56c59abb24b9af231b4913bcf6cdd45eb81b0f90056a49ffff001d19e7838c","0100000017ba37557e4381bec9bffb1b8c0e6e9e1b045f5d008267559fa3a37f000000000d50983d860884a1414e78d728e30106ac7787018c1ca53ef29555551486640823086a49ffff001d0267d559","01000000f8e93ec183ec2f6428f1c82370595974a35ca60df6bb22f8f97b7bf00000000028ab6cc3287a5ec4f7a4d787a99e5cae6ec7d72e7307551097e949e9aab13105e9096a49ffff001d188fb1d6","010000003a3c477a4943dc98140c07b5970b78278f36f3d16530ea664e1a538b000000004a01544d614d0ceb34ad67b7bcbbb28000ba532067282fee211b36b9b6c8a9f2e80a6a49ffff001d2472798c","010000003af99f9879b01c4f520a3df073d7ee31f468d279d22542fd08e6ab7d00000000f1c9801d5e85c29842c8e5aeaf83a0786ef952c19d0d0bee33f78e629e843b50d40c6a49ffff001d196e6c43","0100000079ba841ff20eaa20745063d8b58deaeafc50ff30559ae7de395788b800000000cb537ad225f53bdcc69762c164492dc692e190ee3098cf933f82597350982b88f30d6a49ffff001d38909c8c","010000004a823aa83595a947a91df4dffa27d24a4211c1c1b352614d5128cc6400000000d9a7f8d838220becec1802eec1430b4769d6b4699eb95fecb7d1d5c86e6613d80d106a49ffff001d1c45247d","01000000fad05be324f6c411800e9195bde30549522668db30be952e523e9c49000000001d01af6c4716b28de4e5e3385a5846bac1fa90a565579065d904b354da4f8765de116a49ffff001d065c70e2","010000001d1f73cbfd47c38aefe270faf05873ddaeae469eb57976b067cfb8d800000000d5273768443e9e48d86acc6a1c5fc3925e69d64f11aa17297c1c16e6e339960e5b176a49ffff001d2ac19999","0100000095033bbd6e41afe1eb283ef23cacd5d72c5551a60c081f2f341698b000000000448490d4ce520ae01c822d2f2b489a3b2805416c21b558cf99cd1dfa1e29a8b0141a6a49ffff001d2bf5326c","01000000e50eaf73b308c0b468bf3a8ab80d9fc6a350e6d998ec0e2869ac3da800000000ba98b85bb12baeffda12c2d2263a701e572219f3c93972e17c07b2aa71cea4731e1d6a49ffff001d208ef699","01000000a0001921bc03feda5874a7954f914cbc7a8a6449e1fa40439b4c3ed9000000004206fdefe7da3b2c5cb0c8dbb12d834ef3ac8d6e2c68050eb716babe95f4169d48216a49ffff001d2a17c9a5","0100000061188712afd4785d18ef15db57fb52dd150b56c8b547fc6bbf23ec49000000003658f907b55bf0e46ac560d0cd6ebb1d141c311c00193ad69a98b4f6b9b6b87058256a49ffff001d26089718","0100000002a8bd45fab7e40d8207ef95762e8578589a1961a9f9991aefb4477f0000000039359e15c0251a9162151f681d2b23c71e734595db271846aeed8736c2ef443f84276a49ffff001d17d2841d","0100000012052719601a039f27921ef35a24c82cae5f5024f326a56c8ee8762e00000000a683374124eb823197b4caab534ac172d7da016d06e35ab5465fa883f7b69c42fb286a49ffff001d08d5a80e","010000001c084a379912af47ef38e75d8eec1f6f698b0cead98fe1baebe17f6e000000006f6168c5809c18ab102a28087ed22a5aac41e5c531b39b8a0975ebaf1fc044ae102d6a49ffff001d1434411f","010000007e9651bb2d6a7298248c64cea76c14c02c1603c1f2961e9f4e487a1a000000008ac11bbf709fd20c4a6adc39dc9827402a4df48149090c38bfa393f20deca655a82e6a49ffff001d373d76ae","0100000035a83bdde524407a7bcdfac3232d2bf6710f5559d532bd2c7534b8e700000000474fbb76278470f31077953b66d0ce967e1b3e2e3a4041553b82cd3fe1a2cb5aee316a49ffff001d0354b0b2","01000000933d9038fe5264f9453951d40e55c91504e1920801c85dbb5c27c81100000000b9253cf4f366a018182bab5a30a54c700db0736b540e3ad16fc1a109a81929b530346a49ffff001d19fd5aa0","010000004d1f55defafd65567a149e8cd32e1a2019b993e17f52cfb43357a79c00000000fe0c90dd69f7661425eebf7c913f0dd932691f3b1e3741105dd3600b69b9a9a0d5366a49ffff001d018cf476","010000006af39676eb24f1eaece7abea73ce12d06667c7c3f463de9513c54ef000000000ca7e0cb6eb209f2b422bc3c764e25c656065027dfd60224ee448d12c57fa74b785396a49ffff001d309eaf13","01000000c66244e034c9bfa52424ad91905b999cb6ff5d49dbe82021d59069ab00000000ca3fae9a5bdd728abb0b3e1953a589d945448dd452331c0199e3dc2b1c5935cb893c6a49ffff001d1c0a17e1","010000002dab0bfb58146516975016ad954f4d359d683e07fb648a10edcc805300000000ce3465d7e5317988c75a41ea862dc489918005c3d90f7e4590ab3ac04dc1836e28406a49ffff001d08c31735","01000000a966418ed4f17c3c3c561f2bdfb169edceeae84cf1ac526d89918bd30000000052fa7ddc59d3574bbf404011820e1e48cfbee2aa6e8f2f5b472bbfbfab874fe9d2416a49ffff001d17e6dbf8","01000000844617f4b214028227f2a12e1f51713fa9c0b5221bb2dee5bad355ae00000000dc3ebd22794574257ffbfd27b91a86dd7012b2ed308f406523074da63465cccbf4436a49ffff001d34b4a57b","0100000060c630658c5f01cb69f491ea3fe62c1be151e88dfcbe10fd4de29dec00000000d46520bf3888d22e5fe5e3b42a90b7aac299b95fb494b7918fb4bc117c79c83122466a49ffff001d20d07655","010000001cc93417ce5624c12cb0276687806f821ca362ed9a8c29cf85b009fa000000006de50306437d27771ba99ef09fda4941a6c6c6a9c86e0743b4daea0756c082a055496a49ffff001d0147d461","010000004e317ab331a5202400278e0c50ca3b6686e57e73bc86ab931245c0320000000016f949e36753aeb0e437fdbbaaefe5a40aa4960e215a1e3adebc0bf787bd52455a4a6a49ffff001d15f68734","01000000bb78a59387b1637dbb642533e4a74b38a5195b0a6af8541baa9609c4000000001763035d50efa2bcefe978118171858f930994578cbe46d39a19ef0deb14b02eaa4d6a49ffff001d37d6ac39","0100000026c058c08c4557df6e34c7de02656e0cbd6d764723cfc66808c1192800000000798a54b6a726d075c488cc745ccbbcdf77a4855b8b53356bae38791f8574169a85506a49ffff001d2f6a5fb1","0100000003da8ee59288435e53b260c26bba634075fb06b5835ce62e1feb615f00000000f6e68f7cce7f5d8f9c4765be05fb97c748e55a891bb4f7832d275c0c275f010190516a49ffff001d03d47d15","01000000ef366900fd58d8d80995065f9e1f229ecb097bfd5e4e86ee9331e9af00000000110cb7ea8c9c3033ae0d411bebe5f901a494b2af8e5ef486292a21f836950b03657a6a49ffff001d0036d305","010000000a140d07068a12d8dc0b00995dce36389485fb18899e90022a80fd6600000000fa24daa03db95f0e3a181c98e348336cfe94b50c4583e1e795df141bb1643605137c6a49ffff001d14061228","01000000d77eae89abd94eb4b6ea46b05a711fbd02f49633234ebd28b2943e0f00000000be9e027c64485d4b00ab136704aacd49a966347d35828f8f97226b3907281ac1957f6a49ffff001d28121ef3","010000008f617fec2ced454f8149c42f4c1f849f7d6792c842ea0737de77696f000000007a7a94c3844949abcedff5ff841f6c2c14a322787ccf59444fcb0fcb23e7ac84e97f6a49ffff001d0394987d","01000000596a61fd813cf573a8f0333f0012ca0d328f8261731e430a7f3b8aba000000004c703a5af4849dd5bb01d47a4b9263568fd3e3e3515ab52a663c0b8ec9238a2667816a49ffff001d2dcb6462","01000000de6125d98bc1373a22b1e4014e25246202cf847092e22b753750731900000000d8d170cb03bd901495b9c0a9cd689f3ab78f11a1151af4fb3f698099ad26826a3d836a49ffff001d2acc2b62","01000000696aa63f0f22d9189c8536bb83b18737ae8336c25a67937f79957e5600000000982db9870a5e30d8f0b2a4ebccc5852b5a1e2413e9274c4947bfec6bdaa9b9d75bb76a49ffff001d2b719fdd","0100000055bd840a78798ad0da853f68974f3d183e2bd1db6a842c1feecf222a00000000ff104ccb05421ab93e63f8c3ce5c2c2e9dbb37de2764b3a3175c8166562cac7d51b96a49ffff001d283e9e70","01000000eea2d48d2fced4346842835c659e493d323f06d4034469a8905714d100000000f293c86973e758ccd11975fa464d4c3e8500979c95425c7be6f0a65314d2f2d5c9ba6a49ffff001d07a8f226","01000000e0b4bf8d80026bbec5370a7bb06af54257a9679cef387fab8c53ecc900000000d578b0399b91624a8da53552035fecdd8f4ba2b9c69dfbda68d651fcb9f99c388dbc6a49ffff001d35464c5d","0100000054686892dd112de389acc225accc0118765f9c51c2ec9306f6abefe3000000005209a3e77e3679703f6b7f039fb9e054d7862e6eaad617e8e3f3d81d297e966015be6a49ffff001d21ac0323","01000000c585ac476b5878f0f1917826430b3daec278ef28c121c2ec9dd6e9dc000000008195110f0743ab43d4146798c962b8d101e325f4afdf8e936d15c2d51371b9cc7dc06a49ffff001d32915d0f","01000000c052286e779e7e48397d8c39fee98a3a5718c82dd6bc5b71eebed8a700000000903bb52cc35576a52e9d8f35a901073d33145b6f7be16aab1aa328e8153dfb4874c46a49ffff001d227dd986","01000000089d2d7196d00f737762fe82cfd86820c6e44bb2a9dd0f5fc1fc4afd000000005c3de10cb7cb6934b0050360980f9a37a95a8bf705edfbcbd3541591ad95c16466c96a49ffff001d09338966","01000000586ebdf7f1df4885ca322a3021773c6281691f9450e8b8edddf3a91600000000885e36844a21fc6078813daa25b0c331523374924d21fd63b2e939ca3fb2b407edce6a49ffff001d0931f108","01000000b17df64200cd007eea9b6ac2760f69693f83f19f00352bdd99970c48000000006bf4f1083c14982eee4239a9ac2c94c5672f7da3d763bb88488936a4ac7827672bd16a49ffff001d31f068f5","010000000d5ba629a32522334a8d40374b82505533f1f6117c8a906cbee06dca000000006bc3cfaf5339c2989f4892ab10bbbd5ed3db490712b5b72dfd29390ca89178c795d46a49ffff001d37f7ca97","0100000070e12562bd8d2d8b2c1d298fbaa3bc4f005b4c41692850276b5aabc0000000004f1d6988f3aed27c24bcdd92ed9296afb0d58073f77da34caa8cc83718fe8cbd3cda6a49ffff001d13bfb72f","01000000f2c8a8d2af43a9cd05142654e56f41d159ce0274d9cabe15a20eefb500000000366c2a0915f05db4b450c050ce7165acd55f823fee51430a8c993e0bdbb192ede5dc6a49ffff001d192d3f2f","01000000e5c6af65c46bd826723a83c1c29d9efa189320458dc5298a0c8655dc0000000030c2a0d34bfb4a10d35e8166e0f5a37bce02fc1b85ff983739a191197f010f2f40df6a49ffff001d2ce7ac9e","010000005dad27b228dac0272b484c390c32d95aaa38e75ba9f74ffc1178485400000000292571e03a414e493790a4bc212dac24d5d6cd5655cbefb4404dd8513b9825df6ee46a49ffff001d13fdd3c0","010000008898a2630f7fe0b924cf5b986c8a8da2b2959a2d6faf8b033f516ef400000000bf20f3ca28996db0f2f884ef15a03ff53ba6ad5669ed4e14c861d5dd56a16172e5e76a49ffff001d2e11190a","0100000046240a842144b1583595716102ffc02afede6696ee0f763c4e2f86ff00000000eedc47affffe3a58b9e90e1b82013b695a1ee4db3b40f0a5cf00e092cb41df315aea6a49ffff001d1b7d5c80","01000000ef73923157421b892f07214e80eebf6b0a9503f8e6673bf6f38d4be2000000002f7c7b0c58bd33eef2b77ffd707cc44cdaa2524af9606d29cd03649d3491cb21b5ea6a49ffff001db033dd00","01000000bed482ccb42bf5c20d00a5bb9f7d688e97b94c622a7f42f3aaf23f8b000000001cafcb3e4cad2b4eed7fb7fcb7e49887d740d66082eb45981194c532b58d475258ee6a49ffff001d1bc0e232","010000005d496e62546b36558c139bd429d277bd00f3ec379888169115e2cdb200000000375bd2a0ab09dd7911c8bedf47834babd51a929d7226d8cd1908f47c0a496d3aa9ef6a49ffff001d197c3bd9","0100000093f117e1d73ee60eb67360d3be4243c14e5f40b8cba7f389b30d949a000000005e6f2b29966c399124c09a17e7922e17491bdc20d877a05ec5193c5965696c5fa5f06a49ffff001d26aab366","010000007829db45b94dc80ce11ec51d05710cbeacaac839c3560cc1cc0db38b00000000352f966d224cbdbe797d75831458c63e93019acd98e2f704f47171d9b54c7503ddf16a49ffff001d05d324e3","0100000035158869187e847cda0d32280015060f87141c57f4d63f2c59c3317d00000000b1ad99b3de17d2b87f6234843deb5a49454bc889498d24e3cac05052c15000ebfef16a49ffff001d25bbd0b0","01000000ab3249dbb0ec7a1ecf9383cfcf20e89acebc9124313f3f4f61f30b5200000000bd444a225b8474cc205ab13fcad732afd5967fb54814696b638f07d4a63d29165cf86a49ffff001d1f9afafd","01000000360bc1a14a967fd75d7ff6fbf412f40e25efb6ed5ddc174f10a6350a000000006459a7a18e345d1297ad46328d519f5321607f4f68842eea6338443c2c0e47107ff96a49ffff001d1b1cc7ee","0100000096960b9108d868524f9e5dc8445420694699b4964a9143c5becc3c83000000002914dd3668b3b9a3b8be41abd4b19891326376ff0bbf6cb267586d43f5d1eda704fb6a49ffff001d35fdbf82","01000000e73ec9fc17a74e1bf3cc13b864f43aebb3cc38688ead29beb70b689500000000df44c7db330d4f72049206aec20ba3ba0bc40fe8ef869f6424f20ee13d3e204969006b49ffff001d31626c7b","01000000fec8cfb1d8ec7924ec65f74c4e3cff4cbb43f6ec639c5c9dae97b968000000002192402c287b8d63b6f417d5285e42405727c06d7f217251c8328c2821353c3f9e036b49ffff001d32f91830","0100000010e3bf77a047b400f882ebc26190c347074a6b5a7aee8fd67761209100000000cb2d57f524b9dbcc51a990a86fc9c07943066324a6cf4c2ae873b4698d23987a90086b49ffff001d25e04f95","0100000014b89d2cb8c442342ae166f29b09ff9681b2d681dc8692f5371927ef000000000c25033f4632230ab97c43b37fb6a8fe25decab5642ca31ab3a2f9709b115384e10b6b49ffff001d1d7d9d2f","0100000043e1769206b487a5177b71abaaeccfacefd5654ab0767146c15854e80000000028fa7465bf717c2b27e570363ab4e1c10c4abfad031beb60543062df39b99477350e6b49ffff001d18ed7689","01000000eb68047fb29d78480b567ef6b76be556a2ec975656424508cc1c69b700000000bad58718fc3c6f5474918f06c44400c70b4c86d55a3f3ca3493b1d40c2061f2ba00f6b49ffff001d064b3a6d","0100000020f3ee2eab6068af3c66a24cf45129e8117f2b40b8160c3208701a8f000000001dcec670b3bfa0a5815a1abedddb30de7e87375cd69069cc9586b73e19694b866d126b49ffff001d16c59fee","010000004a816f59a7df5b9eba6e53132776d8a396d209fa24b0063896d5502b0000000068e4fee88262f7c148ebd3c3ca12cd7044abe5f2a955838d5514331ac609b43ec0166b49ffff001d282d538a","01000000a8bda5c3901a58b32f33d88d97b5795924230775bfac9b2f6530c7090000000065d60f17321f25f9e0cb3bbaf6a2c592c6cf7884df80159af2f6f3478a9c3b1c081c6b49ffff001d2a3a9557","010000007221fcd1f376bff2d06339d4d3d7b5036fa35a24597ba841a8a7e51e0000000021a7e6d42f17933bc030f40e92df8f94861b7d9d082e65fc29d9a75d4aaa2e4b5e1d6b49ffff001d6729e900","01000000cfc9aa754fb17fc796ea26a5a181572a5293a102c08daa121c09509e0000000026f192a2a1c8da08e191a1fd5ad19542e1934b3af1056c391b9cc805ff9e78b4731f6b49ffff001d0758685d","01000000456cd9f21d82d8ad7c72c36f6f0dee1208151118fce2ab161b26e3d700000000ae40981d242770153f1eaa23101d19134cf53fa0a76883d7fd028fd0e4b7cb3209216b49ffff001d79f07f07","01000000787a2b9ed1399fb4d3460e408282828e00e876fd412fce6d5d0986790000000083c39d3b58b93abd3b845604c69bfa59a1d6ea338ad861e77bb02a65323d211055226b49ffff001d1c11b8af","0100000008b0c3649ef5e09882ef0c329343ca0071fe5a6d18161f4ea64f71f5000000007749725ead5952f6f30a2908e4906af4399344613103777df039e42e0200073ed3246b49ffff001d2ec915db","01000000ff821fb870996402c8fd921a177c00c8c4611b60aa816e73fa2050fe000000007d3538947282faedd8c84f85c251c505c4df714e240054336a86d9033d7eca15d4276b49ffff001d17cc84c2","01000000036bae2441980287a666d575a3b739b6a11a06db1c45d6f53281470e00000000c65607846fec55396090b5f91fa82514b625bfeebfd4f46f6eb64bdfb0f6ff4c99286b49ffff001d7a95a103","010000006bf130ff73d65265e1cf7d71ffde239a688407230819f02a34321910000000001baa9adb9dd7d2c5a04567c480e7a46ceb0478dd5b5b1bae2e2e67f311ddb517eb2a6b49ffff001d086384ef","01000000c40b2d8037694fa88c7c56cc0343a2770832b4ca57d478bd43d6a236000000007a3ff73ae9d76c3caaaa46586164959b8f6090b9aa0b46552ee67c4e77dea770892d6b49ffff001d2df8b35a","01000000ec2abb7fcb2149936ab06e5d91f277d50ec7e09872dcbca907fb6486000000002f0ca022561b484b4ad478799abca66af5e8f0b558f1f871df4f20290fc7f1f22d336b49ffff001d25bba8e2","0100000027e876b8de88a950b6ddfaf3fd45938fe8b6ea8e9de1337defa569fd00000000c9f7a0d7bc0a76ae64ddd7d57895387b51dc58b83f78cfb583d43effbedb83e4e6346b49ffff001d2993c5cf","010000002ad40106231864c755ff0db3b84c83852ac589eeff6866075a646ace00000000f8a050001ee3f902c8f630388944b57ac1ec824f6ffe323dad1024c80dde97dcaa366b49ffff001d05252b0c","0100000074a54c99f532a50b7e54c46754a1686b2794ad5e92d56b9bfeade08b00000000019b7ce46c11ee1789e95c5e658d34d63f7ef9fac8ac5b203abe0550afdd5760723c6b49ffff001d01dc56f5","010000000cc9e84d83dc83df0e5adb49ba1c383ef0641915a3b23ba81dc2a2fa0000000036528fb723e4419ae8bcd48bf920cf90bfa34eb1f77d7d6f0ef114fad898a1560d426b49ffff001d03ffea1a","010000006459f3b5bf36eb04421cf99c8fbe584a294d9af1bb7e4be0f63e7d7200000000001721693a1dc8e7d66e641a67e5a0254c861bfaab11bef49c65330dbd21e446b6456b49ffff001d2f2154db","010000006b0c1d025552446050f41c3d74f102c331ba3b7ea18519ebe950752f0000000082afaecd8e8e141c4ac4fbb74744c90be0050c44c1dbbccc63b6aa44b1559d90b6496b49ffff001d32f5b172","01000000845a5302858d80f3d16d3ea5967ecdf31c4c4b1f33fb7578c613c8d20000000013059224acb3d334b142bd1a291cf388a25d75b2b0013034a1d2d60d20939ed0594c6b49ffff001d1552f7b9","01000000581d2b080bc47372c06cc5de8eb40386b00c72d4bdfecdd239c56ab600000000079f89b6e0f19f8c29d6c648ff390c9af2cf7c1da8eab6ae168cd208c745f467cc516b49ffff001d0171a069","010000002ad4a6b233a139883df9ff34ad680da20dc6c2bdd83d35a49166356600000000ed0dcebe3a28000c0a0f48840d6b7b22ea66e3993a700310dabee7b39d3989251d546b49ffff001d294fbdd6","01000000161691787f1ee0509357df163af92df6ba66c795703c87ee6684a64d00000000b4b1eedd2afa63d66e71476b7dcf5617d1d26a2ec884048a6c2fb48b40fd38204d566b49ffff001d18c580a5","010000008f1ab51efb8d1677255f4c7780aa19d97931a8a89d607222de8a93b900000000bb2b971954496cc2f0ac58182c614fece7dbf4fc5c38fd73a58c8d269854128a29586b49ffff001d1e5b4da0","01000000f209a7cf2b8c5ff0ec0ade962ad0ecf91cd59d07db4d5824cbd5293c00000000ad4d5fef4bdeb6d00ccbc7695ef9a5b84656d48fc8e890e1f20ccfa306e51a1b945d6b49ffff001d1d507af3","01000000284f213d7d9581d6a6559c1733d94038e743fdf51af65c9d9a2665c6000000006b82d3737a21532b37822b8c6e75358ceb399391503f53ab913a0483963f499e62606b49ffff001d18f1ec19","0100000064e31cdc15d226a83d8e4da1b5b4f0117e8863ee4486b26113e15351000000000f5418bead63da28d7902fe1a45a9c9ca4f26ac6eec67b367dce4efd4cebdfb00f646b49ffff001d002dc826","01000000631f74a1ad394caf3a23d589b22a19120209ee5c455651832c0d8bfa0000000085baa38193bce58319968e8b34da8c4263cee659dafbea2e8e43bc58cabb419995656b49ffff001d26d58b5f","010000003a3449de9f6b8e0c3516ef3e9747e1fe4aa1fc7b0b0dbebfee26fe570000000052e95211a597ec8e642a059d356c367e36d08130f8457207211ff04ad84521d859676b49ffff001d34c07125","01000000df2bdb1560d7a65d9818b5089009ea4e6432d7cd02c52aa0704885dc00000000ee61f26e77ad46e205dca3cb5342ed8d10ed25c2b92a97a299c699a985ee94aa136b6b49ffff001d01cd8b01","01000000c25254ad3e64a3a34904def21437381c8fc5d16d82ccb0d2de4f49a7000000008c3d70b36e1cdbbfb7ca700cbc35746d87a2a74a99b5934896cdbe83145129627b6e6b49ffff001d18f83d55","01000000db7b488cf03c93c5bf0e6292474c2dcf43d2fba78c2648efc81beeb600000000a16c14c7c54feb4ef4b8f82187ac916f9720cc317945f1af4b25e7bcd6c4ccbd20716b49ffff001d0623b8ad","01000000cad62064f5dd4297651e7cef3d0b64213081db589ab207310453e49800000000bd7579efee8d09583f239bc9e967662044c75ae29bfdef3f85b9e435c9f26bb08c766b49ffff001d2aed912b","010000003e1ad043118bf06edb7fc69db4765493107c698fe05a6313d6dac7160000000035525e6f510ed6c89553317de3cb71f3dc43ba6da9958633e7d0288271a4000ffe786b49ffff001d1b47947f","010000008e20ff28bcde01628ee43ab262ee898bf7bb477262338eedf0c9edc20000000006c70c492b26c2f79466bfb7efdd40372ca2ecc124754e227f80f815bf17c90ca37b6b49ffff001dd2175908","01000000d2811b555e01009b79ee833e1d2e48d4b4f21761803f24612b27066000000000355df6ee4558dc0662b36ed3f909d5cee235533e2edab3f8d915ae63169bda8c277d6b49ffff001dcc97d001","010000002b7a35ba985a32ee7de35cbecbfbb395d4b1ecef5f93db6755097e2900000000f64e2025a5d4bd008d79d2783948c4fc731b8f1fa8a08216cedd488db0de6d51417d6b49ffff001d008774c5","01000000ca83df82396755d95b880f736abb542701e382596c32e08aa312e23e00000000e5cc59f81a335a267a591bd052d9fdd53242f429a38178416779a9566c77314293806b49ffff001d342d8ec0","010000008d8ac3b2d5d890a336050b7eaf84d7db9f4e7fbdc9bd1fdb5cd953d1000000009821b5691aff2086c37915db646b0d914cddff16b78eee59f830769d560e52ec8c846b49ffff001d291888f4","010000006da1588e8e72c52aa6536b382f90fe136b4c817a7f58f90f5afe67ea000000005b1abbafa765153ca7510e19707d952d438512c0b1b231b975dbaf6b8464524346866b49ffff001d3069d304","01000000a84aeabbd1f5ff945f07fe9af47c4adfd15857b8555a2b6db0f5b3bd000000003e5b9149016433462350b6a2dfd3f0aaf7820f545019d9a40c1cf1ef52f6b94c09896b49ffff001d396de01e","01000000809195637dc8668cd8cfff3a7f1e420281ca23991062a5f4dd7c820a000000008fb46b848f1d829a3ca64469210cb7212f76821b9b46e6922a1c2278399cf0152d8f6b49ffff001d251cc6e9","01000000dff0bc9bb8d9cbc1fceda2b97081fe9069ed30cc13354295ce110fbd00000000d793273b92d7a4096730aa4087cf363f5e8d7cb09b226e386aa0db16fe5bf61b92936b49ffff001d1b14a510","0100000082c9aba70c108b20ccb3f7effabef7c29b718f6bc19e6de2e41b6d8d00000000ffaa55797c0794fcf67869f520fd58e7cba73f9a77187dd67ce34b60e199ce6704966b49ffff001d1fba4d71","01000000bae5f913a2797640fa7e092a0c844a8ecc9dd787c25a2252f4f1eb4700000000b971b6c1c2810db67c3031a465b79eeae7c4c64743ecc5c7823ce0f9046312f76d996b49ffff001d22c2147e","010000006f03e79370856cef73c3a6e0e7528714e7b045ef322644ff494f7131000000006bd78ff0c8aeb1fe6a303047123bd7389da58a3e9ef92c94f00c714174ca806f6e9b6b49ffff001d00c02c98","01000000321a0f86f1e7d319b649b2d357256f2bb79a0d754ce3e8d2722fc6cc0000000001544e4fa7d4aea7b50a44b50977508c484c1adaddf0d3a62ecfa902d794765ffb9d6b49ffff001d1aca797e","0100000031b810423f2bbca0f0ec63dbd27d915b43d9c1cd8c89fc063d7dae5f0000000000c13252141214f62d96633d576d72d966acc6b00cdc56a1d2ccd5a1dec264ae44a26b49ffff001d194dc0d3","01000000b0f6d0519262f1555fd22b6e50659d174a56755010aaa1c7ed445bfb000000007d8956020efdf05bbe201b77ed22cb32c6b92ec033eadb97739ec3e59c5615b4f7a36b49ffff001d17940a84","010000005521242f0918fc88c3fe1c3feaa9d54edb313ae04594d66a863a481a000000000e2d5d4c0802c25fce07270a170ff08b459c7e873d8b4eb88733e1f07446f9d448a96b49ffff001d323a99c2","0100000003337dd42339a6cf4230e7ba82ec641c83dad3ab21b07fbc4436834e000000001c365fa31cb23c2ecf1f9d217972a86d3b701db5781d3c58c0e59c0241d136ee5fae6b49ffff001d13cbf3d5","01000000ff8d980bedc154d5692a95ff6682a229464b5bf4fa7462b3d909dfed000000008a83b414d75b3cac1f414ad97815fe8d6cc48c7485b7d652c8c88a00a6ae2a24aab36b49ffff001d205ca29d","01000000aa659e28c1c521edd93e5f3ab7b660cf1340162dfc605724478efdc8000000006d99f811e136988d65a4fb0c5eeadd53e31257e8ade811f56d4b26eb93cc8c65aab66b49ffff001d33b2ddb7","010000000b442f70cc9c14a0ff1ac48aebd20d03fe2a74ade8b80145313ec3d100000000503b4097a31513eabbfe4ac3cb93bfea20a328b6893307b6e3cc011eaed0493951b96b49ffff001d2a343a41","010000009c371af755f56db86fce75b282e9f16b2e5c1896d64d2e836acac365000000009ed7bb8472c60a6ef80e0b0c1226ccb9068994f8bc08da09f3707ad7eebf09432abc6b49ffff001d3493f76e","010000003cfe06478e3d07aae51f33d9eeafe4602f02927bfff9ab1f865ca7d000000000e8d38cc77a6b4495062e219ee46eb7e727a72f33521a578331e761a444f1b21239bf6b49ffff001d367aea21","01000000e78ffaaf0db48b2596e59375005528432346769f4fc608c648d8b1920000000037272f04e5b7003f5305822427fc162855b5843f140b1262e173c003e0f54c217bc36b49ffff001d1a876bdd","01000000cded848bb1059935425159a8d43d60397cb1bcd8616c0f3c43a63d6100000000198f9bb878eca76a780e29dc0a31cefc4aa192e9813a7fca4b32ca6d46f3bcb81dc86b49ffff001d30d91813","01000000b5d54eef2aa510561b8a80167185e0549af7ddb9596c22971c8e741a0000000045e3289e34a5c2b63b44a9d0ca4d96291dfd835df5213675169372b169eb76d7c5cc6b49ffff001d26462d40","01000000d1ef076904a53ce3613ed77b732056625186e1ef905a1c41f19e4c0500000000f3145b34cf00c5ff01cc056c67649bae850ddad54d0b9f06670fc65faef78f4d68d16b49ffff001d20c90c03","010000007f3919d1322c65157d7b405d257041c032c66bd132fd47fe501f503200000000f543194bf3dd60a4b17a415fee38819751a9fc21d8d6bc1413fe7fb3935e01fa57d36b49ffff001d234dc055","01000000b9bccbb92e5a423e1516df739262681556e90e4e1f9ec8af44ad4a0500000000a18165b69446266adc0bd4fcd12e7d534b46ffb8ed7a16dc0f336181e689128a2bd66b49ffff001d36f6c3c6","01000000a8479ee1a435404e1d08818ab5cf48b099201eefe2215f3e2946e662000000002c32b91e02ad893a2d8989b3034a184e9d192a91e71d52ae1008b0f14813362beddb6b49ffff001d052edd40","01000000fcd8e0afae830796164ad118da1a355ff0e0ff0ab7cb6cb962ec3c8000000000260c379a8b783c5122e1754883c09c1d55486bc40c8bf37b2b0166e4242db2af1cde6b49ffff001d2c240f27","0100000078b7a4b5b016f5959ef45763567b756187a0443126da4b06999b1f640000000011ab63f31531839ff98e81ea12006a17bacd6322dc380cee12633cfaf7fdbc3c63de6b49ffff001d59ad9300","01000000c35d5f3f6a916544f09398f16fd161f754a97ffebf6fdf5c33ead31c000000001000c3af37eff7e2e47d109a38173a5ebd989d8e7884b077c49335804f1e2706dade6b49ffff001dd2784b02","01000000b3f4eb9ef718f6973cb08991e9f12614290293cf3e97fb283854de54000000003d43e6bbfef83509076ff4213b9455e62359eb4e70e89f9b51a37f82fe698aeef4e16b49ffff001d723c0010","010000000f1f307b23fa10673ee2e2093c81730b7df6ebbf35a0524d7862e107000000000f40f5e65e115eb4bdb3007f0fb8beaa404cf7ae45de16074e8acc9b69bbf0c39ce26b49ffff001d6d61f600","0100000026d1665eeea76bbfb126950b0e2022dcbed7a54951c6eee8966622f400000000e3341bcc38ea820da34d10aa763521ae7b0ecfebf0308759a0a8c7a8c4d7a0043de36b49ffff001d25106512","010000007f2be63c541ac07fe6e364141643a2d03660dacc173382d84da367a100000000789b7f76720b3a11a363a0469195debd20a0e589959c69d37db16e372f076f740ae96b49ffff001d278861ee","0100000020796fb871d5bb123081228e4581031d2c5ee8502ba13bd551d48cc8000000005f61fb490ae66456439fd95f99d7d617c4b85a23f5245fedee93c20220d479226ced6b49ffff001d005a151e","01000000e94e0ac2c4b99c00e036149b2296b89778b60c2aa0ce72f0261d983500000000f3a0a04cb6612e78fd59a3c3a057602bb43a8884a256170d99884a63a3ba39c651f06b49ffff001d19840b5b","01000000f10e90b9198296337c768a9041f364ea3a72452f3fab902ab081e5d40000000087d290030cbea58c20e0fb4a147ecd6b7bb2ef43657b8ef9fcf7b0663e5e44e393f26b49ffff001d00bc7a10","01000000d07dacd495226ce87aed1e55093e2edc38b974782cc8f134724fd99e0000000022cbcb75214dde47d189e01c2d5f6af26c903b757e3f828dc61c63d2ae828c9e26f46b49ffff001d2009e377","01000000c8f8ca6c1c6b79460daa8eb7261c3cd761cc97775bb5690c3932143c000000009b5af440543f60554e8c386bd35121e5b541701de39db8d5037c97b34661bc583ef96b49ffff001d2a571bb5","0100000018f961873c3b1942b57afe0aeadd041f6fe47ebcb13bb4a1bd5992cb000000001181e967fc5e514944fcd984a63c5f973c16d80576a86797dd27701cbf80325a4cfa6b49ffff001d051ce75e","01000000aa49b33e4b86d6ae192eacfc270a817a129a9c3e660e63b83aac3e9100000000d33f258c55bf764efd77fa9a96e123b5c2a7434536445f84fc1514daf46ebad971016c49ffff001d2bd9d253","010000001d2bbe4ec72c655a0cdee4c7fd4e08adab21b023e37cdbe336eb3ecc00000000a47d8ce0f463e913d97f225b03676ead5ae38bac8b79990210b1dbe3d4d54e00f5046c49ffff001dd1a8b911","010000008af038b83b3e305700964d99e78e1650dd895dab16756bbf72050760000000005763d81e74b117fa98b95a0040b89a81d2c97555b60f941848cf2b478a920257e9056c49ffff001d1c20d897","01000000fc7a55cc4b8599463cb7d8234fd334ab218e6136e376ac9b8237915000000000332c73c419a245a3e01cccc5b34e0405177df52921756d798e8c4e96866ce3a7b3096c49ffff001d057fe75c","0100000018c7509b606d8372a6c74e56623afd0ae618c833c2bbcdbd0b6b68b7000000007f7773aa1873cd9ecc9a023ee1471a73abbe5813b2fa0d6e56b271c8c81876b8bb0b6c49ffff001d344659d5","010000009c86627c04b31a4b46dbb4cc427c09d4637c933ea9be7bb9e8a06479000000008635cc654d9475aa8fecfeb298406b54411ab77cb56fadc524e60cabe834d9be9b0e6c49ffff001d293c344e","0100000054d6054b326be657fd8b7ebbf2c6ec999807133e089785e52ebbf22500000000b817544bae27491dc2af09a35450de36c0ebaa5961aa39d62394b677ef36f43695116c49ffff001d1e918720","0100000086b3bc6be5711838906d21721ae63cc7be0718f03ebebf68f117601a00000000e02449420732c979fb8bc9137aae638d06d68a814c273d66a2904f2f062d281d6d156c49ffff001d399dd6c5","010000006754e16bd9fe93061c0f09281f35ba469bbe30702691fb8907209d6d000000005c91acb0fa224a709c5e03d2ff3c3a4158f2dbfec5d7da3f1abe1784ce27fed8691a6c49ffff001d091a4279","010000006b00044a8cba3dc3897a25796ce8adf757a85fd592eeb42b4f39a4af00000000ebc18e3ca2d6e33a1ccd46ddde8c64224b2b07042b8c6f3e79e7a2c9649eff00a21e6c49ffff001d27ee3155","010000009a04aff6c23e703fb320b2638ab3f7f6ac55ec41e084491d79f4d3ba00000000b2b3b30d79d265a95601d456e38c1d8d965e6d2e0864c0142d9c3350320e768e77206c49ffff001d182f7d85","010000001bb833077f0ce1ea0a215f9569a99305a0936b2efa3457bf7655f12500000000ed3831a5fe35066e87b7a876fd0b926de1b16f3d7c1264253b5be006b86941254f236c49ffff001d1e4e4be1","01000000ef44fbdcd2ebddeb3d08724206ba39569dad1cb37a649f33dbc216dc00000000d3bda4136057d95cc68b01f47e606b26fd6f0527c15f698409d1e31263a4de9890256c49ffff001d31f6a0a4","01000000b77205bc432e0ae9eaac04fde56a772d7229a47b51fdc51ee8e4ef98000000003b8de1dc5786db9245506b2279cf4ad265a04844684207c0b19171a54e47d3a596286c49ffff001d36314722","0100000033533bb129e61f0f74261d278f2bd55f2bc017488642f121507ce8d30000000021d7f702ded0987044a6512963eba50e5ef05400da1206d3f1570fe41d6282eb2b2b6c49ffff001d08df5cfb","010000001ffc654c5bb7573373ecb008c666b1d67346f3c083fd70a01b3bc40400000000c21a3a98e03ad686cc87f2d51f8de2e02b7531d668238feae1bd2915650a3f5bc92e6c49ffff001d33ed0ffa","0100000076ee758307d3585549458518e9becda757761e0314c50a8cf5a1167700000000987c501da3e11059bda0c7e2b0029120fd713d8736e0ee741a6742ac4aab5f0621326c49ffff001d23e0a5d4","01000000215c29adbb60ec035d12a4103d2083abaee412d45d9d4dbd9b6f108f0000000007ada786f5321ee0cdda517d705f8dfc1511bfd8ef3b2b85622109c3e4ffd95f3d366c49ffff001d1fe378ec","01000000bca771226aecf47d0c2d4d0de03a9d25476ebbaf0d072e6f3af6b236000000008e6856b17fc15440998586894e98c1a77b1d754342c70fbbbd86cf9dd612017ebf386c49ffff001d3707e10f","01000000ba173a10edbc4eae2540fe5dd9bcbe3bf5189b1dfef9975e3b08b13800000000a5739f6a44d001f0e97b0277d0f599b47d18c2d7cf8f168f6c5fd6e1775fa6edb43a6c49ffff001dd60d7505","01000000cc5dc955c03710cfb3f9c458d75f19c95f56f31e0b95640d76026d6c00000000cc6206173381330f6e9eda325a2c0a332bf91e5c9b73efce366f20e60fa69f040c3b6c49ffff001d37f9d05f","01000000079548816898e8cb7212a8a88eabfd59078b50b4e41973a3ef3005d800000000ce2901b9874557d7d6749e39bf4d0fb8e881df8ea05d2276f9989d758a00904c073f6c49ffff001d1e7336a6","01000000a97c079f94095b63849a5ac2ed1fd82e97d39ebd1124702a0dac29db000000007e931c5c905c4bb2a34b6794f7f5f6b2494fd700d267df407421f3a99e0d734f8e426c49ffff001d15678994","010000001cf019203e6548173a3c57523864eb09a82f7a4f1be22f4bc003b0b900000000ea0690b8082ec296c36f12303661167363147b054742b97b187c63bedcf915bc73456c49ffff001d1cf5bb38","0100000009869f4346f9195dcd65c0ba9e1e71b098772d78a512332c4a9eb662000000007424ae9c39a23c31c2edc2278030d62010144d3ae2f056a3f4dcdd1f7cbbbfa657486c49ffff001d2edd2722","01000000f633d7ed3ab899730fd3b64988fd90e4ffcbabba76860d74a53233a200000000e1ca45884a8d5c3e1b96f843ab103d7f5adb49b0e135f67ace25f9e3501257e3054b6c49ffff001d3805daee","010000000aef3503e227d687e663de625156415c1f9160682001f4aaf26cff7e00000000272d33c3a4c24ec89a8006bb3b10fd94c4f8971abe71fe43f6f709b704bf9c50e44f6c49ffff001d324c2536","010000006088282be394ce679916d8eba3a0abdac3330fd2710b1ded3502e06b00000000df6f19d80afb715ef20e25c00f2653a871be7786dce00b951bb79da3399ba859fa516c49ffff001d364ece18","01000000dcaa667b62bc3842d19dd02f669ed6b0ade1c1a5bbfd563d51c75c370000000016029115e149a3d2c26eb524d30639c2a17642180abd31fb1b58e6af807be4ff53566c49ffff001d1f7603c0","0100000067de9c26790bb5466429c55ba9016ac3ca52bcbf57c6d0d260046555000000004b63eaf96a27493190460930e33709aa48ceff8ef7004672ca40dd2744f160c8fa5a6c49ffff001d21d211d1","01000000b8c34305184a81962937a0f9392b74956df13ea433b5d59382913bef0000000085f0ecfb52630fd1f85c9a76730135c30514c121f981f8692f5cbbcf7601cfed1d5d6c49ffff001d1a423fbd","010000009b4098cabc3b4e1daee86d0e013a4d4b9e7aaae92a1a4605758ed611000000002b93a8b3600bf1f439f661035a2b648ae01a4743b7f3f4e1c126a58361a8c306e5606c49ffff001d214112b9","0100000094a45d813e28f95c9299389016042a34545103806742700e0d972d8a00000000d39b328e213ed8569eb7da16936eaa3ea0a8811a45ff3c347c922e63c086d3f210616c49ffff001deb133800","010000009ea458509b5ba68d1dcaa066575583c254b0afd4422d2c77502fecd30000000009b14b49603d25a274a1d08f89ff3de309d08e36601381764b7aefbb86f7b6c602636c49ffff001d2cf1e7d4","01000000f794b96767ccc1ef96b43ea2e69bb6a1f52e5833458e5c4443cb59ee000000007eb7b78aa311433c2f4b6e6552a9ab7761c800e115b50d50cbbd3de7a8a6f2e08c636c49ffff001da57e5701","0100000031d0f776374952ab53ac9a4594819b4854464f731a403d929ad3af6d0000000048d9aeab3becdb2cbadaffe319cdd4b1566d8b9b72256775b76449ae60b2b26664676c49ffff001d1d0a5441","010000005ee3919eaaa05cbafa09780904edf582ae1a5f6f041b0e335460fc7d00000000ca1c8b7de3eabdf44606aa308184a701b17e54ba4dee3c329cba74cc2108e0aba3696c49ffff001d0041b0a7","0100000089089002cc47f9c66a2a6177d048820e23f78d9973a318ab181ad8d90000000043016ba486d169ff402a1172fcfff49e19f4a3ef7f5621237586181da10896198c6c6c49ffff001d29f267fd","0100000070ab7fa5bd9d2546e8f57adbba0c6a72e2c4705dca154f9f07c5d6c1000000002524b345fd2bcb26dce6d270e8b2e9d72fc8e30a1c1d84300cc94634eec5b34d0d716c49ffff001d06ac08ef","010000006a6b37658b50fce0f3acc70340376fa4cd6aea3f757fd07efde765a1000000009b28183036532d921afc7d5be8bc32226bad32e73379e44bcfbd1eb2f7e4217a95736c49ffff001d257a5b96","01000000ab785433e91951c8879cf46a7a8393ddc8a1fc1d307bfc0376950a79000000000d26ba57ff82fefcb43826b45019043e2b6ef9aa8118b7f743167584a7f9cae76b756c49ffff001dd56cba00","010000004ab0ff71f735c72adb7ed3ed0b8ec64a046d87f6cf2c80b351d2294900000000962297e559039c86187f2dd36eef3c3752b82d4fea371e0557aec97e231a5b48ed766c49ffff001d1758af77","0100000084373d6653273dffa5b0a267acf5709b9f346af1d95871ca952a077400000000c91a78674c03e33092c646a16c6fe6a30c54a79646200d6c8a0059490db2253ca07a6c49ffff001d00d66cdf","0100000018a30d56a3af9c4f9f2677275f18f5e4af7f9db3dc97728b63eda962000000000ebf18b992082aed467928e1f328676f05c199a11e2b9363a16ee6c4a2ce716a4a7b6c49ffff001dd47c9202","01000000a72effe22f07f4f8dbe95adf5ad7945082b6695ff4fb9027cb0b103f00000000538722a0cf6f858da3aed95d4727a6166e2e3af582cefbb3098433fc4bad5f294e7e6c49ffff001d256a0b7c","010000006f5de128daea015f9eae5a13ac8a58c520554c7d26da2febdaa2c37e000000004e48d9840621f3de84a336e386ba3b91fc205e9f95553e697ae21e90731d0dfcf5806c49ffff001d2cd899d5","010000006d78d441569887713788f474f2a7b6223ba4513c8cf62abc87059dd700000000d036219ebec5233d8037372b4bcfe2f503d7ae50c23ece7d7d1688f82326b846b4836c49ffff001d22fe275e","01000000d433d44f69e5f008ef8a06142eb8af0d2cb6922b566b60b9701e0d90000000001fa0786d4cbe6087102b8f4eb8898619e074d3929671588c245da82b02f85093c8876c49ffff001d17dc8264","01000000c7004f45b05debf9722cfeded9d7c8751809e14c6aeedf566c3c508c000000002fa875269268db96fd0b22ac822c3caaec14670b13d121e0d07230f020c9245f038a6c49ffff001d2c204523","01000000cb8cb40f7101b5c1ea84b21e9c5ebe72c73fe1fb4de6c9999479e2b400000000168b726409f50b93fdbf84627ef45c764a232c43dc57c1561becac3c2be80ccfd88c6c49ffff001d272367e6","01000000e3b4dcb2ba78c95108039d299e91c944953aca612a71dc7498ab7f190000000075adb80fbe23ed9d10f241be958a96c26d8b0809bafe28fc9a7448c8a2ccbe580b906c49ffff001d1833eec5","01000000dae09bd53a1e3020f1b4e78526c6a74d32cd28b9bf4b446e0079477000000000cfe55d64bde1484876ea7c4d936cbef46b0ec9034b1f63d99802e44244583f96a8916c49ffff001d0834608c","01000000d5aba8f2ca60e1aa608fa79ae16002efc2f6b679838b250c0f82eaa30000000085ee5dfc18fd498766e9cb0388fcb20adc3935cf888850463b7f28e93663250412936c49ffff001d0c5bbf05","0100000075185a650dff2e961d87210ad20e6f72937a1238351b1a192fd39c0b000000008298c733380a6f78cf85f392ee278cd02d9c2c724a27bd8a4d87e490405d880b34966c49ffff001d036b479c","01000000c031651fcb166fe7110e244d14f27d876ff44a74dbaaec65b6921293000000004b4d0d1687e33d159db56781fb9722875565ae6f839fb9a2050793e0ed81e3ac5c9a6c49ffff001d278ffe71","01000000708deec6a30c31102ab7bd4f263cfeb57f07f48f42a8321a7956509f00000000d8dfc7824b28b78ed915172b4a2d9d63f82dab1b1c70d5127c199f758ec51ec20c9c6c49ffff001d290dcd10","0100000015fb083a4d0b8a95fbd467e9c86cf7d71261dd9861e53ffe5ea62817000000001d1da5bbb69b0bcff2c853c64be7bd657e09bb570ee824beb657f6fd8e52b538e99d6c49ffff001d3476683f","010000008190cd10026a0a135ef4c5973b83031b0ed90d4caefdaaed981f5a9a00000000be803106837e8c8467d3d6fff043f95eb8b5819e71daeee2edfa1a6db5130952a5a06c49ffff001dee74970c","01000000116237f8a998d670ac0945dd35e88e748f085aafabb89dd233ae946b000000001ecb5bc79ca6d1e063fa8d3260debb04ba334699c9f992637ab1e8c39633b0c29fa16c49ffff001d28279db9","01000000d885d0bc3a0c7e73e406fc0766c0ff3d31aa3c5f178d53fc4d1004b1000000001e419be3c4ac5302bf144187146e055bb406a0e19bbfad462bfb8d0b02323d1e04a46c49ffff001d1b5cba13","0100000056791d8749fc542e3f9c07b092e9e10c9ac4ae4aa5efa9d209506b300000000091d784ee83e11ace28bf4b06f0bb66b5854b1eca8fada68737e6534e46a70229d4a56c49ffff001d30692f9f","010000007336db42f627db39554576340a228c219e5a8eb99018a44b25bc8d5f000000003a11c368c5568a8b5a35c8d6fc36dfe276630a415d7b61630ba5a9359a98b56678a76c49ffff001d3668d211","01000000a67d9bc53da8dd0e15d068812efdb58d1d444d3e8f812dbfbdc0b704000000004916cef33e2043de9b0da2d3bc65a2472dea036fc2367d104474902c962b6e25c3a86c49ffff001d361e0919","01000000fb23de1762eeb37468b8d73ffee3417a26fcce8120c6ed0576ea221100000000b7786e567d1a7dcfdbfcda1a67adf74ae8d528f3d4a1fa50defc5788b1d6ff9dcbab6c49ffff001d2854f5ff","01000000b4816e108bc1b97d922fa72010ed60105dffd279959b04bd3956df5d0000000009d53c3649ad7cf431a0af740ab33720918240daf9092d2cc8f324228c842a2bd7ad6c49ffff001d153efd3d","010000009c69e8c38a99ae7df04b3e6b8c15b9e416e59888fe7963b0f58fa3820000000009f0382eca9b67a55ea4944f4a2bda00abfbfedd9d159773054328db3cc2d58864b16c49ffff001d140039a5","010000002b055b861a1d958d2fe0847ced4f287b38266d332fd471624317d33000000000b9450c8735d71005291544c2c7452809c02568423b7439b3a0cae818721ec9e0fbb46c49ffff001d1444244b","010000006e7c72d38b7ee0cbe945f88ec2378a1a4854321405b0a5a9a1d299da00000000827b6c72d983c743b808e212892671652d43f14df9273034b57a224829783aba12b76c49ffff001d0155f073","01000000140df01c2d9ebd29be458484819765b1c90a6a1c379754d3c522c18c000000009a9e2349449f0156f066ec114e90aa4c44085a0cd9ed8cf3161d08ccdaeab4e985b86c49ffff001d2015350a","01000000373ee8e0935316e0210ebcfb2413fde9bf7e4e6fca4163cf33c278c3000000007ce2602bab12c5f50e1bdbc9dd47a2942ae8b0cef06daa4810b10aaf637b0baf1bba6c49ffff001d20c97771","01000000b7a4f96e0ce19ce4cfeed7c1f76190370333b48adb6483cd1722d6360000000016177741d8b5b422caee6cc1db7434549d96a18612ddd50a1907b75dc7cda69cfabd6c49ffff001d2f577608","01000000be264b375b5450a6ac16e5c7799ff07f20f406bbbbbb059645de873f00000000bcb0cadf3ba895ee39d85f4384cfdbfc987e0f668bc9d83017ea91f395bc40921ac16c49ffff001d07d3041b","010000001c758b1385e733047f9e7161f47f6c4237e5ca2794c24f2ae6f2478d0000000073b378214c4ab232de2735db40a0cfbc8c163786b510cf1c406a533f1c54532019c46c49ffff001d307675ef","01000000d3c6eb229aab344ba660510c5bf68b384e68c59d6795bdff3b9ef4c4000000001860d72ae64808ed108c935795d25de4728e6e6194b2a2aec3039ace6ba12d2786c66c49ffff001d01cc1e82","0100000044d907b17d9d4dff36511a667739dabc23282f53b0442e9794ad86e20000000036e720a12e51469646b1975af8572ca88dcfe95cab31b74d46cab82d9be3b77bf6c96c49ffff001d154b0fd8","01000000d6b43be9d5f3496884e050276da787bb3e9eee56c72d90404d9e62db00000000671aac33008a72cd8ea85a2d7856a606d2199442ba37f0d5dabf7976d0294c4ceacb6c49ffff001d1de0bb25","01000000917c8c2799e9f0b3189cffd70cf4c51d8b0d1fb9924073b5bf1ee3900000000010042e639cef8b3aefb9ac853bc0c14f1d165a916638bc0f56f8b1c3c074cacf3bd06c49ffff001d1d39a4ca","010000003bb5a31fc9cdb5dac66ef9be5b672d0124e641b25d4951f8fbe5c5de000000000d979b9b2dee64d25673be23c57cb7163739a36ce7a51563bd641d4f61b27a9885d26c49ffff001d056d1fa5","010000006c437917676c9f606896d9c74729cc055d033d57a228d81d8782bc9b00000000e02a7f4942e1b1993e6d7f985a4867f20be960356a16ec2136beb032587baf3c89d66c49ffff001d2804113a","01000000b8da726118f15cd7db6b2692d5c324255a15c087e515b7a50c216a6b00000000d594b867592f0d8da69c46f2e70a8dbd38312b7614811b08034e521be4b97b7abfda6c49ffff001d302474b6","01000000dd1debec615490a9a3a0d457289c9abb3c3a5b78971659975adc25e100000000f7272ef43189f5553c2baea50f59cde99b3220fd518884d932016d055895b62d58db6c49ffff001d36154402","0100000092c9638beedd5804fb2619fe653932f7cc4bf9e9fb7998d1f41f271800000000acb4f51d6ea7f21a6418c98c7d87b30a09f7c9b98a9ecc7dffefff947a05148eb7de6c49ffff001d2fa0a121","01000000b92f5bcfcd38f864dca38c1883e4723d7368e6a12038214b2a69d132000000000ce1b184a9e5e134003e24a19620da4224cb5a4b463a012506c2d2d2dab3596904e26c49ffff001d2d38517e","010000005d0d57dff76768c9609e6199618105eafd72403aa8296f0f4d7ec5920000000021f75f3139a013f50f315b23b0c9a2b6eac31e2bec98e5891c9246648899422646e26c49ffff001d7cb94900","01000000d62ccbc0f883a025ba68442ddbf938aa134fab1e1316df072a4fdeb300000000402f7bb52670c6013c77ace8ee338a11c29865f85d5b1bd2af8590cdf262e8b201e46c49ffff001dd590ac04","010000000fb21f972d5ee102546d45dfef8ffb8120e95d5ce409d7ef9531f3150000000003729128121fc9eadb757ad7e2bcaded2cba454d13ee7ed05d50fe328c4d52ec4ae66c49ffff001d250a5e9e","0100000029a783783081126df75419263dc11f46cc7f14d39b7ad26a86e954d600000000456857d38a56389f2b64da33e37ccb38ad729678d886a07c652434b356fbd19499e86c49ffff001d2281c493","01000000413f60805ff131298ef6e1351555ee41fe182714e507b93dab07801200000000832b7fbc76161b8329b163ecd2034f11d5edc80293917d281fcdd0d238b76e3050ec6c49ffff001d31281cdb","010000000d6cb209049d4cda2ebbf09f0bcd554ba5687b752a5574f7cac329ad00000000460948613e6c6434b5a16f29d6df3c49b5d0e46ce7d0fb977e1331d934227263fdee6c49ffff001d1d6c4d52","010000005539f16a40820fe33a80b06b0a32880d8adc788f6f93c92afab256c200000000c21876cc26c83da631550882c8ade02d3aab879550868d8037199bea7f17315101f26c49ffff001d0041308b","01000000d5fa3c2fa3a24f2c04d8113f54b8a25cc04dd9488a0834d4b5a7429300000000efc5a1b3752136496bdc4894ae6b4887d1babcb9b0d2fc62756b61f24650ecc080f46c49ffff001d2c13d509","010000008a85e066d7458a7cac21e90c7d4570c74c5c8b97545f1eccfaa2fab400000000131902771caab0a6d0418ff7207fe9dc21e285ca92f2a77da03ff5de63dc914aeaf86c49ffff001d00b2a51a","01000000b8f1e96a9a8f5467a2c8104ca4dc0e3bd60ba64892908cfdb9d2ea2300000000eb27162ed9adf4ed1c2a8a0b8af436fa85f4115ab17583aeed3ec6f47734c6c86ffd6c49ffff001d34f504da","0100000053a5a7a5c1170e63263c082e2b65eba3358a2602aa7a407090cea76300000000d1715aefa8c54e47f34582ca4fdfb52aa68ca065c54c8074c99c7eda8c89e88f29ff6c49ffff001d2791ea97","010000005c7eab8188bc587906fbd43bc699698dbcd4b06890df19aeaa9dd6ca000000000dfb0ab7187dff8c41632dcb4c5fe8bf6064d553ba45ecdc1b1e0ac243da9810ef006d49ffff001d08be4c7c","0100000086558cc954042a26521f3e95cbd4215e578f06a7bb047c04c84f88ba000000005c5cf856cbbea2133b64dfda5dbb8c00c7ec9156be08f19904177244e48619ccac016d49ffff001d474fd601","010000009b95e8a46d2f93c2aebf911c564fcb54432880c2bf33f5242dc9122600000000e6816c04b2dde17d28d9974695e29a252a9646704be91196d4307306814d9ea1b7026d49ffff001d365962ae","01000000abf29f3a3ce4b2e7133659858c177cbba441322c7eb52cf4e53419f90000000071576545c553857602677fba7f8ecd0a8af349472bc6e093632f06b6c13abd3ac4056d49ffff001d283aee95","0100000053741e63c86961f77c62efad4dc2fb007669976656aa1f0b1b0aad7e00000000eacf56dc89327fd34e62cc0c821fc771b8762325ac9f08055bdc34aef65e8bbb470a6d49ffff001d011717d8","01000000b5d31fb950f4cb5f03cd8cc6abb99c7c87583404d9eca1edbaa875a000000000c9440e8e418aa75e4963d365d906e446d0ef462a141829c22c513a0ab710fd54da0e6d49ffff001d216a0d24","01000000e227bae22a3e3098a3de6b0b08370793226def733e5a9df1538bc445000000008f58b567fecf6a68ab1d069902ce9c20cbc2b63bd86dff26af16c9f2f8c81dfd96126d49ffff001d342a7422","01000000321cf471e583e453eefb0621f485346e841764d5fdcd8c5ccc307b6d0000000095fe197691075057f225d6a8e086e36703a0c119d28b7d103c5dfc3eabffd86117166d49ffff001d21eb4c5e","01000000e66ce20d82688e81368285243fc59236ee4893d22379466dd07ed12a0000000009e57ffc7ee3ee0b57d14427ec55a706164be4df891b3934348c759b8d2ab8f158186d49ffff001d2771081d","0100000018b0f32c161899d43563c9ba2c4f3ff7fc08c07689f272c1636782ca0000000086b330142d07a464ab327853997fc96f5b077f65d7d73a3a16df7478f84f2d1d7c1a6d49ffff001d34b0ac24","01000000c84d8ffd2e12cbe9959712b6ef5be0d1209502a9eebff6515a9c615c00000000ee96e021d87f2c793497040d036896c53fe12b054b9838715f9bbf9b19153c25be1d6d49ffff001d19cdaeb7","01000000c3ee7fd0a6262146fc62eba0babf80e27ace03b8e9681b9aba769353000000009687cde8c26204b5309d2c8a1fba2f73261d52b31e86f7c42483bf651de5ac20bf1f6d49ffff001d3a3e2c0a","01000000d73e6336614afd63cee36f8d0b78029eefa58b019efff9382a4c841800000000a53fd0c3b3df86b91604faa6b0eaffa019aaf02b09c0eb05229fd7c795971370cd236d49ffff001d2c33f7e5","01000000b823b05ce3ccfaca3017fa323e864a762207803a2a300c6a7ada102f0000000077e812536b6c182126b4a518ac059892feac5394f11e757900aaa3b9e10d3b2e02276d49ffff001d25885678","01000000ef7d5ed0c1ff4ce9ebe01263a5d17a10ccdf10fce2bee206f2812aa800000000035f60551be2523092f93a6d0fdeaf6229b999e7cfb90ab09d3e5dcbbce667d91a2a6d49ffff001d318d7853","01000000a67d64eb6c368edf74c0533b15b832bbb22c4c68accad8cb9002afcd0000000041154b8c80af49a514e083a83eb53cbdab125645b7da4cf245054ac21e6805f6fe2d6d49ffff001d29dc28f0","01000000d994a2578982b91149d6749b7279a82a93a7f6f3bd9e030aca7ed8610000000076cee71739a0c2e4271b16b25cf74c14df0e44b5f643c66a040049718803178dc8316d49ffff001d2b02d8c3","010000006f6413b26c1e80a4c03abc9c0d0d31cd433a8311c30b86de3091661400000000a250da79b426fb965e9c84ca0f7e84347d1c5fc3114a81fcfd8954d392727d288c346d49ffff001d26df2380","010000006ccae672d45feffd9ac65bfdd64965a2de6c30ce38a0b508dd59c5a800000000b6d0fc0cc9cef08dafeaf19717fdd026e66b9f4f0528fcdba83c767b38084ecc9a376d49ffff001d37c7d2c4","01000000d71508f3db86079c93dfeb4a33ff2c49668b77452d5869629618fd20000000000b8cd6832f9e266f6b3a726340cce6cd93a2264174c33f240a4145eb0c0a5804663c6d49ffff001d32bcaeb9","01000000ca7019bab7e70ba8402891fcbbba0a74171718be2483c0ba53c1e2cf00000000c1b4452cc92f63a5363487dac9332d973db8cbb4d14c68c1e118d4ccc412c71026406d49ffff001d1d574a40","0100000004ba59253f725b324bbf9c33ba5bb34051c2414b9b702b344268b9b70000000074964cbbc3d71366e3531bef5b50f53976b3876c1b72c5eea940ba3f30523c20dd416d49ffff001d02667067","0100000006e44fe670eed58fd8795e9eca53cb83328240821742e119a7257281000000001eae8458220094078dac57f1c68a9476da1f01eab256caec7a2a69cecf740bfa03446d49ffff001d2d65082a","010000002ba3ea608ca3ff62775dbc48f8384b1060fba1dccf831c9ca96cd77e000000005b8b76364380e4c44c1e8756bf3a8c8a3913ac5f7c7010c85754c280413050b572456d49ffff001d289a9c05","01000000cc9b9e14016f1057a878df25b4300edca58d57197448a8ec4636d8df00000000427f54ad3c97de5db75295eaf90701b29d515323a756aa35903f6383df7fabc3db466d49ffff001d2fd6f048","01000000a8103a0c02ec51bdfff1fb7a7e6e90403476106c3f1f6c0072bde1da00000000d8de24476549bb12e356f70516db2bb4fbd2653be8f3fcd9e205c58449bc35127f486d49ffff001d220d341f","0100000076a9d99f9e2d1da2d20d7b282a62daf9dc636de0d3a20a553ab299b80000000065b22b8b5c1a10beef86d13e136bf81f161f2e53e6001af1f309b9bea9ca0380e24b6d49ffff001d378c6f9a","01000000e44ed8cebb98a6536a138d6d5e47a39cabbf0dade347ac2a05abc0810000000016e09aa0e359eca501839586d2ac337cdb89d6c75213b5786d5883e98ad456c0ff4e6d49ffff001d1e1909ad","0100000089fe89623ab6564bb18aeadda14b9df79801745851d6cc272a707d2f000000003e1642c5990bbba1c6c803a6d6abda32f267caecee76a2e958578a9afd16abd99b526d49ffff001d230e914c","01000000bd3243bec9f516a367e3fc5327c37366cafb18a0eb0e730be074a706000000008f56dfacc64834bb54092460ce0ca4ccd6086d26e9532d96d6ac4d78a3a12bece3556d49ffff001d024ad382","01000000c32819a73675d3d8859ee30c060a2757cb45c9b70b59670a9f91d92d00000000f4b00dd6f24cf51936e6f454021afbfcdd82ba1248ea5f46f906ccbaad5369fd94586d49ffff001d2d858eac","01000000147d3bffdad3b6c37c4320986e6180e98ab28a8a25eca6148dedbc5b000000005a1e3ecb9b3a3a1eab6f22d69d4e2420ffb4b4e373c10c5de493f664c7bb6465335a6d49ffff001d16189344","01000000f8d8592ba08dd3c9f04d71e765d9121686a91e96a7917eb9afc56552000000000d7a585c00c3a511edc1c5ecbcab009f713643a0c0483f75c8065b01eaced9b15b5c6d49ffff001d1e4d99d2","010000005a730b9ee0642bdcf9383ef5a72bf984583ac6a893ad7da8b753e9700000000037647c66b84bfe8df8b2b723a0756b1e4781e1b2a218eda08842c9dafa20fef5505f6d49ffff001d22ed0265","01000000e8732084907af8e1981e8c2c1d38b54f636ebbb26884183f434fc1e1000000006718481bde81cb501f77bc00c4a620959797009298fab47e267aff83316039938f636d49ffff001d26eb5b92","01000000dd898676760fe07ce02e217ba10eaf4daa084bfe0028c0f510f348a1000000008ae6748a13216cccfaf34ba38e3d3d3abdc8439aefff5414e602096b0784511443686d49ffff001d210eaa88","010000004f617b019886b365688c8547821690139e4c847defc2211af55e38e30000000008134b9ba94ccc74d4b04e50c449c35f8d55b096d43ed9a270f80226be6a080bfc6a6d49ffff001dacb8ae0b","010000002d37d8c9e650c8c1c1a09427e856903e07d1d0bbe468ae1c0096f39d00000000a9e6d7cd607049cf76151251dc44651e3f838dbffa07379c004ba5907d2cb9fc6c6c6d49ffff001d3452c2d9","010000006bead87bbef72a40d57d95ab59b42b8a5f0af5b7e7d42cd98e8679f000000000e0bd2afb826e788fef8cab5e3247104e687468a69193432e2b2d51c050a2c842ff6f6d49ffff001d2dc4cd21","01000000271b8889d654761373e6a2911be342efa5847dbb43531acaa8bab55a0000000080621dbe70b4ec0638b830fc901ec15c99412e8345e397ddf431c77a673f2480c9726d49ffff001d367cbdf5","01000000ef7798cd6c04eab45afc937b04fc736d0a1a648256369b2ca6d1799500000000681a248d11008a00fa98cf68447bc318acb51f60bd9ea51c6f70ba4b9fa0fc4121766d49ffff001d356e1579","0100000094af2bf6a6c0570c7d615ae60fb9fb1587c71a7b3c5ec8f877b3de3d000000007e804760be499a15f70aa0ee4c677f9bd395a3cd6b6049a6095d8dda6d4a4ebe17786d49ffff001d23a1bf71","01000000f02d0ee496a1c2bd136d8cfe32fc6e1896fe4bf9b8339a4f135cd97200000000e300679d1b4d3903a854d1f5ca101639c3ab5dd7f0b60855e478796c00b2eb839e7b6d49ffff001d25296e09","01000000a1fd11ee3d2e04495e899e8a17439426ffb4f841d3c915b3b0041e6200000000c39da70a48781d8184e506389a8207558b6dffd2d0ad9ac6c8b19046f3eef42f7a7c6d49ffff001d19e5939a","010000007b6d52b97db9e83a9ba21d5677c9f5fb666dd56856096e545a44f55400000000e854a8975df5308780e1f801816112a369b9ccb2b5a1d334542a0d573f22539f757e6d49ffff001d200be371","01000000429bb1f7138a9404dd5db04040c6a3fe193586ac8416fa8745077e3f00000000d71e0f2735aa847499a8ecf472cfa580f6afac1d843fa35f3a90da9ab614e007ee7f6d49ffff001d2f3ef58b","010000008f50acfcc7f5c52ce52ecfcb1121c4f2c36b688a846618c10190cbac000000001bb875b247332e558731c2c510f611d3dde991ea9fe69365bf445a0ccd513b19ba826d49ffff001de49fe403","0100000008b8448159dbc4107ae56041d9f1184797b65feeb5b4fd5a6d5934f3000000006446cc8dd5183225a1f7540b7de5ab7c23a2572ddab69ee1b568cc3dc410ff6b29846d49ffff001d01e260f5","01000000f2e0e9c6d32c6e15caba61d28516e77a7259f5d5011fbfa03e16553200000000cc8517734bb353b99330974a0c6e6488fc1790d7bf3b457c287f899029374417b8846d49ffff001db5865601","010000004f9120ca95889736172dd60044b58cb084f84b67f2fa5877a4d7d42200000000516822b57b6bb2fcb9fef609117c5baeea3de069af8d65214f35f94e6c32328bf2876d49ffff001d143508d1","010000001940e01bc8b57d8164eca58f50756614ae5fffe83cf261f8be6f906a00000000ed6b6200b65d633c76b243f1b9b76e755b7aababc68a928e13cf83f56d52349597896d49ffff001d59c43207","010000001ac798b7586138573d10bfe9531ba9a409bc33face51349af12d16ae000000008926ea02799bdf550804d03c70672ec8d20c953405312e9897e2037b418ab428408b6d49ffff001d20309fe5","0100000074b2ece84e9de9f6676c75f687ea2854b805dbadac469a94022571e500000000525296df24170c89cca14ccacb0ffe040ea4b3715879994db8c94c7172726fc4f58d6d49ffff001d254b5f54","010000008ad3da3fdd6e7641ecf464a8f18a8600cc1cfc99dd328943c9c4db0200000000329fee4990496b8151c0588f0c319fc4170e9e085cac7b16dc4d5155c49d4b6187926d49ffff001d1bc12936","0100000044f55cc6a1c256e72d4c2fed0be900366a8e974afc270f3c04fbeefb00000000ea5505fe4b87294e29b15502722f7720cf44bc574f6392efa660a893de043a45f1936d49ffff001d086d832b","01000000e6836b00521dd207fa0f0b61fcbb337191e75ee7ef23b851fb7dc93100000000e61b52070bc3ca5986792a47d17e350b855f640d73a9237a03f168564a6cf3c1f4976d49ffff001d30bdfa2c","01000000103717884a57fd13610e06d675738d38d161e80c07a66eedf8a4bd6500000000910e314d68872fc69f04252c777a370b68e29865d855c7f53fdce8edfc948fa2e29c6d49ffff001d25a0798e","01000000e35d0f0797028e6f9283b40e85332fa8313c2c7fd2c484d42114f8d300000000ebe5c99a0478352809049ee550954f058cd5d5f33a587883058af778dba9afb41c9f6d49ffff001d29548435","010000005f796f901e3ca4562df7f25ebddaa60135549ca6ad93c6e73fe139ee00000000080836e135b44f37b7bb1f58d4e74f5a7debb1217f449bf6dc9b437d2b2a74d479a36d49ffff001d03aed663","01000000e738dc97bf30282fe83178eae71427039b5ec9bba17dd158aaa15d8e00000000e4fd721a66bf2a8a2cce0e0108265dd939221a80d97295b075b56f4ed37fd59ba4a66d49ffff001d278eea6a","0100000059cdfdfe907a3113874b6a467ccea4159572e86828b285659a8d7bf5000000002099e1a92d94c35f0645683257c4c255165385f3e9129a85fed5a3f3d867c9b6c5a76d49ffff001d6f409b01","010000002aa4bb82ee29a60bc645a5cf99a41a3621b9170d9aee883ab322971e00000000265e86161d5f8fd38e45df01a0c07188ece872296335b0d85e5f80747b6191064da86d49ffff001d1a394c67","010000008f0eed6f3137abd83f59ec657a9064ed36e033392c8e588c996660fa000000002e0287851c62f4205899c995f276a2f56c2da8668aaebe5fc20422fcbde74ca922ac6d49ffff001dc193b810","01000000fd62c47795cf8c049d450d075808121e95cd8cdbfbbc326f239e1a5f00000000af9302738200b9698f183f74f5ba9cf8ec54290c6a2235b6a0f1e7acd7f9842caaac6d49ffff001d21c498bd","010000006dda37e759836f6c455cd2fe56e37a4f80e6916e7be4581c3c0402f10000000089504189b02d1b5b26230ab1bea07b772a171e53c6648880caee6ddbcf8b0efd32b06d49ffff001d33a025b2","010000002cb5b8456fa9974b18f4d12f5a42cd717e03dca7d7908c7f213dc2d30000000090cbd8b763cf88334adb0678ce14a1097a4a2f19262696ea298d818ffcd8704fe7b36d49ffff001d2be31e93","01000000541dc3b6fc6a019d5489bf5715d6219a488dc7f206da89da60e87c7f0000000014a7c5aceccba1b73d97c8d5fbd1873416cbe0ed1b6d03689afcf5773197fb3a04b86d49ffff001d34b16282","01000000d785d65a8193b021992c4074ea1071b0ce16d70fc706e70b7237f45800000000ad110e0085a52c383d1a693a77393ff1466b90ea6ce4704db7a6d1ea609ae7f6e6b96d49ffff001d3014f89d","010000007a4c10d21f0b0c3a624d20a03ca4afa46f667ebe34d7adf844b6c62500000000c91d99e483f23091b5c138776ce14331c69fa07dad891af674deb01392429c72a4bd6d49ffff001d614e1710","01000000d780318aeaec0b4ecc6734c990599a68c9e2dd9e4af50802267e87bf00000000d6c871c502dd9038304eb8e08e650235a18806c0eb191a7e476d27f025fdb13bc8bd6d49ffff001d29d0b2a4","01000000fd4d884f05c434eb29efdd8847d133a984bb3daaaa970c6e90fe9d4b000000002ec058bda1b3917d4a3a5fe700617f4032a5ea0bfc1c40cb8cca6beae496928c91c16d49ffff001d21101956","01000000a926c75ec6e64c70586dcd349744accf969fe5eff81fbe52990e0ffc000000005fb770c4de700aca7f74f5e6295f248edafa9423e446d76f4650df9b90f939a743c46d49ffff001d702ae903","01000000ebcb77cc78c4e996f85a23ac6df5b959572bf5d3e1f1ef185b595cc5000000000ea6ac7429b4acd4ca0c094c18f77bb5579c53e620c6e61b81021ecbfe906529eec56d49ffff001d39f8f012","01000000487e516441c18207e91d30ad39403530de449be5c1d81deee09e5c940000000099560e61a0a6e3fd8b0d7cd1dda3631ccf97b54cfe51cf591c47f4d946924aba9dc86d49ffff001d1c579769","01000000c78a4f8f0f8deeb48af10381b38912475c876618a1be00ec643af4cf00000000ac280249d4c0fee8a4c544860d201ff7d0ad0774331a1f5732e1315966a51b3361ca6d49ffff001d30a3c29e","0100000042f40d507845112d799123ce539e423e984fc83233f90815edf507cc000000004ec2f4c554798d31ace2ebc056a9d345db4d700c81dacdcccb25b279e6796cd5f9cd6d49ffff001d22f24b7f","0100000001d2357fbbfa34717bae7d680c5e4c558c6f053d1b7fafa64958313f0000000013df331d734e609a679a2d1ad50bffd7936c578dd94844bd04546e8ccf93804ce2d06d49ffff001d29992c3b","0100000005d5e83fdcc04eeb26dd3ec79cdd945f857a7383637465dac58b79e100000000d5cd1070cc0366ab5dd8b5d71d0d136d0e6d60245d887a150474530d6b054ee231d46d49ffff001d061c2b08","01000000ac2bee93ca914c58c326cfe3f33603b3e129cadd1303937e856ea44b00000000a9b3280328e3c8d0f57fae8519176f4e5ccc12a5c7e260ffb885b56a26012f8a8fd66d49ffff001d0047f1f2","01000000f6e5e7e5463691a63d1d0322e7c377fd5a0658a63b8b9af30656241600000000968d4c096ee861307935d21d797a902b647dc970d3c8374cc13551f8397abbd81eda6d49ffff001d55ad3e05","01000000f9f3f14029398a0df6ca3eed54ea350b96451826f9dabc095c8974e400000000fe17b51c5dd7a75f1937414c82cc4e920f52b508d5dea0943620f3e1af181564e5db6d49ffff001d37bda304","0100000098eabc920a6f9742f5f072afe2666de06e73980bcf6cb823ea446d810000000083c11c5a85ebf27a69d9bccd0c4d09c37084028a1e7237388033d5d1659abb597ddf6d49ffff001d235ce65c","01000000b2fa1ff48712817647e40d262e31ac14c9091db6546ba14c86c3095000000000b82c01637f712dcb3010862f04f3f75ecb65b8c648b9c66c24461a82947fd0f29be36d49ffff001d36bdc532","0100000014f7d694c62703e5ddbcb608c6316e58de3a569c8efba226cfc8ad3e000000006cdb192be84c48bcf56f9585ad0d9920795b699e2b911de82184387a8389ec80c5e76d49ffff001d2c80f32b","010000003e932636458926dfbc2006cb1c4e93c4669cb2f9f96f4afa228e44b000000000b5d18814db24c01c65bbc13424dc7603186eb1e66b5bfc0a44f20fb4e3b52ccf49ea6d49ffff001d2cee2ffc","0100000060e7197869adb433b58ac12e0ba40ba87c7424e5ccdfaab40326561300000000730eeda8af7eda79ed8b8901c417c167407860199b9f44a6507a3fc875719fdb9eed6d49ffff001d00141f6a","01000000c524310b61f2da3b3176a512a37c9a055939099277435b031bbc5683000000004553fe72289a3f49852356911ad6abef64c8db5cfb94301e2773ccad5bbddd7a2bf26d49ffff001d146d05e6","010000000a5f36361d8653631baf19689bd3f6c86a043d17ef99fecbd3bb860c0000000093be83e8628083d53e7dfdd29d460f75c9ab37b1ae09693b1a4937fb677a97de46f46d49ffff001d30a41243","0100000016adf6a68a78fb0f1879d775965c9944bafedb0820f89dc8f757db4900000000f7e73747c0a277ad4b9565f8a5ab1c79e5f9819e795c0987435eab3e0ec9fd226af66d49ffff001d3a34d374","01000000cfe7060bc43f9e1a95c6081f0f77d986503ba384ed863669dd7933b000000000af5b8eba252bc676f86311494152b2ccc51171bdbb6488382d26c927016af5efcff76d49ffff001d2798915a","01000000e41c18a7921f7baf61b5bad498c414e4104ccc39c0b3a68b8bea9b58000000006bcdff869c6c6b17f0604deb238d48cf8a797b4eb3bb3f66b10a28f3ccda019ec4f86d49ffff001dcf86f303","01000000afdb6c48183f28cffdd323b66db69dcab14392b66f59820e9d73822000000000f7831b83aeb439a8c017d4be195e24a964d878642332d029e9e825cd421c0c062afa6d49ffff001d2bec8d14","01000000b15373b2a7b33ac4035ffd81ac72b60876eafbc7b8d5ff21f61ec895000000004a26e1073caeda821bb11a143d5dad57d5402b48579cffdd1a9a9571c741b9fa72fb6d49ffff001d68c47003","01000000fcebefd40c65ba1c7a621dda8789d8e10f1d62e80b3d05463888967700000000e560b11265f9e3ec7f3164983465b0748ead71853fc29716765f87ad2ed14537c0fb6d49ffff001d17775376","010000008110d936e3310b0284477556096a1a83dbb9833f17bccbd20afc029f0000000074e91a22ca3b9bdde05fc4ed376a418deb5981cfa52cbee00331438ed0d53aad08fd6d49ffff001dce015905","01000000dbe9cce47cd433f764026708dc57f3ff9b5e4dee6996df125e7210d20000000013c45c11e723cf2d0cf74e742775cbfc24bef49311f461e7152eaac88fa4d086fdff6d49ffff001d32c272f9","01000000a22bdd8babbe8df247194e63dc294607c8f028d4a5001b053897915f000000004aca07acaf929b7b154171c38afc3b798e620be583b5adc3db689ee786cf5ff26c016e49ffff001d2e14291e","01000000207b627ac67036f6b9853df8b2e0d1cef359c8a3192f9a8c9f15097e000000004accfd0bc42599680f77a7ba4bd9528994a917083b440588ec7c06ed64770ed2cd056e49ffff001d1aceb043","01000000014c71b9416c3cfa5e00d90c640d2ccae33fef8656143793bf9c00f600000000478e78cb917083cb8c5e5a1ee72591821903ab3e077ecada6f2f45792c65db333c096e49ffff001d2d7c6370","0100000010d5e45b60db1a4f5b59fda452501c50de47e2a8f19cf550a8035d4b00000000a1cb52ab1adfcb281fe32c06cdea885844819f22fab84c4cc4ed3c9d7347ef8d5d0b6e49ffff001d181e07bc","01000000d11077a0e24e7c64fc86cf53d7693759e6e1347aa8fa19d2b24635fd0000000091ed8858de31b160a3eb9124c45356417527f2bbf1a2e3056f8c261ec8066f3f1c0f6e49ffff001d29aa5485","010000003b397aaf36f1e2950514ce136814f7eaab1e58c786fb8ad1f14f481500000000a5d83e1912cbb89f0377a95617a6d48828e6522d2df4c860aebcab7da6724ec198116e49ffff001d20f4f194","010000003e63d22f7322b3067d7145026eb60774b62f4641cbffcc5c09e9d73c0000000080c99a25dfcd334324dd5be987f62b9dba104da76c19e0cea9761eac2e3e753ec0116e49ffff001db2746f00","01000000cfeb4a671bede6b2c7fa51222d59d4c31d20bdb284a03121657cbcc90000000068f252ae81359a3d34332fd03c9aadbbb1c04d345ea70690c273f13ff82886aaf9136e49ffff001d065d20c8","0100000040e53e24329d2b8f9db7bbcfa9e4632e9fe5061cb61a97d9f0d5150d00000000cb4c174617a6bd0cba4bd47766c6b04a19912d0400f8464bde5ea041fd59c88cce156e49ffff001d1c54c2ef","01000000042cd76fc32a93f1e64b1443f853abf5b6eea9c96bc65c54f7cb64db000000006d5ab121c81af7cc82e315a05f39da68972379b8480b0efc89348e472dd098ddec186e49ffff001d058a91a3","01000000729390ceb6c4703139c5a93274091e1ee08623b49c83277639063b8d000000001a510df2c6033fc47525d50e6c70e3fe74f51e4c0dd238c518d5e347d15a540b051d6e49ffff001d1ed1d440","010000001e003962f0494376087a0c99226a93b492d7fd4117173b651aee5be1000000009c883df5634e7f03bf03c765dbf101226fdbd8c0fb039e767242749a26f53f44891e6e49ffff001d2a393816","01000000719b8684fb7ca628f9de7a9caa35f74d79df38d2e36a70b6eddef0a100000000572730f63559b3c5a094491dda172849938f6f063efbf2073692d075a767a4c059236e49ffff001d175c3375","01000000b39c50a3de991241169a549b8be02181f506fbb9760b7eb9668d12e200000000961560f3a5bea8233949dde17501801361d1f3f092d7327e2b25a01b7a6cc5fa69256e49ffff001d187edd8a","01000000ace74bfb4fb7cd5a99bf8a51c64fabed5a446c14bb07b7da76639bee00000000c347ec6780d7849d557e05f60bd58496a0a64cc8d310536ac0ec99bd1181c2496c2a6e49ffff001d278d938c","010000006e8099910be4ae6b0ad5f0bc785548f2e4273f99ba0723d87008a48600000000e0b73f02455b438c97558213411190ebf962af553ca47cd9981e658d8e8129b3362c6e49ffff001d20c0220a","010000004d8e20d17c90b69b60f9f81512e9795e65c9df13cb7fb619a192183500000000ad738109c5f5d2ba6f8e0fef3645f2f93e85bfbc3bb3e3241450fd582511ed3973306e49ffff001d209f16cf","010000001a81f4a5a61c50329446714dd9afd2ba1c51824fcd8ba68264ceffec000000002fed99c8adeac656511de53c3d5b0b054a77a32676bfc45811aaa0eb9f6101976c336e49ffff001d1ca2ed22","0100000005b2a2661d1d93cc43454f53c706c6701100f37b0b98c981e785b15e00000000305f5e88fa4ff2de7d37cd62c7b34957eb322ab592e7908e484e0bca42dc245bd3336e49ffff001d3e8bdd01","01000000decbcbd9dca15a8a72e488191cf660c739356e6e8b123572ec12437500000000546094c2d30b8eba972c12658bd8c2ba5f89d9c83d7d264a3505be96f32d293646356e49ffff001d2b56b737","01000000da45fe5ac3cb755ba236733b14ec3f712b25d1683025a5eebe2632d3000000009ac99e6fc86815ca2e241ce47b2336af5f23c88bc93f53cf94396f475eaa1d49af376e49ffff001d0011c9dc","01000000539ae2882eb7c5accab0eba1d0fc53c609386b75fb93fa5462200f9c0000000067bb4dd75076972d1b0ecdeec87f470ca37de91a49512f0a2bae1f2e79c15d6d023c6e49ffff001d030cbf7a","010000003829b2f67fecab70ad1cb7a3105b37fc440b9438d4e3ae71a44ed0ec000000000c31f3fd81e767f01a3e08b0375ec3ad90d2bfc5b29f891eb35f4593f298ecba4b406e49ffff001d271833a0","01000000330ecbe4e87ab9894f369a12a0eb9691b6d3c48944655c2b8b68207f00000000aea31eb8b9d0bd896447cac8271272d140a6923c7a7fd7023fa383d1c1c9d554ba406e49ffff001da60dbb00","01000000a0f39bcbbd7c47d8bf158a10f8e158ff9ead287cfc3a73cb4b3db22000000000ccb21f5a0cbe96e89fae47060d96a527650770d76ebc8471af2ec7a89202b6c82a426e49ffff001d2867e7ca","01000000b4677f5cd0ff8baaf253f253421b5e8c1657759d986b19a10d1b4c24000000009ff2eca962a68b5e5b3a5eb20003e347f06aec93f78f472468132e3441bf65fd7e436e49ffff001d213c4746","01000000652e64669a7f2179aafc1d75428b8afee9888e55abbb96b910509b8d00000000c464d527cdf5f4325c85894da0df73ff2b1abefe20653c1fc8aa97e4524cea8bdf436e49ffff001d40245701","010000008b1f67fbe0c9a3874289e9698a20bb1563a109da2801e8db674088080000000085c5b2cff6e8f19c438ac35681265c65b70fbb1109de6ab3a83fa6283078c81a6f456e49ffff001d31484673","010000004a20590fa8cb3842ab637ff967e8db33d3b4e3e1c44090e9e81ab64f00000000c4e08f498bc6263ad23d0c46793d4834f5937b10b6b732619445f56ad47da1d2b4496e49ffff001d3135a634","010000004ddccd549d28f385ab457e98d1b11ce80bfea2c5ab93015ade4973e400000000bf4473e53794beae34e64fccc471dace6ae544180816f89591894e0f417a914cd74d6e49ffff001d323b3a7b","01000000e770c2a77c47cfc24caf6edfeccbd4ef242269752e1da6b240a2c5b0000000003cf35b66adc8c3337346191f33b59a4beac07201cd58f5326ea4dd0baa5bf65b6c506e49ffff001d1f5608d3","01000000de0b79bfdecfb7989159b3c071d6bf3f4be20904f8c110d39aa29ec30000000008785c48dfad1a6b79c93e4cfc4ed00b97a26b77b5b3992af48f9aef7bba4f3500536e49ffff001d0121bfa7","010000006a491ca8ed6e242089e9e393d2baf66407577d203eab8c066b6d3a690000000043effd4eec541268821d642aca58da33fcb8f709ed41d3a0353f9b2397b87642c0556e49ffff001d2a7cdf66","01000000459f16a1c695d04282fd9f84f4fe771121d467e5497eb1aa8bf66d8000000000cf7ef5b5c22d4edf641f0fd5fcfbcefa30acaa2fbc910206f8773e3918748504c1586e49ffff001d398eff7a","01000000db773c8f3b90efa51d8e40291406897062c164dff617d2a7bf64f64f00000000774328ddff50701ade3a2e1f28711643a17ad5f53f1e94639b04234fa0a5bbcf575b6e49ffff001d7232e103","01000000f9980503946685d96c93e577fbc9178bf36afda513d16ca79272884600000000a2211eb4bc799c5a8f144bf04cae15842c7981ceab73ab53df166eaec53b6d99275d6e49ffff001d1f75f325","010000007b75943c35bd0afb424749fc1678ff1f965e24c5c4b623484a132737000000008e4accc55fd5d1bceace79d79732249b0db8a73c38d6b87af374bd556c6dc9db85616e49ffff001d17d549b6","010000000a8c01978fdb97e72da780dee3f327fbf5877b354dc023e11923a155000000008d5cecefe37e8dee52868a68c1e99380d1dbe9f688a2e04cbaa9c9d27232ad98cc656e49ffff001d237ca29f","01000000eeb1138feb8e098cb7e9daab99c297741f5883955ffc138ed28e296c00000000b836448b8d2dd8de87b9765c04b756577521c572e1952e5606ff52271477f76ffa696e49ffff001d17401385","01000000873c10f7da8dab97ecae63e4d0fbfdcbb0c13feb1cac9de89894f6470000000078b733ee4c2438f7379ca1211e575cce9bf4ab139e6ea01ab6c31d411e862b28e96c6e49ffff001de2847704","01000000dd5f9a1ec0f94840096048c454c243dd0ab61434327efd43c02595a900000000a871208253064951df351646d410a8251e94d4d288ffe705036bab31d8a35fa8186d6e49ffff001d168ab213","01000000f08388bcc7029cbf307f74e7fa635eefa58bed3dcce96592c1ee6a1c00000000f5dadffaad68fe78823cd2c5c22b8bed56036dd7ad0b80bf3d4139b513827f8844716e49ffff001d0822669f","010000001ae5b762b65682bb4e861f549cff72ec82d7fd652170f261410f550d00000000f60b5e96f09422354ab150b0e506c4bffedaf20216d30059cc5a3061b4c83dffc8726e49ffff001db589e004","0100000066e778264a7059ceba6b336fe057e917c9ffcabe5bce9d1caf3ad3d9000000005fc81309eedeec4cba2f97783315e95678561da4179579ebf901057c1746bc6c01736e49ffff001d140df36b","01000000844884e8bc0d273c02ce85837fae68c614000a8097665931517f4aaf0000000006c59d850ba77f37481602bdbf400ac63e5f11924331f1dac2f36eabb941cd587b746e49ffff001d233cc2fc","010000001016f473e2c221fcc407552c5676eda4e6dbf4a1c94f33fde178c813000000004cf103ce804e02d8460b2cd5a82b899d1f9ee97de805b2329230f660621077a946756e49ffff001d5ec81502","010000008edfac31673aa6b2becc6905862b47b615429849c65fdc9f0062860c0000000071814c9c95509d9b9a368649105fd0527dc45601dcb95d702482e14b54ffa86d63786e49ffff001d350f68ca","01000000556b61f040823c172bd3aaa585c7323a43781969e2130579de61ddf600000000d3226717e7c0150181de9535ca51dc231b58a52b4682325f85e43c2ad626dfd9707a6e49ffff001d14a66442","010000005d3159d8a7dd07e0fd665269d6a21bd891444978e0f3ba3fd66d0a0e00000000483f470963903c78f5406e56bdaf64b9a9486773cb6691c4f40d7be221c0effeda7e6e49ffff001d2147e50d","01000000127a68159ee059fa42fa2515849d62fa92a636a7071c50ec6128cd5200000000ccef677aa826f0ff06efbe96f1ed59e3ab4bb531221405d6a10dc7c4936c89e5b6826e49ffff001d1a3ff80d","01000000a583a5f68b578276e4cea2746959b337633b645ac2fe74be12058e8c00000000f5b6cea39fe8800b3dbe3037cc7be8d7b635ac102fd1045036e378afc3fe0c6a27846e49ffff001d273867d2","01000000141218a64d92665f79f9f1f402db6807a2ec6aaeb70e8cc248a1c49800000000b7ce48fbe8321c00eb0f243b29fd17a76ef3f1990cb487471dae1a14ff660dbe87886e49ffff001d2605f07d","0100000028889a91835c0b98c3efa95bf0477d05b9c4a251cffbbd90f6f8bcc6000000004d08bd06912adadb20384e14dbea85ae51e0f31fc36d40aa4a20407df8eede97f88c6e49ffff001d38965fd7","010000002304d0899a8b63de0f7fb53bffa95b7797611f733961577b46ee2dc800000000572ec0b96307af3de1e49326c4c72b841bcf729805a5454d4ef3840d33136515178f6e49ffff001d171f3135","0100000081530c498ede569d51f8f23b9736ab2b622792206cabd0a66e4c93d900000000bf1b908172da77d71f5885e935f9c0101070911217d7ebd4db1273b72bdee2ad35906e49ffff001d5a333d04","010000009f09fb92c972b95ee5237fd26cce579b22ff2c492537830d246b87df0000000058f3770a9228ec06a15a7dd045db5fc0894f62f86a87dfd23157d806a6a56c24c7916e49ffff001d195224dd","01000000884dd1ca3dea4e958b3de3759c03825030e520db158d25954dca58a200000000eb59db31d319cc911b3b727457e35b987ca8e56f02611d4960ce82424719265f99936e49ffff001d20ca0878","01000000625129ef48c551c3412c4b981085e69e6c3498c0553cdc7d35a2223c0000000020d7c2fe310ef91c326658ae119a9743e7ded3c2e4a05b66f67556ba13883a1172956e49ffff001d05974031","010000005eba50c0c8db7241c9d07bfe5795e79905aec8620344c78fd7149030000000004ab69a1b320cc1edabbbd1f739b1a5a05f0eedfb6e7dfa3f5495f31880aabb1d64996e49ffff001d2f552984","01000000b1a0b9b99e88d6722fc122eaeca773e8583cbec3fd4acc2bdc02540100000000bf0e7ea79956834f1c6f14e4890ad5bc7381d2a1d82553160e7caa4d3785e96ded9b6e49ffff001d08e0593c","010000000d918e726e1e0ae3042971411b37ba7abd4573b6cf7ab4e4e67294be00000000fdf56f33d026e35cfc0fbb5e5ba0739ed59e93c96d73a37d1791eaee8a43cf939f9d6e49ffff001d2a2705a3","010000005d9ebc8257fb0c577663a96daf7735d60c6492e54ab808068b5e475000000000dfb1576fd26ca9438e2233176e82c8719a20e8e2a0aa7fdfecab716e9b9820a30ea16e49ffff001d549d3109","01000000d434836a01e6209b821782789a934ad7f0b53b55a6dd6666a27393e4000000002b6ed6ff447f7da29f8db2e7b806d3557eeb9f5e7f43656b0fe2bd40a4cb013054a16e49ffff001d37242382","010000000e73f0f5b98a430a3f0df1343843098e53c1e3dbd3eb34df659989a0000000004dd62e2c4f9998fa9f2f294377fc65e1f8f0830b362c5c1a724374ea3541911cada56e49ffff001d3358a93e","0100000036c1c9e205efa1ab7e731cf25a2c29d2521fa0a955b25fefed8aac1200000000b2bf91f2a5ac90777f0848ae5ef881032789315821f9045791b5d8330a88886a30a96e49ffff001d1fce51fd","01000000ff8f8157300ed47e77d14168e508bd69f1ca9429212a0b85a367eba80000000006890127c16d4b2a32144f1536ca891136208131f9dbac529487e8b70f8ca85496aa6e49ffff001d360c36d0","01000000e474ab0691d5e193f015c808e6e7603fb95b485826597e4574eddf5400000000e377aabd0ce40613ccba7949354320572f15ee37c3d6d7ab5aeb8d81d215a9305cac6e49ffff001d08ab91af","01000000ea7ee6971b5f811165409606b2145d57408ff1f5e2c4fd3d87f386dd00000000ebd3220564290865ad7817c029e16b9252097d05c6b39817763443816a62ebff33b16e49ffff001d17d9f576","01000000dc4b37a4f8cfdf005a7e9516740a9602558872c7651fddf6af297d8200000000d10565b0160eb487cc02392e8c22b8757a1ee0fbd9d52b6891e26c6bd51bb815acb36e49ffff001d2ad65bf2","0100000095ba491210820ffda9524c44c65c5c3cdfffca4b001e535ef18be9ea00000000360218966364e245326c9022502684e71c5024a1a6d50db55eb08332a8af873ee2b66e49ffff001d36dbe6bf","01000000a56b1005e7e8f481c50b28fdff91ea37ee10ce7ced39d26aef2ac22600000000650488ee24b488df9e05430b1ed7c9132256b756c0fccb7a37d6e318c257950b50b86e49ffff001d1f600db6","01000000a7185d5b88bd42894af2bc2afa36345b7cf3045b60e105ef554f84d80000000047dc9ded51a2aa8734e03b0e7dfb18183d0ce36128c98097144517e98b9b054762bc6e49ffff001d25e1da35","01000000afc29fe3922d88fdfff2684a7669ef615d8b5c4f7cbbdc5aa10898160000000089b6be1e4d771c289b409e2eb5e8b8d1aac723ab4d5be3309b60ad4a2ce2a640aabf6e49ffff001d05172fdd","010000006db156171ab1e50ff12e0c7fabdce8005b46db0e0c4887367cb8a3ea0000000040031e97b324b3ce3a0bf5fc10e23fb9a150be38e65afd6d8cf37d089f85bd0fc0c16e49ffff001d38221ebb","010000004fb8060afc08aa7525fdb59bdbb8a889fa0553b32aed3e4e61fb581900000000dc16765047bb14a816c39a3b9b5a2af94cc62b1a1346cdc3e52a02620e815d3f63c36e49ffff001dcca52c06","010000004bd6ebf9c982caf2df04b4c5a1b3a2552c8441aec9fa63c7d90437aa000000009827f136eaa54c812691766568acebe38a4192fa3b84f847e7e32c53f1d27155d4c36e49ffff001d16017d43","0100000042490a3de212575a7cade89bed6ac18a4466e667f3d679bc1da1b2bd00000000edb0a433b741049d6e7c0b44838a188ad809c60ffe5076f4c881cb93ab70b247ecc66e49ffff001d06fafe08","010000009e36757d22bd738dcba6f6fc47215839fe149b8b849049dbf305b90900000000e398331a75c87c42e14d571dfa7ef036cf4c06f85d05fee2d366bb2acc1b1fd4a5c96e49ffff001d02b465c1","01000000f5790162a682ddd5086265d254f7f59023d35d07df7c95dc9779942d00000000193028d8b78007269d52b2a1068e32edd21d0772c2c157954f7174761b78a51a30ce6e49ffff001d3a2e3448","0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29fc051906800000000fe7d5e12ef0ff901f6050211249919b1c0653771832b3a80c66cea42847f0ae1d4d26e49ffff001d00f0a441","01000000e64ac3beec275a3edc5a0dfe11b51014b7afefce067e661e78ed4d5a00000000d2904c383785ce368c59e2145dda1b393c169318d8baf0242fa5c62e40cbf9bc4ad56e49ffff001d39b1e8d5","0100000077ebe63083af4cd6860105feda4a70065cdae0949bac1b54fb85af55000000005f3b5e7e7e790d5fc6293c837353763d3acbc21942e234ffc52c8f58ef2b27e93fd86e49ffff001d15e7fbf0","0100000005d732979157bc492864a7a618bdced7d641053800c7cb86ddb1dec2000000006949124212608698b07e2d19ddbf1e4f8db3252b24701d5f8dbd4e1d69be77aebbdc6e49ffff001d3a8d120d","010000000fd3a3d4941144674e12abcb50cc5163adccc63d3ca91e916b50837500000000ae545e6b296308fbc77fefef86fcfbafae3c02d57543e7c17cb0fce41a4ea87f15de6e49ffff001d36e9c0ec","0100000075a5ad37b74e9126e265eece6af8b0e41c9594803b3a57773cf44f310000000035b1878318821687007890055fb65f442b1c4145c4b4dfe5092bd77a6ae4d2757de16e49ffff001d1ee51ffc","010000007d790b8a4f39dbe5d30a486db70becb32234ae457da9364578e8facb000000001384d807d4f276f3342828fba4df3503531fa75d45e032328471271cdb30430b1ae46e49ffff001d06e03864","01000000ee0a6213cb0cc4708764948f6ad97ff95aba9b366cb3f337df21128300000000d65bd544eaa4870f47df21613da0f9b22071885f7331bb53defbfa3654ba2aad56e96e49ffff001d335d6e97","0100000069e01e2d00d6f87adc1f552002aba2b7df61ac076dd61861be09ec72000000003559d5ea3c76414688d91e80bbf3ce8362bac94144e5193dfc25e5e4618881f7f1ec6e49ffff001d1810baaa","0100000079c30d2c23727a1e9f5feda4e7feb8ea0bda2ab98e23e7f6a9cf594f00000000b0de897e42fa7a3b5c3a6bfb8e797acf4ffbc16169394b03ad93296524ed633dcfef6e49ffff001d36d19a6c","010000001c1e11540ad5892a508caabe84183d7365ebed27bfc4e39707e4aded000000003f075d298921f89501c16ee2fdd02a5895bf1c6e338f700a8767b77fb1574ca8bcf36e49ffff001d2f225d06","01000000adc4cd014447c192d822920cfef8c2fb4b1fbb4876650fc0e24779ee00000000a03bc376eee4244d3f59438d0e0031aa973082d9890c62479d9ab04e0397cfa6aef56e49ffff001d3649619b","01000000cec70016b2c107a6f4fc33fd160e85e67724b5548d3e052a9a8d1a5800000000a88fd10885277062eb8db1611eb4743d302ca776c9bd20aa8076bfcf58f446714cf86e49ffff001d33166789","0100000015923c78f820152228a4e48058c7364986651be42a9989fe910894e600000000b592460ef77e50551b32c61c47acfcee4269d6a10916ee5ade59d0de24c9eeb128fc6e49ffff001d211ca7e6","01000000dfd4b68345669704b4e7121c9cf075bc2430b1937d2017a72d3213b10000000081efd372e23cf4e4f12bf1d2e100a6536d83511803ae8dd6804fcf1767c22d937afe6e49ffff001d30cf2ae0","0100000065ad502a7980e29354eda9f22789f473126bdc2ff6bd2a3eea1fb7b50000000067718550d1aca048fba5a1778056c4277912e0fb428fa4c40b7be689acc6e9b3b3026f49ffff001d205a8046","01000000d62b3d54e8fc8ca22a6df2f58c622b7c83cd6b71688172e64cd6b95800000000bee30a717915e03f7f4d07d72d11448e6f3db2a08c0e8bf8f3c77659ae1c8cb872036f49ffff001d44d46002","01000000aea47a15e2680f180f27510dd6e616e974e1f73edc2e465e4679749f00000000e5f806523b27719c1c98223e592d51e4935713b6990890ef8258952489a5ef1b72046f49ffff001d6155fc02","01000000b70dd0fa4e4fafbb4926ba5905a463474e11bdc90bf09bed37bbc2c5000000008403e6332d5293eca63863854159f3c0625ad9c80aaf5fdd9079304b3527fd88ac046f49ffff001d1d6c9d43","01000000cf2e24eb67746c7a22fcf1c43f67aa59f31b779cc7acb6293315149100000000cc36ce4019fc5a068d50763293f881d3274248665f7f3cba93098d02bf120abaf8086f49ffff001d14ae7781","01000000c1664b0361d9f8b1fb208b5050e18c57bc6055b0cfbd7e4baef95ed300000000a23c64ff9e6e443b61878cb03e86102f20a48e839daec5421c495f31ca9aec6c030d6f49ffff001d3543dd59","010000005395a73db030ef6e47242fe57e41c2b99cd49b0698ca47ee94e00e8c0000000056fd7c1d895c466996bd75f258143e8302b2aba61083150ad6396d30303c7d8d3a0e6f49ffff001d68d55b03","010000007573ebb924d030a8440964e3de69199178c6fa2e957d11bd4bfdd1140000000079d6e359db40c49910fb111cfe1d52d6d2c3aac57661205e2d428b40c451f1375a106f49ffff001d07065fcc","01000000e767090dd07ea2b5358a4d4c10a9677cd05807adc42495032ada7aaa000000003b28d2cc0ff4c773f7e379a7660954af69d1096617ccd4251d02d9bba67be46492116f49ffff001d1940620d","01000000eb9dbb95f9dde4d203a114dcfd7a20ffd399c823e1baf18602ddf7e000000000024d7a961690aeff5d72902141438fcaa9720cad80ce878b8190348cc47effd408156f49ffff001d2a0bbe7b","01000000490a9168a30ed451cd83e9c73599064b662cdb4eacf789fe069e2fbd00000000dc60861beafeeffcc8db0eef60683a88fde60f09174c6c721136356d667594f78a166f49ffff001d355710ae","01000000e03bca7fd55e0e108cb7839e77c308747a9471d102d5149aa0d386bf00000000ebb77750f9bb0f4b28bf0b6227ed6449c024cb4476b41527661d4bd3639b8c46291b6f49ffff001d32491f0a","010000009cf22fb8225c3d6d65009b41cd5a3ed8b668f481e57831afe8423b3b00000000d6fe2d37205d9b69926042eade8de6159f1a209ad86049437354ed1936b3ab665d1d6f49ffff001d1f3611a8","010000000d75c1bf0dd9d92fa8c2aa447dc2e7ac473a79fce7378a02cf632c4f00000000550fd6c11453054544a33a22806345aed90ecdadae96cb907f0073fbfe9fe495c81e6f49ffff001d002a14d0","01000000417e9c5c926f8fc67ce66b88dc4aee70eeef2774bcef4acfec35d75c0000000090a7a7bc8f1a7316736e4c0a65d5a37f2a41cd278516f5b4a20e6d40fdce3279cb226f49ffff001d5510980b","01000000a8d44d2b2ee9bdfbb719801f1df1dd8f2ac2aba31ed6a6804abac3ec0000000005c7032d5752a0fd79084d20ed2faeb35862c15209e6146e1d08e2905c58c1404f236f49ffff001d1a0230c7","01000000b5fbf970bf362cc3203d71022d0764ce966a9d5cee7615354e273624000000008c209cca50575be7aad6faf11c26af9d91fc91f9bf953c1e7d4fca44e44be3fa3d286f49ffff001d2e18e5ed","010000003c668f799ca5472fd05b8d43c574469fbec46ae3ffec010cdf6ee31100000000a97c6e691b813753248aa4614e4d3a34a3d1471e6ad863a392ccf4687d857a30f92b6f49ffff001d22239e3b","010000001588b0752fb18960bf8b1728964d091b638e35e3a2c9ed32991da8c300000000cf18302909e57a7687e38d109ff19d01e85fd0f5517ffe821055765193ca51da162f6f49ffff001d16a2ddc4","01000000acf46b3ddc0abffa740ad7e3ddd37779978aec7b24b51a561e7ae77400000000404958a17fbe4bedd4a44b847497b9cd673bb7eefcc62c77494087dbd1029bbdd1316f49ffff001d380710fb","01000000d26725d2b87da449b4b33a494d13e9e0ab677225e52520b1e88895dd000000007ca0fef1c17096a01a45398b1f32e53015cd91e37637c975788eff7abb105d35f1336f49ffff001d30d6930d","01000000fde75159df5ddc5a2f22633900f68d98d283a3ae2565b0a5e85b9384000000007551e06b3e6d22c4d87fc781dc48f84fca5c9b62c9f96a5202dfef18fc20fa291e376f49ffff001d21d2d95d","010000001b6018b2e8ecd65bcc5aa1009253b58db6fcd41ad561321b39dd680500000000313d89e80ad490fe0905fd8f510e6b7f5a52f3dfb6c80158bca977dd2144ac7b4d3b6f49ffff001d33226fa1","010000009b3745c8611c388ff4112f6ed88c1e939a82b8bd8ede50f48ef4305b0000000090ee55ce6c42983d8984610b6d83456a5f2eeef4d85a42a86a9c22b878174ed4ae3f6f49ffff001d2cc198dd","01000000c365649c1b7bb11e569785be2dad7e1d16d191d81bd54b01b9c3d4d300000000db8770db22e3d3b0aca85e28b79f4166b3b0f1105b953c761d9cdae494f597b2f5426f49ffff001d01ee970e","0100000038babc9586a5fcd60713573494f4377e7c401c33aa24729a4f6cff46000000004d5969c0d10dcce60868fee4d4de80ba5ef38abaeed8a75daa63e48c963d7b1950476f49ffff001d2d979137","01000000e78e910eb318a322b58438c9b230bb031695ebf43afd5e6c51230d0d000000009e4c17381b7c6fdc5e11e99628b7fccf96ad20d45f35f3533c660f6b00727bc6924a6f49ffff001d2c30c7ea","01000000208d03520184419c12fd3fda18d12c4c20750ccca1ecc405491c04fa000000000f9549481cba4f222cedfeeacbc4aa52c3735d9ac7a6daa8d9113dba75d29340214e6f49ffff001d1ab8b7f6","01000000a8dc77bee6a0001957375a7cac9c52976cbb8912ffd06ac260ded2b90000000069c84147eb0a0b270f2c7c374bc160259bc09298c6805aff778c6b7215084d37a0526f49ffff001d2536839b","0100000035391da1da87391e5e00f6edde60a23fff240080abb51e5f600563b90000000022d07cdf4c304bdab06d8a9fade932b43dc0e4d68165b47ef7e8f24090661637a3546f49ffff001d2ae5affa","010000007800db59b3fb77c97b97c9e44be2a6030680553a6745480cce8ca08b00000000531e4fd11c77dd8f9a5fe75bb8297af93316502dbecd217c7dad84e7f0d467af56576f49ffff001da538280a","010000008a7a3e40d3dc47236b3f2accf0c28cc39dcc0d8c91c21619de81821900000000b061c1528607759128ec8ffcbb202d604055c0bc418d97fcdd56706f34458a0042586f49ffff001d33b91969","01000000842086d5abdf5966d0c27556efd81baad06043d12aa7fb3382eda47b000000005903c1b68fa63b59e0930e7fae61e86ed6e6f84b11a1c1a0315f193ba9df2d959c5b6f49ffff001d25ec8391","01000000b2ebb57895e766f70841ea19e0fe6f367971e869d553b663aa5e6a1d000000002d235191d1fd5999873f0ba1652c74b6c6529598fd34e2aa57bafdcc92e9c003875e6f49ffff001d29df8902","010000009a8f1777e5bc25d6205d448ac4e2e5427d92a661d61428789b5dfba30000000010839862ea5438cc722f129cde84605b9b0d17ca43721ee2d1a341248c76f34de4616f49ffff001d087221c0","0100000050d9d2a9d9ee80c9265f052f841a06230f2cd340688d1acba88ba5de000000007e951a85df490ccb4adb17e59191fd9317fd5b02584ad8fd01a1d5671753a68b94626f49ffff001d8cb40401","01000000e0ec4c9f392c0040ef5cc1f070f0ba2a998924673f5c43088c17eabb0000000056a8e6383ab69a0409b3d1f65d5c9aa49fbe6ce1c1d0b560545d49951f801a44b6636f49ffff001d05874e57","010000005fc5c302ed20fdd5cd68c8a1405691d9d4c74ebe7a94726f126e1172000000001cf8954c63ec92fba12b07152cf750ef79f1653c5d8fd3a1f709070f2597b30301656f49ffff001d6b3c9f03","0100000044a6074a92b7c32216a43643238eaca18f7aa377aeeb56cf5267d1000000000091a60455ed8da925a5b80717072f4957af84a1e8f9e49cba978d32cbf0ae55518e686f49ffff001d097d253e","010000004d1d188235120d8cef9ff8af1e976694c9be0f1c8ece6bbc71458442000000004e2cd3f675e037239d0636b7e0b691c688645d91409ea099e049e0ea5c6c71815b6b6f49ffff001d380fd98e","0100000088ea921784f3757122a69eb521588018c317f5949cefbb13a956f9c7000000002902b235ff8abd85e3a7550b935e60573a2c4bb548d50c5e31137f41a7b4ac7e4f6d6f49ffff001d295262ec","01000000840821cc1914982dd50596ff0e5230fda9479b3049a3e97118fa93a80000000070f0882b920be0c5f37f885a561de6ee12c75833e1a3671610f9aab679dae85078716f49ffff001d14e71769","010000003b07a8d1d124993a18377209f09d52a3d6f85f2b6a302a4aead84b48000000001244e55125575c9a93201e8b6d86134400e8cc905f361ddff74435a111c790d462756f49ffff001d349a2b76","010000007b355bd5f7a65e43bb89e2d416dc476ce0218b923e994d51004a6551000000003e4e2656a784241ce976a3a59fdd521e9df70a209d93e48da4fcc7acfc92ee1980756f49ffff001d80c5a500","0100000073623f61cff0a8f2aafa9e4118d0f5d4ccb342405b7bf152ee0b09d800000000c4c0ac99519c9b38cf9cd58ebe82303c1c0ed693ad6235c83e7f746a5cbfc6b2f8766f49ffff001d28ac7f7f","0100000043e4b5a77bad6246458c7c73a62d99a1eb56bd65bc52916601953d4b00000000090a1463e193c93242f125240e5a7ad1c8bc4a1ad1c508fc1c576244288c057e00796f49ffff001d186cc048","010000002c27a842bf9a5e1d42d6935172e95adb5d3a5eea5fae8982dfb7ab8a000000006923c9ddf99098ad17c569ea36a0ba8c4002cae1b9f90d2347554d0b94cae69399796f49ffff001d83b42f02","0100000019f49c9c9c1fbc717fde97f6a1b7f927523ca778c4fe7a95893ff7a200000000347eaf23fe4472df284b85c827b3e23475d5b50b6751b9fcbfb055322ba53e78127c6f49ffff001d06afd308","01000000a9850b4967ab610bb4dfdf062d37cb05891d99588343e028c3d6506f000000009a0c4ff07f17972abfc13e0bb75a1913b21dad2ad47028c9647f3febe366120b557d6f49ffff001d141461f6","010000008a64b50a65d2c0e53067168621bd81690d4c02d85818e6c753761f8c000000004148dc681cd555766f47069fbca92e6b3176170f1e5e8063eecf60b7036f993c07806f49ffff001d2e62515b","010000008885b229c8053fb1a12760ea3ec2d2a26eb147d00356078b0f09e4ef0000000047001c4980a3ffa6cb102fd87d1be6ed1b583d74590cb4a438026b88c610644532826f49ffff001d00474858","01000000db82403f5a1642306d56c29a058e0f2cfe871b9527ecaba275d6dbd0000000009e4013f8d089d0a79b18b3d22f693c864d71dfed50bc0233a0be7fbcb8448cfc01856f49ffff001d1a65d7bd","01000000e2953a8975e49e0f4a90a77c564f710fb161d6e05306ed824fc447f0000000001d5b805c06144764b5216905a4033097b68514138d2c92f9c84a6064be427e9a3c856f49ffff001ddeaf4301","01000000fc267457775b8e50267c7981294fe72ee74a68147436978f2341994500000000e0780a0b870eff12d74199f0d3e65b2881da07a5c18f5bc25f3e6c735d641c51c0856f49ffff001de6f68400","010000001d2d7c0e63aeef1b9aafe250704e6677e2ee1bc3a3d3da671114857c000000001d672dc58035ff91ec44283004aee94366fee20e6387098a3adb52a0570f531bd2886f49ffff001d0366c3c9","01000000c85969757fa7211ad88f1230d0a0b7e7a20f3c3559aeb8e702fb2c880000000019816c50a142a69421ebb523cb11e05d4a1b9d0db58706a3c53239a9d20e7a78f78a6f49ffff001d019dbad0","010000002f6ac1e0c8c7dd9cc8d3b2a61b672a6f6a8ca7dbcd4ec2d13e5c80f5000000005b7d4512a348d439649cc984fd958a7517e58dd73fb80aa1666f594368f899f53a8d6f49ffff001d202dadd6","01000000d07b247fc95d22855992e86d8e827e81abc5aad8f191323e5cf1aa5e00000000fe8580383c97f6c5a5bd28a8d1a0f030bb92ffcf87ff2e9cc8c6fc776fde1258e5906f49ffff001d06718490","01000000ccfae7cc83a66a97559a639cb92f5753a27ce93b302405ad4d350eb9000000000634baf70a91767509fafe492e8a71a4a90aa3b4de1effa9b147ea6ede376830f3936f49ffff001d3747af93","01000000aeecb45752fd8694a0ce4a0bec23bd8f6104b042093e481c2b4faf80000000002990024b4b572b92fae66a0968d9c53a1d0399eecd5ad280cebc3e0858d38d25dc976f49ffff001d043d1e70","0100000013d36ae7a04a8251b739f38616e77b714f52440a91cfc10451c0ecbe000000008ab58830c7cbec2278955f4a2a81cea34854e8882623ec87163ddb77e12223c269996f49ffff001d3095a309","01000000e5277b55e4745c00d9be131f689e277b277bc21789ed7caefa3b4cee00000000015b22a79914c67e9dca76d0ff9efc6e0c445174b6ff030957ae0daa935b3a08399b6f49ffff001d0401ab70","010000005c4fa0d70e9346fd2f962629b531d4cd6a6c20d083cf200cb97aaa450000000035e1babe612a6c111d0064577381caedde2ee58625dea9d78210839f1b543974559e6f49ffff001d245c5b9d","01000000b40d66e32218a918e5ae8712499d48f4df3d9568b767868b91db8435000000008103a151fb61fe82da2f6b4ca303a51f8c6f31114118142d74fd882819347d3ad9a16f49ffff001d19a81901","010000001faa945a26ec2169a881d1b071ab48ae878cc3842e9e5963a8aa6fcf00000000ac07aebccd3b3771072a2e210435b07898adc76ee38b9932f908dd04549e1c4a1aa26f49ffff001d23440ed9","0100000022ed00476c6ef74430fa97cd72c10208115755b9977a84787f4c429900000000576191d96e019274a758a12bdf89bf17e88344f99f168cc13d15d69ae7a1f5f10da46f49ffff001d16b435d0","01000000bf0ba21ba45828f6bee26d7bf17da60a689f682a2acc9ca456828133000000006b4ddec8a7e883406226b1b22b932bfedfedef993e397963ab73d4ce3325807e9ea76f49ffff001d1793bdab","010000002907b68138272ca81af5da533ef99971aa6786d98ef6b06368387c4a000000003ff1235143bd9e26fe209a064d651e70dc053c0223625e0dd4ce0a49779d93e1d7aa6f49ffff001d2ec936b1","010000007d85b156df849a4dc5e79e08556a0254bc9802a35250cc3d1479e7b500000000936edd9d99301bb46d06cf6baf4109f0f594d23b672eeef175efc7df29e023b197ad6f49ffff001d212080a0","01000000036c3e7edccc8f88c2b9a6746b85334f5710060e8ab2f7fae8f69d9500000000171db322553cb4663f461729d7e1fc5e51363beffa81e3c28dffa7178fda65549eb06f49ffff001d209c2120","0100000057de25138a5d879f997f38d5539fb1bbb789c84974f60ab24ca74d2000000000054e4ae7a0982f1980d30c8d79da9bb561444995232695d23ecb015c109578aba2b36f49ffff001d232c7314","010000000781685aeb235dc169e062b45ac69c15f64b4ad36afae447f7cd722c000000003fa5c4fef10164b947d76e885535394e2a25611e6ee365597e9217dbb6c9566eebb56f49ffff001d1d60ad86","01000000068e299e90f28638c2527e2fc3b03c620401208050f60663c6c12aad0000000068aeb492f6f7cd070d9ce3e80b7ca6b9995d19ad173c1811733a4b97d67e6e3368b76f49ffff001d03738508","01000000a15f31d7a403ce8d3cf158514914ba12826a591e086ee20b140788180000000028c2a278649bfe70999929b9ba32a5e49af979b95643ce2d10c81e13fb53630a27b86f49ffff001dd51ddf03","010000004ce4d545357d3b48a2c9ed9e4ba82c2b791e1707c7d88b7f9b19205a00000000d41aa062190b9a3109113a05cd5c1b9b30282e7bd8678310566089e6a653299f23bb6f49ffff001d2e0f5282","01000000178e5c143db1ffbcf4acbf01bd19025898e9836ff14ad36a0fcb29eb00000000456329d621ba178e68a51fad817a6ccc540ffc3a9f0790db133fc5824656593558bf6f49ffff001d0832d1a0","010000001fb23cff4e741fbedbf2d6003a0a8b58867a54301b360990c11b0f8b00000000e6250f53b25b2e421def717ebf3709c86e05c918ab2d3aa83a4ad0e5a7a25021c1c16f49ffff001d220ec818","010000007cb08ac92bbc508495235e56412dcc876f7c03c56b408675b33a913300000000c13d21cc3eea01883f5c1525d8d6f14fb136b41fa33f4a9f7864ab7547b94ca216c46f49ffff001d01ec7be0","010000005e75fb7b1b7ce661711feb2c80043410a498d15a4b3b7c9a5219eeb100000000b66ce57db6ec6c148fe9622b6f8857b00fa7a33a063d4f56b1393b5e972e08cb45c76f49ffff001d01af5898","01000000cb7d046be02d039fa0523bfdeacf94aba33b8a2fc21d2c0365d9c11900000000ac0989be50e5596dfd676fe93f36c8e917977781937e563c453c9d6ed046e80a44ca6f49ffff001d139118ac","01000000cc5b332b47bd99c58cd1b1d0801a6ef04ca499bb77ebd28978b5e91000000000dcbcef96178496fc80d1c206d349cbc0c539daebcb75f4946ae6a29dc044e18c1cce6f49ffff001d083b5772","01000000d8f5f70be4833538a6e0cd361ea01666026cd315b94ea60bd2df39f100000000cd2d2f986012f91e346e028b319ac5c10eb78fd299a038368a6f9df3e01107b1e7cf6f49ffff001d313bf3e5","010000000b93c0ba4b9df0f87b86046018deb95b01899e09764e744f79f133dc00000000d9afbc89a74d80ec2bf8275b91d93872e58247559df651bc5ecac0c05be2eda0d9d16f49ffff001d305ce886","010000008b8df56fa2d38e3f50412a638d76fbc8818722abcbcffa1c620eed6d00000000249ff67a2f10319f7c76fd664632beedab5534c9e5430377e43b0136733994811fd36f49ffff001d10035b06","0100000020f0beee15b548ba55f0a1015cb701aeb8dd2dca5b73a5ffc3cb8fb90000000012f934c2752047af803c78a29909303281fd8897599b09842be29bc3564054a370d46f49ffff001d30400f69","010000008d7a90b9223274b8055969dc758a82d246b0d5c88bd7121902f3892600000000d863964f3a15f062ac9255a599e4c683ac6c1709ec5366e3e6fb99059ddd0bc159d66f49ffff001d31b6a769","01000000a19d6e6b24aad18aac20d169635377806aecb6d976fbf756b204744100000000057b51f5a945f575c8c90746c9f817574da5ef409b3ed69edea993069096cb0344d86f49ffff001d21d20c54","01000000de972a0426702ef84eed4cf7fea653577d9ad6e4b5fa8c656a0f2b29000000006f72f49e5ed8914d6da2f9d8aba62ffaf1b59c1e84627234882d16e4cf11cee2e8dc6f49ffff001d08080afa","0100000026d6db032d4ec15ed0a64c03e65f9af37144b74a754a11594351f955000000007bc5491d12521e078d041e5cbc9680b78dcf6d5356f31f2679a13df7b59561ea1ae06f49ffff001d13b5c8c6","010000001daff30eb6797933828ba22ac496c74c21c283c59986bb55e32799a900000000ad4796da2a3602baf21e59dbe5a24e406258f7025e6ce352d52e4480dd36b48143e36f49ffff001d24bb3a66","01000000d7718bd8e9cfd002ed6af7f343dae93192ba59799840f11c0fcaebd3000000006c748ddf3860c055bb80fab34f3a8848eb1e872267400102a385d9a083178b9d06e76f49ffff001d1eb91708","01000000e554d0b02e41dd3dd9915fa50c6397f0aa7b3b70f5c12960ee035e2b00000000870ac336d46ef5da1837f54a71e5e31e893607e79530cc4ec71329e62b06013750e76f49ffff001d1c7111ad","01000000c70c578f49e2cfd132ba60c7f674e12b0ce2317a036a128d99d91b8e00000000dd7a26baea46a9f2161876092dc189e20f33d70ddf5866b6b8be6b36f3a5497fe0e86f49ffff001d18d439a2","0100000097251232efe4dbd9368011efb6b37760b015a5a648f90403ac79365600000000778b578195a4bbfffc94eff95007b64e0d437aa268d5f9bed6aadabbf8a7895851ec6f49ffff001d1d2ff090","01000000346553ae03686300deab3fa8de64647c7f05c2ba6b6ab3ad1b4477f900000000e968058c0714af4b29b5da565928387cc6665edbf27eb93250ed020acb21b0fc9ded6f49ffff001d22086b01","0100000033d822e0273edf8f5d2ccd95e69b7c8f65df4aa047d561ebdb5b0b180000000068c6c8bb54a84a670753d747e5dd546f5d13c285f54e5767510201b4eab88a3b6cf06f49ffff001d1f0b133f","01000000764a4a31ccb927f449a36fc2e663ce599e5c62e105f93d7e477a5f910000000095838ba5ed604ca42e9a5fdf8431ae6c1b23c868237b60dcfd19f037d1dd483f57f46f49ffff001d075f4d97","01000000c3ae132f1d8d9138a2e7d84b0aa21b6331f822fe8c5274a9b7449c21000000006483bdfaad1dacb792a8c94ed22ccb1ce6b66b3d5f0d876fa7ed9e3f450a0447a5f46f49ffff001d1ad1cc00","01000000b383250a718d91b6322ea2ab426a00b52ec6fc93076785240f24ad6a00000000e3dd96504183610bf21cbf6778c0b526777a26ffe5aa16ac3393bb8da79dd0c7a3f56f49ffff001d139d4049","01000000d324a6a9bc3d4b2c7ddfdc2d2e28c80c4f710899be441f7a241e07de000000007f40791b631af689efcfc5bea9bdc3533baf15ca8d311c744ff112c002a91ef3b1f76f49ffff001d01f46c67","0100000097244ab525b397807caf32d0d985c40be19d35c063330e9cf74466ef00000000c3df4468e0bb897e88693c77b1a76a25b4cf8c476647b5810dd4c0f185e364df60fa6f49ffff001d37a94893","0100000063dab835951b69582fd992f276c4a8898b5ec33c8104d2489d9a32670000000063bd4a1324cf69889506a93556fd8284c64ea40df57fb5c3feac8435be5a75966f007049ffff001d1406f893","01000000a4d86eea180ddd407903422a3546a60dabbf85ddc258e6644eb007ae0000000070d4220230989014d0e446341862db39b033b0c12d58d7d0ebae1da3533871d48d047049ffff001d37fa5b6e","010000004443510a75b95fe93e5af4bfda453088a733c5feb1cb7a9285058b1500000000df465d83d7c0cbc2d8d4585f6b18e894cff2c5c7bdf02448b8151ccbe9c00e193c067049ffff001d234607c7","010000002672270891978e3379f1ad64ad1251f65f01f64b7927aa54b9df4a3100000000bed22337730004e9b21eb7e196cddbe1841155f20b1daa8be254d85b19e233d77a067049ffff001d4f57a200","010000000051d9f21942ef0cc1d1fa788837aca2b24bc475a6a3f3eded92328b000000006339e4dc58958b60d0672f78250a06d2ed8fd738c05e62e73e66c5f5cf6323a3bc087049ffff001dad52b908","01000000f9f439cd7f25a48d2d6b19fd04d67fae80e475e70e817ff2763c5bfc00000000b0c31dc07f9109d90181966fbfbc331a0ca13876b04b5de537c826cd7d0cfdf0ee0a7049ffff001d39ce1622","01000000be1f71e6d738dadcc69a77b910a45b12aa59701869fe4c491d6a362c00000000f980f3c8ece7e29fc09ea95ad2ccf09951bad9fb446f58791b5cafaee7921d5ce30e7049ffff001d27306673","01000000eb3b1577fd29565b46f7c113f432d65a86e3aa9a99973a9905f5ca49000000007549958429a8a082471318aeda3a47ce964e5382cc784dfa68c1ff2480e9151486127049ffff001d2ebf20a0","010000009fac95ae628e1403269f0ce422f3fbaf402c36ac4cd11f1b9bc4f762000000004709d2a404281a357100dd2bb80d9a052dc2b92e0cc5a805fc0fbcac88b342723d197049ffff001d2fcdcb33","01000000fc511224678e1e34eef623e652bd0b57c6c49c84d8bc7e3d90777fbb000000001fe616f88196d06ec97e7608f7990092aa01233c43c25bec3f575e2e66c40b30561e7049ffff001d3549808f","01000000f11a4ac759eabcd40a6eb00801083e08bcccbf1c6a54ce9834aa489e000000007737ce3d46e5ab9076c26485c142883eb78f663167e3a237d51af0a94cee347bc7227049ffff001d35c82332","01000000b43471ffbe02fd4196feb6764e7a6e9f948fb456ef53ecfc9deb0c5d00000000329368102905033ac4f121acd9792290ec259258bf48f495768d4c87fe615c97c8247049ffff001d6db8dc08","01000000f6971a59fc6c3aea99f1d26bff4ac99da9782be1d00772da0ee802ea000000009ca2cb8635c70db5e4fea24652ecd16e5078f8167a7052ffacc947b182ef0db14b287049ffff001d39a42d67","0100000006df0c9d7efdce977e97c4b79d5fda6934ef7cf9d4201c7ddb8227c1000000003ff4710181b301afa77c08aa6389f0e91ab81075baee78b15e342209da997fdcf72c7049ffff001d341ece14","01000000922b1ac84e08576c25c49798e174fbef0f1b32e4503591e5c860c2c100000000ac3c873da47c3444690096ca4c52b93fc4cec3b9bae12b82dda460f9cda5b5163c327049ffff001d33eb4098","01000000581c7d49a69852cd4cf205e2c3451af2c042d3e1818602e63143a23e000000004f03fc82dedd2da9877be64ee2f1630f29183f4276c0ac1c499b414b52f99c074f357049ffff001d1696dc83","0100000059c7b93e30d39af6758025f7985ef0a0ea595da17400328c555a1fff00000000afb4a2e1f9ffe918091cab0912677bea63140e7a7afc69ef5da23ac472865409c0387049ffff001d263bbd96","010000005aeb6134f1537285acb00242f2862b3b06db6143faca1ef6aea68b03000000006e02a9b1a9bf4dc6023ea84c355c3d9fedc6536df708c1de81c51737a348ef7f413c7049ffff001d13ba65b0","01000000164c5e1efce9b1ce83ad6ebfee205753bf61d236e211c0e335f24c14000000003b50e386ac7dcd7b5eff8c376309ef0f62168b5e4b724d297941838d18ee2ef7ea3d7049ffff001d223f4b21","010000001c184e3f3ed1ef349faa1ff5471c577cf3667cdd79ed6e2d33f743190000000065d84844ca1628130eafe1eafd22669cc1ace6a8e6dd18698e80578e98eb310d59407049ffff001d00d77ef0","010000008057ed0b626736475cf8a08867ba09524251ffd481c13b06851a3c8c000000003dec42720a15c670a97a60b5c94b079f219f46376b2736ebe8efa37d2537523bcb437049ffff001d0447a8ac","010000008bc0d40e157bb30d0fb1317a4490761a93ebc3d657b0bfbe6204d0d3000000009cec59468994fa8f42700bbd88e904011a6aada79cd33cf418a0762337fbe340c6487049ffff001d1b490791","0100000030744a9fd3673963a83ffab4b61e50c018e3df9c22751a93f6c1eccd000000001692fc311b3f15bb29e77bc19f3e79d132d2fb8e16e01f0af1b7548212c64768754e7049ffff001d03e9c59d","01000000dd41c3b0350586390379e8b76b5e276140ad22ee1e954ce5ff70e5cf00000000bc3634eff37ec10353fd1cf682210b326fdb4fa77c0a5f352952d017944c5baf114f7049ffff001d6ef47701","0100000003f4e13fceb2e745d24779a375bb45aa08eaac1300e26ee7aa26b07300000000246d5e4d8716088fdc86b7b6b2d71d81c77a8ff797cafda0f65e499e8e7db9ce19547049ffff001d3335ecb3","01000000942b43f0546ed817c6af7e25be4458090bcdd45fed73eee6161fac7000000000900848f8338233d538498138bc2d3097f698071eddc0c227a77aa7710a9fdac252547049ffff001d8d4e5e00","010000002018595ea8d5a437abe7bc89b677f72ffae94b19e3dc01daeaf6a56b00000000cd842184febd96b412a222730f754694209a459807af8970ac19c2db0b803000f2557049ffff001d358ab9c9","010000001e1b079a0c02ca9f25edb9034c6dace85d25f99cad5245749ee1a5ff00000000f28b1b8ff3d3d90a802346617c4ffbac6f5ddef90db5818964c10131a8a3fa53ae587049ffff001d3329f339","0100000052a45f371dfd92e1004b10070cbd11c9fdb1e5324c62ee753bff514f00000000e915542049b4820ed7c7d212952c4d8b2b32c21806e63344ea32ee00488b8bb1aa5b7049ffff001d223a414b","010000003c7003e980d0dd3fb91b5938327dd2831e490ca91cbdb43285d92fa3000000005e9db80f10518390873f4bb923bb70333229d92e3ba80651ef0fbc4414b54f5fc35d7049ffff001d1d2081a0","01000000b71ac3421b039e20c5a20542ae28130e6a9eb513f8d7ba26b60d447400000000c19bae77addeece64c8abb4da3badf5713939b4370a89e8264f4a90dde079b3e54627049ffff001d187023ce","01000000a870e029faef10e9a5288f385c78f7367639f3c0df8208854ea2464d000000008a1637b41db60935138f46ffda290e183369fa30d7e54d0486a9cd50c5e4d16298677049ffff001d0535bdce","0100000038af978e80184fbfefe5bb06d04433d7efcf8ee87e4c89187253815a000000001b80e6a1b0afb967bc80fdf36c816e29186ffb03b6a656079f4a01a34017b79a366a7049ffff001d1c45ee18","01000000234e6ea4d74326a011d7673636959962b5697cb7790ddc8f366e5fdd000000005b5b69b6bee3878824f3a30e0c3be0cd1ab184a84087e6ae9ddf53c412e09aa2196d7049ffff001d383a7d22","010000002cc0ce750d175367b6982103e44af24a3f0aa8671d87c4c654fb15680000000040aa53abaceeed34dcb72852036261ae9b6ea21e1fef498d2b5abb6a47e034bd82727049ffff001d071d76c3","01000000a6ad2790593f3aed0be6e09eb5efb6b2d3b59291939337a700f18e430000000068e85d8ed3c89dd94475b764911b780da781ea0a6f25fe49cd93aab8b7d8371818777049ffff001d2a6ef19e","01000000dfa1c821b02c16e033a68a3f2ffa22b35660ee7dd360cb520605f4a30000000056571b0714c029143e573444ae7e55dfa2eb943c960067abb51306663c0547d325797049ffff001d260908ae","010000004c908a440f30e6208bced40d5bc06fc8d381680b743f22018f73108000000000ede58002ccb36dbf1443877f34b16f57a75bb0f253e2861cc9f7b59ecc4177e4207a7049ffff001dc4945802","01000000f2901e924e05c7e7c72eb49971a9fb77f8b3ad2b4293ed2294c3a0830000000019eb06fe415b65f086053a1aa5ee50aad89fe05c39838b5f6ee6d8eec43d5717907c7049ffff001d162d66db","01000000c1d93cfd8fd7bfe334ec3449d8f1efd20a43a2637ac88183c173d984000000001cdac550fa16aebe0c1112651b50f9df1798950079bc898044369ff0caa9500228817049ffff001d178b1527","01000000d5069cbae4a920de882897bdb7d9bc68eaf49fb77a31df94d8a685910000000019dad51703e7a436e3dc3b942e32f137e78dcb07ff1150990fc392af96a7b965f9817049ffff001d022eec01","0100000071507e837ad9712c986ff9b49a8c83458c281d969ecc39baebc31e8700000000fa29b280219cce9748ce2f86c3eb6ef3d341ce08336623329da5f76551883d63c8827049ffff001d151d738d","010000009344dcb6c74a8587e58c37afa7b9956660c8aed8866759b520c3684b0000000030d3effebacbd05ef6203ae9cefe1cc8be7a785777be14ebe73c757d065103d730867049ffff001d1c53d4cb","010000009cbef768da8cf2733633d3654c9a79ae63d632b10c820ddf5aa8b1b000000000f04cef396a112f1b84612b9bfcb7ac10eea4a16a1cef77ed7b9ad96bd4b4e181a4887049ffff001d374d761f","01000000fed4e904686b9071603d809d0588414a1d48992da4f96555b143be4e00000000da6cc974a87701fa5a58cb4c23dda3047ebc671ee485aa92868f18119b311814b68b7049ffff001d0246033b","010000001a4b089c8e8c16f899b84faa077075679130321b0031ed6bb709676f00000000d9b12f1498a431e8366ae070635a6470c3c5014bf7d94b7a2559b670ca0aef56f2907049ffff001dd6a27200","0100000074a43ff274a83d00f5d18588e68115338e32a96421d8728b7b7f9cbf00000000db7e4f909a3fa133ebb0e8115846e07327408c4d82fa9042cf8fa2bc1bdc473e75917049ffff001d030efab2","0100000086673e47abf882a97cd0e867b68c701995db441b1fc4ef0d6cfff0e400000000c6a4e23bb0e680c029e17ebbc47f49c72ae02843dfe4ac04338555614d1f6dbf10967049ffff001d3566fbf8","0100000066d0e3ac0ff38f4f3f318021305050a6a358faaa7c2df40189d7b560000000003f695d04c7819381e1d5226159fc8ffe59e974d19c82ee5a145fab18febf843df79b7049ffff001d15df7070","010000004586207df119c350e355476ffb26dd931d8d16582b46d62d70b11f790000000017280571e23c14231d14b95f67b812657d86af064fab68c0ad8f33ed0660d602a3a17049ffff001d01c90123","0100000038b8b456eff0972a9f3816821b9f906f99357b540641a08c932ad202000000003652e54b37a139bfbd120729c4cfc9418d3a2732c08db84503bb7c9c3b43463df6a57049ffff001d22ce49a1","0100000068266b953fe2380309677c998f37080c94e57ce70c5d928cce32ed1e00000000e8d397307d39807b38c158db17f54b09aefa51272477b3afb439f787297c68182da67049ffff001ddba5f200","0100000050bc5985f1340c37fef0b0ba0478a94bdef84d75137e27f5a30a211b00000000f41f64a10612631d6e8196ac56e575106485a433beaae980f2c51688dd2d36cb6da87049ffff001d188ac899","01000000fab96833e9962af46fcfb05c3d3ca3e3f81bea70db7b712218fe0eb60000000020953f049e15705bfa9cdcc8b2dddceea45e3948c364b79a19a9eb60879bac0977ac7049ffff001d2a0a417c","01000000d6c768bdcd6456800e6aef862fa51ce60bb14c3a492d9a5c74f79fc9000000002c4183d01521413108672652f7595f3ca2d96a92f60d350959bb584cf12ea8ea31b17049ffff001d19075dd5","01000000de3377fe957d04dba77c6d0518d62cd30aa1ad93888819d7116c4802000000000e5815b93471e174832691de817ad6e44bd6b7c8abac96e1bb1e89241eab8f9770b37049ffff001d2192f967","01000000f188d2bfc712a4bc23e476abf6b355398a340cd020d2c94beb7492cf0000000094ca7b50b97ca6a5169c51e0f1cea9142dd551124bf137bb565b81b82d45c84a04b97049ffff001d396a93a5","0100000079bcdb288ca9bf71930463dc7fc50571e94c668b42dd9cd783f0920900000000c98e2e2b091aa7bbc2cd139cf24aacfa2392814f14efb051d7ff792338bd0e67f8bd7049ffff001d040a1cd2","01000000f06d21fc226cecc012f709ada08c618c8e27d04ff80c4d295980fd9000000000ea43df68eddf12989cbe851ec3b1b516fab88dc7eacfa8c81ebb59786826572ac1be7049ffff001d1f17fc01","010000002ebcf8d87120c62d32d720a0f4e2fdc4ce480e8adb45d61e127c65a60000000006b33a5f7ccf9804fab556ebef7fec0aa5ef5e56c85f1bd5d76ef7e613634d3a76c17049ffff001d2e150ea4","010000005aae679a4e8d790d3c6d884e58c204b4d98835ff11ea42fe8d17435400000000c612edca4936377f30f65f457d40bbccedc55bf1d7cd4cf21ebe0747e717e0171ac57049ffff001d38a68b93","0100000099c8e72f6e998230e2e7893547a2cc87391a5b14050fc41ceeb4330000000000e8b4dab01be9945656e1ef47ba5ca9fcae53431623bfd123f19b31747efe36a0cdca7049ffff001d18515b25","01000000ee5533576f51881c58bfdc5cfc43809665f391c93f26ea3b8aee5204000000002196bd3cf3566f1c2af42f6652bb5072094bd3c68c1ebf41dc8b9e8b72eff9da42ce7049ffff001d2e927e30","010000004ad1e933bee6bab03c2cb890a7d08aa6161b901b9a43a4beb33cfe5300000000821016fc5d44f7362e0b88ac35573a60e0f151f782b0bfe3eebbe2df4be14e63d9d37049ffff001d02a6115c","01000000eae4c26cc3413ed83a843c6ad6e63ee03edfa4177feab10a1780c689000000000c9bb2ac60bc518c0e239d5af9d8d051a6bdfd0d931268dca70c59e5992d0f579ad87049ffff001d46c0dc05","0100000079729aef9d705650cdb1b71fe89899f44e709e464e0524543c49f3db000000001d99b4a03448db0a40ee45615642ca9fd5bb9ef005e256a68dc134089692b968a3d97049ffff001d060090f1","01000000f7f5ece6ea082b189321daa86e116e7ff7a1ae5946f19c12abb67e1c0000000061b975695fb120cd1073e8fee0654124811b3b2f743d5ea77c167c6970d77f1f8bdd7049ffff001d7436ab05","010000007aed7ec624dc306bc422a77ce027bdba99664d00ad518967972e4fd10000000093c729f13180b4ca122cb88c0b53c0c523018b3512209f5eb5db996025ecda57b6dd7049ffff001d2658867e","01000000bf2f67b7880e7ec8207d9be71390f76cdb05eda3fb3ff06d3a758fce00000000ae2ccb4169d07779cffd06aea940f6bb17a5895cd33a3ab331e117cfd1ac2e3131e17049ffff001d1616080b","01000000bd526ebe388900031a0764fbca83f305864ce8b6b798c63e6981737800000000ebaf5c2201b757b79bd7b584c4f552646708ba73f2388012eb67e6945c17b518f9e27049ffff001d2c6b7ba1","01000000a62729c0607281abb6e94afe0d23683a1d6bd7f79d95b96d6682d319000000000f5de1403b52e5b4e92770f73078f2784bde59119b60ebef64c2d67b9b5326ec21e77049ffff001d1af460ec","0100000007beaa3fc1534184e83075f8bec9cd553965dbb29fc3e4f06671d4dd000000005ee106b85628b2624419c80a9c3baf53aae9934fa59a9a576e41c5dd54e7d72b63e97049ffff001d2f03608d","0100000005a51220d53ebdbe88ed91f5f908628e4415b39088694b1d07ca923700000000791e7487d2c1df02b91750aaefe03a074da2786d5045fef135dc0681ea721387e4ec7049ffff001d20310b84","010000006ce2f8fabf1c156f23af23f97aa68af6c7fecd6fdec981565adc657f000000003bbbb29cadbc7e129af5786a69f172fdd391dc96e143552dfe19e2d71bb4b2b732f17049ffff001d2030deb2","010000001a495a969e4f3681e37d194e8b56ad5e17714e9add1a7994d82e135e0000000078ba11d070e3c92aea4942e517909e48bb3c37591cad5ce996ff02fdce33966dc4f37049ffff001d29ea004c","010000005c034bd112d572b31d5e87d5a94cdfb3bd61ad3e8e100031666a5d30000000004cf550cb2129896c443121f8ad3c8779cd96901c2ea26a3c4b45368c955f644ccff57049ffff001d272523ac","01000000187912b3e70b15eaa13586e4ceb91d41650fb3e0500a8c220993f0da00000000b88f3d962cbf9697fdea884e5c162e33e52333c0d01981df6ed84662f58fa5244ef87049ffff001d2be1fb15","01000000fccec8a6059fee4fe7605466a1dea671939d9be6d1d88222cebac20e000000007f15fdaea53b898d2baf047790a35e788538867106e4ef59e02f6960c465c406fefa7049ffff001dd618fb03","01000000c4769baea84d5f280a168331b8b21dfe84345b566d1895ba0272e4f70000000034d5a19430bd5436e96ed46c7a6758c59dba8a386ce23c6fe5ebea08baefa9bb88fe7049ffff001dd890f810","010000007d8dac2bd5ffb264b7052665d6ce493908287230d865661c876090c300000000201729fa0092341bd1cb0a5ee82925c4aac792b933745e35ac56439568855da027ff7049ffff001d1df2acdf","0100000038f0c67ee57c472893b89e7b1599f0d5b1d99249f82a80f945c0866e00000000b6c4d9ca41d1f212150653e9ee448a83835961313a948670700fc48a4d1c94c0cc037149ffff001d37363a20","0100000033753ada15b40ef849910ec41b8f478fcd51f4493563922f86d47a7200000000a877dfbb53bb0f5a7a18a1311c36479007a743085244f3be23bc2a03a66f9104370a7149ffff001d1e6193af","01000000aaab7768c8be8b98c24f94b050130703a9ce992cddad41c0ae19127300000000a9402d0eed9c468b2aebbf367bbfcb7ad47cd33a8716449c491a90948707e3471c107149ffff001d3983703d","01000000206602ab55db6253efe32272455f3cb556421795905a5e7f58169834000000002cd2d87fb04a59803575689bf4f9f1faca85ddb74f053adcfe1c1148d6f46a0c41137149ffff001d1e2b9695","01000000ff3a5a165c4a4904d16bd94db6b3c46bd24b9fa7b43896431cc731bb000000004c5f4a9e51bb9689a1616f894d13c04b0139e34bc6f3d19544cbc6802340ec712c197149ffff001d16bebba0","01000000806a77c5a4797c1aa51f13abc5d7203caa9e552275d7a187f9fe4ff70000000001c53b92ff4a78526b404098dce1dd36deda8dcb42380840f34abf63880bb4ee191e7149ffff001d1e732315","01000000cb614505db43e44b4b0e11230529031e87ba35645f2902a2885fae6c00000000220eec8f12c58cfc3acca3ebdb7783e73125fbc9b49e008bffa7cfd78953ef7c561e7149ffff001d32731600","010000006ce9b6112ea41650452dfc997bc2a76f532c92ed377f04b5cd0f7a410000000039c23ef6f337aaf07dc59fe00993d14a40dc79870b4e3e9184ec67c99d8f678d6a227149ffff001d056e1f73","01000000cec0dff7452c5657d0c7ac78d1af3a0d6c0c4aa0b0710892c6bab7f600000000c9d1d0778524ccfc3bc4493c33dcda49ec3892ef43e66860e5dfef50e86ea03e17277149ffff001d150eefcf","0100000025253a1d72b6117c0df88b767df52c3c147660fd012c1b1ca77481ad00000000d4700b5a70b36a0c0fe769f6dc7b0d76c679eb89fea44c1775a554bcaa78da9d4e297149ffff001d0758ede3","0100000025b466a83fc19ee7a3e03423635d263e8d97720e47798b765ac4704600000000fab15c48f9eb6dd53d316b380a7fef454d24b3412d44d0693827da1bbdd1b952892a7149ffff001de78f3203","0100000034e907c015b2e97a682045b00061ec0258be4fcaabf4593b0231f6d900000000d4d7404ab9b78b6967bd7ed777ae5ed39b09ecfc3e1ae04b4439d068ef9dd3e2082d7149ffff001d21fb3a38","0100000089950ab12671eadfd3f9ed67779615f3c3d2e43f11126fc1cba3a31700000000fce82a49bca077e8270e4b82c6cfe7f5077c4135ade7d98d1ffd0430b303e40d0a307149ffff001d35e7c18f","0100000084a46bf1ef8be7ba842d5fd9dc76dc24c44f1025129465571a86977a00000000f5cf95169a9139a774e284909445e78562cb1c2bdbf53240899eb6c837ab5bd547347149ffff001d22536f5f","010000008cc28b7a115b2a9e96bbdcbb9efdc30c0e2e1c36b96e51b305482f23000000004fda5abce224a009e8a1eae6c4e5c5c327ea6c16da6f0cf4a668d882942c5bf47b377149ffff001d00838798","010000005781153047cb34f6d87a251136f16c016b5d952ec2851adf4da8c62400000000d8c13ecbe2d387ec891beeb339b3a4d90d282a1afc342fc4b1567c435b89e52043387149ffff001d4b1bfd02","01000000d22298a96f021f26bb1195581b13a964352de44e553453b0ac21dc85000000002afd58c3eb12d08e344bb3e1fe91fc326a0ff3f09f2c39b77677e423a698e09c253a7149ffff001d1a00ad57","010000008eae0e160a5abfc0e3f8c4ab6cbbc50f04cbb66b19fae760e3859d24000000002baed3adfbda2ddc9cb83263d32ba7776278433312cbc3647fc1877cf08092a1da3d7149ffff001d00b3070b","01000000178ae443c136ce6e7fd5b403410d5551d11d26437a874fac6bdaf0ea00000000a8b6a41da8a68f2c1bc29958cea575e6027d76232fd80c7ab33fa2366c9ffdb078407149ffff001d43eb030b","010000006b8a3a7ab2b480dddf246792fb05ecf989a727967a38091ec0582c0a000000003e23f93be1c7941d27982d831d44bbe9ec7db06f173feeeb2483d2377220e8abcd427149ffff001d35f4bbf4","0100000064658f8499f9bb0b28e67931020fa14929f5750086c9e4c0b62a62ad00000000cb6ae5aea07b953a3e19e82d7c713a9f42c5156d71b6995689a20bafe1b78bdcba477149ffff001d2c67944a","01000000ac9a12684d7983d2d7c21049bf5e6d69210a3ef8d2a7e9147259abd5000000004eaf0680ac8ccb158c44c18a147099374577c98d8e3e40a3f4ac7a45c4531fa2d04b7149ffff001d26b4a6ed","01000000be3a0adaf6ae89da7acd6580a60286088b4b00e7a63e34375b32e8970000000092d92b5271aadcb4a5f237438bbd6af081209581514a5af8b1a33702ee86b0fde44d7149ffff001d32feb9f7","01000000efaa888394aee8af4e95837be3907ac01a12c20cdcc1d611b8bd2727000000008dd2e9590d2dd2fa658641892b996a3edebdf78a1b2e805e634ee1a15df9ae865e517149ffff001d35fc56a2","01000000bf527d712164b36ae05b9f7e0526c6eb9164c81f1571895475f7c69d00000000218db8ebe99258a4a86a2fff390ba500b18878fd89c72f439ab5c06ae746393e92557149ffff001d063a19b0","01000000cd1a0c6f0134ffb841670bee2f0d695dea15d995abfce580c627959200000000f225765101a861342150e2ea19706f51cda1a39a56876f9cb431d6eabe8181a5b7557149ffff001d10ca6100","010000008ec993c58338db70d43519c3c47fca3f3bda167d6a04fb0c5b87a52b00000000de7025f89aced8a61b9ca8f096c8a76a4a55505dfa37f12c51f2e34ddb2569bd2d5b7149ffff001d1bb2152f","01000000486e07b5e1b2df8fbf66d575a4fd6406510f9388228c35f998d9f80a000000000d51b2fb612b221e2b6477e97ab72c7d30c36b2a40f69754ccbab4b5af5aa70a41607149ffff001d05d5b67f","01000000b27848c99c3308f71550987f2a1415312c63e322955cf365977cae140000000016b848c52cbc3038c66f8f74ecb26518bb2120f5ee4e031d725f27e7b54539c2cc647149ffff001d2f444134","0100000048bad43752423d5c2c5d8f359e23392e06d1959e13c5df4dcdd91a6400000000fc801614e9d18ce2b2d2cf9246f257fd87bf0360b306bd9743644d4154f8c08441667149ffff001d3775c070","01000000702d99d9f4ad3a84d2b908ec5c3fe7f5a0bcaa7c73937a27e96a84c600000000f678f47f9c11a31941cb1cd8405f11d52878089d459bd0c250dee69dc440f443bc667149ffff001d49d0a800","01000000ce0948a36a5caba0785438213ecf3db1dbd5732967fefe1791b332a300000000661b0c8f4dc446c831de3f0b07e65b2809b15c26754798d461255fd6f72fa5c557697149ffff001d3adfb109","0100000063019c9b89c8a1233931fc8353d558661af684b1c987fb1b52f33e4d000000000960126e72b29048baffbbc78bde6f50880c2e804a4b3717a2fc3e548ac22d79e06a7149ffff001d276e000e","01000000299806f5421bbe3fd77be9354cbfd1b7cd0c68326d8c050bef8b858f000000003988914254b6a0fc67f3a7f072158ff82ca5c8d25d3100996f1e4f16ff3c0d3334707149ffff001d15ecb070","010000008d4619dd6baf5352e11e2ff73be2dd08030290c446f5b000b73944280000000005d226774d6eb08e4da3041386e07b960e9bc77a468b29ecb7b0a0f7efe070e759737149ffff001d2e8859df","010000006ebf6bff9130c836127730f4d9c790e8808afda16e36975429dc3da0000000004f66d5ebb2348d22919f6551d7f5a1f3476309b636b7a5113202484a1e21786aac737149ffff001da384a400","010000001b799e67f277cdd6bc5c196910db1a9f24abdec547cd7fb7e162d90e00000000553c01aa29fb07cec84a2296597a52c8eb6fb4a0e4db52227465e014267a1798f7757149ffff001d04dcd862","01000000517c3c9be2f5a6c22eca4d8886eba5a631d1548a0423c144b5b10705000000006a604212859305cfdd13bab294def57dd6146ddd445ae7355b15c74e9cae1343ad7a7149ffff001d33d996a6","0100000030426cd26eec1d1cf9203e5cb179accdfbceb6a5d159ffe57359708800000000dd65651f22229d9adb04a9cc22df130efad10fb86c84314a7fdd8d82b9847dcc747f7149ffff001d3744b953","01000000e6978ae28d5bc91c0959a7eb00d9ffdb337723664d4c891b476d67ba00000000966d03bba806ad7fe8833d1a2dfb53d478cefa2bcdd57d9547523a577d0f0eb3cf827149ffff001d20d0303f","01000000ddb1b09068da9d018e8392727a4ae6ba4455c0b21d542e2e0d8a634700000000eda5cabd1697404e802311048def56e91dcefaf286dce7b4a493ef1e22fe43afc4877149ffff001d89d5500d","0100000088a06644c2502dc23158dcd5b88cdb11b7596cf9956f9afa25907b8500000000e28c7f4ddadb1c7bc12d1aa095d25be0e8f3e6b9ed2547ff9b9383f3494fe334d4887149ffff001d18650705","01000000556ae96b6cfe732b81b36430b724adc7ea8cb2eaa1dffb3d3fc9ee5c00000000a72f63916c53ef800a2cd5a2a20eadb515669caea50f53d79022336a127a0d473b8f7149ffff001d2e6acd24","01000000b32e2a2e103b0f6447c6c6f95220aed55b0ad853a3a639549722fc2d00000000e0ec4937b3c81b5e839e589c659d060ef4b79ed4bbd9f17f0d36e191229e4baf3a947149ffff001d24f99211","01000000b7545546c9605589d03dfae40f3d47e7fb605bce793b952f0cc8fee500000000ac94618e248c779ffc95e9785e274d31991eb02d1486c77a96438fd407e35f0bcc947149ffff001dd3886301","0100000010f1cabf881f2b54f6c52c2a3089d685f70c020f4d55f427f791dff600000000a07dc2c1a30b72d2e0a7aa4f59ae20afba04945c5ca69a6c2a27bf66052568ca8f967149ffff001dd1245c08","01000000ba12ee3a6cd1292d2c384cc206118029ea98682ee6da415ce80eafcb00000000f65110f216b877e66432822db37ca6bd6fd85cfbda674d52aa7ed8d128c1b0f1a0967149ffff001d713d4c00","01000000f764d8e547d94df85d9f7cc049c1e38010f7e6bca262ad18cbe8616300000000f383a36474ccaf03de087114e11327c6c4eadbd616efaf4c82c1a2e5a73ea58b56987149ffff001d32c2771d","0100000025c5ab8bfd1b7335bb83e164bd934bb58b5e4eb60ebc44fe5427da6000000000c7de9b16aa5fbd600145e78e8f5f8b5333171cc2110889417a589df72744a8a1439b7149ffff001d36d05837","01000000837fb462e52ae771ebb56ab69675ad463a9b2fc2bed48a35f34ec77d000000000c1d48212852555b68f73feaa3ce720aac5512b6c081dfd8c7252d025598151153a17149ffff001d26a77a6d","010000004236431ff59ebbd5582b9963f9dd0837af3a7f6bb8934aff786a5fc700000000b9e9a26d9812850c7894a09732765e1f8eadc5933b6f5b631ad5bb3fdd81141e76a67149ffff001d260d3334","0100000011121c5f0ed828947afede92c4bf30a9b4e455c88e2464162ac917be0000000009aa7e45e56371d5602057f2b6fe86334174b20a7fb5cb93cbd9a4721704778fb6ab7149ffff001d2b35be54","01000000346aad4d44e1aa647d08c1b5d3e656afd7604aacad4978dbb6121d0e00000000997c98392dc3b85e06bf0edf15adaa2e3f41c39b901f740f98906ffb9e804c66e9b07149ffff001d010bacdd","01000000e23e02b780d571150636e030f3543ca0c1a5db543b9a464561ca706400000000af58dfbef24a13d8212919cad75b385746509ed657180c10c2c26ed8ab63d2e5a3b47149ffff001d151b1e0f","0100000089fc1077cd6ba1104d6b2fc80f421bb2ff55e280c7221ee6e1d6e6c800000000f12cb0e3d1b4f5e6607442e0cbedac8ce959c5aed2c3f23c42fcbaf2bc03756527b77149ffff001d1dbf6c67","010000000e0b749597811d1501129e20018c0d51d335e50fb03b8878c71fc4b500000000a492fecab122424442ab7b6e341b4aba7cea5db4c139257e32b58994d028acadebbc7149ffff001d36dc3a43","01000000ea3f98925502c9b7b1dd2d84381846d4df19249db986d7c0f235a2b000000000d825d82bc4f9000900345a0e9da116239fdc4bbf6797c4a78eb34b9d6d6ff4cdeac27149ffff001d082a7860","0100000024a09a14ee6d516eb1798ce9782a799f7a7f167c8af7418693f97554000000008abbe2eae39d45dcce350825ec9e563c05edb9d33290d1c00e01168135e7c5b68ac87149ffff001d300f7173","0100000088c8c20443868f0d41df0d2a83b8d28dddacc427cc6d454f1a25223b000000004844b0177b37ff2ea04949426816026ebabd437f0cdacb7e46590f408c0f345b91cc7149ffff001d0874cd77","010000005d9c4fc6d5b745df74270560f9f88259da9bc5e57472ea995854f8de000000005f640f5fad8ce049a1ff2c7f0e11fdb19de9bb12d583d5c2a6ea4f699893991b70cf7149ffff001d1bb8ba39","01000000ebc2427d7b62fdde622b68ea4e7cebf955e11248f20bfb7179d7570000000000eb28f222c0f51e172ab4c0f05a5c8fe09d4736b8ce9f9db1a1d7618ba4bb07410fd17149ffff001d1bf8f728","010000006e6020fa1d2b7d656a6dbeba666bbf1a072c276d57e197d3f7648f1e000000008a0d8b188e1c17f905fce04b632fdd86f291fe6b5d0910bc56cd5382325801a1e2d17149ffff001dfa390c02","01000000ae4ec0e37e77c93a886c73bc01f57a31ce626b77a1b026e3d4003d650000000060776eb5f8aa1d6526891139f89e824f99ff2c69cd0e84f3643957bc4bf277647ed27149ffff001d2319e092","010000008e7fa2f84ec06c12c771e3fd8c0b30adb6652cf52b33f2364b259ed3000000008ea4c98b0bd26d9603e6eae9e3569855b1f6eb2514ba4501fa1871adf48bf2381dd47149ffff001d34cd7f87","01000000344cecc2dff7824855974e7ee10e09fbaeb3feac363e3d5c1405643f000000002f35d255bcdf425a3b2034fa3aaad0e64e58ef3b313a89412b27a6c3f6c2a2848cd97149ffff001d1f5cacef","0100000089f20beecafbf475f1fae3fbeab2e690a37616aa4c7ed1264799769c00000000a7678d9bc21bfd381672e88e4ae09d6db8d707cd0c192ffd540cbcda552b276bfcdb7149ffff001d387010dd","01000000d895c1c6795887658fe59db735a8872e4531a75e56d7c9352b1b3b7900000000fadf0aa2526b277ab43525c3a26d989700a028f56cceff82872d8a6d6ca9fb071adf7149ffff001d0180ab52","01000000d237c3dd02c7351812f99465355431830841fc9e8ac9f5abffcd142400000000b7cfbe01e8668e53bea92da228971c451c13b7ef62b6b71fe576b2e21ddeb3e138e17149ffff001d92512008","010000009e7e5927281de4520a3f8343e07bf15a11f793dec97c3615d583026100000000c910441aab9435a3fb4aa19764af6abe2c37b429854c26fac744c1a57cdb9568c6e27149ffff001d36f9dd00","01000000607b282aaaa69d7334a1b0240c498ca08453bbadd2e2844ef0b420a100000000c566ae2df5099bfd5794001234f44de421f73991ca148317d8efbd72f3a927d0bce67149ffff001d4dca7713","010000000686bfee9832f9362b4ad92bdd40effc090fe35f4cd7c0d8fa13a13600000000bf62800d568d66c3fdefba6c9f78a16dfb08a5e2c28ee8e8a0dc86489434ad9c40e87149ffff001d2eb8c1ca","01000000ccb51b754ee6abee3510cbd713db869e467825cf75b5f6e367d139d10000000018afa0effeaae551c5e5fce87d3278b9e450f18024a56b5041b869693cc8fa5df9e87149ffff001d288de101","01000000951c2d71074e30651a453228a06528bec78cd902c0030e27763496a0000000009909aa39fb500d1d2f116720c0f4ae0a90f3c61585f83a89be8306195bb804172fec7149ffff001df7dad60b","01000000bac3a47d82304c2678edd527b50c8d00523ed1c081d56e1b8f0f8fbb000000003eddcdbb258d93a8914978b1c33445f625dff9ed03e7b982838485f9bfb403dc73ed7149ffff001d329d5504","0100000034519c8948d2448ab4e5227fe74c92ae0d817b7aeed259131dbe105300000000bfd87203a3115c9ed373a5cbadc463ae17fcef58e3c1e229fcbe76c8447b98a82ff37149ffff001d01d67975","010000008cb5b6226cbb308fa5694c316f589eff8a5052d608438ff67777b899000000000458485e43e998a8f9595a0efc598947a417447a1a65a5abe969906d524e8d8185f87149ffff001d37c0b0a5","010000001cb09cfdce9f2b758eb78d8a4e76a872a466b724650a61336264554a00000000fba164e2721ef2926640dc253a590705f4555c1ca7801f3e52a674b55dc2d8a583fa7149ffff001d39413681","010000006e58edb9c6f3f700b96264b1fda8040cde855c7e7aa3995e50b33ec4000000007b393a1e83ed0f1d69b6218c4a2c42a29f1c4bec97a56edcb953672bc8487b0e6efb7149ffff001d511b5a02","01000000ec127fcfe1686a627400cc51a6860622fb7d185317a084c729c2870b00000000012487c53c95ed0e5726067484fe1af8a6f7c127b1c5dda1e5bb713307ae9d74acff7149ffff001d37a079de","0100000009bfeeb9dbc9260551e455bb48272bfdda49a4e8737f3dc1e51f7d8800000000d451bbeff4bff57f8aacde07ac2d3c1f9cb14f0425ae0fa0971890e7bad2006771017249ffff001d32153401","01000000bc0b4d5ec9ca6bf6e9f751078772881eac887077abb25d168b0a1ee200000000e1a8497e7719710b43bb332b234db46cb4834c1fca6513bc10776eef7568148264027249ffff001d1445583c","010000009d959cf6de6e5f41bcf392ebdd47c8a534c67ee06e5390c9ba4b167300000000534b86bf6e966aae04f4a4d6c68f6e358f6e277516c6c6097af4ea7ef732e9e33c087249ffff001d3109d5ab","010000006d2985689f45e2853f2015a7688c1efcabea69d427d9facc4c4df9ed0000000097881d172211a3d6de472e5ef5cea174f45dfa98761411d603a37879f9397b4e2e0b7249ffff001d5da02b0a","010000006829b0219710c76a387d8bb8b683c7f9899b40d0f796bb058712fbea000000000eff957ba6c7cb0d8c3a3ffb64b43f0580cb50af3e86acb53de79093e5784cc95c0c7249ffff001d059df0cd","0100000091a770dd85ce80e7a45c456acbcacbc079786b7db35885cbc374c7da0000000025a20f445a930409521bd7760e8adc4de23b55dfa5390a254832033c3deb5012950e7249ffff001d2ff6c50d","010000003aa9fc1163bcad4858222e0ce6ffaeb0b6c790ee722feeeb728077850000000042795de0675f59fff42781c6684a086954febe4105928ea6e8e73dcbc3c3d6fd47127249ffff001d18506562","0100000010c18a00d57619f80b1f2423cef7c72d269061f9207ff1a30c4d0bc50000000068a002fee96158e2ce28bbd761b21b7e4cbd3a034deaa57c9ec6731b50e10dad25147249ffff001d89543b07","0100000026573debb4fca5314655ff8f218e9319c00baf0f52243fda6597cdd50000000090e192e3a253c1f4f1a360447200966f215f195c8137d038662fa06e4b2fce16ca147249ffff001d33ab17a6","01000000174760bd1c71331789278f5e5fe87901c28691da06a3a9d9aacd251a0000000041bda1599107f6e353fd73dc01d203b81eeb08059665359749497eecd3aab6a532167249ffff001d8260cb06","0100000099d39dd11c25ae20a50af4b1b9b7e366b8eb93dc66ed866e520c5c4e00000000b1cc0805fc83b88343f2a495e3f2b87ea9626140f025a3a06f98614d0842be496a1a7249ffff001d041aef4d","010000003bcb42389dfc0b694724fbd5db34f16fa40c1dfebf91ce2404e157f5000000003729d593a37582c78701a9d330dad7a174d9ccde0fad0a49f9748d62cf8647b6f91d7249ffff001d1807a7d4","010000000fbae9890011478b9a1bdd75942b59f9fc056faaaefa07410ba49fde0000000077fb4092f56c0c6b1763df93caa6354af6e0aa7b29e8a13e67f0b56ed923003cb5217249ffff001d392ef040","0100000046441c1eb8d69e9abbe79df5d965dd9f30a60476ec810cb83c8851b5000000004e2d36d427f313825cb27c1649bdeff1fbdb4d55b2602069aeba68d3113565aaa4257249ffff001d2ef42dd5","01000000d0333ea53ee6ce3bdab024b2b65b1cae52006e9079eaebb26cd418e20000000038fdb8a5adde0e9c7dc866b6e9a0dc3c2373b6a232c55d2be9c98994c99034f37b2a7249ffff001d06ea4c07","0100000054451bfd676e4fa5f894391ab51c16e41ed0cd3867982d23da7e300d0000000086b61ef294294636d789c24565a5aa2f809a8a1c6ce768d1da43e186cb4e4a288e2d7249ffff001d285b944d","01000000214c72277e29f1e3554fedd09856e7cdc4e851875468336dca357765000000005bd21c6de66dd2ed675bba9573807c66796a02a8ca964e4135db34b49305d7bd312f7249ffff001d28839e5f","0100000041a04efee51ca2ba50e818d86cf45e7a6af385766216b08f5570ce6400000000e74df072d03b21af83fe0a6d7421002128266b61ac25ed8122692cb4e4030cb887317249ffff001d13cd6ca9","0100000040eeb4d92ab034fc09c68cc1bdd0847ccd4efe36d36e458f2acdee7800000000550adbdfef21ced402e810e6355a8bf6dccdb281fa3badfed159d97c410185d3da337249ffff001d274f5cc6","0100000097dec8d804950d3f61fa6c034456cd923141ab0b24d4a2cc63981ec0000000006a2aa1ff613fd92bdb6510e4a6962ec50cf0dc9dab61dbe90e923a7ecac30fd4ac397249ffff001d2574126a","01000000762f473636db0f9f6dc0db637cd23bab413ef8ad2ddad1680bda3cb000000000f0a875bc7a97825996d1f84c813c4638376b0d273423b5834e60c4e275d44d8c043d7249ffff001d07bc660f","01000000a4b3cf7e22aa01ab6af6e26540d0a044cad850e482eac964a4921d0500000000afd4abe7faa8aaed349f17d83292cc4f7c6e301a98bb4498914feac0d57cd567ba3e7249ffff001d58415b04","010000001989eb234eec3e683db969951432bf167b7e48cf2dfdb11be00712160000000058042674cb2edf904f87b3b1b7c3ee6760708510a99229b867aa13f2db0d26ec7b3f7249ffff001d1f7a2f22","0100000065c6faba47776ebf46b4a66c0de24dd9c01ed8429b88da5b31ae5dfa0000000035f1a1ec40ed3134dff1d515b51cf87a40b160197d27a8e7bf049eab387ea05919417249ffff001dd4c69a05","010000003109034b369258138112eb0b2ce70d27c4fa5463b8751b164624079100000000fe99779d6cd02ca82fdac3b89972b73e002540de1a346637a5be46c4f8bfc0e083417249ffff001d05913614","01000000444f0f37638e92dd480011e86cd340317f4894ac75ea2f4ddf8e3ea3000000005d64067769908df082391644dc1336e74dea1f6c6f2d4831f09e4c4e41fd275c95457249ffff001d2088ef38","0100000017e3eec6ca7faa43085b09be24e6433d189a2d19bf138e7496640c86000000007c1f1418de15a8b397964d91cf1038202f9718290bfdab39d52242f22694951add497249ffff001d0707d37c","01000000789e8efc4ab108ef78234d605fead2218d943a309f3a7191b85689bf0000000084906f8856c03573040b8cebd6b5f023884427c247780924d6cb1c64a03caad12d4d7249ffff001d2b1e4275","0100000066f46da1dbf7a3da3a43856d1f3be89bdad8978376311b5fbd82982400000000ee260f390df365cc7116600507c62fbaebc7b8f62fca141a6d59c8eea2974ead57517249ffff001d1c4ed407","01000000b4a43a19e913d02dcea79cfb9593538766b7f2a1a36ef46f68ef04fa00000000d27bd628173abaff8c51727a9cb719030a4167565063b8922abd9f4b13260fd003567249ffff001d473c5907","010000006b3836518875aa1c328b82cdedf6667ee65afac8d270f07728993a9200000000aabf9bc6827f81bf1f1877645a146fcee38d9433ac076549ba8f3cfc81b09c600c577249ffff001d1622b128","0100000089a96bbd49c21e654097e9df0691a76f7889ba68a5b1bc1e4ea3c8450000000071ddb78b616cbdaa30a1cdb25e6a4d9d181279cc46c9e5da96106df7a21d2f36ca587249ffff001d00263fd8","0100000076ec325568eafa7aaf5b2d5d685f6a947645583730669df8629940020000000098b7a417b3e8a086acffc57019d86ce25e60dd017aa808d91ddc33cacf2badd5155d7249ffff001d353768ed","01000000e9099ecf1f1a179bfb29fa66841fcaf0cf16ea09b2d84217fa6b0eb000000000da5019aee01e5794b7059252afa5c2a90485cf7920f22b9f012686717c9db3da8b637249ffff001d3891ff0d","010000004482ad82ebe6bb89e7a7bea51915a53149caaa0d651056d21001349800000000e9333875ecb06834c1306ea0abbf1a574797f13693d33f0cd98c842a6488786963687249ffff001d249dcbf8","01000000bf2ee72d907843a72235852fca6a7a121d84120a4fff0708d4c3c86300000000dbcb6c7b22016b09610de5ba8d556d39a648cb6b667de0a8ef9097e2cce500c82d6d7249ffff001d08841044","0100000013616b61dff9f3e916a89ad6e56f453228efacca7fc0b5745f8b90fe00000000a681ddc5614f6981a63d95069b4c84598d2a084b8d0415666b94c694a4d60bec56707249ffff001d1fd52a0f","010000008c3a0e4c379dcb0f50651fdc24296d7514630c30328790bd95b929af000000001d8a975ca8e45663f5e3f099f7187ecd1f32e0e442cf6ca8b6e0450875f8882a66737249ffff001d1a8f2e0c","0100000023bf28b0e8b9d7993e19d06ecdaa88d0a03d8b8f0a6fc9bba6908c0500000000d9c9ffb67d6b850fd3f294e86f217b73b2a9d9eb1769cfa7fb66c3dd8b8cadd65c767249ffff001d24ee1b1f","01000000e22cede2cc54bad50dff591bbbbfe1027bc2fcce07c7343d0486e2a20000000006372b73d4ee9b4bc20ac023a5048dad92e4fe772fa6bf3928bccb5cebf0f2c39c7b7249ffff001d00d67b67","010000009cce8385b99c0e693c56bd8231adcb2e4cff7bae7571ceb898dc466e00000000a2294d2692fd26066b28862c0c3b375bc52baafe96db2487988c4cec9021fb86227f7249ffff001d062b14b7","01000000ac40f504d40f3b55348ec4c6181094325d4cb0498d933920df87428a000000004c862c5db8568aa6b2c7f1cbb1a713edd99ee0eb478949c1c2caf842cd1fd9d0ff817249ffff001d3505cec3","010000000d33066218db161f527c92e82faa02cd41e5573a1ff95822ee6dbdfa00000000aab78b5b5dc49d804257fd9a53fb54fa5f448116a9bbd682a06f457da9888635db867249ffff001d3282e8f9","010000000999aee925d48ea2f89750a3a1f624c0597713dab556794b3309c5bd000000002a76d845ec862c3b42428aef8c53ee0a05b6e286bf21132ffbb0750acbdde223108b7249ffff001d381efd01","01000000218ab06e416ae4fb9ddd4651d69d088cabe99d4f64924f1d49778aa3000000006a7d1d7ed92b6d85fc70c07eb0dbf82fdd41b691cc319541335e336071f5cbaea18c7249ffff001d3680e19f","01000000843ae5c4fbd010ffaae64b8e4c84729906738ea476bd67cdcd65c25e0000000095e1d3faa388899bc6b470a93d1828d2313b9e9736c60ba09ce5d8599ce9bdf0b28f7249ffff001deb17460e","01000000ed2f56c1ab375ac6cfa489f8d7c02548a516e2272915256ee4da49b300000000abf94e62b1c78534fceb853c0ece57adaca4cb8e8f39c54a418ef0ab3574f4fdff907249ffff001d1a656b6b","010000009d16de3ab3427106a4d6d0cd471cde47480342e14235a0d27304eb63000000000b177c1a3750fb3b25c9d3e462d21bf2c2297ca416ff327ba0d5d3c49fb0de98c2957249ffff001d1b654bc1","010000007878693207817d7adb1ca6566a096c0022ee0dc037e637ea36279a120000000082c7d3b77056c9c624d958aeb494331309e341c13fa97507427610879aeb2787bd997249ffff001d43367f0a","0100000007aed1bd720470ed15b9add750afbd74e8a3539aea83d74c8688594a000000001661d595c0180548a532c685517142e0b563864b4c10c3baec53484af7369fd3b59a7249ffff001d07b625f0","01000000d69d7bfcf4477fa8fe5d3bb984496855aebcd8d36a60287bb9c9500f00000000cdb19a2528db5f501e221f1532041cc1d9ff98d598f93f769f3787596f05bc84f6a07249ffff001d25168b92","01000000b7677c89f20c033b088e5c89f0564b9ad3fc6d10003ad812018e70a2000000005dea3003108a464a5a2110e9906f0e1e872360112629b45114d9c5d28943440795a47249ffff001d1fe72fab","010000009bf9f181dc903fc4c535e66bac23cdac4974007e1c2752ba717989dd000000005437023ae0826847ecd955d5b5c3b65cfe2d72b01df82eb0ff31b897fa78a90e76a77249ffff001d2877f34f","0100000087b6b4bc141e6c28308f6a92fe1454b80a074283bcbabe0e5d44e90c000000009e46db89e4af3b5dbf66172af12a35d584fb3eb295c65f315452ebe7f61d01925ead7249ffff001d320170d9","010000007998b4025f288d4fb19fe32f92f3f56564bbda30ec82491a2dbadc8e00000000697c53759ddcd9b9a8c64d85cc283fd1fdf938cbe09e024e231034b029740c4ef7ae7249ffff001d197e7a23","0100000036fb7a9734ea3fbe59ad2272893f2ae9f351f20a90a7f10947a08e4d0000000005442784928f6a74f7ef51402b7342c438366a46b887f24d3d2ee051e0a0f5859ab37249ffff001d39356e15","0100000083a9828b751a766f55682159e62e7f51ed3973d993f0e6c5a687a3f800000000fffdc0516aa3a06d9dad703a5240c65ece47325a8024e91a83636c0b05a54f3b1fb77249ffff001d079a45f9","01000000ecab3cc15819cbb54544eee1b26f0ae50ee2d74b1013a00fa1e9c2340000000055fff7fbd3416d211f055384d28da013d3fa289cb73ed8ac769fa65dc15984fe9fbc7249ffff001d071c8788","0100000050ca6e0916dda2a4222983859513278e31a5d046cd43b8a7b6ab13ee00000000c2161b61e988eb7ac34d55b606b7decd8efdbffe89393aec7d66bf6bc79a96d7c8c07249ffff001d335e6a11","010000007e47b8d3f59a48a0765c9af38897a870c388fc5a657b67f8cd493070000000006cfca55c7a042556acff5e7c3fb56f8e2821e5a28220d61245ca9841ca13edbe89c57249ffff001d23e831e4","01000000192fb8fc8d2da58b49ffa31cb58191b0d150a418e3b6292a7571257200000000858553467e7fc4d98cd9a9e8d0f7d4ca2c069a2aba6a59fd00d09d4fbe792dfa1dc87249ffff001d1f8b394d","01000000e2fb263f04d973d6d9112511004eaff58b035058f92f81b5c5b015b7000000008fc836011701d8c27de11db07325e9ff44065ed868e6881b0a473228f6c00b22cdcc7249ffff001d20049e9f","010000007605615962ba5713dc84bacd666702a606bf8cb3d134a017f498fd9e000000008e647ab476f8144f4739c5ae9b73ae750288d46cd71d78e19c5fa8b1c7f0c73c31d17249ffff001d169006da","0100000046694986e2dd684643e74c1b025eda42b8e5c2f93efa330fb9e75ba4000000000f2ca0fa6f16bc708f9152089bce51c61e19ca670a77cf1a8a97a088e850dee4a7d27249ffff001d1bcb66bf","01000000ef728e263beda851ac99009df0c197850500ef483100257a95ca796800000000599298913fbfd1467c57d41e18117b3992690744706f7aa688b7231cb027fa25d7d47249ffff001db070a900","0100000074f8e2b96d4dd3b563bce153c9f56703dff8fc24a0f67d97c9d37bfa00000000f4ec8fcc3d5c184b58ffa759bad0c0e3d721214759b8e68b048d8e09e1a978f43fd67249ffff001d00f2ea94","01000000eebdd1a06b7eba79f44bcebd3f35df83502eb1a328cefbdefc34628f00000000acd83f8500d8e8e2acbc9037d2621391d87084fd17d61f92c8ceebadfab113cc0ed77249ffff001de336e203","01000000e450b1bf5fa14e460c812d1c930c24d1afced0596db2f3b9e7e9e03800000000271a15af9ad6be5a7b94646b3891d67db99df20aea597c6ecc78776689f5606de9d87249ffff001d1f42daab","010000003e6aa010271abd218c443d0a687b45bcec929f18c1c9e6139973dc710000000009adb00ca7127de2e13823a69549a721633ead497b4a247130044edf71f5717aeede7249ffff001d06b402cc","0100000006ae8d0e3ec1bb5748fb8c1ebb0a976629b4b4bd8a847e7c54d38cc100000000f986544131a20b764f72b0106decd2f230920c4bcf0b4d41c323325f1bf0bcda8ee37249ffff001d3711a594","01000000a5e5fdc0bb04f72104bed4e8c1e2a7ba97f7cd98a628b987d9c5a6b600000000354c8075ec4496858e7188fe3cbddb71312c13dfa99b6569f08d11266a0bf49d61e77249ffff001d20487d89","0100000052efc6f654e0934223b649a1a3b20b979ad8fdb5af68695037829c8c00000000b8c434f1534f90dd10d81da928129ed77a92ff0542189960ae638f8aa1ecabc22ceb7249ffff001d0893665b","01000000777fc88a0640a68501b6be98eb61fa0c324f3260f94713906315116300000000b12c466a6a1d265339c162e89db611055ee0ccb6a92a9d9bcb9b63d1fd211207afef7249ffff001d2ae77d19","010000004e7776a85a1b7971e734e51371bf6ef6f4e7433233d3781b323f710100000000aba4e1292473d20c19f8aff2532db5752aa8225ad363f2463cfee67d9479e07426f37249ffff001d242ebd73","01000000ff067d2db64f967a55078ba9578e8d931a83bd50f9a3aea5c0d5c75700000000d4119f44262816cc7624b97236e6efb7b19030b452b50d24a9adc32cb342815288f87249ffff001d2e759aeb","0100000026ae0c4e6412255f085e523ca9dc5a6a838f968335acefb2927ae09e00000000e1b623b2f4420cbe1f7caa4aac36e6c4666d2c298f66b1119d47045686059b7c22fe7249ffff001d0279e4f5","0100000089858e80ab0ac00f993ba4f06c3258ce2ee272d05a61fb1e4435beda000000003cb6c11b27ffd4d1c5c7d3d9391aceca79ccff0a820793f03386fe1b6c2df23a41007349ffff001d1e281edb","010000000c3b7ca79e0944a91c3371855053d49f4dea8fa839d754a0f28f6d30000000009c263297006bbd516df27e57aa6b1ca6d577023540161a12d4e3d02e1708f23e1d037349ffff001d21114924","01000000e1883066497dd6aaa910a4d1a070ae98920554e86013973b9cccc1d7000000003f7f6bf85cf44e131be4d927644b7effef236caa33226d635ec9b42e533fec376f077349ffff001d3bca6e15","010000006d92e4ee1cdb12c1d21d1976aa750c33c8bcd32d5514eed94b9b9a67000000007013921859c57f3a36ce1f6da695a1af61156d8b222884e35b657390fe71b6aa11097349ffff001d26151716","010000004092d1469783a0537f9b07112153f8cd93a1be65f7bdfa679e3084e600000000ec82d35186dce4a26b51791ae2b4b8fa9457af85a6511c7f1baf01441da0242ebc0e7349ffff001d00495895","010000000e73c0d5c047f1360a29c544037a471009cab651be34b3f565dd435d0000000068d80d8136337cc8f3afa4f511c0262f9172c09cf3feadf82f4248366cdee1d2b1127349ffff001d346fc629","01000000c39720fdef444ce9f94f8864d6752640374ec8cad7f15e30c2b7537e00000000eeae8701f1a8eca2cdaab7861648ff31260a5fd8f327d54b16dcf9be089c1de4a7177349ffff001d1930cd85","01000000ce9fe746df8cdc4d29c8672b1db88b2ac8b60bc5377b28b69ffd5fb5000000004d9bbe3aab2056709d5e51bee1eb64c999ab739b8b5770e38a44ab201d9ac7b6511a7349ffff001d16685b76","010000003004a300cadef84e8240634a1ca568bb3d226be2707a9f4d01a571e900000000190b8634186691609ede8dff59e6662d70d8085c08b79912ca3578f0c242464b8b1b7349ffff001d08343c03","010000000ca35507687c8a03cad7bc19a5f1307bc944ac9d824a7d3d5d26eda8000000004c36f35f9b0160ac1b26faa6f81493eca1ea64782c8d7442c2dc9dc8ee231cfaf11f7349ffff001d07362577","01000000cb690147ae7e07a0b3044ceda982b8cf2450bca38dfdb81e5e2a7396000000007a5f0c7688c938f2495a6b9abab6886f165e8083bfc247feb72b8a8f78adcc5f15207349ffff001d71a18d00","010000006321481c4ffaec17733c0e72bcc805b12b8d24643eabe4eae04904c900000000796cea0dbed9a0af97c888592cc9846c046a059020101bbbc92b9ea317c39d4da9217349ffff001d20668081","010000005622fc2303221722bca07c921402453bd0e5ac029d25b5e6a48ccfbd0000000080eb63783bf9d1980768ffea858b2482b212a603462a70673b2bedf8d408abe3e2247349ffff001d06df3ea9","01000000442747bdebd0d690551baf6ea9d6d0470d9a1764b67afb712ca196120000000071914f9e703aa3bc15a72254b7ae2223d1cfa4a66e47e89579aa5f812a6d16ef182a7349ffff001d31d836ac","0100000073389075a4b8330523b9a124d37d548405a50b0ea20dfab7b4bb260c00000000e6284f6210fa080fe42edb6bd10948189cc9a9b7b0eb45c970c9d8ba9a29c2d0942d7349ffff001d2db54137","01000000b7bc65a457ca569c188d11e79964dd64549c3f99ff42a9ce3000564700000000d8b2cc08e4e1edf5f7623a684d19e44947e5d3c83b18dbee3b0cb26d6da3b263c6327349ffff001d246d1c00","01000000d4c7f7fd88d90ecb856f78d5f6dd75881118d6dcbc816db5dd34903e0000000066a8de518cbd260907791c2365c51468154ce5e2f8d9e4f9f5f6d5ea3f4c82ceac347349ffff001dd8a02b05","01000000f806b1cc32d68db39d5db1b0f0ad8e757d488da5045a68834471c9ee000000006295dd84d54cdd1e513f8d7eb7eaefe9be53c28f5b01ff1dd2a169fc6572a73c06387349ffff001d149a1d89","010000007ea8898288c16eba84e2a7429c79d79eb1f627a343f964bd92eab6f70000000096d00873f8e9e96d998a5dee3bf6406e96c900bd1e20ecc47eb4824caeb6e775753b7349ffff001d9162fb10","01000000a8c3da526db1a1a2ceaa630b7ecbfffbb2e7cc6321953156d2ac0d1700000000403b71c08dd4e7a07951cb8a1578b29b3d7aafa9d3ff4097dba8032800408346a23b7349ffff001d23499d19","01000000fc672ade6be333fd93aa10adfdb1a7646f61d7d8a036ce4cdfca0a74000000006806d3055330cfd24b6c8b17c1acd39e33794bc485982b0706d77c184c15fa01af3f7349ffff001d067d782e","0100000034c720e32cbe10baa4b3c99f950f877877b4b677372672df3a2dfe7900000000c9102c31957dfea6b3e0e9a845a60acc779d287e91320b4458795baf3bd8efecde417349ffff001d1e6090a2","01000000b030efa2de9e095f4a17adc28d585f81c649e5588107a6b70e071279000000009fae21ea8410e264a5466a1ba798366449489d10f8f370a7c1ceed6290878f796c447349ffff001d143fc2e2","01000000f4df327c17ab088b4aef262cb03d5f56e66546ed7762f4db00e82e4400000000bf31cc73e3f4f98f32e0a5969fb73d548fe5457a24d95f34470b783e34587f5055467349ffff001d33d6fce1","01000000413cd251341ac7e2436a8d1b382d987105513bb292a8c4693d059c8f000000007ab67418d5dbe80f8fe98865f651680adbb794293cd34dacd08b4ba0f4f3673e87497349ffff001d25866f1b","010000002f7d4d8bbd40b2161d0456c96f17393b94e75a4d17fec750e6b1ba8600000000db6d970dc76c80d8d19d722bc4c1bd03f79027cc0be41237695fcfabbbca4343e44d7349ffff001d1db3cc72","01000000345dad9ea1f2e937c5a1c03ffba1139b025f97e17721ce2310842e9600000000a36f3030a01d70809dae42b3000000bad92c0b05ffb8ccded5208ab70d2a6f89d0507349ffff001dd6fa5704","01000000663152a537312ec06c50a839318e2980303014844a0b67ef23a38d2e000000001c088773c2f9abe4b86e070cc26b4644d1017f58c664c8f53dd317135f93f9621f537349ffff001d2eec6ac7","01000000860da0a3705073b6e9b5afd9889d1604b432bf3d2f4fe9fe22581a9b00000000bc4c61b32bc164050b929e3c7f6e83afc7aee5d51981bba0b9f96df4be2b334c06567349ffff001d3a42af0f","010000002eca327d99c39901d7faaf6b4584306ae7e82f60fa98d87bc130b96e0000000013db54ad43671dba3ddfd5533a4028c8d542d369aa6bd14af8ec8472494598742a5a7349ffff001d272aec9c","0100000075c181b65843c2a4bd9c0d4379c1ea8ce63bfb5793e887442622a87d000000002349315f57b2fe859a31f3c8d3d53885e1af4a3f37e9ce98abc6058d420ce692e95b7349ffff001d06602101","01000000d648009e5e417514766f4a88ca7582a1e342790693fb8745459d950e00000000a17c2ce427fb25d5cd9b05bba227ea79fcf27c918a8d8267037336eb130fc5312e607349ffff001d1cbe3177","01000000ed3e139499cae6ab00e1f73e3586f61b867455b17cc508cdb304840500000000a5338fe126a8baa1971a2eedf2a48e48ed8e2147e500e0717dbd57f3a15e89569a627349ffff001d090f76f0","010000000c73c218a9391c1006950c895426f06d78c3d20154393251d5871b90000000007b986e9b47a3150848be7bde8c1bd3dcdf8d7a444c8ff6dc1fd5d63718b8ba4c16677349ffff001d04967477","01000000fbea151c427bb44204104422a2c86aeae3d033b00ebb0b82fbf3e04200000000a43c293cc65792e07d000a8d4d8afb7dc33570d1c6599f844890838c2e3e4366986c7349ffff001d24d8c991","01000000a90850ad862774a0ad74d9c3ad45fbc80fde3ed2b4db089159806eda00000000f6aabdbd46ae6feb9f4f6aaea4d2a5d709d4feedccb2262158a62354a1be2bba196e7349ffff001d1a6ff4cd","010000001f4cc5d4af81ce11ad79028be9889cc603428b4e467249a9089ede210000000050b6a3eee608e47b8989073f234449620ec95e470e3c019beeaf3a3d8653cbe83c707349ffff001d07839be6","010000001eed6b1d63cd656be1540b630b013fa4f01729cd92747cddc76192f9000000000ad2328ea393a41e039a2440e3c3e2ecc69a812c863dfa8e6af852e2d295c416e2737349ffff001d236829db","0100000036a25f888891822ad86ff06c3ec259b92019a7b01453b5368f27205100000000d155ede38c86284933a3e6636230a4e4e24592959e3d9767ba5ce0d13c073dc06a747349ffff001d71c41a01","010000001559083441556cb1298f8d1278f89d8e9c99c14a31f06c44b88bad9800000000cc1b8414921fad68796fdcee3654e7e31910c2e956b1c6ff7aad38c4ea67c0f514767349ffff001d2c2f6809","01000000a2faf8e3e9b6b72fb8307219c6151469849d729c77abb800d01ae2f200000000c06ddf578c66eafa9b7090d7a4aa51f21d1b6c74cac90ea04ad64a2118aed1871c7a7349ffff001d15aeb099","010000000599228d0abe17121a3451cbcae9a41f47e707d25b8e060b60e21d58000000002154fb13b852c7eb637e4f9f5f02842b25f92fd5e023c877bd74279c1daed8d7fe7f7349ffff001d05acfa30","01000000d24f072cd23dd63a64edc67694fe0ccf1ca713395c50eac325caf9650000000034dfd7c230d18ee3b0aba1cec67ae133e070f397ae4e6acfa5c50901f5cdb137fe817349ffff001d06bb0ae6","0100000012ba142e7bd52fe3398593f98da6386b0e4c86a59d04c130e90b3e16000000006991d41ecdec96e2ad4c1b1b84819ae8d77afd2f515849c58e3e81f88ca6b43aa5827349ffff001ddd2a7202","010000005fa1d5af998077882c67c6b1e2e137d7f1d2191f0facb8fa2e3a58b900000000b83b7d214545d5a2dce8b05c900921f9e0d57cf0e7abfb7d546681fec4d5f9e8f5837349ffff001db38ec705","01000000f3200e2a0ed6dcf69026ad59c643096cb0e4cbddb59b815a69043cfa000000003ab46352cb82b88cef85c5b7b9cc3b05c10cb84aab3c81a042d223c22d23adc9e8867349ffff001d0826030a","010000009ba7a269117149ab6fbd5830d9e9e18076b3374c5187d0a196f8ed0200000000dfc77c7ec5c0081edf3698799abf36a00a1b935407bf55d024ca9a746ce960a6f38a7349ffff001d2e7656c4","010000002d8be0c74e65a693d5c3165337ce3b63eae39861acc18cf0f8e6a0e9000000001e4b9bce572ebc10d288b6b6a548974f5e321123d18e71c02fabfc9a4c247e97fd8c7349ffff001d01ef6e1e","01000000e7ad2cc214bfc1b16450869197f3908d0b20de4af769cb5ee07b1b1200000000ecf541e10d8596a3988a03adc5b96567bf882cb8e74e11485d7f10201b67c5cb858d7349ffff001d2f84f601","01000000d9df11dd0a2a6a33b72f6c12d596671b54294cc469477e9f73efa32c000000002329a81d6db80d85ce49e4dcd8e36ca3107bd4094c270abac6582b2e654d0fa0738e7349ffff001d24dca4ce","01000000dc7e3348d4bd38c9d1889a3d52f4d35d938cd7f4f27a9fe4f09891dc00000000a2eedefd90fa459f18f7ccd9495b585a9feb1225fa0a16db097f65820d63fdae5c937349ffff001d22b949cf","01000000f686d15a284fb60fadcad831f0a9a9c4f95527423fe529f2fddee852000000006bf864290c494ee283ed784911bc135548d3d4083084d9dae3ec78c851c6e2e900977349ffff001d371d698a","01000000f178e8051aba16e0ce11dbe33c9bb7cf1b26c3ca0679a7053c431d7200000000f25e69c29592afe2f14bc4a373299b1079945c8edb901869e7ae4004e8db5f269a987349ffff001daf6d2d06","010000008014fcd46f0757761cdaee1606a06922b11f98c942316023fad7b35e00000000f474568d0023dc5f44caba35c451b18798d774e155143c635e6a7f9307d61b7f3c9b7349ffff001d2d4e46c2","01000000ec8f0e6df755d105f2907032ddf269513b080b3f4b92bdf34f9c9ad4000000007307e4f6c8c17970939765a51d1e34736e2710a62ee6b46539ee04913fabc9a7239e7349ffff001d353cb3ea","01000000b7edf2028ef005e3437661b46ec3fcad935b05f8f402ace4df54030400000000feed9b6fe8c4aba1cf995a6f1b4db7364bcbdf252c4bc52e39e175fa7fe1e3ae4fa37349ffff001d2ce079fe","0100000006ae1a13e76278eb3de56f30fc466e2bb119b6ad379887f16e819c5100000000b646d2f34068d46ea1aa89f21fc1dc9390b5aa369494bea579d9a16170b120a580a57349ffff001d386d73d8","01000000cfb62549d82c94be349b2fe204f67229acad4e7c8bd4dcbd49f91bb600000000d5d99d7320dfca04f3525d2f35ffa6879ad42eca4d95bed1dad0b1ed93c3dd9e65a77349ffff001d291cbbb2","0100000062500962d15a43e082455c5c0b1b5fcb2b4e19fe8b2a4812d4a793710000000048525523e67d476662089cbcad5878d17768a35869fde44da2ed347260952d5d15a87349ffff001d49705a03","0100000035e7a063056d3735235a16d40b11e1b7073e77d6b75a8934f4c813ad000000000ba0928e0c0f52f3f97bc7fd5be6a2d85f729e6a8948ed9881bf4998eedf3da11daa7349ffff001d09958a05","010000004a68f11945a92058fccb9ad3a125c8eec9435f5472696ede63327e6700000000c76036e3726ef293e1d67d35438cead66905bbeb5a8e1948b031a637553f0ce78cac7349ffff001d04cef640","01000000d1355dad5af3243459d55942d9ac7b703115575b814041a524221674000000001d770c26de75acd67f3475a2bef0957a602c8a374cd03727c87170617d3af03a7aad7349ffff001d757e5002","0100000053a91a10f7b8d841d8323f4e7269e5a4bc59c9c162e0b87e9227ae6700000000ff1898c1538d80d83d450b6b5b8f9b3cc45346b8b8ae0d46f76b896b26df2e7d48ae7349ffff001d9da94503","01000000e225d7a60728190ce4d1bd2784b334436fb7e92fb05dc45bd8bf721400000000a8f08cfae19474f0571e8ba1571deb6f3530864fd9e6275759fab723868930e956b27349ffff001d259faa5f","010000005efbe31679f49120c227b7eb7742db7ece5ec68120196743f5afb63300000000fbc2149ba657856cd6db8bf86db756910a89f10535bf2a4a8510f3f00a358a35a6b57349ffff001d27156194","01000000d0ea9d19611dc5174441aed5fa77ca676a093895caf2f7cc87dae257000000004742207c33894ab944068b4096db3e925eb38146de89f6219f76e5375b6721c780bb7349ffff001d28218f2a","0100000011d6a8cf8aebb4f99f341f54712d01aa62a30e07386ee55d656e685700000000ce3d4574837af9cb91149b62dd047235e57d82c40f1a49632796a306effa7a8f4dbd7349ffff001d1ac27ec4","010000006253c559564adc6c1105710352d514c49058c8b9c6c6381e7b2654b000000000d61599064453eb823e59d3a6abfb0bbdf0d69ee794fe9ad87f16eed8d3fa06f9f0c07349ffff001d27a19711","01000000a9673c7b43d090634d95923343fc87d92b176e4257090572b2e3356f000000008e120c1da2d3263506cbde4cf020c012bc51c0dec3ad50427ddf7313a0d61b5acbc27349ffff001d23ac436b","01000000920cc2091abea10ec83722c6434b15187619c2e3f14f864ff614384d00000000896fcfa1dc5953a52a4baba3b4bb4e17994337b682bb4ceca7d4d407b60adc1177c47349ffff001d80ae4f04","0100000022037b341f61235a6e4765c86b73ce3e61b26c4d306a9bdaf17aa392000000000416608887293ddfd64a495f8b234f05741d5f2e1666476fbf34add6a69528a61dc57349ffff001d29b24969","01000000bd77a4ba1b4594b5ff1f0fec4142f2b89819db600fbbe026b74df9cd000000005091ee1b31459dee38306d028db01c00502cf23ab3eb834c65c387cb52a303a62dca7349ffff001d17f2e5c6","0100000075b5d277378d857c6d844870fc350709a0bea93b3e8c160a3353dc0a0000000086044430720e1ab4f1b27aa36b88768ae808996823bbdb9b9b01178259b71147bdcc7349ffff001d32fa25a4","01000000c0a01feea765bf4ad5d1efc53652b2787f6867a20a13add4a432ed690000000098e60527034939beffadf62df0bc8e3bbf3dde643885394ed8cfa70d06e66db4b8d07349ffff001d2dc71c64","01000000701582f3e3dc47ee5b369f463828d34c5144ad92803b92576e6b69fd000000006d88493e42543bdac917f5440410ec02c78d2c483c9cfa2d5818c61a10e80d253ed27349ffff001d399621c2","0100000097358744905f5941041e63ca5fa80f6743e4f08e995b93d493ccc7aa00000000fc39af640bbcff356eb6fe7b88b8f33c5c5ea48ac176cead14d812d91b8b8f1ba0d67349ffff001d03a7a64b","010000005d603bc34af34876c6938dbed14a217af9ff77cf6bca73ca67f8e6ab0000000049958e2734bf0bdacec5c3e96894848da6c7b8bc569d3b3a2123bcb7d8cddaf032d97349ffff001d2d794be0","0100000079f488724a7e5a7cf514d7a723db32219aa74b6ec76737a0413ea608000000007857fefffffef16c81de071266e8cabff07abb147550dcb5e462de38ab9e1a2639db7349ffff001d08834704","01000000d3f733f8f532d3d02549c80d76534dd242b865c145b030e61d233cbe0000000038452ac7eae0a1d0ff7115a5c865189b027cced31df37e519f40ae6fe83239e5e0dd7349ffff001d1edb5201","010000004ce64424b9e5317e75e39c713e707836b716133069ac52b0dac37ad600000000bb41c1882e346a611a7d087f27f12774d44549e5fa12f65046540014299afaa316e17349ffff001d2033fe33","010000004e7228e75be036a37f3f1a9ff292ba125495ac7efcf3a2897bcf7ced00000000a8b5213a9e7abd3fb1dcb1e90e3478cba2b4dcf59c2cf9f3a18b961b2aa7c8ce09e77349ffff001d1a8328c8","01000000d549a14e5abd6fc9f855147082bed93ea526c9e66a36d0d98587cf70000000004744d6669eaeaa189bb2659ee39814c7890de6feee5f9ca25d6de670d26860fa0dea7349ffff001d2f67725b","01000000d92749a8c19a359dc5cef95a04b4ea79281aa8b2e2da3617f1503cdc00000000ae1a4387b6bdb8084a580ca9184efd0340899b5678a2dd20eb7322a91b736248feec7349ffff001dbb103e0e","010000006261ed8f54b6b4196493336577fcc981e777aa4454bc59627d0b872b00000000efed77e62a851fee34c97bfee65514459e19d67e54294c1a50add7d3b47b0b0c13f07349ffff001d01b652da","01000000d71aa8951eee2b6466eb5ece0e77418043f4a4274d5fb99da6887a5900000000ef49f3e49dbd706e59e08a04858cb0d0c191cbc318a3ee566ef7b8cd1a91afec75f37349ffff001d14306951","0100000044f949b6cae75e9c536ffa02ee5b1063a1aeb5b3c9b30ec49d0f037f00000000eeed3971a018d8b91e6bf3150c21c2853fe3d23f2768ddac2667f850d8a1f9495ff87349ffff001d22bec85f","010000004d3638e1187244fe807c7974611f30c2d2f1bbdfe798cff2b2f3de0b00000000023576ca4e4d2240ea8fdefd14936479c35925ee39e851c79d0bddb1e93e5d4065fd7349ffff001d35fb016a","01000000dc231ca0cebd07405a8ae9c2e039bc5284ad013747d9736dfb266dbf00000000f0f37c3888641e1e09e7b5fa6070e1ed03df7bb38ba71a7bbbdc8a43c39c2b7f9cff7349ffff001d40144803","01000000f572c37498c8379e5745fe0d12ed6ec8401ea0930afb9a57b9f3823100000000229498b521f43d9b5b3dcf400773e55c296a7c9cfe73bb9707f0fea9bfccbdc8e4007449ffff001d2adcd8db","0100000035758f2701fe07012074bdc123c71a8958f3db592791a8205ac8c1b700000000d1d09d58c7b0359dcab0f2b0ecd37ac807d3f0aeb723f0cda072501a033d03bb2d027449ffff001ddebdd200","0100000094faaa0bd37a934c1a3b00b10e529dd35fe3e7035ecc08a635a0c6bd000000008e6e79b54d5476932c202bf4d7017590b77aa7cadc59575d39fc3f1723af07c4bc057449ffff001d351622b0","01000000f4d38dd79d5cddcb93be5f275e95ca04b904f99bb63b63902b48e64600000000df6e92a53f312dff00396a8f35baac584eee8ef615df9db99cbf2e0ed09763afa5067449ffff001d836a3503","010000001d970d420756cf49699e398fc48d417c6fd91b69645583efddb8015b000000009df9b7bdce1676fe9328ecfe5c64880e94a94723540bb338f09e3349485d5ce67b0b7449ffff001d28a1aefa","010000000d68f26fbbd9f608544f0ae7db9fdec1be8298d2e64ffd71cb93388a000000003646e7e815a5dcd4e792b64250aea140dd590428fd5a3faf9bae1f9edfb42a725b0e7449ffff001d348eb1d1","01000000147c7a049fe3bc7b8e76568ab23fb6fa6b17af6d7ba0ee785ffad03f00000000010d18b8a711bad736c0a79720a6f1641ffad8ef51e05185375e257eaa51fc2657117449ffff001d3a8886b1","01000000fb5ebe76126f5a1c2228eb1f61670c03ce144ec8c42185f9595e7ca90000000018dd8fc92293038ccec1e5bc40cc78f6192253bedb137aac4de4f0490c1c534a94137449ffff001de3594407","010000008e28e712886f0c659188da379bf072a316a4873e633da0a3f73f115b00000000e1434476dd2000ab5b8749b2442c79159619e0a856be02bdc691851169a807cda3147449ffff001de8e3c901","0100000037d73f2d8d15b7b60579f9d13423360418421de5e79ecf90f0307034000000007a8f47fde68e6c447a12ba52275875960ce3d4044e4b6f6e497fe763bdccbf57a9157449ffff001d4e88af04","010000007b4d977f8353ddcd54aadb9ca9c65255d518f4df3cff565497e7e8f600000000e98c74c0a1fe00289405bdb2b07853e9323f44c8c3238126128a0be73db0150bff167449ffff001d190832cc","01000000f0d317187b3f4b72a7c0ec350dec26c85653f47c2db23e7f28c18108000000005026aaf44cd4577bbc7661ba94972e94c9dc2a1d891d0a6d4630b7cfcff6be853e187449ffff001d50321a06","0100000089d283f19d7380e97fa5987d0b7801c35b0ecc43bdb870355a515e130000000092f544c76e9889c23f269f41a1eca589376ff2892208fae297e6ea5d5e81f1a838197449ffff001d05ae54f8","010000003ee73715d1e478a6606695964585024096527d31bd7a3eebc4f831a20000000042242fb0c0bd97065f5eb47be68c1f8f894bdf37f9919c37ef5665830bfa73c5191b7449ffff001d2b7bc602","01000000a0f148b9bb7f77d788518de7a781c4e3e8e84e871f2bc6becafc2c3b00000000cb91588c55e281c32f01fee8948999acd618fe33a04999e1bafe53c7459c87034b1d7449ffff001df2c7c506","010000007de867cc8adc5cc8fb6b898ca4462cf9fd667d7830a275277447e60800000000338f121232e169d3100edd82004dc2a1f0e1f030c6c488fa61eafa930b0528fe021f7449ffff001d36b4af9a","0100000009edf646d13d2a7e1da8bdad14d249b037eccd8af23aa704379837c90000000080de0e69a474620acc95b99991bd7cff09341190c55bc04597d006c25b6ef6a68a227449ffff001d1afe73bd","01000000c6b465b2edf2fb5a720f34deb9236bc24b7e2e379e85dbf8447388a200000000d2929449382b171391597bf3b589b97a52c4d87a9dc572897a64a77ade8f5c9dea267449ffff001d02996737","010000001a01831ee1a5442e6062831afe2d5115668b1653c158f6f4b3200a43000000000d4b4006ae1ab2b1b5b4b27ce7bc84dc3467c974f6b68616a2da9fdb19d86a1e142b7449ffff001d8ed7fd0b","01000000e58d16155c44d15d511a66aceda1a7cd3064b752e3c6d964328c5d2d00000000c40db24d022f90d586be3f3c8e58afb15e090ddd8598fec4d4b2c51a3c33db06c82b7449ffff001d02dff728","01000000650a352a674c75726b6a1196963633c49aa9510fcd6abb53993aedad000000007fb10a28733a66efb3ff51e6459fffea5c6e4ca91282e97be951518f57aa5d4223317449ffff001d24201b20","010000003c833e8fa9800f2de9e75344b09ef22a80116233a40d84d8eef6596600000000e267150e892f5aa3df16034442209a6fa71c4fe3a2e659667101162e64b3937ebf357449ffff001d1ce7c005","01000000e294a924c6c6bba89abe516f3e78ae3366bc5df61df193801cb68cc800000000039984449a78b72b31baa1733f38201c9172a92ca4d9213ca20d4c195d419fb382397449ffff001d397975ba","01000000a66da0d7195dbf92a0a55d8eb6ae090ad77d4dd31776404361beb937000000004203e172d0db536bbc40763abf155a3a454ebc32a3e0a57b28ebfb5cc907f7f0743c7449ffff001d22c9859c","01000000e8709ff578e3dfd7ff062bc246195e4f594fcdf2a118d9072c447e5f00000000ef4589250f2edf6efda5ba470ce14096cbba7437a2e2809325b566a732a9fedc413f7449ffff001d02d8f7b5","0100000050557e2b9d51a7320d47f0857b2d727bc9b233ea65bc4383920bb88b0000000062bd44b6fbe246c29ebcb8b03ab111242e35fa24e84975083313a84541b3d628eb3f7449ffff001d01293503","0100000059278e9887bc7c864e3d5e1018ee3567ca15f372827e1a0615956774000000006c4299385c59641471029eeb681ab350cc0e56bb9b90c94c8d734c28a49edeba48437449ffff001d33fb9ef7","01000000fcbe1a19835c773e8d8257243a25e09649463f713c5fdc7736cdafbb00000000d62efa3539d6fe492a2c8a2574952fefcc44110297dab57426b087d808df37e256487449ffff001d1c54eaf1","0100000032dc877060549fa2c988ef4238c6e21fedb2190f9bcc5f4ec4a84820000000001d3dfa1289686bb990220a103784dbff364233f239371e4c465fea7a94eda8eff44b7449ffff001d045f2007","01000000b645e1839483ea9d0b858b3b2b4d7d6b6b15da5e3d9f02a7dd0fc2f9000000007de3bcf96e85a9bb06b899182b60e57a205e181f0f7495140efda374b2556ecb704f7449ffff001d44e7a409","01000000dd3032fe06302896a3bab22b97dc935248e35a555f3a7c990a95fbd200000000ac352c126bda3c49b21d2384b0be07a840c930ed54c3f94cb9e3d49c78e0a46541507449ffff001d33927cba","0100000032960610c083bebdbd983a7225128cb31896d3745b73c93fac64ee7100000000cad4fea59f99336273f960eb8c947ce439f91ba24f17805f41e3a38863238c7294557449ffff001d3a2d015b","01000000f00f6a912f2e6ee324d7950ab5d8a356fa3b1c95373ed5a870ccf92000000000717da32c02fe02e0ab50c85d1604f211a32a961e6fab499df3875a5c5529b32ea6577449ffff001d054b18f4","010000001ccef39dda525416da853c9298e810135d8ed96d04ba5de71dccfb84000000003d1f5f58d50eda9d596ab9262bc8c2d3d61d455b5a0ad9e3551e5b7a2649f14fea587449ffff001dad172903","010000006380b55fbb39aa083346d3a7d906e511bae03006049800d3139098cc000000006ac07ccf5006ea60fb06e6d3263c5a25a763620995e316ad50ab32010f9c202d425f7449ffff001d13d52975","01000000e7362076e7f3a53785466edb656cc749e3d3d53ec25099c6d693d34100000000bb1e528f7a469690045767022961684dc3c2a374283b4c50cf83bfa0fd2ac87d1b647449ffff001d27495a3e","01000000a2b517930a0f1bbd2f2ec9e68cd5105c5d6fe8f3a470b6189746a3ae000000001049f06c2e584aa2a7a656758d926c922cb299bdedf92af0fb8e1c057973ff148d687449ffff001d2e355e18","01000000fc80b61ceaff29c5bfb4da205111dcc04b723682d56d530d9ca28f88000000002eaf94c9a6df0659da4ef82528fb49918a18ce6e293c45bcc8e07712dcf33e0aec697449ffff001d357a6431","01000000b7bd9f286a77d60ac34fad57c74dd681ffb340b1095200426d0577e60000000049df9f01194792e1804e31480bb36bfa5c670796d3a78f1a373110636933a57a106a7449ffff001d5f7b9000","01000000b7fc0964dd1245c072510eee0e13924b086f6691252740abc07b81e800000000f13e32ccdefc55b677c5a885cac169e776ba146527d80ea115c103285dc8fee4126f7449ffff001d19a7d715","01000000838a6f13165359fd62dc1ce69601c09db7466ee78ccc21fdff5bfaed000000001d1c546c572936b6ecee3ca7a10979979cbc0a2bf3b299c939f06fb60e89259460717449ffff001dccdcee05","010000005dec161f1fc47878ec39ca290bfec3860fb7a6b0550d54e188f24615000000003a047282ea5507eed6e2fb4ae9e05eeb3e7f2f3e538086ba0b60a3cb765d61c8f0727449ffff001d3784b786","01000000667a39c4b66d97f833d47ac32922dbd0b5a5e1320aec991dd24a5a4200000000813eafef78e8dd944e482ed3aa10b45c98d956fe5aa5bc1ccd923a1465e1386950747449ffff001dd2f5af06","01000000407aa2e4921bc61dac4dbe550f0d3d017f2d557c132dc84fc2ad5b4400000000dca1168fba20f8180f8922403e9612d2779f1190dc716f8ed6a15d5d8d8a44657c757449ffff001dab9e8f05","01000000165d8ccf9a9f85fe64c1ad8880be258e164dc12b93fc47b7a28dac1b00000000db4f18281044aa6021438d26830904ef341a6203effa947c6c4e04ff10013f9141767449ffff001d227526d4","01000000a3e361dcfae8662dabd2967818d78950e37e7cb2979628de3955c142000000002468d37c07b56f3a6094028d6f0a1f34e592e1a57eee877b0e4a57e8f72c4d1ec1797449ffff001d051da8c8","01000000b53777719fc0a2a5c9f9ad0a494d793b7990e70c1bc40546ec5100f100000000b29b263b5a38986315135dcb289a5952123af8a110e8e3d692201e65df175529007b7449ffff001d5f18d101","010000006d5aa32387fc54bbc1737545604876d8f22c0463798b393468378d6e00000000260a00264e2df779df5a807c61c2c696b5546cfae982c7c23cabfe2fe3004fe8347f7449ffff001d1faf1426","01000000f8934b102786beae84441ceac3c9771bc5a74d78329ca4ffa191171c000000004cac10b97022bbb576756482c4bd0d0a97af741e29249e32f079fec04bd029efc0847449ffff001d23f80569","010000000ad3cd86c32488fd96f4dc52e9c5ecb7509addff69f810d066be3b220000000027975d8ac851b3c40502de6c498fd454ff69af8a6bd28a6281cf6a1ffcd38bdb73877449ffff001d30ff63df","01000000de22a8c3b4c9833922955ef1d24675c45db15424e1baa1fee57e98a100000000eb6daadd5483af2c70d83b5e2d8e8be07f3c29745d2334ba7b0d5e429ba4e528298c7449ffff001d21f5d62d","010000007cef5f0b4c82b8aef5bc6c40bdadc9a17dce83d4b2b6249322290cbc0000000020ae307f048a9a37bb436238bc87d5c8e8b409b867760261092fa1efd155cd8503917449ffff001d065be50c","01000000e6783375b566b13674cb36b268c65530aa8f7c697931f7dbc58c9614000000006c02f6972a9ebc4620f94ddc9573c2c2cc9ae8e79d836b0d1fa8cd138ecf491a9d937449ffff001d26282c2b","0100000074bfaa94cc9502334d3f51373e36d0020150475b83b48de4a9062b180000000006a4ada312a031cda39f38c6e02eda4e0907399c40520f8d63a4567bf300924fa0967449ffff001d361b7cc8","010000003c8f9f0994d1ff75003fa43ab0df7d66180094ea206b0321e62e8ba5000000001eec0e229b53c6b426a5a13a5727dbdaecd466cfaf60253523e955423b563b2084997449ffff001d2a6cff38","0100000032b71c6d0b1bf449899695ddc56cd9abc72a76141e84961086a736ec00000000129c3e10119b5beb0b67471b7f4b48abf329e89433aec1c8685492f5494f4379c99c7449ffff001d2f3f8617","01000000caa6dcd02e4132ba94063fecc504beff1d6ba0bea6617b634e96405300000000f83eda950f6997c0a2a281e949c88074a804c98f931a2e35f4a990b847ce7bc03da17449ffff001d2427a47d","010000001fbcf858d704cb4c9c59d7882b057f4006ecd46ed4c953967cefc2a100000000808c9cdf6efd01641cca15846cebd6bd0499944864b9e4f9cd8930e4c91bee4bbca17449ffff001d3f5b2c01","01000000ee48de279f7f5d773c64de073ad87f238f7c5785878d2a2745567762000000004c3b7bc489987c67fd6f97cd4d15ebbfb3d798a3395d91e5c4ae7ebba09580ee01a57449ffff001d1c248502","01000000d3a207f03360de622eed04f6667c0ede24762f733896373b65f2e2600000000042bfc3f5466ba2a6f894bcc1ecb931e910b1360dd49e0fc00db87e8a9a9402e43faa7449ffff001d24c25e4c","01000000f6a3a89357ff65d286426b0eff732caa76c90c00caf4dc48acf75d3f000000003d25eff3e94f508256fb5f9491d45ae3f9c555bcf335156ea17f3c12dd93c4195aaf7449ffff001d2fbed521","01000000050025ad4cd49c58bc9b5aabd038b4ac0dbe9129c7debd08bece8f1900000000eaceabe7b6fedc225447efa8abcf4e50d720a14d19d717dcd538fa042552fb413db17449ffff001d36542f55","0100000049b71ff485657fd40d9494dd2c3dbf14b3dc5d605f38b31e802dd9b100000000d8046df9edb5479865e2b99b62f7e8db28bad6743df95c18699556764fb8a923ecb37449ffff001d1d7d47ee","01000000cc24b3f337a19ef1a51095743d6f945a0888fa99667abb858bd9c3e700000000eef9577d9d374dcc534037b8c200ca2f1e8a7d8b925051cba7a0e2207b5e2ae214b67449ffff001d025c5ec6","010000007244a5b32a2321d56d222c227b3684a1693d7821f496c793a387efc30000000054d1c4c9fb899fff2070a7a09a74cadf37ead10b4ae5f01f8a5f4ee5193fc95d23b97449ffff001d27018ffe","010000002388f37923dccfbf9f4c7a8a54e335820487c164494b469436abcaad000000001c5b7e73f5b1bec2d532e852fed407f193a6c041c9a64472bd805f24f2e35c3102be7449ffff001d2a19ddce","010000006fce6fe73a939d137b99e13269eef13f47195eaefb27fee8bab382520000000049925b1d5b16b956896de37923b70a7ad89215c1fe3d0c6591e761a3f899f14950c17449ffff001d31c15d33","01000000203ec0d4fb7bf01ccbbb790581eb762c1996a2f886c468dbd9de0934000000001eb5bb64efc3ecb9d11fcbb6b78d4bb899fbd84d406b1901e99ab3f70e6be47ab5c27449ffff001d06e3f79d","010000008fb862337ef684831a097a8ca2e5dd9d0905d6d4a39c5e002cc05cdc000000003c48b3e23abdf07b0e06e48dddc9f1d628e59d162523a52a9d67b30b09b8a52075c67449ffff001d265cb298","010000002534818dd3c16db891f088c4c8281f25548d477493b1e257a1c9fa9d00000000d53632131246e2f2e366487b127f85bd4b30da2d377a3ec7e7c776e6f65c59e396c87449ffff001d2f1a774e","01000000fcc8dd3776f0c44835a3e5f3f7073526022010bbc306c087e3cc7e57000000006fdec02902b5e47863e7ba15a958cbc01e27f23dc8cd4a09c731ff72d3b647b3dacd7449ffff001d1e801b7b","01000000ba444edc874ae25b5f93e66290d5d40479055c2d9253a8a97d02dd080000000042c989c68619108318d9365b10cc5c6bfc2f4cf5b89e0004a32acc0fd80e625eb4d07449ffff001d3935e6e9","010000004fc6cb07c209254e1eb145fc10a7405c0cdd8059a56ab621486b528c00000000e91265b43cd9c29529552f9eddfcdb68bcde751229e680148dd372209e5677375bd67449ffff001d2d34183b","0100000057fa65fca3e70fdfff924cc930738317c82170b402669db8bba56d4b00000000ae4d50d2aee41baad737d9ca117f15af07e388fee9e4d4ebe9372e25f77e4f29edd77449ffff001d2886927c","01000000b3871a9905bacd4c27697109b8390f654151a16c58e2e118993057d300000000bbfdc64faf176f8405f596f0f32beff29b0bcddf6157e67bb4681241fd79e79159dd7449ffff001d15eb623c","01000000b53357aa82a7a25206f11dac1e51901bdd57c5c6d6b579f2bf58e7f6000000008e35b86436f1ba848ab05409a6536ed72f0b00c4df55c0823d8fc0f887f79159c3dd7449ffff001d49c83f02","0100000051fee0ba4741a2d8b8a81d399bb92af81fdc41dc36a7fedda7bd96a300000000814d5969a8c72d61e25712b581e7e5f4a977bb650ba1d3fbcce21050196c4d4c08e17449ffff001d7507a310","0100000033e42ca090a0f641395356b8c2b6bf099e95b5ce9f6527b0259849620000000007dfe8dab0210c9c3c4e7a64d2eaffe7fabc9b4be1c33e6c22b999a4318376ea28e27449ffff001d33f44a95","01000000f3d1284f6b2f658f8f60d788d1bfd4cf3c8f4e9c64d6e679c7893a8100000000a0c3a7a50cefd231e785de25820b96a9dd91ce2c67874b7959704d81ddaffd2bd4e27449ffff001d5e27aa01","0100000007ec5af89cf1dab31e02a8a5381bfc369ce473a62f59e99e298e872d000000002a5e1953337322bae2fd066fb81cecb493c89e1d0e2b99440803fb160119264ca2e57449ffff001d04bfeef0","01000000287d2a8798f4e57aeb31ed0fa2a488b17b2ab2ec091a3870012b125e000000004b34fc811eee37c55ea2f830dd816b1fb723ff56cf8984468ccf164ad8aa027546e77449ffff001d1b6e7c08","010000002d0304d68ea93e843ffece8e1660ed8f96250f9489af11798529169000000000acf8002377df6a33b18da8f18cc195d9b551f30a77fd3c9321c6643f9c8be41bede87449ffff001d01c46319","010000003b2b695124f9400df196705fce764191df50f768fd0480a3390dcdfe000000001fd158940ebe9e64600dc227b9115af2e14ff42c13e21529ddfa0c62608f51714eeb7449ffff001d027dbdd6","01000000796cc4bbc1833e37128b5f9491f0c0ea48d770994357dd6b4b50370000000000b1ad9c999c85a7d800a0203dfdc87950e0f78f6e2e4b3219130fc0bab72956884bee7449ffff001dfc1e7a0e","01000000790e03714d7cab9a3228cd08097f6e08c125857594ad4928cf335720000000004ff6e3ff0175fef08d520409c377a744f7466c116b0d04ace9d4500e8a8d1b427aee7449ffff001d36cb76b4","010000000014dd1ea81da210e49b8be54aff1580f6c549880f70fde022c689db00000000d49a431e368a35295b31fabb1c851a70e35c8d685d1f26a6d9e23824141d543d44f37449ffff001d20ddd86b","0100000057d6a1e0375b4a504b15a923945056c0bc73810e95d68bec4278ee2e00000000a58907f0202e4c8d048feee76fb821634b030476d65aa7aaa2bf0ee8313daa7b3af77449ffff001d092e5476","010000006011e508dd6e62419abcf52b47a893772becd9dd43a6838f6e7fa6ae00000000bdb2a8b04c984a812bc980ce862d624c11c750cf85f981408c1503c7e30aa7d31cfa7449ffff001d2a5e449a","01000000d5bd6d361befce3a9e4c75d2deed2622102fd9d3e0b68fb03d6f09e6000000000c07901dc64096e0ecf32c08c88c49e0011d6afa0312fe98bb4b76d0d9c07ce972fc7449ffff001d237baeba","010000009231f9ad5e5406e3c511307feb888a70760fdb91a9c2571416ee927900000000e80299dc382cbc8fb9d6d0a9d27fdc307203716b2bc11f21bfa8fe4542abc6ebf5007549ffff001d2452869c","0100000015583a2b664741ae84eadee8d9b4fba8c921cfb7bfbbd75ed0e7a62200000000fb93ef70c752cbf511b02eb5f4a88e821914a0001f8b7eb3e4f3659bbe305ab894017549ffff001dcb14ac01","01000000740bbbd940046d89451a636328cf46801d003be836185566d13c46570000000056331ae4be32b00b957df3d5cc65bd1c50bfc1cda87b0d2a198efc7c5fa7c7f3f7057549ffff001d28b51ba9","0100000017c8b6c655206df34262fc9dc027e965119b40da8d9ff9a4024df5ad000000002c60335f2e35a9ab7f768549ee665a415c79d3c20a66cfe6532ccb5f2a741eb7c8087549ffff001d06b2b5ac","01000000f8fa953a07f3f69101d433e582913c87affcffb9906e02fa5cba110c00000000a65aeeb3595415a6254f0e1c56ff4758828dfdcfc6f2d3262bd9446b2677d4296e0c7549ffff001d220d61bd","01000000c9e1a8bfe20172f16a8f7d94205e85c05b838613cb0cd037e8f21f12000000009574d47889bd4fa52637d35a7846f042713fb6d676b78e78ee9494deee8e2524fa0f7549ffff001d3030f57b","01000000a89a76983b19a781bbd2dde7696354180a11596c963eaabdc001d50800000000c54bdc118a6b5326cd6d8ca436c4349e76b365a17284cfe7b3ff1ff8054abd3b44147549ffff001d1c26bb8b","01000000e76eb1f9a5b1164dcdb27212f859ba6389aa626d01a83b515c4027630000000047808a0ab4374e12bb49ed082dd1d05be2e822085ce242468769cb5bdb650fd569167549ffff001d24abedbd","01000000eec364ce4f519aa63737d14db53a1770e99916e605ca8fece2cb48a7000000001da876d5b13b51605a669407af32ba9cb409392bca1bbb94ea96c4012b25e1aea0187549ffff001d0950693f","01000000580f39bc1de73633d5bdbad290352bdbd00450777ba67b814469f6b90000000022ffa6f40a48d66dab35556f3ca4e623526c382123c14afe9a11e28f7ffb953a001b7549ffff001dc5dc690b","0100000062e338c6a04d75107fc1c0938b950ba1e11aa817b5d4c5d3521d5380000000009aefea8ed2785329437a0bf95cf155e425b312fb8e68c6264d088965d256be320e1c7549ffff001d02780811","0100000094cc02d465d142acf7fc2e405b78c7f9a0a03f64b808e36ba354942700000000ee0793ec2e211334c668d3728b7fd497516440b93222437a2c473f83c2befaaddb207549ffff001d37e70fba","01000000e43ba747331d5be75df5811eb837602b41d757754cff261a9f23ad5a000000000859542b7e63f0e82139fad332b07b30342fc6d271f31db796d5839e3340774122247549ffff001d1d1bf3df","0100000090419c2d4daaa497256a64a6974beef039d81a560cce3f7779d456db00000000951a7cf7cca734e1ea9a4d64f427dd08010f5b6b1bcf1ca6b1ea647e6f775a9c11297549ffff001d036c5bfc","01000000b5c50a3ed4e84a2522c0da59d2d20f5c8355e0c548ce1fedc10ed298000000006de9d4d2fd971489f0b4f358cd075b3d246c6bcac29a0cd0bf66f592e92972f52f297549ffff001dbb25a800","010000003078031164c4b552db456e6176d1ddbc5b6fdfc4856bf22fec20727000000000cac84f716c01d03abb09afd66e942f8164a40cb4ace3594282b03d55bd8ad4889f2c7549ffff001d2110d3d5","01000000a39914441d4710e69fe2dd118633c65559a0fc381c5307ca14b8aa180000000093f268f4ae5a21b38acdc6021830834d6963bc7ace3a180de906e1a122e5bf42b82f7549ffff001d07ac83eb","0100000035eda558b48c16e42db6019057aa84a8ccf4584c8446de444f14d3d2000000003e59551b5a411b057656d18a4f99da00a7f55df5ee35db3cded71144d9d9482ab9327549ffff001d1ddd3e08","01000000028275a15a89aead901bc0e42f73ee80d213f0d8b76cd19a6263fd0300000000c1794ac8346bf45e6880d2ae4761be2755d246a73e7f3354e89ec02f7c0a04c82a337549ffff001d2d472ea7","01000000d5cc83c61ae000aa94eed871cf45d6b1462f53a3aeb00241b3bd0924000000006882c5e646af8a86668a8dde8971ce5e16efb4f10c8d331b82c96e0c1294f7818a377549ffff001d84fe2214","01000000e8f49c09d79f639753d2e6e5fe00a489b18caefd2cf07b830a514ee6000000002f28f08c5b1dd950aee4f986b2239b4b3bad3fb361d0c572789f7b73b8e03e2bcd377549ffff001db32c5200","0100000085ca857f3327f26261753805d1d8fb999b8aa9d637bbce01b870e3d000000000fc195b0d8f78800c8ce5da3b98fe5aab5e1f5f5c8b4b89ab21c3a919ffd7841bf3387549ffff001d1fe66d37","01000000bbc3b60808b401c50f64475e0e35e2e72ab729473877d98669bf4457000000006a0d0837acabcfc35d2739b41a64d98638230a461879aafe4bdc59149f990bd78c3b7549ffff001d38ed9908","01000000fd061d436fb973346673fa103e8423272d618370cfa40f08134ea7850000000015ddc6ff02d84d0b6f51347a5c22406d9971f8ff368a4c33eb6b25b6924cbf87ab3e7549ffff001d21d7b583","010000008de6b9ce5c246f4be529ef3380b3cfeb4e263514beb89625dcff05f3000000001c5d0cadae4194466d9206f8402fbe9816d54973fc8e860a359962ddb400c0be5c437549ffff001d19272650","010000008b122348abc79257ed38d569c2e3cadcffe3ff550b4240e52eaadd4300000000cd7b1873c9f5989f8061fab8776c2416c53ae236e452daf7cfce3f521bc94d041d497549ffff001d3819d160","01000000d09be4b8170805fc1b9249112c65480ec59a59c36e81587533b64b830000000009ea757af3339f6a5619b96ed44372c4b92e2ddbac2b51599d3c6a6a379972bdc54d7549ffff001d1dc235dc","010000004bebf407e731efdd6175c9b7a7b273b71e5655212043d8d23cf9d39c00000000f24029a5f673de6f4a71789f670ca017e3778478540a1dd53ba9b30dc1397774d1507549ffff001d1b307da8","010000000759702c2810dc42b23cf77135e2e7abbad5db297d3c3c451afba34e00000000653438b942132a39edc307bcb12bd959bb8939b11d939c9b9dd51ecec0ed88c498517549ffff001d5d94df03","01000000b0bee919732dddc3e52dd7e6655f4c81c1f06ffbd8d1572f4df042e6000000003315253edeac27c88ff82f3c8eee5216cfd4a81befe79204f5a7b749addf3512a3537549ffff001d01a0008c","010000003c5c04e5593471a02d52dc9de9e109974cbe7c2d34345e2a328062a400000000ba19f86518ec796b83951ce1dbb213f282784ba468463f30a1e862a12255c5469b557549ffff001d02c1f7e6","01000000a5a09835e7822f78f2efe34b896d2229ff7de1e4437c4f336f8ba3e6000000001646b7d064e7748d3ccb6c79b68dbe79d0d5eab683847111fdb6901f1df62bc30e587549ffff001d4dbe0c0c","01000000ea15a0a3259ee3f1d21d0a03c5c0a8e70ca302b8226c726084c78e3c00000000ae60a442cbac2b01c2f3088973128d0bbef1a1f8561e185492d6da26df55c94760597549ffff001d32fc5622","01000000602d3d41ed75a592d9dcb44463679dc4b31449b2cc0e5dea15a027dd000000005225b9be4726f91b4120acdd6aba5249074f7811ef91b7eed146296ceacacef0b7597549ffff001de27bcf00","0100000047a2b16cad3f913e2062f76cef45b1bd3ae9a4a8fde258cb9c766aab00000000e65f88a70ac5ac901847b656933801749f67c89fc00580f2d5e5405470ea713e1a5b7549ffff001d2c0d76c3","0100000023ea88089b0403d9a8eff9f076a99eb61c55c6ca5ad3d56356c333d0000000009faac357041d003edfbd371026afd4d3c99b17e3ac1aeefbe5d61093da8ef06b4e5f7549ffff001d364d704a","01000000683846e266504d9cefb60aefffed8cf03a583e7a6f4c069362dba9a4000000002a1a1f6eca8d892fe199cfc80d411cd2cf506e237d3f0378f97042764d9fa24983627549ffff001d1d53ac1c","01000000ec88acf7cc99676e5ea0f4c994af78913840fe83cdd47651f4ddeb25000000002205a302a33c27826e913a92addc5d012f9d63d4307d5502fb814b6f1254887312687549ffff001d093bd6d7","0100000005588da1211b63f110bd0e52174aa9db41e667ea881df14f4b7659ca000000003a82fd7b4917c2b6357bba910c30acf4752fc0d542d3d441ffebfd92acb6cdcaa36a7549ffff001d05489140","010000007514e6911c813d844767b75d600942e17c7a9f8cdbaf2c7772d574dd000000008b4a3a86104c822f63c1131223f884fdc41807ab64f665c1a4ad2b6140b4ce69116b7549ffff001d737e1101","01000000d2500b9c7ceb15eba0721b0a85b9d7aaecf71db19c8ddac77085bad1000000009a3d9a8e49b586c24e58d8464c1f772efd2cc0028d58e52c7b9491923aaf294cbc6e7549ffff001d815e7f05","010000007c6b91296864d33552f0481ea1729c670fc68819ab6e84a626d50d12000000004a6373fd02b1a6234ec357a9345a9509a5e300bd6ae05a6a6675b15c78a83695136f7549ffff001d2625be79","01000000aafeb87b0f127a46ad81e77a799551b10f80c1b28bd6594abe7e0ef000000000a4acf86b1cade64e8baf1c16d66a49c0fd52c950d16d5a39cf4c5c771cad152547747549ffff001dbae6a019","01000000a2fb7c157db181a0c75b2dd266bf9fd6f92ec58d713269527b5b818a00000000f3a84227a63788220f438e757573ac026f8cd13af5a568ff529a8ad27369ed1b8e747549ffff001d1d460b93","0100000039738489cee8aded16b14742aaaf6b1a9241143af2c30d1394e637810000000004c8e1050bfb385da8544a9dbe378405e04b452898860b22a1ad229ebcf62bc653767549ffff001d31a4a20a","01000000b6ee2503134f682b3e79bf78343a983ef64abd02ac587ae58296b60c0000000025a4e8e1e92bc10c96f4af6460552ca7302150349a41d7fa1606e8fb5c4136d783777549ffff001da190a104","01000000247a6bd61b0f268745418149c462f2cf94deb8bdf2d90e22c8c7ab85000000004544646f273a1cce79915a59299c53f8ad6744e76a0db6e50aaab87b73909393a47b7549ffff001d08f28ace","010000001e9263d59723e2af80bc8c5fd0253b761b5aa0dfc6a721d862eb6b6900000000ee4e56cb5a52adf8f21340b7ab1bc39ee0dd57154a35d683b41f5e54d332c6b60d7d7549ffff001d18a1e0c7","01000000365661333a18ca9dccdf34e47c434d5c9acd1bc75f3db56eb5999bef000000009b54a1bca2a94ecd82a3f4f323c63e56a8a1e1d7ea407364a78c6b0d5c7a3896c6817549ffff001d050a4251","0100000015fd577b1188dc92d470067202729db7f8cf5fec1e69f21a4006bb9f00000000207281209f45d85ef5a299fb535625f9e7ca9f23b70cb0c6452f586c28c296cacd817549ffff001d1af60f00","01000000b8cb757e47b20d74ba508f10dd0fee5798eb69567a36ce2a5d18fd2b00000000fa780bcfbeeb3a122cd5aaa6090d916252c677818c4a3f5ad6a60ad24a93e4dccd847549ffff001d041d6460","0100000007c6c0952cc93e257cc6fa2dd22f4cbc70fdaa49619b31fa6d2bcb4700000000af261e5e33cc3c7a71dd3e010e2194efcb7bcff00e0a2fe3269212692a79278305877549ffff001ddae47a08","01000000b592aafbc8cee5428b300c3985cdfe4b4345bd3ff77b1167333107ff000000002cb53ea5b606057d5cf040f0120331bc3005a9a26946cf9a36a9961e2f837f7f2f897549ffff001d3549c5a8","0100000086039699edcb6e7c9908bea9bc6c61cef87b890cca2044f24303a50a000000002775b8619318970cfdadb8a69d99d95ed24d5742a76551acd5f87637111583663c8d7549ffff001d1888a370","01000000ffcf7dc5f05da1c4cc360a533478fd31df09eed72e2e3b961e6cf503000000004e725199de546cf715ecad2987d9dd72f68bd89b7c5d9e32beae7f1552b7b50301927549ffff001d3341a068","01000000c7a67597ae7c20bbaabd47d3085c94150be85d2f3db7bc52d9c70c0400000000d62abe43a652b31e213f7a850d5d1c93fbd969305c040fd1de71fad7d4d4344854977549ffff001d084a2609","01000000d2095bd2e60255211b4235247349f81f74c121e9ea79c779fb0f27090000000046d074b80a303b9a16c62ac74adb725fa476b2ab36678f0c9225012f94f44ec0f0997549ffff001d20af20a3","01000000a01f4eb4f45ada416cc9f961a1ea74e25f3f808b2e0837406ee3851700000000f4929d17b2a44d0cb5d2a6127f3e39b96dc2a7876f29010929c1e4edfe77d0b9c19b7549ffff001d14ba910d","01000000f8341079ed520d464ac82aeb6a9fe1bdadb7bd60b226a946440d76b700000000914e99fce95e26e7278bd8c5a62d5ec2daf07e857c386cd91f04b8df63488bc2c89e7549ffff001d29eb895b","0100000008bf99237a4d53148dfdeca6ac6e342ad3a96b5ba5a72b356f8a2fd000000000738a8472c364b07e1c36cff81a5f0d5ed0d7664a5880d1ffc23f126f80c8f51af7a47549ffff001d1acfb8b1","01000000f34436dc8af0ffbd483214277a573b03a171eeabdbc5994e21009ef200000000646172c270b30c62ef71451c501bb75945a9f33ce1e5eea4e3bf67ebfe1b40d94caa7549ffff001d080fcf66","01000000c9f004a8977b201b28e98bb0f7598469130df1f14c7ea9ec61d809f200000000f962caca6101b42ba3f95015e7e15128a61aadc4aec123ef673ade114136f17ee2ad7549ffff001d4ab27e05","010000000efb80612f837a35c67d48d082f82d919b2a8a98b721793e36859d2a000000005c4c1121612f19fbf27cc7fac81f79e0fef2c2ad35e028c696f4a8c69100258d83ae7549ffff001d7770f600","01000000505001bd4b39bba4654713e5c075b59972df31fc790f7e305dd7a8110000000031c415e61a4e502be49050a23a3c18eb34cd2532115e7ecc34f4295886e5a53358b07549ffff001d328e5d96","01000000e63bc43e82793d7f2a25c9f412fae3ac2eef7232be94902a401402c500000000693ab42955cd66bf6e0caf963dc71e37cc4be06e547e80b1a9b13b58fe830af34fb47549ffff001d3137912a","0100000095b10a0a19ca282355233eff9ee5b53ff44283f1ae75c427ffe21b7400000000e8039f2b639c1638d3a509b3aed06ea626d08e9a9ed798d110864d59a04ac37c89b77549ffff001d711a930b","01000000a980fd2579c2196512b74793ed4d83cfceac35c1307edf1e70ae378a00000000ea0e41fe72c53db8003eb5cff75bcd2d4db2f594c6ac472fb5de4760c9d3da030cba7549ffff001d3a3f4fbf","010000006250ed7846a0e95851ccaf9b5db1a57028b709f22122bff723946a0b00000000ff7e9049a870e60418bd480a28c7c71f651e1c7a2796cf478d0b850290f089ed40be7549ffff001d00541d71","01000000d72165e24c7298c3366c85f61b6d761d6950b671baf3af731a3006f30000000073ec4d4b2688993245bb26b34a8af237371af626e97b0098c33de068e759438d51c27549ffff001d064b77d2","01000000e76959b5bb4a846dae3bd128c80409baa393ffddcd027dff340955c7000000001e02fa36744b80bf67951f42f8743e12c8ad94b152c4728200d70bae51539728c3c47549ffff001dd6bf5a06","01000000737573602754856eb4ad1c4a0c9f969d82ff75709d8d290437e1367f000000000938d207cade5997b0903c820fbf44e13771d217fee9c1a16e97d54a54dfb55bb6c57549ffff001d75c09f03","010000008d49f482f838a7c66310bb25827068098e9e99e76a67c4e1562d00310000000006c154801ada95db25937074015cc2a82a8a064ef38d43b04bf5074536b5cda748c67549ffff001d263c574d","01000000626c0a4f7b352c0425897e103814a06eba8c3f643f360645897be8770000000060486507fe734ca0edb6ee494ebb87948c049485864171f9d2292118f4fa804e1fcb7549ffff001d09baf18c","0100000097d127daedb27d1d64acd37f8a7b800ab81f998f926ad43749ed64d400000000d8c9ce6c139f873f6810449dc4a0b615ad1de0c7f05ab6bfd81eb7b51a57eaa141cd7549ffff001d227a84fe","010000003802393ce5201263e48df64f66e1965d95b4726b6a66c8272d889064000000003cfebf53465366af096e630e8cca4be3a4ced085b4bfecb1e306075721705044d8d17549ffff001d2e353938","01000000422a36d9f5282b4ab334d28b51cb99efc896eaf2e4335b41c1bdacda00000000ca61ac5a10adacfb5efc71d7ac468619d3761f08d75295e641585f717f493e5a17d67549ffff001d034e9723","01000000cbeafd5907d6f8bc561d8b1a086482e361e6fcff7d06793942fe277e000000000920e56adf4c108ccc86e34808b990afe0fcfa0641329a2d8bb7d7a67ecf848be7d67549ffff001d8ac30404","01000000b646981400d86b7e4746aaedb9e0eec8f747460e56e75ce516b063bc00000000269fbd5cbbc38eb355566426ef953f3398d52d27dc6276b9981894cc5f92640665db7549ffff001d326dd406","010000000cf6d13db16e40ad2a0d37a46f2e139aab7c6a20fdd67e263f52bbbf00000000c218947c05a0041f5772c35fe7ab4d5d6dc3ffced357e1178b0eba70ffd1ce2258e07549ffff001d04c7e92a","01000000f0ea59187e8520ff2534eebbd410fba8366141b58f6f5a4db6e25304000000009ae072c07f8714899da9772a5f4dee3461e4ad46b06a9dee92b70e6debb1f9220be37549ffff001de7271807","0100000055b227fc019604543e4a7ab6e02fdc1d5ef15765b0b96b237b0ed7a100000000fa411461c6305ee0c4b68559d007242c9a84c8f66a66dc790b3c5bb88990187113e67549ffff001d037dd1dc","010000001323e096c34ff1ac9c66a6b88cba9734ac05c9c54113ed51c21b9e2500000000202cdc12bef6978172dd81811137f50ac5305160dcade5023587a39d29a161c4dce77549ffff001d24894f43","010000009e9247ccb5f9bdabab26b61aca9bfbe8b7760b46a0890a3aff7bc34200000000ed1d63f3478c3f9d7f60e8bcd389367eb8b7fc43d3424d059933071630e501dd75ed7549ffff001d38bf3f51","010000008223aaf0e2f2d03e78550732acaf53f528cd44f80f9115f38c94c4be00000000c9be84f0060e8e7577f155b8fef35fd4f4c510f8a4baf5ec685816255c00bc1829f17549ffff001d2f7e89ad","01000000f1184b069d763d59dfcbf5572e2f57777e78ca6af6fc255d8c5c878b000000007a384489fd780b1dce2ea4456b5494a9dce296e91bdcab88da430a354a06907ae3f37549ffff001d33204cc1","01000000f0444ab679124fd8505c1b653ba219f5d65d6690b4b3c83d128f862c00000000787410ea5ee6f9488d4063282489c5f93039fff5a9b61137064cf7b8f85f9f4230f77549ffff001d2b2199d7","01000000ddb402d9241f3aa8168e738c1980c97c4a3f5366bf07ec4e863fda84000000004339e5d95717a9d6168c31bdfde42b8cbe6f11ff00336f535a5f5a58cb7adcc37bf77549ffff001dbe072201","0100000087ef6b9578d1c07d706567ca997c0c093b50dd3a76b1bdf98baf953d000000003a6d8d5983de6db75c8cfdccb48ddbf55a19b191a4b0a1a5bf1bc5e088b470b769f97549ffff001d1ba086e9","010000004a8eeedac9a65746e30ee114cf26698f8bff34846c828c9ffe0413a5000000009b08f32ce5f3f46d58180bd9618d9e80a54ec1d0f28443705ba1bdf5459c7a25c8fd7549ffff001d01897d9c","01000000d130beb31becb52c4cd4eae7a0855e3355f8b302f33a404f4d1df25e0000000079caf2f360e38c115ac3dee028ff145c55524e5d0a543079c622131af3a3917a2cff7549ffff001d2de342da","01000000f519d6c341a752b449920eba52bcfe685902cae2ac584e96885deb2f00000000e27e215b065376119a3e4feccb5c0aa0c3cce3f85860832f8ffc94fbdfd75c9a16037649ffff001d23df3628","0100000024a935762fed684f3c166035dddebe3f233581ebc61446fc7a7cc05500000000f46e40f65cb725d04a14938c6a8bd335d1d041348052713451536bdf2a137d4ff8077649ffff001d1d8b822e","010000009b81788f077941a7b9336c65346f5166857489bc59887e972322809600000000c9ec3538434b89128b60f44087af287dac6583497d313cea754647b6d80b99cac60c7649ffff001d03852c2a","01000000e11824d66ded6bbd21d38019f33c1b8f6c004bceaa2008fed37a6b910000000043df51905a24108550f92eda9e695915421931fec4d55ae69782e235aa28ed24b30f7649ffff001d2d85f770","010000006096c8d750fdc682e26e3db5c829152391d5ce0f9d837962d77a76f000000000e889dedd1449121d91f51b3b9bcab7af68c2966c679bec0aaec5c0fdd730921a2e137649ffff001d36836905","01000000bab5d6147ab7ad02049d9f3cccbb3a39a0637e6f42f272b95e72f80e000000007ad86fbd0016640f725ed378c7e09bc4bdfe9fc5f3122a5cf75ed31b4f04811f96177649ffff001d33afdcb3","01000000464a000ff2e57e01febfd9d54cddf9c83eb309a85a5a6a239a6687e300000000e88006469abe2b94262e13840efa3bbc646764cf8a7df7375445a6a641223c59bc1a7649ffff001d1f34732a","0100000009de5d5d251ef4e8a485f8167a3190360df92160f4885437ef4ba737000000009626337ae186bebcdc213b2847417750087757f133b3e4fc4d71be1b724f164d031f7649ffff001d369e6dbf","010000000554097670f2962d94e3974853445f1f5f658ed7000423a955d50fcf000000003179992a64604568d361942504c80ec2e0b3523351abd94fdc07c32b6884936469217649ffff001d17787f0b","01000000c0532fb0d3bed303838641245694256b03c3e296f90f39d240010588000000008e877b6abb978cd9a349d283345016509c45a664370f45c170ad1649709c43e1f0237649ffff001d310a0a7e","01000000223271a346523af5ad2b47cd098b04447f1994d141ad0377f59ead5400000000d206fd2c75f9c1a21168f61e85533aa30ae28d0754b5a729ebbb891b86a5868366287649ffff001d2b48b9f8","010000000a61d45cc6cfedeeac69c18b805e2ff362cef468cb808d1ed31763970000000079d9c46c070c08eeab33bd33861202070f9a68086093371f4950bae8c32b46dd8e2d7649ffff001d042df651","01000000ca179d7e594421e23723bd2b3bc2b0897bf6da41382878827e73c18a000000000d8505057d6aa860fc1602ebbc7ff8633cef8f814cc73d6e5368f04024c1e3f502327649ffff001d2a6350b0","01000000f4fb0d27cb3a960bd93f6134cd5a29d6c6e27052d9f59bdb421eac6c00000000824c777f9a6a552f4d4078c75aa19bf6722db8d86aaf25ad6e3c1c799731a33b45357649ffff001d1b14ae8d","010000006dcba5d80dc9add6d5db89b2920c03c3af78fd0338c4a266d3b0f64a00000000120953b36e1f3a519078abc66365230bd8220117eb4a0a0b4f95a0a644a61f8b6e367649ffff001dca172601","010000008baff663be0719e192a53dbb5d63aacc533714996443fa3664baad1d000000009a42ff53fc2597203e4d4d86f707cb2097dcbcb1d61a989c67acbac86bb7c729c8377649ffff001d753f7306","01000000f7e762bb9059defa5e8c0dc230ea5975a49e716ee449bbd25874fc3400000000f082e15d4f982d7b5ff008e73f2b132bb130fbf47925a74f2162a9baad6d98a628397649ffff001d2fc334e4","01000000aadc8dc160b615c72202faae0f3fc6fab6a23decdad4e9a41bc02a590000000068e2cd7440418ed549aec6ad16609317be7d69b18b0505102143d404ead4f9bb803d7649ffff001d1b3fdd49","01000000e163b40db742339fac47f20eba2de0cf9fb0821740f3b698da4197f300000000e96125bfe9f5f8adf994550f5ef4b6598f8d69028fdfae072645c0709bd02a830d427649ffff001d23c56f08","010000000b29caa69377f67bff7800d16066b05416ac7898a8a8cdc931d3220200000000c79e244c8779350399791fa79caa0903d5172d41590f19598355ff4f81af3c49d7447649ffff001d1f8e5797","01000000abcc78dae09b6742dd0ecfe32d12fce01be535167ff033475c635abd00000000f64c2cf05823e95aaa4641cd74734967e625729590b5665dc9d54c539fb0eafdc8477649ffff001d05109858","010000000135138159f353831b35d81f31ac3302b602569a7f1cd58ce36f81f000000000f6a16492ad724094ced610b8c7c0df8522d7b3f0799e94254be9f2a44b6125ed5b4a7649ffff001d1d0ae532","01000000c8cf56cd4b402d9440c3b108e6d930639f3747fbd5511a932204dad600000000d0d9386d1ff671ce2a44064b1af9ca8863590decc8097d2d584e5159abad2291f54c7649ffff001d168134cf","01000000a6d0a9f781bf43c5563c6cfa9cab1a6cf29ca36e37867e869857ed8500000000b0f38f5c97efffa7e1031608adffc9e90ca56b2412dee1f696193acc42840440cb4f7649ffff001d2ea4585c","010000005fdfdf6cab71e347b7436ec81b8832195f8a5c76ec3a9ca5b921661000000000bf77724866f2029aa5fe163174a38639235d22be0404d86825b2986dcd801b96d9517649ffff001d18d3a8d6","0100000038163c1c3805eeefff73a6a9162fc9df6c23aeea0d1ad248eb96bb8b000000001f8ce990254df18735a12dc56e5e5081b0906d901afb3b5b4647548e25af1fbddb567649ffff001d164cb7c0","01000000de03331453b9d346ab3ce45b6fed859456c798f762dc17d953ac94d0000000007d9a9cfaa06a6ad8e8d0b58a0ead256ae3a094756a018be89be6250ea6648d07025c7649ffff001d05e614da","0100000072350fb5f90e9ce9175f33f60ee9464347c29c01dca41973821f8c5d000000008d8c5316571c1890fb03c0f9ad70f5bc5a1917a1d29d5a424f6b9ea25e267f36d8607649ffff001d29a60708","01000000fe42d692b6e63a531327320da85155dc055a98eb74023a9eeae3c3dd000000000890bc93cf116efdeb8dcb94eb6f560d8eba23a619329ca5fbade209b0e7b99915627649ffff001d38f39604","010000002e7b62d2881bfb68398155340a8263235a63e197426ee93f46c65be1000000008d553892ac9170b5aecf8f68357e768d738e7df206e6e8025c2089c7b794c4fb53647649ffff001d2223882e","010000000750f88d6ba5d3050c1cf54b4c2769347aa1d9353d8f8ad48037427f00000000f8af7a88909f97a09bd675233d51b256ff43ec28fefa345a74e5cd48363095d6d2657649ffff001d073f8100","0100000061418dfca4082be0d71976772b309f48ad65899aa92666da192861ea00000000871ea39017fe0d03d7110c6b79f03c4696205273d813fe888b10bc7e9495edd4fc667649ffff001dd5fcf802","0100000060d730c1deeb8daa45d783ffee0670a5dbcf3288e0c028d00ca55ede0000000040e1766e9721398945c9da250d3fb1e1514f8c324e0bd291138a22fb08ee41f6d46a7649ffff001d2c2c59a5","010000008e9254f24c9bbe60f6f22aa48ea2b6253f706d96e5e02b2614fd633000000000bafb34c5e4f38f434b3f79b19f3063f49ef4aa2d2bf3a370c1804e1f232c47f6da6b7649ffff001d232b8803","01000000e12f7eba767b938d5887817fcb307dfc4649ce4f783892542d3770de00000000214903ed27fea480bde5daf8a7145fabd5503c6f3185db2dbba70fe8698b0c86576f7649ffff001d359ea39e","0100000023a16c02d985c3f67920087619a53ff64f2b969175a9ba2e58e61b8000000000be149eab25dba85e5eb72f01307ce033c939e98e8fdcabbd1cf45bbc39b6c08109717649ffff001d2509e221","010000003747479c453ab1a5ca7b44db3a283ebedd8cd68b510ddbeba57e3b5b00000000b76ab5df9ccc1bc5725cbf0a014d6899fe6dc15089e61068f4945ac25c970518d3767649ffff001d37e9a13d","01000000c79fa4d7d66f4f0d424b98bf793d7c05a781e1872e27e3d196dab6f0000000003f82f82ecf28a4456156091506f04fad71d6ee39e0f06858925b7975a6090375b47b7649ffff001d1c494038","010000002159333caddf4a4832bab638e0b60c89d5ec38e7e1807e19fdf1fbe60000000068d309648248028265f410d0cbefa08fe1c09839f91c3453dd74b376a711a3abd37e7649ffff001d24c73262","01000000128cfb2d17bca797fbde6c97a6f38ffc536d452f4aca8879a2ec6a980000000059c1de91bed5661d13fdcad6d0e53f35eb44a1335550fe259f00aa51a0ec9e97dd837649ffff001d30c40356","01000000ed511280697586d120b5aa9273554f4735affaba7a698aaf2cc9afee00000000b820ba499b2543e3c3d521a964dd44b716c64ee0fb465452fc1d995f712c11dfa5857649ffff001d20779360","01000000f5634db8aa2b519f188a61e9ab40ee34f58d7a9833c293c004e6160300000000eef329e15fa76dd16e3e851c52ba4d884fba88e9c87c541b9a9f8bd41bc2a729e4887649ffff001d1a8a5ea0","010000008e16c193cffd63dcc1437c2655d5b8f9d2c2aa5c61f3b450a4ef2acd00000000b4a783182065b1e4d54cfac9e2f54999b873cdc59317570dd065af12690abbea0e897649ffff001d2cd53500","01000000174260a92b3330e368ddc493ef1f5195a54838c93861e2e66ce0cd6a00000000c55941da2ea17f69770c2e92e7247fc2d845eec64df0533743e3e0c0ff967046c88b7649ffff001d036e14a1","0100000093af881a11fb6fae204ec04271a9fd314d2c646cbc00f2275be66b2000000000a52f5a70099efa609493ae3f7484590e20b800542ef6c8bcf1eb161b59ba4cee3b8d7649ffff001dc3cd7a06","01000000c6db713d337585b8bfa0cae925f96f2a52d65de95ab5b31131a949a900000000751d277a734a700221c0c4fb800a75d7e9d2a7d829d903eb5c42f4e151ed6d5a58907649ffff001d1cbf25b0","0100000064d2bd1a060e930704ad8572ecf203f3c7427f78d8baafcf2829017f00000000da4f81e0b6333815e77f56d0be1061e509d39731508e0c8928c917f8b81f34ccfe937649ffff001d1b38fb87","010000005ef1b3e875657258c27f7eab8f05b812445d144339641128853356b300000000525b413e1fcd70e27ed468d723afcb3ae6f0b8137336a975083529d39b0411b5b4997649ffff001d2b289983","010000001751a14743774bc08e6bf1e4fca9b58d6c8040c60ae630b3fc6604780000000050504e25e6e4712bf772d7a609c77135da2ee7f84fa635877dfd833de6169eeb9b9d7649ffff001d039db4e9","0100000081131f25e8fd8a1e3c03d2273a63fd16fbdcab0fbec842e82e9df8e70000000074103a59069b0b07caf99ce8b596e6a26276ca8776b9a9691197764f4904fc313e9f7649ffff001d20cb239a","01000000736acbd89d8342ad0954aeb0cc4f9847b41661b49d31c1245bba4eb1000000002f51bc6cbc8ccdc03381a65a4e07cf400d7928066d8685b531bc8d18759c978277a37649ffff001daa7be20a","01000000144cfb97b52ec0bae58c66b542be22c0e6b9cbf1adcece87ee87dd0c00000000d6dac345bd109082a75587120218b9aa7e605e437b389b916f5effbf0fbbdf9a0aa57649ffff001d3a6dbaf4","0100000048b870cedd7f5c7caf8bdf7a823d347e268ea5680a3156d9ce03eb3200000000811719b6bcfa9db03e374e0e7beae83f20d506845845b4df53dc6addc9d7f1be22a57649ffff001d8d839700","01000000e33daaf866172d66e8c42c215e99ad4c2d84ed4af8129a08a944e1e300000000013aa73c0d91ffa4360b286d678aba26e99f4753e64da532e2d677295032515e05a87649ffff001de8c8c707","01000000c7ef2e995466e3f9d218f78e16c5e095a01cce9d1511df5bb8635b3a00000000b7e71100052191074be3e73febdbe19e6ecba6054c0a90b948fc04f4eab5605f6baa7649ffff001d8fbcb30b","0100000033360ecee801bcd9ddd0a46830e743d58b3f14d50f695b4b125e1ce500000000880ecdb0206fd400ac9303d61730e07aaf4da06803aec5a3922b612c1a438cd85bad7649ffff001dbe03f207","010000009356a0f50b1cd20c35155881c718b61a355efbfd03fe55d1ae364e9200000000c312c4dd7a3ce86d3df62fe4bdf345d308287e6f2d2afcf2c07fd29c6cfe2ef732b07649ffff001d30226114","010000009bc841c601d058eb4551b8e7045c488a04520194a584907cb1dee247000000006d593d13858dc01f87073293e19c757af5e10216c6fa9231b4fc3f7e179a97a4cdb27649ffff001d2655a058","010000009b9c0cae1411137b417b7fbd39265d4ebf47d231ff4dbddc706a9973000000005c2ad94b4e693b5484f07280c2e098da02a434a4c5474100418854fd569ceb81b4b87649ffff001d1d1c465a","010000000719b308c3dc05254fe706c7f058ce54d659d96b0598b9467651f55f00000000319191a0ce751252963c6744b840b94a822a53c1a5dab897f801ce6e8df90b0fffbc7649ffff001d346e187a","01000000cb70e9abe47215f7eeeab0806ab444e4337d2419f1b3f7b4f10cbc50000000004a2e6af0665ebe46f890c6da1c526162954b5ace23d3df4d57af22f9e3c4717189c17649ffff001d3393172a","01000000e04a0b2169bf43094ee34f952bb4032585193cb31de4c3de6ed6436600000000ed06beeb5aa16121cc0d3a674a781dd27f124439344cc5ac1f5884577ac41c1073c47649ffff001d01eed0e3","01000000d385727dbb55220a743f329d45aed1a58b1f40ee4677a0e033fe13c80000000077915a455e7ffcc3b39c8b41f79e2b47ab7b7707aea5672fd128cab782bdec6e0cc87649ffff001d0278a6ae","0100000060ac3dee69937b53555cbc266b40d497e1f39138d649580dbabfec5900000000e2c0a821645d74224c7b9c9dd51b923bbd66a0d275b4c4777dfe4f1a7dd7f7f028ca7649ffff001dc6a44b0a","01000000284fcb0c0f00b255c0be183d3882f3e4cc50c17e36902611af78378a000000002f401707806bb34b10d71553330ecfe947f8bfa19332256743840d6e3055c57fb1ca7649ffff001d3869d83c","010000003fd604624048d4d79976cdc063b5f4474def536347c0b030795aed2200000000e62e0a7e702e605030970e755d8f29e11595c188dd234708991f4fe569cd6f3f42cd7649ffff001d149e2207","01000000410c2b4af3a97d05b497ebd3474ecb3b89f73985432aef374360ebb4000000007f38618a11204fe6c922269e52bf5d59fceff63f50558c7ce6f921a34762ad6968d17649ffff001d3766c66c","010000009b1957f52ae87b0cf0add3e5115e0a0500a81f55a036fe2a5b06b57d0000000077a8dc778974502a181b0087c9ecf546acc1cc95f23295b41ffba4303d1880712cd47649ffff001d1c43604e","0100000029f8711aa3a45e94ac7b2fbd8658ceefbb5210fbf435e534b0997fc200000000312276cd4a64b4350befb5dd62a2061bbf4edbb04a3ef4e892ef83970c7d95d63dd87649ffff001d1b9c0776","010000006985ce71bd024f1ecfc309e0942449d5074bd9712df1a78884cd5fb80000000078de4efc016b2582b3bf123d12b6ac24a95b091015360fd2e36eaa1edae13192e8db7649ffff001d46135c09","010000004cd744b906380af0fc1410f6c8f0ceec52d5fd962e170889bf590df0000000004c6598b79a69378aa479b4d38574bf591f279fcb14210676b8c277e04efd9580c3dc7649ffff001d30c4df9b","0100000070d8e149532c4a127af68e23712285eac199ebbad14010a209f2574200000000febacbb13dab4b8d6fe6058139d4da987f03cbae5f4cc8770b77916af2f511d69ade7649ffff001d275c1532","010000005dcdc81ae79ee4c9bc92cccbdb7fe6163ce2cef74461df10d64d7f55000000001f385f710e5b959d86a33b4eb46b8c68ce42069ac9aea8be5f7258d44a5db0eeefe37649ffff001d16a0c642","0100000075c9bce0467d51467b3080ae301431987f67bef80dcbc1005a82347500000000a845deee01497da052504e34d7aee6eec5c11d869fa1fc12f82726ab1fa8452d32e77649ffff001d3a8e6bb6","0100000091b311f90a51b2e82754ff93f760aef1e7b4b1e7775313f1792053ce00000000573878eab1b446f131ee4e5844ae47b6bf1a7d1228c8aa707ae96516221c590188ec7649ffff001d31537977","0100000037ed7194be2d3997f61a70c5d537a032f67291cbee8b6f8babe067af000000007f2b682d5a5167d39c0af96724321e4beb3a4d6c51cbf3ef185d0b67fe4dc94e22ee7649ffff001d0581ebf9","010000000e91cc641dabcc7b0338b81a189adf3ec780eba16388d31085d6dc2c0000000072b7d07fc6b1659a3f5171d39b51cfab914b7a1f4468ee896f110438a237fa6894ee7649ffff001db38ecc00","0100000069ab01f7a8f8262768c3441e01b177a2fd7b3925be28b327285b5ea8000000008040cdb830723f519606a58a974b779b719edd096f9aa5ec160159630f3a74b048f27649ffff001d077b43f2","01000000b518f080d8bd499638e23fd11337337da399c0124228ee84415c221000000000329dffc873b4a293e4cb922e844aef4f045d051d2464f082b41234ccea86aba760f67649ffff001dc2f2ec13","0100000083d5c4a1b4cad6a87f37aa85890363ab85c76854a452484ce188581800000000b896be5e6e1602dc1091d7e9b471ea7c3cf30a9212d5da3f500c5ce33e94b509c7f67649ffff001d19a3c7d5","01000000664a888b101a8f10f8c92448d3db41254074586ff8e6d7e00bcdccaa0000000056c89f5d90deac7fd4754a72e8a72cb04573ec4b606b2799b44620fb5e19cb99f7fa7649ffff001d02f2506d","010000004c2941ba17493402b9317cde938cc98c19d95e3a81ca328c1a426246000000001dff54a62d2a448a4edfe40f38e980e604a1fc8b533e0b41053921b3bea64a431ffc7649ffff001d728dec02","010000007b6f6ef9df69a7c00abfe9ce6f8df62f7e1b30215ab3be4202c9ef31000000003d3dd64f0e229110478870471dbb6fcb7c2259c65c0218a0c48c2bbc683375a877fd7649ffff001d005c4318","01000000edc4485328162b9861f29b3f613bb23a4d81109b3ce57033cb4c974000000000888f99444536034902be237949dc3739057d5ac0b48a1fae85723de4c58b674df5017749ffff001d2041d424","0100000014271ff3ece4e39ed507ed968530bcf1aeddd25b17b94ae3001e5e2a00000000b09c12a22a38130615cbc818b6b71053f0543c30c59b8dc60646d440773312460f067749ffff001d638dd013","01000000db0f0e794e699f94f28435045b50720ee40cc899fd810a4388cf72ca0000000068470f0b81e5419c367b6019b54f6b98e9a7c06d91096f663b357f0a162d6b7808087749ffff001d1df98280","010000007ad96f63903a8ccd9ccc55044c8763286985d54d031bf4ae997fc84a000000005e85fbad9fef5a350b3fe2c27dd779477d8519752fbbcb561f593ea26ef90807e20a7749ffff001d25dba78b","0100000061c4cb5a928934de426bb0eb5c82f39408faab8bc267a9b041e1d2de00000000be815c042c2afe9697a21dea914250e56615be92cac00d93c23d13905658e8b4190e7749ffff001d2c1193cf","010000000c3905739192f1b730d76c78b292770848e21735d887af147e74d7d9000000008f1cd5aa08af8af00069764b4528d8541dd683fcf67eccc6d754cd4ead65a8ea90117749ffff001d02cbf42c","01000000d74c795d212ea6491ad0bdee9b37015f4853f140a99652f10050e43b0000000039f1e350430d0d8e8f3b7fcf5cbf19422e258d18309e77b81db64662ea13fd692a177749ffff001d072675ba","0100000098e93dd75e3fc334d51453934fe22ed434f2768fcfe72f72813d5a3400000000e3995f90b553f3cc1b1b14c4a9e64ec477ccf1abac0ad981ea4642c2384050f1f2177749ffff001d4a381e02","0100000023f0b2eeb77162c97e74eb8bb9f12224b9fc8a95da48228fbffff910000000000df43938fa84d440cec1bf0f89644eb93bb5887ba432b0f026c356e16fc20889f21a7749ffff001d88fe0b02","010000008aa6e0c4991b5a7e2fffcde4d8b74c10afaac983065b0c00bdb543f400000000f5882c2e38d9f76b0f11ef0366fc6031ebc02a0a32c50e26519d48b526507136181c7749ffff001d15eb4229","01000000a75390898ff6bb31f69dcbc66bd4cdfe7fb3a84283aef3adcf0b725600000000919812fff5b7562241da08d4e427c20321cd5f05d189915678d952bcf86c5400cc1d7749ffff001d0967cb07","01000000a909d66d221a2add424b985ab318018bd35c8506a09ce6dbcd1333fa000000005fe347fd352749b9d0b2f7ca5d1ae83bb7255a5375ff1d6c51a27ca4e708c51889227749ffff001d15c36992","0100000021475c5716e753ce3d2bd06ac9f9887a1b3642b62f5cf16c8af2be8b0000000040e5827092c11eac39fa5cfa4385274748d1cdef300d499d44986956f3b93ca786247749ffff001d2feb0ee4","010000006f0595b9ae9a398460220bfdf7e7ff1869b1abb31e2a80425ade637c00000000bef004bfbe61d7babb00d52bb06ed7203f7399004f1c3b3b151f34fc14df3de0c1247749ffff001d32983f01","010000009f09e48e4b90ca2b99a071f0e8bbabbac65a5ecb247a8a44e90e304d00000000f0f8005d26b0a9d6720117529f8ea458b1a5c316d57e454b7df5148c4e8ee90a55297749ffff001d2289e9cc","01000000c4490608ca50355b478e322def547c7d7b138c701941b29d090682ee00000000ad3cb623cf9a04d4516d778e80bfeabf1b7edc7c89bed07731930e995f73ed97852e7749ffff001d0827459c","0100000048cd7f08ce050f48e1d185a5d75056e938fee4ae68c949e0239068be00000000aac63923ace86407fac4178374383804424adad6ad1cd1c330d1be370f101007a9307749ffff001df0e79708","01000000d31323c95d47fcdff436e737751fe1afa91001bde2c58db4b8affc5100000000425cfe88b24cd8185326a806c1c58a47da6674deb7b2fcc3d1280f28cbd6eec0fe327749ffff001d3049e89b","0100000057d3e29e4debd4cf7aab90bdf76fbbaeea2b633c18fb85a81536c5750000000092130f850394201f6b95f2135e609f93343bb45959fa8f4cab9b5a53e20d3679d6387749ffff001d273b2037","01000000aa767932c24dbee295a12e9d02b098cff1456fb55a5c04a32b68c96100000000aaffaaa8d8de665afb5152c1bf707f8359c0f7817100b3221ec3683c13fdaededf3b7749ffff001d1ab6d73e","010000002976f7c00e5f5c2201ef741b33e9d0a056f21851371854f56af4d5b1000000009568d629bc2816dd5bb678b58b76ec19c2b9eae73b36841cfb2a57d20636cbc67a3d7749ffff001d19963404","01000000d2035070fdecd0a5998b9103b27733fd6ba07950662f8577feccbc0e000000009bf228fa8711ef5b06aeeb5db81a7c85d8b97ce681c32eafa38d15f09d44ef6ced3d7749ffff001d08cb52f3","0100000032bf448c09b84f54ac1cfb23f345ff2e3ae398f12b111d4cb54255b800000000516f77f53cbaab999d412a879ce54f480ba8ef11d2e47dbc18af99551356acd3483e7749ffff001d1c057b00","010000002f6b6e37b4c31f89617c51f6e56d542cb15ad612c4e018616159f2ed00000000d311c786cea7c11aeb5c6ffb4ffdc721e0132ed79fb95e6649eb03da50ff89149c3e7749ffff001def79aa01","01000000f7ff82cd0e19e2ae58f08054aa4046204d91e543fa019dbf79c5d1a700000000ed4136f247374c05a2019ad3d943f0428236d907204f7f02032db18bfc5879d5ec417749ffff001d399133f2","01000000173fa80c37383c27171aa96e381d55da417e650389450f657a671da500000000d0b0094e3b83e1815d5a22aab0a8b66a14cc8a8083ca79b3797888b44d8065f548457749ffff001d06e66de7","010000004258f6d544a9730ad118f11ea0766b06871563ceeba0b3dac1040e8a0000000009b0315d857d70874eac1dfaf41a6194bcc631da72b9e40cc6a90699e59e8303f3477749ffff001d20acabb8","0100000067d88cabf56c211c566bc2ef8ad9b39be3634272fd9c2d281da898e600000000b21ee9a08fbf14d61c7f6f05929fc740b47244568516ca25e26f348e32fbfe009d4b7749ffff001d3927dded","010000003b4021f030b48d3a1dc91f2c3f6e3d42f39422211b5c69ba5803dd2d00000000ddc0493604591572077ed7983474a0edc0822036dcf1a6030f51a28876693ac3204f7749ffff001d35e760d0","010000003bd00a0f91044a9bea84e32ec6cd312c3337059935e4523764b1a6e90000000069621e7749d5df56a0cdeaf5e6269f579d5629d9f09b492e767e1768a32ba5fce3527749ffff001d7e5b100a","01000000c426d7d93152ede8008866013b36c2a267d484358a55789690aae5ab000000003c371b455b5ce9f070f923cb4b3a5faf7b05f4306e7ad50d98dbd0be8bd0f0c4b8547749ffff001d26bfb678","010000001ca008c26fe1a028c6c12dfa1c59460ded220867748d4687faaf30d0000000006f3ce32a35a323835873321682e57c5b0649f5571867b29a6b1ce6e31e87b3f191587749ffff001d1ca592f9","01000000e07fe53bb757799a3ca99668fbc43db4c7e70dd61914f006e857e55300000000b4ca4e7109aa22bb581c228bded8fefd6d10732699c7f64fc2cbac3b9b9e1ee8725a7749ffff001d009516e0","0100000053260ad9c331356b6773818723112719b38a47f387ff4c2d95f2e0540000000040b57701484efebf1736358f0c270ad8c68a3449d50776f4803b11b6cbd509dfd85f7749ffff001d25aeb59f","01000000224a4085239c3964d0553bf1fd86e63ae53d749f08654705b135fef6000000009a99218ab79dde0f01a2ed2a3e3af06b19dcd17f71aa6b7840a407dbdbc12ee2a7617749ffff001d34e91698","0100000071ec5e6bd5e39013c88abe63a09678d1ab8599a02ed20f9f9b4ccc5b00000000e7014655fc290386f31c0e814dcf0dc6ec3ca8c189733004f1c13aaee4c3c7646d667749ffff001d0577568e","010000000f01a989da2f370095e0bac809eb73e66aab56a2e46a145c2b1e1b6700000000b4de311f02c91e2732b80631e4e9f93c6a7be7f73ff20cfdc3307374621caec3916a7749ffff001d347d9982","01000000581c28473965dc082176698b18dccf7cbf3a8642005088e9950ec25b00000000a9346db6478f26947731cbd801e0a0a025cf6a2e28c25d7556b916bf3c22f79ed06b7749ffff001d3a71c105","0100000010a2ea9b3e8cd8b0454b5e8e30de85a9a4c8d1a25bc9e32f7435865000000000b3abca1ef08e803f222ba7fb3b5c458582825ff007d19c6fa6d9e13446da4603946e7749ffff001d746b4b0d","01000000329978034ad899fb4810fa68d6d3d1265d8ea3cdcbca59463b6b6e140000000094a432435906d1256b2cbda1a811797fccb0e7c7e7dab85883bf16628b27ee95806f7749ffff001d34b5d791","01000000066b4c89b5d097317a89c835f346ad2db06ef81493e5b2848be8408f00000000bc6580043f66095adb59fed74d413b174ed22a53aba2cc69cd1ee066d69b165ccb717749ffff001d14f80af2","01000000041642bf7bee3d1d94fae3f18f94aed41638fe070ce9135a13362f20000000008b221b345b104b9f23bbd52a0b05aa769a0c3510e6451a2e5db10f08dc10fc3322777749ffff001d24488d30","0100000019d5c57e66d3a66f4c4b5c2060119cb64e01efd53d694684670ad1ab00000000d5b7686dd19ba01ce4cc3ee4bc3645c1ed473f5eae0aca4f8677b9ccd7a3c56e76797749ffff001d9d22350b","010000008ccebe12c2c3a1068cbf283791eb738ab865682591202f2341346b3a000000006467195b9db207a6cd94dda0367aa893d1802f876703b4fcacb7e845f42974dbb4797749ffff001d37b45f8c","01000000304d4b40d28ee19d1eeb4b8c02a474484aba7fff2ad8bce18041e1e7000000004194a4aa6d2434af9aa480ae69dd50f8751080fd3fda5e638761816265da00b4647d7749ffff001d2635e923","010000003e182cb7908df136371312d4b66896aa25f17aad2e3bb6971127620e00000000d6100438ee64dc6bb26f69958d4a8ec2bbe48aa21274022a565cdec423f34adb107f7749ffff001d2d2cdd59","010000000e69329d90a92288211f92c296cddaa81c12ca54e313b370c809d0ec000000000fd76820e5dc8c662d2c811c10f2ab27ce3722013e7fb4920f6eb5d05137d58000857749ffff001d2c50eb9d","010000000ff45fcaf8f048affac0e10ad691f95f810539a8b00108062b15aa2b00000000775cb382d07994edbd9f32dd7a1b514575df7644ceabf9ef0e1fb94e45d1236e70897749ffff001d16f2edd2","01000000cf578a234f330c287354e24234ff6b86d6ab9e4ddd3e5ba71a6bcbf60000000072d12b99bdb63762bedc5db30bcffbd7903721bc736dd683de37b1a3632f90002e8c7749ffff001d29444816","01000000c1397d4a33adeeb3383803e9ac3db4b2c2c9d6737cbabc13a534d2460000000089687b66140ac9874656270e066ed7ef81d5133ada2d0133f09322a87b1617384eb87749ffff001d07cacb0e","0100000002b00072521da99060696ed696b46f88ea0fb5c678a9a78b3eed4a9a00000000cf6a01d16172ef0e1fa6699a8a44b7a7b407595ec13652e3501592d035c093dcc0cc7749ffff001d2e87955a","0100000065c37f916a28a2504d7bcd680b5f396b6d7d986f8d74e67762f409c9000000005d6129e4338dbf443978850aa498c60b60f2bf1e0399ad4d51fde21e8c9b44e0b8db7749ffff001d7556e347","010000003dd227beed1f628d5bdf952f0a1118e07a015c8fdbc33e97bbbdd3980000000079fb6145929b72ecfb989b8279c91ed39fab5576b42f513b53c5315e9cb48baf68dd7749ffff001db19a3805","010000003fce37dc513706c1aa6675dde04b6905b5692e17ad1644bc8bd49be700000000da238aeab8c9d2750a96a41760b38fd652ad6fb88411ec22405797856f45b39bcbe47749ffff001d01b3f87f","01000000ab34a952a20ac1c386706a2764ea48fb332ecca11ac9d962b712a7470000000006acf574540c016be6f6f129147812fcb00eff2b55ede3b12b4aabc7cb682003e3e77749ffff001d04f369a4","010000006154cdbc7f40c7cbb7ed2f7770ee885690ee69bf3cb36518d8d2570b0000000059a86894859b24e3d12fe1a5e7a026e9b65cdd1c0a89b89e1a8157628a6c73bec0ea7749ffff001d36721f7e","01000000205b9a75c45f9b7e464d6dbb128f657a11c2294cc4429c17b934bf4f00000000761e862f799428fcd39a1065ca84582fd8ad76e5250c1d832919ce6c0d527fac8aed7749ffff001d21ca99eb","010000002de43b1dda23498aa1f2e621e6791f5dc472e801d4066eba9f51e90500000000b27da08f50cb583071c7e4e00a04563275fe20abe89e23988485d82c3729541ed4f27749ffff001d2d913c57","010000000aba105335bea556ae312095f4f072a26a57154f8b54a15d8c72f0ff00000000d2131f25f2db2cf34eeecfe896cdf26394db0a33c714205c3869e199a0f01ff54bf77749ffff001d263b42db","010000008eb75781fc416515396cc48cda5f9a0462799c0082972a148e1c67e600000000e5aad309d9911fd8befe80937c962d4f5ee131eb9b3d371ebde957fb6a64e86c2dfb7749ffff001d2d7b107b","01000000e502d7787b81cb01326f11988905609b7e588ad73864857fe3dcacee0000000042fd07a16964a21e1e4e5b3e2e39f53417731137a8408ad5530d29d026be4eb477fd7749ffff001d2ba39b29","0100000035924d030b50e3f0f3ee1ef94b600f12ce997f6920c30b6b43cc4ef700000000b19deaeb82adad8c02b679ca252bbdeaa756d842f7547ea2a82c595e10e2e56f2d037849ffff001d27c68bd1","010000005a6e592ba9bf47543c94101f26181be626ec0c83632dd4d7e5519d37000000003f00f1859ccf4e5a3f9ff89ff102219d4915c432aba514275798ee2c5db09d5868067849ffff001d6ebf8107","01000000e74c6b4818508b05f7d6a0d9b9eb20417677c328198583a04c801a2800000000e821ca554049afd32c04c4ab0578246b29172ee5dbdd07c7aba337cf2a1f60db5d087849ffff001d15a16828","010000002d25dedc86cef4b0c3da258b2aac5b4e05b82194da67bd0e75d865af00000000ec3ce45a28c6a6a957556753445ade69fc100013439801715b2b58916a5a7ba2820c7849ffff001d13bee4a4","010000001e9e9908490f826a80f146b2b6f11f29d12fe093178f1abb3ef3bdea00000000ad2c3f9f44950afc83eaf488522a07f5b9056c09b10205fa15fcefa23d45f29fa4127849ffff001d35e44c04","01000000e7c182732f874d1712bd388c910f1267161a359273fac1db7c9428d300000000ed99a7352b8892db266f87d7c72553e84f4ba05a3fdf0c843d89849b7eaf00790e177849ffff001d331846fd","01000000b547df785701807a72533898af75d328fdb82cee6946ade1256568b100000000d6cc23eca8afa216afad800b2f20af3fcf79502e32325dbd79bb551513e0e757bb187849ffff001d2a5b93c9","0100000036081f459ceb0617c7437d673ffad27939bf3da79157b2954e1f90f100000000e5815dc75841a9d506f18fe80d9e402a23be7a679fc5a6dffbab256b2fd4d4ca4c1c7849ffff001d337fc699","010000006e2f40748cadee6c228f057ec4a09e098cb0c894443a23e243467b4a00000000eb160b10951082b2ad0b8a7779d62422a844bfacf94ded185c0e583a1d6ecc0aa2207849ffff001de9da870b","01000000e74e637546714da806b7c9497c4d2fd3a171aa9e0c52b501aff8a85f00000000a0fa7ff06abb04f537df35731e50a2ebe21cbbf79acbca1e6adca45c00df4c68d3217849ffff001d2d5cd087","010000004c97fab8af56554a2ad1776678df7480a645191edd49f78206e4855300000000df24faee1e61d47f7f651770970e5caf5815ac81f11608019431d865f96d620219247849ffff001d25ab27f5","01000000f62d645da69758e94240cc2cd3a89d95cec1bb892e1097201d93566b00000000db4f1b02438dd6ef6d00391d3998bab71e9f725d0ca8e2d186faff2be7e2ea38b1297849ffff001d284c5ca1","01000000eb1bef0d3491bd50f711d1ecea17e9f0e5ecddd15c2597179649c32400000000489378eabc1c9d403d11b6d2ac60a73dac0270d6094373ad39690d54a140984e7e2c7849ffff001d271f61b2","01000000b16d6d9b0b25f38e620de4ac766b382a7b98ab70f5eb7bf345fd818e000000000764dfefdac6537e576f394b52c355a5f0cf92efc8e96737ed4aa078b9bc8537c2317849ffff001d15196bb4","01000000778aa99b59e93a7c9f4fd68f1c9630ed9f026dc78b068d3691f4beb70000000085391184437e7019f2ef235f387743fa68943087bd454b3667a6715e06f46dff78377849ffff001d04173b79","01000000958160325d8a81d917fcabce962a6ccea4aac3d9d960fb379e72beea0000000058a33c10255764247d529a662809f4c6ff32fb9c0840bd80c6118260d661812998397849ffff001d2684d441","010000007e55e4eaa333f422f783b1f91b947026f394728235e3fe710464f508000000006ac375f217ed383b1788e94bf9e6ee8af5c0eae9a8fa11c27c42b1020b0d6a93753f7849ffff001d09887766","01000000f8bdb8c34bd45e37fd13856d40f4d527aae2807978704d1d38bf75d300000000f12e07ffd365ebb2b48f7dc641dc8754f1ab6e07dcb6a45f453919ab7ff10f71f4447849ffff001d004f3573","010000001fc8e73c4e255a3d6c0b362b66d3eab5050c8fd4c9e20b2ff3506988000000003a9af93cd3a177225eb7ccfb3d6fbf90869110013991ba51db4f5b65f2e2325a39487849ffff001d33c43970","01000000b733e593ed7a8d76117e67107f489be18782a250b5b473e21c064a2c0000000034a8ca286fc16975a4430208aca5ee4049e12efba9e28938a6139a8558f60f17644a7849ffff001d1bdd7290","01000000af2bc3422cef6950a82d957c14ef985f7c6e1cd9ca0e285d77901f1800000000c8b0aa8ab8c1b1e93677b04b14db7924f92fefba315f5aca0bc5e06124385b014a4d7849ffff001d3a0f1d14","01000000b58f17bafffd6b7c6ed16d6a98f7ccb23b5affcc73da83ccb030ce73000000005961da358dae84bba116fbb8ce1ad40343a3b700966363760c910ed271bf17a0ad517849ffff001d378de34b","01000000eeba2d25fdcc811cee7da6d14f702125729c2cf7ba6e631b0a425068000000006d59f93fb759a2d9b28d63dd7a8ada3ef6fe505513312462d1b8321197f5f328a3567849ffff001d2f7f0ec1","0100000041b1a46b0ff71d12ebdcf97d8f9be1e90615278710f0d0bb4944243d00000000ea37c9d6f15719becfc0d3d3ef6ffcd5c0f56371c64a74eeac3113fd9bcd31df58597849ffff001d0418f5ff","01000000e13ef0efa782bc6922da7445682e7b1b0afccffb09b4cb5f6e2679f100000000886f14230d82650e8880dc05cb6d8b1c5f3b2780f5d0d9a88c7af70fa6ecc706e35d7849ffff001d17fd3ece","010000000e29e78bd6d4ba23937c3031c35d29e0190b464360014f360259887a000000001acdf2a4cfdadeb1e18e52b5994d2daf1d7b4ebd9232846a7b6c6183a4470ba067617849ffff001df4cdcc0a","01000000579ef2d032fe38fb8f6bbd021ae682727193826bc1ba73d00e4a1a8400000000e782e76174911a725bdc5b11ddbc977b7470ef47caeed030519ba4a5d4ede979c8637849ffff001d2dfc4127","0100000033397ae02bf30ed11af9fe66f67f151ec17bc78875516ca28d542b5d000000004e28380dbd7c180b28b15e492a24f9623fc8c11cd1b1077531c8c4ee5d525ed40a667849ffff001d27c9f271","010000009a8f88bf2ef6c4f386af78a1c9c040d616078a84bf5459bf1ca82d6e0000000031fbd6a7489a5719778d786bf8846ffb166542e6041bab1547d9f96b2c538a065a6c7849ffff001d3088ea96","01000000ce23c42a8e23474a6442d1b73f77eb1844f26883a3e536c49f01b47300000000b4448d1952d7be438949e9d485d7e7f3354e2afda7aaa944e49efd8af742a1bde06f7849ffff001d1fdf05d5","010000006495a1869bb4d0ae27cc2ea953cf65c1976a3a2003d2098a524af48b000000007cce10a8499aa0fe055ae8050a224a8609dad04b6bd2faa7a9222168d8f3a117ea747849ffff001d2c1d33ea","010000007757c28620c15b8efede8baebbcdf6b88580b1c859075486e9e7fe6b00000000165ab0b03bf081508037c7bdeb6c2f5a4fa4bd059b6f5d1d770fe36e78db8260fb767849ffff001d294901a0","01000000d3087ffa7600e3c546bd117279a9c646368878c838c2fc357cb12c8d00000000287cd00859668dbe93930317b1d4c9b62a099cad35e53eef9f9ed02331ccd413b07a7849ffff001d0471fc2b","010000006c9c37a1ee6352dc71b049abd4185867176e9c4bab2ca523ac934032000000003e2f5826a35b5f911d532ce62bc810e1e6527dc038e95c19b0c5dba2a969e46d6f7f7849ffff001d17191ae4","01000000c4953ff96ff067d0e878eccc85daef3687e29226a72eeb7388a4887a00000000be8e1119446d4aeb7c1154ed089ab7018e46a02ba99c76381db115d2364955d72a807849ffff001d2065b902","01000000d260bd0589be61cca91e4388b357445ebd0d6ab8b0acd70ac328a7b800000000eaaf55cc6a4cfba48a244f8cc8a168da84adc3fc5b3941d76ed6ee5b4fc354112a837849ffff001d063b8698","01000000198cfe5799f34792c996a1ff9d29144f399147ae43a655430bf84076000000003e1eabdfd239c6772a3706d9af45375d79a906557e74c5656b5ec5eb48b71c2be8877849ffff001d17328ab7","01000000b1b25cd6dabf1c29670017dcd934e5cf8365a934320a6fbcfaf5d50600000000b0b2d3b84531621951dd374dcec2405072bb0a503519d577eba9fa7095d24d0b338d7849ffff001d2bfc37c8","01000000d3f6a6c60d81b7958f1e221780147718884b871d2194d4f038e861fa00000000f6ce250c86f5612528eafd3219db21f5c2a61c5c06105aa4e72ffb9a9e989bc05d917849ffff001d146fcae4","01000000ccbfb3e3c4321d62df78d99dc1ff3ca9400769978a0de983ea4dd0b700000000e05c0d86b4047e8549f19ea3f0b55993d8eba892a94d533e78fc1521fdfb65d3b3947849ffff001d2a6679e0","01000000e297d2adc4fea3cfb463b8216deea7464187592500aed33e4ee214a400000000826c361d52e6ce73daee093483e9702143e5a11716dcf211b1edca018ec48513d7997849ffff001d1d5e1ac5","01000000a4b672cdc763b2a2aab166336a1af5f77480169698fa303dd53a38b000000000720bba53e7c23867f531a05a2fdd6f850755cabc197f4472e93d39b729671481559d7849ffff001d082c59f5","010000008e7325b1838061c92f5288d44b3b4a81614de662dec2d8a29973b98700000000cd1d0aa4d378673d10286502f331e1ed477ce4c75d2530403dad61f9650f6f4d9e9f7849ffff001d1ffa4014","010000005605847cb79e854a630d6b3576e34dfc11def17c0b2d84fffb333b5f00000000649421349674feb6e246537e73c9c5cddfed04f577245adec390b38b4f0ca1d06aa37849ffff001d338bce42","01000000866c0449825fd003594dbdeb41a390f93dedebf774e6a0f607f557d500000000e83430991b0a1f852802dd2aee65157d5c0158d13fa80c000dd856522f06c86cdca37849ffff001d3d2f2802","01000000f0aaff93a23535bc01ff717ff4a4e3a3f2283ba6b13f0a5539c5fa3f00000000efd250cfb1feb549788ac64fed205468daa3ef19ba4756bb21ad44296232614f96a77849ffff001d00935ee8","01000000ee912f0ba2c5ebc20910dcf809fc38062fa1130cea0363506f7274ba000000008a131b8d36df6a6489f8f1ed0907a1d20a3b9e5c995b61f98b4ad7527ee098e24cac7849ffff001d281afdfb","01000000795f29c973d5111f793c3358d62555831f0e6d5f1eb1c55b6c09f4da00000000492e55263d9718efb0002d0f32e68f703638674c1cfcff79e40ab137b1008fab78b17849ffff001d08ae6da8","01000000abecb2255e3d2003224818889ef9e129f8f446720e9b0ae992826619000000002534fec906f0c6cea9acfb1c42532048e1e5639150d39d5efbd9996f72ba699624b57849ffff001d360d86ec","01000000c4f08627b000298cce6113be265a555cf878ce9bda401fa57071473400000000a72db155a21d5d7327d619f4eb45fd40c3f10852fa534d95a5238b635825e88476b87849ffff001d16dbe3d7","01000000d93dd3314e1fd1a7c3ba933570891f8f8a432d18e78392326ecf4dbf00000000c342c15e81d155c9a04d6b5153971f734d2d2e6733c54d15ab1c167faa0154702cbe7849ffff001d1fad5a4d","010000000980696feda929f5782fae4199e0e6346a021d929589e1ee8bf459cd000000007e72816251625c154d91723bf894853daa8fbc5d8d66b728641fcb04c518b82921c07849ffff001d1d4f1fb4","0100000038804d317d8831f9420f8bbdcb3c5ced27ef2ef19bd9ed73a816729300000000a4084953f3f87b3e31aa5f3bfb4002348076fd5356b2d5a4cbfc5587e4ec821951c27849ffff001d3406eb23","010000005024030b403a902804ddf640ce73a1426d9d975ec73abae7c783b4d00000000065ad95181f7f4699a83a6277b830ddcec05e0ceae7269038b07eb34cdd0a1bb448c77849ffff001d04fde082","010000000e1e1127126c852dfb676c06c9ab0c27abbc8ef25a8fcef9cb4d4f1700000000691ebee3c735b607e344897860ec2a87cf92f583e0a8df8a7925696b9521be1ba7c87849ffff001d06d4c2d3","0100000073fd64c0532a6408695ffc8e0e884ff377754dc96426a1a3edf6199500000000521053460e155732a491978de1561492f596dcd1e6a9a308ba63231a20ff561935cd7849ffff001d2028e7ed","010000006e878e69bc42140029afd09d8097d74bfa8d200cdad981eb006729e600000000c39b272bf53f767892fef1fbaae480fcb9d11aa1eeb9654c9c1bf2a7212cee521ecf7849ffff001d23467e8d","010000003deb1fddd8b5230204922159387aee66af7f628daced5622bf27d52f00000000e40c5c84e5f761c14d74e0779fb75f38131583c3f27a823674b5602189f513383ed17849ffff001d090d02a9","01000000f328ae1986fffbedcdba7cdfffc996bad0eccb882f6029f6d31a510100000000c4e1e4d67e69e40a26c7311899da60f89de6e165c3eedbbaef11b1dce9f5d6cfe4d27849ffff001d225517b8","01000000298ed8de6738861af71f2b6dd1da29beec4bf2fd51e93bafe90daa1e00000000448bf8a41325a22d200c29f1a692e355a9da5cda0dd6fad92bb392bef08af8ccf0d47849ffff001d15ef423c","010000006c773a084fbb5d19b66ec45c8c934fcf7475e0cf2ea88f0850066ce7000000009fbcccf237ad977a4c9c1a48c71fb3d9e156a50079c8be8f42ca03d3f82c2a01ebd67849ffff001d18c68dbf","010000003dcc9c735824356b3bb80d41edb507af2ec4056640b5c5b9a0d240c3000000007923584f7cd0e62fcc18c45c301d846f92e0ff19c9c5154ad39168b8a90d713190dc7849ffff001d162337c8","01000000a74f97dcec2fc8739937d492a8502017a2c1dfaad34b7235c30f77de000000007be9960745e7411917b7e121f061e1cb9ae286c28c2ba13d3f0a15f1d980e74e58e17849ffff001d280a982c","01000000003ea8b8e1940e49feb0607cab49f3225e041d03ac74875b1063b18f00000000d9767f694a6cb00f10444b775211c3774119a8e32bcdcd5c2a066428a0aefe2805e57849ffff001d123feb08","010000005934123befe21952ae1b4cd60c21180d4284335ca3c1cf7de44faddf00000000e90e4719e8f652797937b4b06a492d506d291f944263de562a509fe9b4597e0d08e77849ffff001d164d9add","010000004ef329e861d34da233db93afc02a266c734402b18babb71af284c958000000007edcdd2b78c0a75a13863f7e1609db7420e60bc8896e953e5779f60e7976772cd3ec7849ffff001d19065c25","010000000b852f650e9db5df285570dcf47b49f3c21dc6b2144a1ca600f7d4fc000000007d733c34cdf5d2915a722e1e0100bdd32ff96190d00f0c1442278574ac9ba23a6dee7849ffff001d384ec81d","0100000012d616ba21469b1f9d0e66d0fc972a4cec6c3f55def1776670e2c2cf00000000813804d47e92d6abcdebbea4c514b9ec0a291441dbe518d33382eda510deeac856f27849ffff001d3806d21b","01000000ac30917d6804be3fc6a391913267240992e96e606132dea48ac37cfd00000000a3a463cd5206ea0a992526286ace18d0fa92764ce5d4b88b5b26efe36162a656a5f27849ffff001d65e77e00","010000001ae515593af87a82fb23de0ae2e1b63e7ba1b9271104cbc742442b520000000026394f5531605066b7d306d945909a585b455e7f9a487031f4998b77e5507230c5f67849ffff001d240be98a","010000009fcbf6a30845b0c790a38871fc9614f0db9eb3a0bf74544624638e7600000000a45ae59944ce57a9cc57a0fc700152bad761edb6f65dfd7532230c60b17e825f19f77849ffff001d087ff500","01000000207b8c50b4c523ab68de3216fc389ed0a4d36d9edc2074dc5a44930c00000000370ac65d25ca4864aa2ef40e6f7c00033a9037cb2a79adfc56072c365f234572e8f97849ffff001d25aac22b","010000003f112163e4c9249a2215c01698547ffc3ff2dc1c1147b1f7d70acf070000000095cf01d2567c68c9a994d4093032b3c985ca3fa633a1305da979970039f9cfbac4fd7849ffff001d292e0740","0100000055850558b578709d8986f6b7c08868c1bd9d72e27d2c8587156444770000000054bc06e24e3f30f169cfbe055189a5e8c799f4b7dc435398b2d529fb80025ba585ff7849ffff001d220f687c","010000000c3c37ffd23f049c392d68386f5d5ecf75e533485b1abee14133527f00000000b8564bc8451ce7ac6312c635230f4bb40aa0b325dfe26206249c638f9a77cce1e4017949ffff001d321205d5","01000000ac4958c4ccd95c5a240cdcaa42b5c530e68d1ed78e09455a25a3ce3d00000000ca40d89454fa4eb72d1716425a3d5038fa58c3cdefff9a63f383ba6c05bc940c07037949ffff001d992c0a04","010000004280d4d2da63d81547c090e076736bb6bd6269330de9b1bf7eef5cef00000000b644b755408e6977df94670e63ccabdb2a27fb40dba004b135d9fdc5d69ee07e6d057949ffff001d026e8a83","01000000f0dde9d300716238bf1408a94a992c1620e9989b632e6a0df0c62ae80000000004ef8924162e619f476b19122f10d3aeadbeeaa10bbc7d6cc5030fea71d590c387057949ffff001de3815900","010000007a80e409b84474ba6ef2b4baa0d9c25f9cd0d1b54307cc7f0554f9200000000057e42cd173a31bbd5bd37952f96870670f817686fdc9c5ebfb1321681736009744087949ffff001d32574aa2","0100000075be9df6d865f7ad5ec17d7e0278b1ed0dfeb49f004a51ce0d0999ad0000000006b8045b63639307b16af96c7e00a3b3ffca2c5d4c64f66613ab081579dcdeeb020a7949ffff001da3854108","0100000024c75632620de4a837bfe613c5308d19a88686bd33d928a942ac270f00000000e84988f7c55b949b053cb58c18abeb743d96b658e0d9492f93cda186c1752515b51c7949ffff001d4c35ee28","0100000065ae7f8de9f507827ae4c5a80e83ca084eb9ab104ae1afd12ec05ef60000000095ec9ac8f05a22e7148572fb17657816997296279f9d85ed17d59116456aabb1543e7949ffff001d3630ff16","010000005c0a9a56605e4566669d13c1cf2a0c937202d32e16afb42af6619a6a00000000b7a97dfa798e640555f6c9d8876b67014c76366a4c674b733898eaade51354cce3727949ffff001d2cd0a7ca","010000005d0fcef3d8f77b08a76b9764f6bc6e13a7518bee2663f34cce1b43dd000000009fc490a0b08544498a34ba6b531fd94e7cb251bb8eff6f5026f32089e80b9b6653767949ffff001d7797d205","010000000466137e589b071cefd6051596ebb1967d8bece4ea7b327d1397beff0000000041af5eccc18abf10c52a32e733e9e11c0185d34d5d3173262233289f37bfe938377a7949ffff001dc2928112","01000000a575f9ff2bb00ab934df0ba9f1627ca0b830e058f4660245bff1722900000000b5546bd4fa257dbbefe2dda26f4ddc97f0faa6e590f2fb4c6e805c106ff48599fc7d7949ffff001d4a271712","0100000062b405a7904969edc9b53d3db43d5a925a1c34da1f8b84446b33b5e500000000e4d3bdf7fd1ba0c7c8293ef9bda1a7ad164c6e9c471cfd101785a955ce1c0d434f8f7949ffff001daab76e1a","010000009e318b699ee42f2498ae6efc2686ca0e3266b8980b4630a9fb04b7de000000004102d61015428a214e90acf0f3a40766728dfa40298e030b689d9b2c87fd0a2187a17949ffff001d62355c4f","01000000d74b4bdba721093482c3f1e92c3a293784f6fd240afda77ef8c48dd4000000009644ca95fb229a4b575cda2af15ffc97047c0464c7b68d08988322c24a70653477a47949ffff001decb4040b","010000007e87a74af1a85a80451e763eb6f062d4c4fc63767ca17318fe163c61000000007328e408b704214b3449d169d04f5b7594d2055b305ff5bae5d491ca211cecfb9ba57949ffff001df93d3904","01000000083c63fdd17c31e9522eed1b4a6da5bb28b0c57ba4e39e47a00c05e7000000000cf4577bf352d27c9bf0828778872850861fd99f423097a1ad22f040c0ad3dbd18d77949ffff001df41e74b9","01000000ebceeda5ab770316b375ec3c9aed2d455f62b9b2b685470d7921dfa800000000920bbaa400d67d9a4c486069d0d15db8e0203dc8460af7f51ad0b8b29daedebaa8de7949ffff001d50ab931d","01000000f5880bc288da7e558e04dd4e54deee612aedea7de15348106c45ae14000000009f9975a11be2a035722418e684702ff52a54aee597ff27ccbd24bb256f2e68cb51e97949ffff001d37fac241","01000000f2d8b5f51d31e988f024b6690872012a21bcddea5b2260b72b8dc2c90000000092b4e7920b3398155bd6782afa967cee941d2000b48d3c0a9c42b37e539e2ecfe2e97949ffff001d0282d7e0","010000007560d9a257d2c545b29823141794e4d288570ca77ce77d992c85a7c700000000c7a92397114be6019e0ad218c18483852d6ebb7f63c9d98173f0d93ad71bea4845eb7949ffff001d373719cb","010000005ff4f05452a14bd2a0a4c5fb7d5d499bbd1c54b426dbfcb6a86ce05500000000619ff203a9a7e9eb7bb6c1ad69764292d417c939fb40973ad41d783236cd37f98dec7949ffff001d39d7f32b","010000007184e4e2873acbc78e7dcf6568c6124744f2d3bc54640fca76002b5e0000000074dcf4ac0c6ebdfa4f23e5b41bbee29fa5dab54c506f0ada2ff77509e7b35a4694f07949ffff001d03f16235","01000000abd24f2221e0b6d4b0404defc1766b2bf8aa335c005035a822f95f8700000000f22c63ef58020b6106010b0c78a3f8619e6024e2158b9c32ae69734a17e5bbead6f07949ffff001d1a9d5c19","01000000097933c5e7cf737a56c01ff9f5e23270b0d16dc3594289e8a5fa72440000000050e82c2e5a3195da8f2354bf47a61105ea31a9138dbe9a00dfae718a49143ce9eaf27949ffff001d1b8d403b","010000007c7c3b55af10f5cf72c4ee3a090ef782dba9398d567dbd56112fb1ae00000000da1fd42cae2b314505a8967c90a8f2ffb878242496d572b31c1eeb67ed9807d40bf37949ffff001d23a35d76","010000003935d05bf9402e0091843b3ce1342aa3a6c675517a26687d0a79622f00000000d7015add3cf8a58798f92319a9947c5c47313374ad4bf3cb5756ace736a45f9101f47949ffff001d2da57804","01000000b09af2d0353fe754c065b0cd5b3edf067a1809362c99c39fa574655c000000006b44ae79a753bbe3807293e6f22c1db1767f230938844997ffd153295717c5d2e3f47949ffff001d8f028e00","01000000cf57bf634022ee82fc6efab63dac370d470d7d40890d6eb9226c644b00000000a24dd6e686f480d80c263a21a8e5f93b1f62f5ba0c7ecc328201e07f154c1faa03f67949ffff001d35469b19","010000000c84384f6b1ff6582970fbf732b3c58a8334c00cea6cc38639a3072600000000fe963362a95aa94d1e0b50de6f559541f31d7243584ebda0433d6023960e913f24f67949ffff001d142e99b4","0100000082dc944ac5ccaef2d3e7747f901053947cd3e4229787290d655c448a000000001e3b69c90e59e945bb23e37461abdfc0c2104e805c651b8faf76d4f83b3f96a235fa7949ffff001d5d826c13","01000000aef17c35a2453458ef5138622ca0150d609afd99fdc3cc014512659300000000b052a2eb6810bb4ba79262af8f9b65a6e9a4c1cbf873cb5b1e3c9a93fd7bfa1255fb7949ffff001d0053a7b1","0100000013b1afad979c137bdb84e4f1ac0b727d9b9d07ab2d772274fbee7a6f0000000059b273a6e8113ca2123a449b2f61d05c4a0d8ed532b29d9edb5ad32a472b17b3f1fb7949ffff001d1ee68b47","0100000065b83a3ea127d36b1c400b1ed14a523736e79e53606ce948db62614d000000009485e9b0e080a052342b124bc998cabf6dbc571a7af921ce263207f064e7a5e059fd7949ffff001d029fea3a","010000002861cefffeb1a3c4cf5d2bc4daf086f6a632eeec222870cf3b0e47e9000000006deb06edb5d25eaea6a0ddf448ab1318da97972f402352a389d83603f7be7013a9007a49ffff001d21fe51ed","01000000b316787aa35ae1d7a282c15972d3f5ccea67ad752941b97787d65ba500000000387620e7d54fb28d41eb430bc185711f889882aab97d4a79959a857187952f551c017a49ffff001d9973c200","01000000e0271c03d60ab1df1b2f66b74e5eb7807e44a8307454605bab5541bc0000000075af513734975ea66e40ea7fa298ab20d161204a20804b5c2ca55f703504a4c66b027a49ffff001d1d619d70","01000000ba279f433893392adbe9f24b7c8f75125fbd347f95203c807dd2e00300000000e14f0eabbd2064fdc948d1278aca778e122ea3467f5acd3bc22d9315ac0e665ea2027a49ffff001d2f51e005","010000001efd3fc3140aea35039b33218a4ebd938bdd4c844c26d0ca2ce087c900000000066eb963a7aa40c6d83c5748825196907ba00da87f62401065a14395af2fb5c555047a49ffff001d34573bf8","010000005b8eeb7292fe193aaee6c4febc4d14c4ffa45f326d846fa14b5a0b070000000023c606607971a633e6ed00b09f0dd96139dbd230d0eda70fd38622b003955a9787067a49ffff001d3a4b148f","010000006414afc98f48bd11092430289b5dd8d8d83a419aefb1f218740d78cf00000000214b4b138007041ce0985a08140fa9ea63d2a5ed31945a7d21c70ed4f10eee3538077a49ffff001d1673b1dc","0100000040cdb23b27c59c4ccdf9c34cf79aa7a19ac840bd6660b91d882bad7d00000000b28dbe89827ea1c22f70d1dedb959cc18a2bba648f074f35c21b6735b629f8f815097a49ffff001d1d3e12a3","010000006bdbad4e5746b7e288a966ce72828ff63aee25925293c8ff0aa8d24200000000f9d1604d7758537f701f63f0345e617503380249225cc3365f7e338fd1a4aa28260b7a49ffff001d017b410f","01000000a78f2cd4bd3b97b62de12e695d8da6566001e0e98354711c298defee000000003c2c4a5004826bbc82f228a950668484154349dc0746ab094ea421b68978a2781c0c7a49ffff001d36584402","01000000594a0e3c57bd35d0cc88659d2881ad15c134cdf0ffc186bc7b62a33800000000a76ea8505f3ecf3e30a5afa13fbef39a1053ab0dd616f7172411fc1825196d4ba10c7a49ffff001d17f41838","01000000585b951bd632af9530ebc625b9aa398323c1c22b6fbd56014eda86f40000000018471f44308928be5a7e456ed041c55b44a9cf0cd4d4abdc42ddaf4c582d7e32600f7a49ffff001d29da6ea3","010000007ab5b30cd3bd9b535764729a7a9a67ef560cfac274e92b2b6773741400000000a18e02cedad67fc845b8229ef89d75475324e9babde0ab47c55c74748315602ccc107a49ffff001d336fe6ae","01000000033420ac61b4f8d108696f996d90cad56705885b62ffff3f1d00430900000000123951757236de86982e38233f9efcd73da5a7c147a938ac5491fa5cb6c63baab3117a49ffff001d38ef01b8","010000000ae47a11a18d19068e83672c47c12892e896144d9c8cdf62888ef2ed0000000075ec8816c4dee200864403e7955c84ddfb3023f9dc14da98f71b5ab2dde725b722167a49ffff001d2ffc93fe","01000000497ec6696b198c07c1fc2bfb19b506c460b0ed1279159b826d60090000000000f25d20253687ba023bb60ca0de8250e0b8a398d51c26b58dbbca935a9a4c099ff3167a49ffff001d141fdb2b","010000005d56d14fd47d4cff42088afda1b05f84be88e18b624ed6662861740f000000001f7398d55f5eb9a4da70da7c505bd73aa6784876f24371121aa59d9fc3e09d12de197a49ffff001d2e5599e9","01000000b864b49881d2c35f87d370449eb85c39f796f3fba4bcbbbe591e586700000000dc13cd6e4fc67c73332f238e8358bf1a41699964b6bb0e81e501e1eeacfd71f7621b7a49ffff001d1cb6250f","0100000034af4a371818e084823f10663c6bfd81f1e26f49702192b4ad77c27200000000b531f944607457c781627218bac7f289ebc43c0829a2bdb5bff8fa28409ef6ba761d7a49ffff001d18609f39","010000000c19930b92bea74f1fa7e9738148568cfde6e8671dd3308a75330857000000003554fe00db10f0b4b4fa9f4502577da495ba532cfbd721872ce9ffb1e6f6fd3dc01f7a49ffff001d241c82f7","01000000546617e0358ad5dd0193a7392bb3c8b800af56add86606d45a090dd900000000359ac7e38f9a0ea25256c5393a3932d95dafaf808e6b28a49e89cefbc145b43d07237a49ffff001d223b889b","01000000a8b15c4f96f1005395ac0e8cdfe3c5460e2f3aa6a98c536ca5edbdc6000000004315a51b88b90c1695bc8ec8d85a309fbdfbd3b12489502e7ee82e1e50c178113c237a49ffff001d1f29aebc","01000000bc1f753434d0f5265fdebb5494f1c424c8cfd0442b69397bd96c348f0000000001e0108ca4c807cf9ad2565b481d84f37ab048d86642e8374715658b3a3b19e7d9247a49ffff001d27e1b911","01000000ef547ed0efec5122f7ec4bc7a57fb61adc40bf0f939eb760292c260e00000000f9e30bf9015aad78197540867b1742582cde054230e877999e3b9f20a8d3c2da4e257a49ffff001d17150e45","01000000591f70346df6011e2178cb7ec9c2274d0da318c4a00b4c9af95570a300000000994952880c671d2cbadae26fb4fe32c9faf051a51f925d06a4bc4c4f8b95dc963d277a49ffff001d43f4e804","01000000592dc10d420b6fbbb836822192d0d1748ea24ce136a0e746a5cb67ad00000000b13b5522e996921b9392d194b639ac6016bfbd9bdd73e62e28a937263764c70190297a49ffff001d174b6f1c","010000008b5c9f93fe32b0e171d8d1bc21c87db5d65ed035e73a62bead0ea49e0000000039f7f95db59e3ac114378f9f2e3f18ae6a133dc4f838d400cc4a05bca8af7151ee297a49ffff001d25d64d83","0100000048e599d6f580c6c05d07d7b367a7d28096ac8848a058906c38e455cc0000000002824fa8f244b47f17fec270adba7e63c201ea78ca61d3456b7f2151074c94b1612b7a49ffff001d1c89779f","010000004bc4aa73fa562e6ad98ab8d04a26efd2ff3610b43a09c882e8bb044500000000a5af9e05f53a9f9e9b70adc702820e45cdfc3b23d6f2d36814b6ba44584b241e462d7a49ffff001d2c166b64","0100000036104c9530ed0ab66bbf72e1f8dbb408b6efb003ed424334bc085d570000000091724901db7c0677ac43be57d10d6f965b5ac516c876db5f097a00fe82204074ac2d7a49ffff001d15bdc5b3","010000004a1061d414931ae33d0edfab4a12bdd04c252af44cdae5721c448b3c0000000082bdcd5364abbb565f5db88cbb3eb5e018b278e8b2b06ff01020f08d4a2280ab09317a49ffff001d0077a945","01000000941ae3bfc570b4532cb4f3bca45c312d6f27c3c048d8f76bbcb0400a000000007f2c3b4b759f324863554c784def950ad77e29c3cfe50bf34748e514be61126ff9337a49ffff001d1c072bac","010000000780b119800cb56c3d4a92348e1c09d33a0acca49822c0fe7d173566000000006053976b80d5e7790b655c663a8a4fbb9ef0b65e75e4da70dda7ab204f120d5598357a49ffff001d28ce686f","010000007447f538d076648094d6bacae3b4961bbf90be705a3cc52df9ee68a900000000b95124b6fe3c84f6a8744831de8505d1c8e24613e37887ce6f7211c38dd95d9a0c377a49ffff001d2bc2591e","01000000f8f6c3c6543ea7adf59e3caf39344d814a45b9a09b6709ee01dea10a00000000e7bd4656a02f4726a79204deec9989d68b20dcb2da77816fcc4a6c7e48aa91f268387a49ffff001d16b6970f","01000000d909d758214c10fc2ba33554c216d8c249de671588f744ca2ff577300000000001c1277d1f8b477952975417afef71ae64688803012d3e072092f50f12f33daaaf3b7a49ffff001d00ca86e0","01000000aa69a4fd2f787e8502ad3deaab0439ea51988044d28758f6bf776ec80000000049139f5698542075f965ea4251aa51980dfde5649d0cb9dd8379e415844b9c97d63d7a49ffff001d33129fdf","010000000aace93d928813abfc9e6e6c15deb93b12d9269f205d2bed82362f6f000000008bd55385d3b7335ae7d79784d501137299aa2f6d402b9186c2ab76c46a0b70ae383e7a49ffff001d3a0b69ef","01000000d0b23c82236aabf1741b01c3e6b3d9bf1f4d1302c0890e7fc403dcf900000000984904d08dfee0587185ab3d67060c177fdd50d0510ff6c1888dca059a3dd6c071407a49ffff001d3455bba3","0100000018fb0ee25d52e4c46f414a02e11815236e2b0098714fd3d7c0eadb12000000002e199b3f25b288a944498d3b5b934e6b3710f3e443024f85c65b1365773ce1a104427a49ffff001d099a9be0","010000005a0e4ebd22c104f60052e6ce3328f2e8075d608fcb2b6fa91ccc5cdc0000000078c12c19436460524a589ccc425e06cb156beb95ed1875fe191299f2f22fa5d9a3437a49ffff001d2b0cedd7","010000008459e4fe47268f6d41417ae0573fb00d4f5db6b60e3de75b5f7f1d3e00000000822f8dcee9eb4e1cb238edf0f7850d6350de55fb9e437d9322b5c1f27974c937a3457a49ffff001d238d1c58","01000000b5aa830d02580b6bebec9cf7684421595fd2d9162f487868c153b6c10000000031edfa2085ebdf7c8a056862976e37b0bc95bad8c1b6b66f02e014a9e6e9e3bf54467a49ffff001d25b433a4","01000000193f073f98ea7d8fe2d83b399e192820cd213626abe89a0e2b3e0dd500000000d2805d503b7fff22bf59c54fc455f13dfe029fbbfd33f4b87144ff3ff728163609497a49ffff001d00cbab05","01000000c3d97b7f0bf8110a7441881ee04f217e65b410aa353ef5e4bd86dcb40000000032fa7941877750b99923a6021d47c5d3f4cc6c024fcabea639ccb767534380d54d4a7a49ffff001d007da24a","010000004a52d9c3b27c93523e2ebe09bff962cc372ab6e1eafc5806ce6cd160000000002b7e0d2f5236c4ab6a0880eb10bb60f3b1486be4114daf13a74a9bbda18d5c29fc4c7a49ffff001d19e63d9c","01000000d148bd8121e4470d2a57313bc03aa733734492ba6d74acd7df7960cf00000000a16a3d7fc85122c82bc461c85e228df5913c90f7b04d64fdc9ab51ec3a75d588864e7a49ffff001d354247c6","010000009a5b5745642e86da417694d6b1d429e182474b55cf9955a6475a1187000000000aa605f51eaafbd862e4a06a4c471d92f698881fff81cf53d288e5e82432883aa94f7a49ffff001d2be937f3","010000008d1b9066eb786e8ca25ceefcf25d82679cf10772b5ab68c0913c241500000000a78b6b3232734320e6dfced83530abe1874a7847a1656cad4f6690068b79bcb325517a49ffff001d28ca70ba","01000000f8739e80b975cb8922a5c22c0786678f8d83bbff628884deb0528cce00000000ff06ec40ea718f7a431cc9163ae309f9e093f9dd10134a0e07d0c6937c7d2dc741527a49ffff001d26b867f1","01000000e4ea4dc0b43f17e903daa706651a84faf547c1bb8c3b5dc8616111b70000000002ecd41694327609bd6e22fc74500a6a9286e204778486779bf3f95a35d77180ba537a49ffff001d1e65a852","010000004f21f2050379b332b964060c2395036a8c4fa76aa7aa132d7ce73b2a00000000ba0675dd5c31b163f92e390f994c8f09a759cffffe18f26564e3c77dc32efb603b547a49ffff001d2a73eec2","0100000059ff8a4ae351ba3afaef098babdb31960feb8bffddd63241426201b500000000fc3aeb1bc7c6dc2fb9bfad72185c617c03745bdedaffc6991936cd8df60ae524f9577a49ffff001d3a632a61","010000001f619296d97b61bf80e0a0f59466187defd4faab44144c7e64219c3800000000a585615cbdff19ca868f3dbc7308119f8b7c17a58f69aa82c67ed72f61f3febe2d597a49ffff001d18ecb1fb","01000000c1fe9cc23d035055b47b3ab78c61550166a32652cd368cf44fc55b27000000006e3973b0977c3c04b45e6fbcbf73fed5b539b56125aa14dfbf5a931ee85d1e56da597a49ffff001d1635b5fc","01000000093eeab544c2f4e277a2a55a2cc33359ce14cb0cde60554409b007220000000064b1a1d6c6c20859be6b96d945ebf2c2d1a0277a525487aa5a1d270a26b1f09f545c7a49ffff001d44bf4706","010000008b72f3040b1d2bde881d12233310ad8b3d56c64eb7338054685ce93300000000362e46a009acf956b2afe48f48edbbab535a7b79e3536dc589e1f5eb83ab1664665c7a49ffff001d340c5633","010000003df04b967ab71a249fced3ffa582ba185d73b18ef802d874694f4746000000000c3a9ae69ab1faf7bb27527d7862b0715690e5be048833db593d648fc5888079045e7a49ffff001d073a7c5b","01000000cb769bc8b18776718feb0ac9da7e6de994cd346a9b00042727bd955600000000755b6d79d4977d0ea3593ec56b8b381a3281c9704b62858033f26e10d871c5ccc2607a49ffff001d2431b388","0100000070b6a00682b780ca5d829d62d1aa3aefa3ae824a3c483279adef05a100000000f894659003ad0a0ae94117c59030df9adfc1cbce2dfa4a1d9b5779acb7de7c8a85627a49ffff001d223e9b44","010000005d0cdb2d40201b0f3570a1e18fe3b1deaafa87ebefebb69cc34e5310000000008921bddcbe16e78258e5d52cc05b9deb9c87d4f91bc1b0e5839683802b923297b1647a49ffff001d00b4ea20","01000000046eb16b5ce9ac4fda6260279881d0ca038ea7888de90868d0872c770000000066c634d662692c170a8f78609b62e61909540ad6fea1dee4c2430a78031f3d6a4b667a49ffff001d34fb77b8","0100000002ef1d419fcc847b0e8de44fabf8c9382f6ced9e5c9f24298df17a1400000000c237585890a894bec00e1f90baad317ad2c2d17978676cc4aeff6510c76116493a677a49ffff001d29f509ad","010000000c32f4c5f10d53eb9ad7ee8a6c823001aacff5d92b0e23beeb14ccfc000000005ef92448b56d9949a27b34dc06ee5ad8e0134b4f7dc3d48d3458a2a634abed695f697a49ffff001d3cd27605","01000000f521e0b38b703c915ef12e47d0eaadadcbcc955d09bba2e966a3f0cc00000000597cb05f3c4a54cc66a69e7e5a2af7922a9529db1c13417d9d75d633093c00aeb6697a49ffff001d15b9a3e9","0100000047570d09f918a79acfbcf8b8fa70a5c2b4265082e57bd577b8a20f9d0000000091dc66054bf87c3ebaaa8464687e10356898113d0dca91b99197a28f7a0d028cfe697a49ffff001d2f19530b","01000000d5342060f1e5901d51648227dcdc0966d9454c5e49290ff9bfd1a40000000000a90d0503e1fa1dadcd6660700e84c6c03618e4678c836c48a36cafa452e2702cbb6e7a49ffff001d0646e727","0100000000834f5e83722c3982c2d371fedf0578847c8b98c95eef8ce44715fa00000000a5d8a6a23fc6095d6ebe022d819ab079b052f95a2a45eaf01168f9e7b0ce30bfdd6e7a49ffff001d365c1185","01000000c244b7cf696fd831bf7207935835537e581e5726b119a8fac1c7fa94000000004b0dadef3eb0cd07b867f66ef996d01e91fa8b8028d383381512442d20ab081c87727a49ffff001d2de0c36c","010000003ff1dc7ca3e4b0860ce51f91b8f8ec710a250b390f5f450c7e6e026800000000d8c3847b58cd2f007c0396a1b360a318033bd31a49b2d9e3ecab6922551c47ec17737a49ffff001d1c7913d8","01000000843724a9517b7ed43e468c01d6ef69113b0ea401b3cfcdc3001fe32800000000e947f62d9cb86abac65d4023f9adde080b201a4a395e9174e631b2a8c817f59a81747a49ffff001d23a47403","01000000bea5e6482fb290b5158a4907cba2406744d60bbf371bca0cc546eb6000000000b747e6559b4846f3991cfe1351637abe1d461dd3909d4de166659ef1ddc0b171e4747a49ffff001d180ef001","010000007fa4635a4909a9fcec6ffd66f9aa4c8a96a2afbe5616b15db490ee670000000003b520b39dbcda210fd2db44ff5e1eb322c6e9cf4cdc641e1ad0ca12dfd853eff8757a49ffff001d2eb72497","01000000250e496b1a09f3b2460afc70a47e8bd8c47058bc867086e64e85714e00000000de23634df6e0259406062e3d995ff7892c371f4d6a979e551e8d71c7238e20b624767a49ffff001d2053db68","0100000026fd5f7a879de9c955828a29f11e197c39d35e19fcfa1155c15d1f6b000000003851cecee5a462ac2c1cc7050f8a4f84b3af429299c9ffca7b77122d87139fcffb787a49ffff001d26ebd4ac","0100000021c8c3856e4046925a370f051dc4315d54dd541e23ce5c3c5dd2481d000000006d8c69a135b4f1ba54b64f651c7ca80bdb8fdfa91f2f190bf1c6c2b44b1a02a65c7b7a49ffff001d16121f33","01000000dc4a5bc66cab2ca785e80ba6f53a25fcf521ec1791b661d9dd25f5b700000000761a8b904786f34112ae3c4f1cfddce2fc1d8ae1838f80d9b815534ff9d1245c587c7a49ffff001d287956e1","0100000068739982c95594019db8d9a6e40b9521b6dfb1ffafc7261cbdc690250000000059a134d7799ecfc55ca880af8e98e748b058e860d2f1e8eb41d10b5d7e7e6a690f7f7a49ffff001d33d079a1","0100000078262b818f3162ab41ecae47e7b99d9916de74a1e7acead156bca7c3000000008d3edf68c952097e9a24cffbff9a865e3ed86ccdd9ef1aea87a64efe21f9b0f718817a49ffff001d38b7676a","010000000986f8f4badc538b22288328199aef65158847f793834b19becb4cde00000000d9c68940fc0b2257150f535c2d387e4551a3d21b5e43bc63b855475b3a9fe050d9817a49ffff001d2e2b7d8c","01000000a7e00c2146f4d1f94ddd03dc19b2a84651f261174a19caf406cd1d4c000000003ee97a1525d7b274129c6b00abb85a852d825e2162c95a1d174d968ca94d8cfbda847a49ffff001d1cb1a820","0100000050ad4b0d3dbd7f368720bb7d58d9d100dba0a64d8072030d36671bac0000000077059d61825865af4f21a78e8b2c7da03372dfe737735e5bbaaf229c0ef5dac362877a49ffff001d2fe4972d","01000000218d0012f4f148b052785713a5c7b687acd1d95bbfcbd2dc4062652a00000000189a13746d2e0b7c4f80f8f6640ba03e93bbf8ed1ede9d9fa1e984e4ca1f9833d4887a49ffff001d2e35945d","0100000078c2dffb431aba09bb67cd65b437f0d21af993cd741f6165e3cb200a00000000776cfd5b4c11396f1366b4eb9fd75dd9ff21a36d9ad2174c368829c32a2cac4f418b7a49ffff001d20abcb96","010000005c8582943bae07092edc6b0ad628e5c7bf2ca14e3110a3c2098d996700000000e35a1c5904e03955af4b59265c6f7e9ebb5a7f3c9a70ef534e5009f0363f771cc38c7a49ffff001d34716bea","010000001340bd94b5153ba7e5e9b692b59573843e476cd9b97b5b951a68077d00000000edf2fee22f803a01bfef2f2f6b4ffefb05772e7030b7fdecbd0e25923d561326ff8c7a49ffff001d358a40f8","0100000037866e14a43d83031550147cd771e7d8074999b6270074c47ed3f75400000000c4e3ccd9f6c56a0a1324796be2036f7f022c4e13597c4dd136ef28fd0e9d2d7d2a917a49ffff001d2c97bd52","0100000050f086612695791a44eda5d58f107ec6600e6659d0468a1b7876d7b60000000059902a815bd72e3bde680da4c3b019054b28b932cf5f7c80c2f03d7aad020773bb917a49ffff001d23ae33f8","010000006f70625e3e7635571e39af59d93c0cbaef0c5591b4efe3679cb5deb000000000d8abe60f087ae6cf4a9d4c7bad1a4b07ac5c63e5419e7b50e1975663b8af8a4f39967a49ffff001d3a24b59f","01000000eef25e8c617a8e10d09ba118908a0dc152a564f70f710d8543b246f00000000051f390dddaea88f8c83064543eb811d9cbc7f9781392cd13fe283a4854016cc76a967a49ffff001d14b976ac","01000000c2ab524ad471f7426b3492cee38ad56485839a0cc2e96fbdf1987a4700000000e43af2158032781fef8f7d295d6a49f03d324de85b6cf5e237300bb4328ec8e426987a49ffff001d2c730697","01000000f4da36a540e0530684b76e9248d5355830d28c85b1429a890e28219b00000000995beb0832879f23da8d1c1ab1d5adde6bfec330c86e626f10383eaa270fda49e8987a49ffff001d80410501","0100000066d1c17937b24e0864beb516aac3f30abc04ff0b1e6206d5ccc81a7e000000009e5acb0c0e9b9f53576b25a17b19d20c888509bddc63accb864e8da538081671a1997a49ffff001d1f357d5a","010000006c4b52f54c16eb8be6a7129399236e046b7f48a2063c60ffe291fbbd00000000b6736689320648c9c83cf561189bacd550225e70ad3080928d43e1cb2a536f02189b7a49ffff001d36494597","01000000eaf20ce5c4ab5897f4aa0f439f3d12075a6da95ba7f46a396455f67c00000000063d0536c357ec87110fa711df43453360bbd579ca86929c9c08132573a44ece939e7a49ffff001d3133f5c9","010000000603c5b20a915ef83a9b7352727cd2d3301f79c2438440e41976c83500000000d095d679129e07ab8aa282983bdb5ea7917bcbf71f351a7acb6bd39969119df20e9f7a49ffff001d39d74da3","010000007392f182507754360bc40538d33a18408ed965faa4c1128d932ca8a40000000076fe1a103544879a843a7c45e780c836d8c28c7c900126fad0b32494528421965da07a49ffff001d06e31122","0100000035c5226f0be2e839c84a004e5ea7ba512cf69c834b1d24e11cdde2de00000000a01a12843b7fb1d500254e54ec429dff5d78b10a3ce1442e5b6235f7a6b237e2dea07a49ffff001d128f6401","01000000fa316af59a68cefebb9f93c9da45e4ba59727860777813e8deff66fa00000000fd435a1f51b3e906672d3cae7ad4e66a22c79bf6868f774f6032060f91cd740981a17a49ffff001da816c702","01000000eb485f22a43f35ecb001df865300bb646011f4401b8b6ea3d7eb05fe000000002c20359f0c585392926b867e96b6ad0407bed9cb0578486c31652dbbede60fd4e3a27a49ffff001d28b50ff8","010000000802854f0421e2d7c22547122a505a3ff39c63a52b3d273f13a1f5ac00000000251b7e8bb1f10b81d124b689adb76fffecd59c3de453ae6e3583bf90b9b22273e2a47a49ffff001d056f67a2","01000000fa6dcf0a5b44e318b785a6eba406b3bbc1939f609945a2fd71c797f8000000009c7219a53a5e943b206657bffaf1b1f736c7e974c894850f91ed2d712d4b4967eaa57a49ffff001d362f871c","01000000194e43102090f157b33e83fb8e62bf7b3aad2298d4caa9df62677bf200000000abd01f031a8be7273272b29a74ce0c8015daf79e66e5a64a3ec1c8ca33a5eb2b36aa7a49ffff001d144f59e9","01000000a6be22c9850717871e91caf95c8daa7f1b5cd8d424ca16b62f55af5200000000475f125cc71659dff8f9f14799f42ca045f5807a1008a7016d9cd0b682261134e1aa7a49ffff001d37f2b7e7","0100000007ec1cf5a292608d1dc93fa5ca3a0477f83f1da21529c0b69c3abbc00000000029c5d7177ee10756c8c684b188a6010055bd840b91c8151b61c76ddb36b061a240ab7a49ffff001d67600901","01000000e943cd6cefebe2004c812497c5d3b8703712e2e3a7437b391bbbd57f00000000bd869bb6beae5e9d5c72770649a2ebc625988f16e3832226eb92908dbcb28eb0cbab7a49ffff001dc2918702","010000009eaa9bf99f5572236b359fe27476b8edb2d9f2143fae470e3e555c160000000067efeaf50edf66e675cd3584ee66cfedb4da55707880bcc218df55f0994ca48af2ab7a49ffff001dfd875b00","010000003f6d9fb876e5be2cf388fb0e83c31fa485b480ce848856734ac1a5b50000000064c9e52d2a41bff180c6292647731bb533eec37db8622710bfa7fd48a2101248d4ad7a49ffff001d03ec61d8","01000000bd661c46fa4df3fb29d0c7ba0ac8e80cfab7a414a03a3f7f871f10690000000075eb8bc1d8953db8c03cf871a3899c5ed6707f1848bed00b760f650f73842a68eaaf7a49ffff001d2720bef2","01000000afe4f3efeb0dd32ea82a9ffc05dfa0630fef001dd08dfae18111d50a00000000d3efedbe6c8bd1fe49ed2bcc9fd12bbd77973a5443a4c69b3da4300ca0eb8715d9b17a49ffff001d28391c04","01000000e98f771eba55ebaa8ffdf7dce32131411f543274d627c67bbc1b6f72000000000da2250ab9070f72f83659990cc19ae91824314d107460f965642d9bb82b304042b37a49ffff001d1df529ec","01000000e02adba52b78bc6a6aa93ae857242013b175b280458d3e04f63af1e9000000001e1d53d88ca2203dd4ac2dc3016de7773b5a5789f6b028a5f5528f9305224171afb47a49ffff001d39ec9e69","010000001cfdc76e50f4616055622780cecccdf18c6ea16bd602562e6ad8efad0000000033228cd7a9e3683016f5bfb8f27dbcc40e643f5bb797e65e0c864ada7a9e93ecd6b67a49ffff001d2a8b4351","0100000043e61034a7359003ca0f80fe4332c3f193044ba9a4136470c553e3c900000000d117c618facddf9baba62b6d67ae51afb6a62c24dc50f41a0f0ed6657ec836ff19b77a49ffff001d2d041110","01000000ff2473c63c34e67601f95edf7b37e418e1d6798880e6bba27b83b3a200000000d6ec5f63889e39c14d08616425c650df2704010f475ad50651a77e9576e6f4377ebc7a49ffff001d05883c01","0100000015fac4ce47bc32779834707119dece8edd4390a6b5645f0c4890f52e00000000e9bdcef12ba02b16da4cee12e568ea2964791dd73066e8689cc27cd273f17000a0bc7a49ffff001d2a08a153","0100000023b50a3ab24ceadd4b4f52ed16e68acdcb46999ec467a22ab9550cab0000000086c25b27b1304f85385b5ee07d3220da2e94ce18242b21baeadc7b1e5f3c01ff17c07a49ffff001d28c354d8","010000003a8fa644d2fa13fba00287aa9a3e431ce7b73b2c2bb678eb2ec2bd6b000000006868ba87912379b739cc4f0a59f2acfe78f0efb9e677cd7b7152c549ddf463810bc27a49ffff001d1f1584ee","010000005389c1757aae2ea165a91d9b4071d8fce16c8f0f47f6590f2013b1b50000000018cea4c59e77b1f24f37d1671a82c06c8830a13eed0fba355936b4314ac028cc43c27a49ffff001d036bdc3e","010000005ddb119981c9f8602babf0e24a644d569f64a5706f72082f9fd4407d0000000054e7bea99840bca74c10020700f0177307d42633e7b31bb85d7d78dd05153d09c3c37a49ffff001d2a7f8d7f","01000000fbf689237405667c1a7b786d1a003459b5d2b56b5ae7ff7d5300350300000000b2eb600c395b129da5f5359631e9be4fc614c4248c9371bc589a12070476eea560c57a49ffff001d07d4362b","01000000b26406e76edce5c7237cb7e829d194bbfcba7fcd1124ffb966b44ae50000000011315feb65262961f38ba91626605df7fd8a930cdcf9edc1a3cd79b701e83d5767c77a49ffff001d39cf7f38","0100000017ab15712d4126d606a363ec3f33f1b96fa92037d3511b85f230938000000000af598d47004cfa82a53734c496a9501884c4265e5da7b6cac1a216b2d947a9571fc87a49ffff001d081633ae","010000007c263a6956fd07f64f8d9d56489ca674aa05c220ee47a496ab1f5ca0000000000a274fa65baf74566e37fa67cd4be4ca031d0078437ce1c057ce324596f073dcd2c97a49ffff001d269d0c5b","010000006fc229eb04ea5111a82615f2b0b8ca222d30b232d6fa1f50d9f00ade000000002f561a52d4e3048d3919852da01c96d2d5f332e2e6459efbe568264ba3db7e6305cc7a49ffff001d1ee199ec","01000000ef8b600e2d8f09cee61dd373b4b2d8eb0ca418beeb41ed420f7ca7e2000000009b17e21bf649af26241cb0d06f3ff3a9412d721f9c01709bc7cdd7cb87a365c65fcc7a49ffff001d2157f4d8","01000000e39429abd4c39d44c9988bd982db3874239e9a73180ccee0dbd5b9d200000000ead68e83280984dbe0587b54ac1474524febb2285a8b0e35a0f96322d86228f91ccf7a49ffff001d099e5bfc","010000000d7a94d066600ca133beb9da60977c54871a509b36fecb09b01e0ac0000000009b54411a9e122c31db5597bd7df2cdf34a4301d59559e9a23ec17c2e31a5345e3ed07a49ffff001d068664aa","01000000d5b408754f73950b7572221a7f94b22d67a50759e01a31fd406d5e5a000000001d865d5ba043269e4ca6d61c16672383a43a65b841440f85d90bc5080f4ad66e06d37a49ffff001d1813d901","010000009b1912332c8dfaa28ceeed71a915fb35b41aecd783e88b8fd6764d0b000000007d8fbdb77e7c6cac164f46659a2a8fc96045d4a5c251ec745971fa2e320381d58bd47a49ffff001d2b1f2904","01000000b7656507f4bd0f1d98b12ac51feda0d81d722c4028e6c47ceb5113ab000000004166dac9355ed003975270f6c3a0ac99376b4610322f59c5b4a3aec5e94737c2f7d67a49ffff001d2e033f82","01000000d12d21d784ea38f388b9743a635f20fac7b98d737914420f7e18b15f00000000addd9a36cee128a120fb12c67d8dac9c6e36303a7888c025ee3fecf7629e337277d87a49ffff001d635c0604","01000000ed77206239f70044f24b3cc8aa3adfce04aafad027df2f86016f27a300000000d28744275b3f5e6ebb2277f468cd8f66455be6f460d6a4f13ca09115306d0d8bfbd87a49ffff001d3636c955","0100000015fe9ea2056d3a6f92515b5847709b67586c53951229c3afddf1e82900000000383322c34400ee4dc6dd3ea1667b4ccff4e033db9e91f5c848ddaf5fd9b5e84587da7a49ffff001d2770e45e","01000000e1209af3743e900df56edb3a7dad0899ee73b3f8ca315478c8552f7a0000000008dc7ecbb38fe24aa1504e7bb285cbe818faad4a3fb637e5c2215a62b3ef1a8cecde7a49ffff001d088524c4","0100000047de6447ab7d80a135ca99588304a54372711ca70557d9cdb69dfb83000000007c7637cfe96636baf8e599dd692136760f24ec91818724d756bafd655996bb3676df7a49ffff001d363d16dd","0100000037be4a9c7f446c27143d367da5c974285bc14ab3b087c9c7d227219300000000b6722922139625f21c03ef9f6b3ae1d6527ef2886416a7b93b4fb176aa74152729e27a49ffff001d03b63d64","01000000bc03209c6f35a6dcba8e698fc6239f888baa659d09d8cfb0e165db8f00000000a1e9dccefdf6737baf7fcb2ff30ea5b6c9d8e4f1a742e14e3f94207003a4bcc270e47a49ffff001d3a4094d8","0100000030ec4a5a76fd1281c922587f206ee0350f4a9bda32df4bfe3a8f4756000000002954e44a4be07551060891d97cdddfe2def491bb0e8d52a26a519519947ceab201e57a49ffff001d14f3990a","0100000072d2191d028fdcbe3a01f225e42404cc01c0bd6ced3a81bdb4ce072800000000f7a238a00c0bf0ce7cc66a8ba3432f528a5bb20691bd397cf63494d7e367fcaa4ee77a49ffff001d33132cbb","010000001fdafd1b059588acac87eab44c59fa34d3b424912b878b5efd7114ad00000000c30b1cd212efbc60ee4f517f358aa457550e0e21dd6cddc0a3327e4ef57a264edae97a49ffff001d2cc5cf3d","01000000592c1bb96d3c5da26cb43a4771fb3f58329dfee089a897576d6c893d00000000b94f9bebb93b0c668dc960eb0070afa0fc1237c52884c4b2e08fcc0ace653097ddea7a49ffff001d242ab4a8","01000000f38282a4f482fb7c59a95743ca5314ae755e84362fbb9890b1e45415000000004dfc5721ab5e0fe365a490efa334c4f3b9d0cd550f4d86239e12c8da929fdae3daee7a49ffff001d00b34a7e","01000000a78ba48bd986a189277b5b2d7150bff5ba9bbf3fdd2bf8856cb52783000000008efb90c1fc6360ccd78ff1c87be19cdcc91135bac4740ccfe68e8e6a20ad52bfd1f07a49ffff001d153821d2","010000005b8b0a3a33603eb91343ef91add0908e2d5d196c239ff4b3c39c8b890000000068122fa7def7f19b566112ca3339c9b22ef77afc1bb80460763ab7af69ea372c49f17a49ffff001d279df4e5","01000000d0c8ab21e6f93e5457a8ebad3b5b8b6bc6572d1688c7547b52f4cc6e000000002eb954e57b4d6af1790a8eabb2248d40096d2e9a40c9764acdb2c56abc76e5dd55f57a49ffff001d201b87ec","01000000e409254157a277292afee1323c4b31c385e022f871950e666934c7690000000026d4d35d2ca3be65358add52eecdb07005d243914216435aac3c2a0d4ad9fb792df77a49ffff001d2077353c","01000000d6cb8358040c11a77ebe8aeafaa7ab9d812d34080db2a1479df0900600000000395c950409b8d48cbb4dd73016bfa42242187fbb3ab5fdc8f9f63b1daff35a81dff97a49ffff001d09a6d630","010000003d3691511b7c1f711e33b40c7974b51ed085ef5256199bd40aff740600000000e79a1c744871436530cde6bbdd194843dbe081445515d01bd1b96693bfc344aef5f97a49ffff001d35137791","010000005fc9893c3b651ce71d5588df282bc8ae8f5960f7a89ccc656d3d4c50000000000911a05722dec02e38fb54ebf7de859555dc8e0b76b00b93e4b10fab4d8ae42ac1fa7a49ffff001db0c79201","0100000085d63ae94c54cdae990838fde0ea4e46bb919d0178caa96e49308a9d00000000354b232ade79085ec1ca82d2aa92a3973dea3b3913182ea60980160d4bb00a9004fc7a49ffff001d23d2ef22","01000000cb3858d92d52992ba0593e556b24a9e31cb315e6354abfb9ccf69d110000000068f5300bdc0ee2d1d14967e0f2092c8fd0d85f06741f6219c8a7190bbccc806f46fe7a49ffff001d00762e08","0100000064a16ed56c80ca92c661ece144fa365ff492baa4c3cb236458a534fb00000000714b106fae863822ef94db8ede817d78795295ef6ecf7bb2b537126f5056f1a57fff7a49ffff001d19824c05","01000000a497c179b79366704ff068a26cf99a5502827ca05d9ab8ab006feccc000000004c1b493f849c969ef0afec6ca9f9cb0a18ee549f128693750bb8e33e8f7c670d9b007b49ffff001d04503d52","01000000c5aa9721dea01505340099bee90f3f68335f53ec3f6bc237925d3d9000000000e61e394bf1805ec826ac4424af1ec4e9a234502282942f6e433b4a35e528fa90e1007b49ffff001d17520022","01000000db246a8d2aab97202761f7dff8470c75728d4cfeec02b2a0362d5e5100000000fd708adeaf551b449b8b8d9bac5a3867ee41216e1a146b2a51297280179d58cd4c037b49ffff001d47169a06","01000000bab4e633372469a3b923475de30ca5591fccfef77117febd82af0d2500000000fdbc5b477ef223467abb1fc7f0fbffb086799e680194b4d744e936728e19ea3db8037b49ffff001d39596525","01000000a333f0481ab29d6422072758bb34e17a5e73d509192a17f989cf2da200000000307bb30a97f4083cef3ce3954b20d9e5d0a6f49fa984484e3596372f7d5e834c56067b49ffff001d1a3415d8","010000005b63e8b5359eb7c4bb78277f16d0035daa2f96e941a8ddfa1159f16e00000000d8130f7d9020fc515b4287f93624289854d21a1c44a10da5502f5bb8beb9ea974e077b49ffff001d2cc6cdfb","010000003a938e77f4a1758a48b1f5f70c040f418cc0e6037a946d94976d6243000000000ed99f88b1885eba6c08c8ae8957817198ebc950234f788af9d784836a47b35e21097b49ffff001d39a71fa8","01000000cae96712cd8048fb0cf3752a7f3d1af44cb66df7fa0a15aabfb8dad300000000f0e7e59837a34667b24a3e6f3184401b142516e3fba376d8837d9e6ab60c7681bb0a7b49ffff001d455faa05","010000001916601ba8fdedc57dcb3f1e6cd0f2b390de055f228d4110f95f42f20000000015ac5e2b313320717227255df5652a9273e3d30828b56835b60017276cbd3256370b7b49ffff001d25f3fe77","01000000a54f215ee28f56d88c79418481fd0e0dc558a3f82b9afac5914e590c00000000db5dd18601ab50c173d1b56fd25eef039d57fc392e36b9d7b732edae6384f5b9a20e7b49ffff001d3651eab7","010000001da5063ebd877c15f36037f0ee0cada4cf017932d47eab2021393f6d00000000f5e754c971d09fb9283ad9ba653729b2020437be09e2a826a050bf7614b25169f50f7b49ffff001de33cb504","01000000cbe8dcb88b2ca2e8aac7e7c1637fb66d889b5f278b29981f84265b68000000009e648e498aada28a5e98210a0c47cacb6301c52929e0bfaa0e336ab2c942456a4c107b49ffff001d0248acd6","0100000047e5b4227d969697ade2f42bc1aae610a280de46569c290c7ea16051000000005cdd27d34ca6bc2bf8f28d1ac4385e51e5ce65450f14aa5af971d04d8a26aa185b147b49ffff001d36144534","010000000f1ca66223366a8dfd2ffda59fd56736ea7bbb009d0fa48f64311094000000006dd2c5b5c858dfe21a0295d44c49e445b5435373f3b8d2b12eda17bf7147a8c8c8157b49ffff001d1f4c0bde","01000000bbe0a7558a74420dab0aa8ec33324c533998f28d358271053b99cc2000000000b04ca2d8a8baf2f035c279ff08ee140dfaec855359e88505c0e38dafdca90b525b187b49ffff001d1767af26","01000000d0caa0c6a79844ffb2188709f0c8adbcf4cfdd5603f6e5afbb56fb82000000009d81938adcde94cfaf0f68352a42f5868889ad28b6c2e1ab0cbda6b97aba0198ba187b49ffff001d22a4d7ef","0100000024307593fff1c365d719783d8e51faa615fd769a3f9e35b9c2c594fc00000000863862c5244e2e9ba848849bfe789dc161be6663f8c82813b09957b4967ba9b53b1b7b49ffff001d39e47d2c","0100000085a0bc89dbd16e0bbe7b7fb80c8a10106fa6718c9a21e2db927ef4ed00000000cef190aad22f26436a2aaf7154d26e6887e667dd7d8c34a70a749e29f90763001b1e7b49ffff001d36e8c01e","010000006f1b754148b85da178e3d8b6ad0795ac3f201c914442edb547e0665c00000000c345531f4a895a07fa00595b10c1e67b2e2946a5c779fae783f5f092a6fa020820207b49ffff001d282eab9c","0100000037224fb8cc135b202a0701a6262813f7e5d1f9d87c7debd994b99c5b0000000021e460c70917bc6651a98031426c28bae5f0d8e1584e17cb42ba635b37774e9961237b49ffff001d21504c32","01000000db01bfd1bb2bfb98db340c13684a17e8e94f114a22f94172b9a63c9f0000000078a344a24454c565f0f3f117076e34321082dc664ac574c35e38168a91a1b36fee247b49ffff001d22fe0051","01000000f3408228e726d31104f98516b5a9b6dfb8408509f44b173b4acacb1500000000d5902148256e6903dbfb050f3723e9bd3b45c47dfa3a9bea744633ccc2f337d070257b49ffff001d2d53b473","01000000a35cd552084d70ef72b82a8522840f8e583be220874493a35c8bfe0a00000000f7f87e65629e913c27d25cac3779bb94da5ba09f295cf2a77f6005189c6c910d22267b49ffff001d8c228a02","01000000e8f3bd44e3c78f00cdb8b52797697695f873d4964d7370bab02f15d4000000000f7c486870fd9afde54cea94e21fe7cd3f3aa51899b0981dacdcb1914f061ebe4e287b49ffff001d24a5e199","010000006bc646db729464f86c0d0404c2e20376d2ba3eda74f0c4a0e34e1459000000002bcb1adca12f136261f113f539f38e076cc9391dbbe4ab4470412c20d5cedf63b5297b49ffff001d29b795d4","01000000e1c741e760bb4f832c0e7335e85793cf7cdd581d5a6a4953393529dd00000000a68d456191f506dd3af28aba90e963f1e2e4ff0034a5eb78a2b3083ee7ca002e282c7b49ffff001d14381bfb","01000000cf13fb63d4bae50cd458303b08c9687a1614476ea7e0a7a0774542b600000000bf584c8c8705a70777a7bdb81dfc6b29ec36607a22fb64795b4d0f7345300da1af2d7b49ffff001d0171bd54","01000000165192248e1a00acc0c4bd7edea0eca85980756d2917211d71953c7b00000000647a188b08638e13638d2163a83474f9df5261ef47ff2e07d2df8b61b8a8edc967317b49ffff001d375d8f2f","0100000055a96cc7c11164dc8f2267248fa27d40abb5df8f22fa49c783fc748600000000e67a2c4d1606c8f8c5a3dc8b48e0c65a5e88e7ab3006d4d960b92eb3de853e033a327b49ffff001d1ad15c51","010000007578d7a7fe83ee74a2ae722b9e03cba48115fe59d47ee01a8081b7880000000089b8f0a787e1fa901fe78513f3248cb0dfb67f6a3996c2115eb65c06f0d37eef5e337b49ffff001d9dfd2c04","01000000d9f9cb344ec439b7e658b979fb4bd329599a7a758370702bde7b460100000000ad86cd4a407ad757d50683bba0774a6f81b0dbb02744dce665c544afb64a0d042e347b49ffff001d1b6c8a02","010000006d018d566465f0917be9778362e2b358cf3166cea05f201aceeffd9d000000009e654fe502a187208f7c3e381c42afc863e69e5d8fcb6d3442f39dce34c4212a8b357b49ffff001d232333f6","01000000bfb8d5d20540d320e21cb6e745d388995adceeb29cfb7a66ee8fb3f6000000005aa662702a1584ee8114763a27ef2ac167b32f3bbd723c58f9f79fe919baca3c3d377b49ffff001d081e4b83","01000000c7a1b9d16a4c83c283486f445b859677e88808844d712c8ee1cedaff00000000cbe89230445d62516a0408ecb7f952716e9441ab335a6df6026b97c11bcfad4287377b49ffff001d2a7c02e9","010000000f5489418397e8214f6fc4dc46b128ea55afff2f544e531db31bed0f00000000ffd869ce044c0a093d103cf0c5dc863e135a713fb724d29a98d592f2bc6b8cb4ff397b49ffff001d2a402100","010000008cdcec619b3a346c569244f18280ec5fec971bbb3e559578f809d28b000000007542f1e778dfb7d032a857bca0766c0fe3b85ac345632f83037d99327b8c966d853b7b49ffff001d1b2f798e","0100000086b4457b92c0e034608e4c0f17064edbff275f2068773f2b426513be00000000429a18be4f5197b5f856eabbb53e049da61f46ae22a13aa0d72ac987ec691ccfbf3d7b49ffff001d387a8c52","01000000773ed4a78a3215439ed90dc5aa1d5a29df9930e86bd624e6cef796ba000000008fee314039f9349c0c364234b02d7ebdaf1e5873edc4de024c67559b479341744e3f7b49ffff001d2bfac8d1","01000000992aba9d139f8f9886626f74883fa55a7b974a5c70dab9f4748d385d00000000b492ff86e1bf08759f7b6e7c3c7dae3d37af4fd11bc2322ca76b6af137358082de3f7b49ffff001dc8084102","010000007a3c25a3a6c6c88d2561c45082e424bdf6d2cae0801862e06db733fc0000000098627ece6d6a140f4fc8b3c1b88f584bd871f3e538a828afc19ce99e0e7d57f86b427b49ffff001d010c5795","01000000f488b4aeecfc4b1798c9c874f0eee85574151df3a58ac21beb6750740000000099fc9b61f3a9c2e31857d5abbd9a8e84c3e02391e894e8c879bcd6695a69020fd6447b49ffff001d096de0b2","01000000383782706dcb4b2e28e22e7bb97c37622b0833c75b78208841fe1f8b00000000b4f7be6f43d0bd26dad46e77e6d9cb6168f8b04630eadcb0807273fb20f1566b9a477b49ffff001d0291f84d","010000007cee731103df10e00a5e6ce6eb271ad08bf8817a4242d77dbd5973d9000000003e23e9a7c9716a8d70cbeb77c3a26891f075c7045337bd1eae3f0d68d1a63cc64a487b49ffff001d315ea87a","01000000f13ff25fdc84e1ed05df1bf093c53e318ecfc329e6f0f8521d99132b00000000712efa9db73dee0dd4ce671cd788be6bab569349b1a243c7cb36747af35319d000497b49ffff001d282ba290","01000000568792a3f386760a3c8b7853795c24fe83c6839877888a29593208ec00000000ea4c9947a1ac4a93b26ef328f053a114a147dcd0b7c87465e7452134dc692ccdc84a7b49ffff001d2041d767","0100000098a68739fa60fb67d9f05bbc9a9683b18e58dd6a33420f6f0f1c22e80000000088387fe1df5db5ebbb19e920ba0b2e805ba3fc92366a05ef5bbc7711e8ac5719f24b7b49ffff001dc79f5503","010000002b1f2bb2b480c577d1ef13570309afb59f1593e07dbb779050aa8d92000000005020ef9dffd4239bd07d2b8fc9f6ab74e2da1e23c9f9d00677b9a710432562ac364d7b49ffff001d2069a21d","01000000bd348b1bf76261417d72f8e796b8a2a84815250e234629337f72c79800000000f1c8141614d4ee6c86a0776fa6f64bde3af33a36b52e5a88838ee7efdd969933b84f7b49ffff001d37f40f3f","010000009d6e0e9130e54430a14e47018b4bd06d1e52cc852a3226590b0baa7c00000000abbddc37a756a3ab06838f06abedfc2a20a1c9efa3ededa578be78f950488e5f9f517b49ffff001d395755bd","01000000305383c0e2360ef85977b57f2579b7a93cd42d65914f0e9cb7e90d9700000000559cd040684184eb45cee9c1a5b9eb55e35c05d0af1ceadeddebbfe8ceed900609547b49ffff001d2dc18465","01000000bc46cb80de4cd179a19904f10bfb6ac3d9dbc87f14614da969a72eb5000000000a0e91eb2b47c261880ad444ef34852807f4ffd3884f9425c1d045e13531b0e763557b49ffff001d2a0139fc","01000000d03f2acca9962f0d80cb45d14b2be236343fd0d6d596b33c63490d5d00000000fc51082bad4b1e4a8c88fade37633513fc30143ba0ed4efb1725f9befd867f7e3d577b49ffff001d3494f257","01000000ea0fa91cccd3b8676c73e71221aaab2574f102471e1f5a5d73a76a89000000009123ae1db8722f57f54b73dbfa270bc5a93b0329b44a0bbb5f225a642f58a71edc587b49ffff001da9d2d905","01000000a6992b6f1ab980f0d5dd54660ba4800ad5401059367707a3cdb7aa2600000000a6c15eb91ec057e301b69756058913fe7a867cb48e99d65b68ba8e9704af54c48c597b49ffff001d087bee63","010000002f3887d013237260b90281c43fddaf72da18e306e0adcfa78dbcdacc000000000408bad84d3d7d3073c155f77c3d9364c011c23aeaae989148999ea37cfbb558d95a7b49ffff001d2322dacf","01000000cd006ab9622d6911f77b2cae7d1036f8ab45d0c9ae5d462c85d46ddd00000000cc6bea3361da2de8e55cfcd3f530e8d5ea39e5fb3a81c30b0d52ac4f0f79689f845b7b49ffff001d2b6f89fd","010000001caa0dfe5b90db5cf443e2e43f4626938cfd4debbba43ba79d657abd0000000084289dcc630dbf0df17eff0b7942d98435de6497fce97ff447a5293c0471d9db335e7b49ffff001d2ac16171","010000001eaee5909b67a7300f5ac9afa1cbbba7ab64567c02109f75813248b30000000005b7067095f8b50eebf4dc31584bf9bd02cff52a1ebfd692669029dcf894e51edb5e7b49ffff001d17087a2c","0100000054fff141461981914c105aae6bddf8d0de85baacd97ae4d56030aa3800000000daed9a597889e2bcea62982f1b27c4909231925d185f24e2a13d7a0176ff8c139c607b49ffff001d2db05b40","010000005fa82cef052d5c3a16c8c21aab2feebbe370595e91aa7085400e3cb00000000095dda3cdd1a8d8185f7cec1d5f611df73072dec89aa5881c2eb7786a0a9c841c40637b49ffff001d30c22551","0100000061c83f743c7f0995ac357911d0ee95044cc7674ef7ea676cfa4bf0e600000000fc222fc5373105310aa0f0ef3c9a07d7827c815a1ad457ce58a304ac0afc833cc1647b49ffff001d050f959b","0100000047de298bcd2b0878cfa8d11f74c68e559fbe56305fdeff9dc01743d60000000068187851938dc07423ea8dc207fc33083c17ad6567542652cdd8b2319cc09018b8677b49ffff001d1bf815ee","01000000e8bbbcc73fde8ae380862be4836294e517df95fb71055b332eebcdc800000000cd81aa16655a6cdd48da39903d77e38ea6017251689f84c9bda66bbde1ee6d51ed687b49ffff001d7e1b3404","01000000b1c5fc3980f7ba7c7350eab54ed08b963436e76a1c0ead224a9abcb4000000005ed01fbd9416c5151cb2e6acbaa109d00b1da3da0ca5cd8e5810c3ffb206d45681697b49ffff001d2ea77365","010000006d31ce8751ea100e47c68180abdf5d2cb4885bbd48ef4bee9261d0ef00000000cc45e9dfe9ad2b61fd03fd0e8a5ff3eee162aedaf8ce8559527bdc562dda235ca26b7b49ffff001d275a84a7","01000000d1df72b352951bddde8efebf91621da94a3fcfbc67ac895957a2209c00000000c11ade6cd58d9eda3e4f4a7b7e13d3e20fa31b08131aaa188a0ef2c6bac80d6ebb6c7b49ffff001d1cbfccf0","01000000e897d4133a2b33fc07b6d65251108a48dcfa9c52de3bf4d3502444e900000000762cf0ff5d0503afa3ac4c4e0a9ce3d0ffa969ca83d6ef6e633a4680f3da747e136d7b49ffff001d02c54f9d","01000000eb452c42bc293a0d533a907b5f8bba2b533aeccd4bb257608339f79400000000837f9190433e200e8b3c12a5a9715a07daabd28058b0d7bd3e68c4790a62a4b46b727b49ffff001d02e90885","010000001810fe50fb3c6a4ae49166e2115bbf018b22eee05fba37d9942275be00000000b138a32778c2a655bfed398e8d7bd8053d9369685f7779dcec08e0810738fc4786727b49ffff001d24f6220d","01000000f48385beba251a26d0ecad0f50829c6a521fbc706775e774cb7baf7200000000a0486528c0b309c2896fb98483117cf5ae2e5e4f8b8b8e610f8cdebd5a5ad22545767b49ffff001d262c9b57","01000000b95d79bb172937310733fdc3d291bf77408b312983056bed118166150000000042e07e17f9e3d55024c1b4b5ecfbe68320b725b1c14a4812c41e7e32a68250003b787b49ffff001d2f31c19e","0100000012a5e850d69d4d09fd1f6f0450bea7c00acf40f58e79112b0662ab65000000007d55cb0cb76ff73fa0d0913acc4c57b804cd4e2f58cb9f81610c8ad3617fd608a97a7b49ffff001d38554e37","010000003b14050973bc644582fda54a9226352236cc5769bce8dee2346a6c0400000000d1967ceee6a0416f8cd746cf5fdb9d20c89e7a90a6bab787ad819e5b33ec19d2447d7b49ffff001d2113803b","01000000c3ac45dcee27c49ce77d932ac458519c90c2f3e5944c4eba9235e27200000000ad3e91abd71519998e4c2caf05a6951c7e8ec84f9eeb7320ee0e78428cd3a5545b7d7b49ffff001d1b4118dd","01000000288ef6a3943fb96660f5e57202b91533de5443cd23a5e65ce1fe424800000000a0e5e3ed4bf31df532449947a96dace21500880ad7b2036f55fbfe9cae22cb93b2807b49ffff001d283ed7cc","010000003af6685530695f1fe2bae934966409c2b73416c5fb09336c18eeeb9200000000dda31c6eb2aa62bbd05fad740abc9e6cc150c4410d1a4abcc3c336c0ced7b8a0b5817b49ffff001d37ac7275","01000000ab7a07cf3eb06b07cc080bc9da9face21f44c2afa8ace4148b7012430000000031330b51ec7ac486a98ebf94b346d3d13d0216dfafec3142300f4b39ad3b43a95f837b49ffff001d00b7ede1","01000000761a1436031aeaf9c921f21e7eb0e5aa382c92b54a63fb1bb1594880000000009096aadb1c36150bde507c575eb9ce5e43a196df5f334dc5638bf1a6139760e66e857b49ffff001d29771c6c","0100000023761e6eaaff6f4294375132c118d100430b978616cb827d6a94dcf400000000c310b400550606aac7e3c870997de74848962ce6b67bd00885d42191539bf88d96867b49ffff001d30727135","010000008c31d269b537481c8b8f034eed401fe1511eb513a237f146bfd9407e000000000edef9e5a191dcdadddd3ba59805a0f8b01e7c7d3e65488af30bd2ae73a2587fd3887b49ffff001d21853bdb","0100000046cb6d65a816aa579d2f334542b2c71b2acaffb64f550936fc770aa700000000759789b6c4ae6f3ecbbc88f5159a7bbe7c12c12b07d44e0cd656abf6002e5473948b7b49ffff001d2df26a82","01000000466dabe4dc06c3a8dbd0a064be0df60a895d65e98c188f6727018336000000005abb14590a3019f27550444edf8da777eca63542c4174015327bc9b184fe9da7178c7b49ffff001d4c60e001","010000002ab37e9d14dd745bba83428b359004f907a34164467bdb7eaa422f27000000006b4e0bf47c4c02b400a935b1d9a7d5996e3cf6db9d4eefc3a053418d549c8087598d7b49ffff001d36748795","01000000e2275c0780bb6bfcfe20a99284f6bff19f8614484bea6702e0ae311d000000000e9befab0b204124d7eeca95cceeadba84c05247736037aa03b2f37f89c8f316858e7b49ffff001d445d2d05","010000003ea0e46e72ac80f3c37c1875672c46bc86be8bea051330c8246a8c2500000000b0a7e5f0a13a4cbfe877b0fe01e749caa49e4514b919b7e7cbc699fe4a313572dd8e7b49ffff001d2affa1f6","010000002139a9596028daf7d7feb6f775e84576d3207da7be57f8435f2ca55d000000000b9a26b4f404965621f3703c90edafcea13ec1c9b6ec4b9279a25a94c903663f34927b49ffff001d354360a8","0100000048e001b9efce09898e8dbbd14cbb876fb42e34bb37a191cf4300aa4e0000000034940548c034ba091c9dd052074461be58df2b9054e90413ca9a06347ddfeead35937b49ffff001d346b5b33","01000000429ae49115ed08f33570ea1b645d4f646049bdd30f9f1f6204b0e4130000000042e778b8a8aa59f098f45c3d58e8caee8c96c06e7674b456cb41b8bc5d70aa2dc9947b49ffff001d21f04563","010000005440e57f61e6ff31a03ddf2db0fded9b4ff26cd7bf9bd466a873a47a00000000682cb1c6bd1915cc3c824cfae073ce58c8bbf594d75f68eead0a39ed7ecc7d716a967b49ffff001d33ede5f1","010000004b112801bc6853df7e8fd7f68920120d52c5d081a895090ce8cd93ce00000000787e6cf5bd2292b877ae64a4f5cccd8f5c5a41120fbafa170a98acee9b4380c045987b49ffff001d2a57f716","01000000caef1dc7af4b671aa80f76305b99ada2154319c9a16393863e75c22f00000000ea89ca5f15aad76415821544c5e64303de81100afc66812aff10b8bf6b5b03d529997b49ffff001d3d623001","010000008fc4ece61fda14756b496a6d61a179315466cdb2897a6ce805f51e0900000000dc46542b0032087e6f32acee5c46ee5e248082f4687a8a061d72ce70a3b5f76140997b49ffff001d244bf451","01000000cc52298f4751b102469e3e8114e6f7a8b6daab26875752e4c73c0b7700000000ab42b0483349e41efda50525881e847827d1d32cfa126540c2385e2b1563713b9f9a7b49ffff001d2726dc7b","010000000843ca3e0474abeb12d48a84d4b282a12b6e72cf567595087f5176a7000000002d1f232b349eec562dcccd6a4e82117ea58166993e79bd16cd05ea5080c6d7126c9b7b49ffff001d2ec2c8d2","01000000d6443780a0098ec1683c1f323e2c8b50bf130e461ad7412f2b5229af00000000e863f86b44b41806ffeef43ab188ff063ed64a5d962436b89d9668db0ecc355f499d7b49ffff001d1c90d542","01000000e1c66034ad7ffc7bd4b5b705606005c6cfe2492d096a7227204b8b8d0000000094de6e0e774ced9635a97fb83650f041c5549b7562438359ac8f682ad05c315a0f9f7b49ffff001dcb7d1708","010000008513131670651b267a1f11f3e75cd717e19d8750b9e1162b7f2f1a6d00000000fc4f987be3843acf9437a84154848e70afdbc9d265f6f4aa40c969b53b7aa083999f7b49ffff001d20d09ab6","01000000281351d2c84eff72c21a69cb70d69eca09d3ba0fb39464ce7a5a4b1c000000000c274c6cb61e9880515d2042f78a8f6448ebd2af47b46ab0c0ef060acb6edf1a51a07b49ffff001d16d77502","0100000042c05cd68f75a28481deec1edda3bb9f54a4b649c0eba71c5becfaf700000000b72bb2913410f7218e90aad524f9b0ded2b749e2b317363616567da608ed16fd5fa17b49ffff001d0693fde6","01000000f86b17d5776f67751f915e35fe6bd80317814731d70ae8e26c92bebc0000000025f9ed620527a7b3de66943bfa7968113ce7332a858d87f91b281511ef18ee1a96a37b49ffff001d337139e6","01000000da749065a840f78b4f8d3180a248222390baa741f38c34121495cc8400000000ea6363c30079cde01b7687ab16e63665fde1e1ce73637ca53b22ab54f7ee6d5b52a47b49ffff001d13f4a86f","010000001f62cabf066f40e2f614a8f045c29d8ec599f8cc9fbfaa9d28637e3500000000588d68df47d69d4c97e6ac277ad5dcaf5d4c78d048eb9d00ddb338df22081bb104a97b49ffff001d15542224","010000006df8c434233fd2357a6657ed5f8c2562dd4dfa616f63b239a9587a5b0000000063e679f6f000dbf86e13f7af8972af9737594485d8394c8b399a294ec51256409baa7b49ffff001d38d613c1","0100000086bce0c609c112bb78b7edac359606976114d44bceeb6aa8ea4e276700000000b448cb2a9fb15e7816b5f5955edca53fd668484ae892f492218c82eb3dce686579ac7b49ffff001d22a07bd1","0100000037ab898d9daf0048e1a14e7d973463d9fd3eba99838bc70cfd781f9700000000e9a3dc82a1de1a1d1fa624b74a6cd7514867fc103582fb2492c2c06c560a318bc2ac7b49ffff001d43ab0801","01000000a7024ca71a5d97e1a664eaaf9ca45f5919d5ba1422d7e7a66399d55a00000000f250813314115d7b50f889cd64a727b23f1306f0afd5097724b4c1016b90e5cd7dad7b49ffff001d96957900","010000009618eacb65d6b334043ec99112c0811bca75d91547558bc3862865e100000000348c0de0cfbd3ddd7384093601830d3df7448562e1694aa4a7a1ada946d030b4c9ae7b49ffff001d3564daaa","01000000176ee78a3a326f8d31e9f07bee85db0f58514e24e65f1b5e49001d92000000001a1587d87433d2ad16b1c440b968cf3b58618cde8e8a4e5353cb0f4d80b61b39eeaf7b49ffff001d26ff0903","0100000049b176c612df29ea767e4061ecbfee759b2bcc7e7b217eb9c84382bc000000008f8316581008ff3cb3dbaa1534579ab13f614c640b4ce5c921f3a4f28454ef56bfb07b49ffff001d170095c7","010000000f0126e69ec27a632014493e49b994fd5a621a1d6f1b2a6cfba4bc6b00000000a22a55ad5d157b9b107bfabdbc8c70126b1bd529304f364fb459a76fc8daa235f3b07b49ffff001d69a60c00","01000000b6251d784f4f6974b2b538bdc8c73144cfae8cb46544caf1de7fa7f3000000004cfc5b36f2cbc4fa3f0a5986da063eb0d81125e03366cb4863aac6301f53833399b37b49ffff001d1efd0afa","01000000cfb367b4bdf4321a488e4f7ca698b9d80879364835b45c2b2963dfb400000000bddcdc1c5f4cf26166e4722b822d6f41c6fc4baedfe07964f8b610c365e0a8df81b57b49ffff001d16218ae5","010000009b26985f6ee83131c8cb1f419948b06c91712029fd7a9bd7146a8da8000000004f70e76d2a2ee1e181a40cc5fb168eeb57e5141f7d59286ff05815a8faffcfeeddb57b49ffff001d0601910d","010000008984fc600d0f71530b92392f62591d29065a6f07030c0ba0eee133af00000000140759e7139433ab81dc32b6ea289ebd8641020e56578712a6923d2d105d91e1cab97b49ffff001d2ffc05e3","010000001acd71b595bc283fa413633d031aae3077cbecb9a052ff86c735cab900000000019712ccb52c2fb31cc3303fc8189341e7e54b3275243351df0b2f245a7d593909bb7b49ffff001d14668c82","010000002b4a9304e1b395d2e1035adb5a8034e3f78fa1617a74a0c9903c21d800000000d63bf0de9aacaae0c912e4d2a7db447ff371ea4db60d71fe97f7fb64bbbc6c91a8bc7b49ffff001d1b495c93","0100000018df85dfd156fd6ecd018b3b7047cf4373d80672279d2e1f5cc8857c000000001da4f7b4244a3a7e0b60e280d2b7a6bd1f5f80e5bfb76be3d452bda148d03f8005bf7b49ffff001d39f8c17b","0100000007d667f60bc21917283e40a64274387c4d3ce531ee17b5c4102986c700000000670026122c11d1b5375c9244ca92203a0e0911287896063a8a9bcee20d3a5b141bbf7b49ffff001d27b36cb8","01000000fccbb1bd2b8fb5f07030f481559036b1492e701c8ec32641243c120700000000eedd342f92c3d7c4459979d492696d80694b63ddf2e559342c3f63cc348e710887c27b49ffff001d22720953","010000009813c5ffbf7bdda280a760e455efb1d48eb5c45d4c7a9d98035e19aa00000000a826ee60be3b063abca32fe97e41e68b6aab3aff6da8b117a00697b4314ecdcab3c27b49ffff001d2f488cbd","010000005d398eadc883d34a3e10499f7d89032f19e2939f21bd6fee5070de3b0000000054d227e2a549263d3b1ff36a12e60d73e5546ae43ac9b5ee992b547fe2755c65fac57b49ffff001d24109c97","010000009271a9ff54f03283b582acdb13bc540e11341155acd4930667b80fd300000000f4a3957a7e463fecf91a1e55e44524095baafdffba3efc96766de72262873a2264c67b49ffff001d26453273","010000000bf212511411cee3b2096bce3367fb7a5b810f0385f18018fd7c801d0000000037130d42d3a10002f4bb1579a313e4c428c34a03d4221de1f0d31f71e28feb3e24ca7b49ffff001d23e65d48","010000001238b5e469f14fcbb5951e9c75c32e4732be34055426090819fc5fa9000000006fa286ca5217d1a2964fe6e868830c323f08cfadec0fa94b81edb277f7171dbe18cb7b49ffff001d36b26755","01000000c7e9daff24af83e7c940f102cf81dbc4eb5f8c087504c6231aae916400000000c1d1e64cbfd454637355e9659a272dc5a6e5ff286ce16e3818e1c68ffc3e931906cd7b49ffff001d22c6549c","01000000aae80f26c6f9c9023dfc7720b0ad54f127aae5ea83d4baa24923829400000000e7ca2490222f3db77281268a4b54cc4972b7dad7b4b6c38f281873b5786e7bddbacd7b49ffff001d3459023f","0100000092fdccbd7e150c9580d0185ce69e9dd542730688e17d327e2f9051330000000058bf47521aeda00e5878ef995f9d8c9c9d8399b2f8e3d802d795f7e19d04c41dd0cf7b49ffff001d2e4f7cb8","01000000120353e2ff1eed24babb90d63a41dbc61cabaecb35dd7ccef06944dd00000000af96cd9553d31a2339347626ed867be7a2bdc5f0fe6d62b534cf3b324f3a8f4d97d07b49ffff001d256c8795","01000000699a00df1bf21c7a7a24e9f58dffc2542ceecee87ff22a77d979e8890000000014e7327d59228af6357240140e85be9b5de4e2035fadf257fea54095ddf9be695ad47b49ffff001d26b5c280","0100000081a0fd06fa6228011ddbe4399552ebc5f2b8eb6308b3b91d4eb5a1c000000000eafe875432ae6ef050e2b025ae61ce00a16ec3f96776d18e5f957dc5ef04a9162dd67b49ffff001d39378a1d","010000001a5e9c900253ea1848b0237830b63a19ef17a7c8b3c16b4ab0fc1e6000000000c046e30b77e124b04f17dad6a76e53e2d192d1841743e94bc045154c5aee9e2b81d67b49ffff001d399f93ad","01000000687d71b2b7e3aeffc2ff8bf71c80f944118d5cd687e489b12076dc3a000000005a55da87f425b8cee1ea86f8bf53275f83f9bf5e4382cb35001e9aa6754f5eff4ad87b49ffff001d1b0de2ca","01000000d458317edaac98a722101c9462458d1f2261124931bbb138a13af09b000000003241958dee5e5b17499618436834d22fb72b0846f241a1d21dcbc7f34af55327ecda7b49ffff001ddf14e501","0100000028eff80cab6b445bfb5497ba6d916771abbc017294fff77664eec93900000000ec9cb9fc093cec004459f6b27c806b6e33d96c4423c8f961472c5f944d54f1bf20dc7b49ffff001d31710c26","0100000040ba815669d751175d0d2f885032b333fd2d55607c7af4ffe31ad77d00000000279a7f72c7574ec7b6a23dc5a7040a84e0a3fd550126336a5536f1ef68fd17bdbbdd7b49ffff001d3834e978","01000000e4649bce2eed8eec05762d8be73d3e3833e5a83356430a69db9cb5a0000000000dfe2fc6fc4480a5c61dcf53a77ceb839b6c24b4f389fed2a396a26e238f0e40dddd7b49ffff001d0764e303","0100000094a726307249cbabc828457b931c72e894f30debd6265075f0330e32000000009a1ced3005c4b4ef9ad7b2908dc77a31c7a4d31b0c228a806808468bb705d43ee6e07b49ffff001d06c2c9d3","01000000bca32bcd43b9a1de9d27357b1e63ebf23557f6e3773b9e1cef90a72200000000ca74226437912bad33244fb7090f58146c7b0ac2cd341b6082e4ab9a5c2c1eb130e27b49ffff001d28f924db","01000000784ba3470bb765e53f806e13e6bdef04e1051d43b2c6a593f2a966e6000000000137c6af0c48421b21c6ffd3aa300775c985adb49c90aa094268b0c33f22ddaaf0e57b49ffff001d35656567","01000000f6e68b8f8b8ed76e001cd285ab7c2a1eb27063b9260336f110a267df00000000e3a94ea8746dbb0c0351a5239f64fba21f3e37bcfcf668c3e8d1129d1e183fbdb0e67b49ffff001d1ce04359","01000000095c7feb9a7e67610502764d8257c18eaa70c6de949496c578dd73aa000000007c1661ce778a1fc283497085f029b54c317b5e85f1c950c39999c478c7ff488a9de87b49ffff001d3a616940","01000000e5bee040552e6f18f5291dc896a3e69d3f84c1d819a0df5dc32f5316000000008f0090f7411f576a5ca05d63316553f948170354b4866984204fa551a6f1d066d7e87b49ffff001d2953f42a","01000000645a49b33b8c9c0426f3fc896e9a6d4e804182af1e7b67c6e84df52800000000cda67c87c80033264de15fbfe1798da0e915fdf4645c87b86bb2e6a4d011cc8e91eb7b49ffff001d3372f85d","010000009613f52a95a4591e64ab3b8f0583f3392a4d40a7f278995fb97c10410000000079795cda81ff8b17f81d1cfd5ec3170752215d365274cf61aba238def0628db938ec7b49ffff001d172e0317","01000000af26fced83e0c092ad69b271fe6f82d1c0ec598f02970195569a83a30000000038c0c71ae765c4cadc3fc6fe2ac672ad0a8aac4666bd21f23a7736fab5398c281ced7b49ffff001d91ffd202","01000000b0af7fc2f36c6e7b71f6e475dd1c25f69c83851a0d1dbc2dd093f0b800000000b84ab63988cfc88c4f4f27ab62d63e977482567378e6b011ca679a990d6009fb8ded7b49ffff001d2eab3f33","010000003e42b56c1afc21cb1b586e19f18f7d455732a12659c8f475cd2fab9e00000000f47943683ebc7a9c253cf3fa2567fa5db27657229935538121a4ef957a0db340afed7b49ffff001d2cad3d93","010000006bb558383ef0374038230187197512c267e57619f87765feed2d5c580000000067440a440767357fb0d88fa862e91df1215554b973442746d84505202d5a35b50fee7b49ffff001d3cc06800","0100000024e427b80b729a379dfe594401c8ddbaf1e731f3857828cba153f1e30000000025e25b1628198f306973c6ea89471dc7f2a5da463ac3b31bd458c0e364dd13b208ef7b49ffff001d37e8ded7","01000000a9a42dc2fda68912784acc98747636b3ae3cd5f5135d36587fdee5c10000000036c1d6c6c64037c73716bc9bb2811881c299c2c04aba3542f5aef555b6ffd3d122f37b49ffff001d21944f05","01000000e48994d6b663a7ef48d6d4ac4d556a1b0add9c9580f49fd85f242c3a00000000f22ad3d404ed6136c851fe1df5fd4c478073316134204e35ad8824160dd225dd8ef37b49ffff001d16ee58c9","0100000036da957299c736e885f79b3ad2c67dd4265166e862d700047c7f5b55000000000a01a3dd036009b515c629da0724551b772015f25cdc82ae12b5396a93b319ae9ef47b49ffff001d5573f102","0100000086781dbad91fd51e1193b6bb771133f26671d9b5f3ff46068ece9e3400000000be2e620a6a29ad105c3e2b1d1c2983bb2ff22970ea9d0a0e2844e44e4148fc1f45f57b49ffff001d19eb1975","01000000ce238329fc9fd3c74cfb71259d62d9bcffbdd1057962b2ce8547208b00000000dc5de9dfb6b562af05b6f7e9ab6de13e7342958eca7e30e079fe06343dd6dafe5cf87b49ffff001d2f284c14","01000000c99f5603853249075383f8999faef8d6454e220c4331b4a23d5c2c9d000000000413ef671c54161912af813df6f5dcbde0992ea9ea85139090ef3d02944eff4e7af97b49ffff001d2322ab17","01000000508c32c1b7e194765a9b9a5547aa33d7f790659cf2606221c5b622e900000000c833e2e6405a17e16df82c00f72493fe5626eabddd466d710fb61b365970c84e72fb7b49ffff001d309546d8","01000000aab995320bf09543d45cb28073af6893ceb2065c6304e1942bc5703100000000ca548431ab96cf420c336b68343ad340d0bb86188c683e42bfe522ff22ced7a231fd7b49ffff001d0620d6c0","01000000c2246f00903c6f87f9498a739bba66a5980a43a7546ad1c0671339bb00000000e6b210b63dc5aa16b4309ad7458d6d0c86a6711c93706d125ff4fe729f5c3ce0acfe7b49ffff001d1f33c849","01000000f41d995c8dfede6dddaaf71392d8833387e02e501418d6fd7a86263e00000000adb6fdefe4b008e13016aeb8717c4768842cd48eeaa7cea36c260a4302f960e69a007c49ffff001d083fd013","010000004cde0dd8dd19db0c55e9ca55b350d0ced0e52f7de9d77e53262ed70d0000000017903d581f3e832f8faf28d0931cb0aab114c4b685c9e17fd3c8ce8b58d19d3163027c49ffff001d17265d8d","0100000087a21716ee07f213b65a5674da23190bad06535d09df7910aefdf90800000000dff89c814a34f4cf6ec25ce16da98d9526b9b6be51b359a013644328ab4e8f3eff037c49ffff001d370dbe36","010000006965c89f4ba37ed2a43e3547bea77e82f5cbf24e4b9304d1c2189ddc00000000f2a4a58aeb7fa7b919ab0471926e358a8bbce34d6a340680367f214f161cdc128c047c49ffff001d052cfffb","01000000e2e76b9c0bf8d6cbbc98d0b1034c9ef752008a48da0262c971ff876800000000dfea4e7141643ff67da25de8800d8fe7a2a729941371dca2968d49325b17cf8499077c49ffff001d39ae4859","01000000011afa9d59114e7a5c9c01a2776cfd681b5dcd2f2a802551d60f11eb0000000084b62d2ba98246bc35707005d45335ece75a9a70fd81552ab9d90fcca12604d130087c49ffff001d20b6fab2","01000000a3e32099469e17a350c3fc8f15d9708883d05a482e4e5b00fd8cde2500000000374e64927e75d792c53ac165f3307563ba3c4a8e8dbda78a862a44b9986ee16cc70b7c49ffff001d1a52e518","0100000041592c7d60e0d56f34d1830013b2c69e7bd958339340ee4f7b9457b6000000004e6f9a441668e1a3d6a1d2e3c4b7b945a7069e0efcaaf4bfe8ef2ce3273b5c4b9f0d7c49ffff001d1545b7c8","0100000043a89f3e3e1e92b397a9f00d31a608fbfb3b5097952a79b7cc8d3ae80000000056d11dafa5c16b4c9a3db27dbe9ea4312b0c9aa8a13e4582a0db08049b2d1877f50e7c49ffff001d8f256b04","01000000938912fa882c33e150c1f00a15ed15c4648f66861c5c18be7597a9850000000054d032483803bd3c8a6ce86c4e04df771935a24a424bb81ac3c6edba3f43851da70f7c49ffff001d1d2c472a","010000002c28c8dc0e73b84ea0fd1e438882c16d20e6347b9e22f1a0287de34d00000000f2d1560b0de69c7caa92cd65c28b33e835d59d68b4ab2c5bf77cfac5461ddd8ca8117c49ffff001d2e5e73da","01000000f6e93a7a5e9c23f6f28460a646e879e19884352036d5d71518466d7f00000000ea62d66ed65e1d79113e2414acf7f686c01fbe71473321e63e613b3571ff84ffec127c49ffff001d181e43df","01000000b7eb54bfd978de666f0154d23b5a5037cb0fb451767ce70a55e34e5f0000000000fef440b30fc7e45b8b1c6e3774f44c585c5247b6932b93dd956df71a1e784f62167c49ffff001d2cabb795","01000000046ba0c8ece3ca7dace0e0e8ffe93fd65d0d4fa6cb66e5d54571a640000000006698688e8b0cc8cf7b8d24bf85010287039c58db64cc565b0d2837d2c16114c8bf187c49ffff001d1a323f5d","01000000156b7d422fac1c72551220ba1a4897bc986e60816b69ee9058edb74600000000b9b4414df4addc45eed0e360ccac5a71a49ce9122856bd6f9c79e148c405a9ecbd1b7c49ffff001d2228d197","0100000068de086f91b5a53ae5d074a9ec60f66bd5e612f428aac50381451862000000008edb72896382918ed37ab9a135f7d26e2a75fd1aa17f44cb68b0db0f96553bcdb31e7c49ffff001d08de3ae7","01000000f151675c9ff40a15e7b51b5bcad4fa39650a2d22e376123b9f666349000000006fa9c24cdba44d9d2ee20c70485da2cac0b123e97c677bbab4766145bbee25d9f31e7c49ffff001d07ec9300","0100000052ad4a7ad754ef8e5fb59e3b528d05ea0fe2322d647504476063ae620000000022edecea4a108d5c17f74778f19d27bc12f0e2106bb343b416c13db921dec336891f7c49ffff001d3681244f","010000008e612cdd1767228bd8c1ede2357354bfc1c2539cf800439e7c8eb8fc00000000839d3ae9de8eba7a8820d87123f4ccd661034b3920e1966a3e79307f3f30d3624b247c49ffff001d39b9eda7","01000000d3af0dcc6f32c2a6230d8da6c311a61343f8e8aab8bd45f7b3047d0400000000f78967c5d3d52f300f09384a9af0f0abeee840dce48078d22b24cf8b93dcb9174c257c49ffff001d0860b433","01000000c1fe2d3d94e7af1c30d19e12352b50973da8960410358a4fca4a6f4400000000fcbe40ae5cc4d924ed133e52a6c142845d103286fe71c1232cdf0d3ba5f59b5e26287c49ffff001d3203d991","010000003b110f8c846811d5ce7ba447266bc77cf97beb9a0fb684b2f56d975900000000944a4fbcb53290b02cf9814bf94e595dd35e1b0df735fc8e4557431df5d0ed15452a7c49ffff001d3029639a","01000000b5d20bb6fa15481a08c9e68e995e411db4dc9393608c21c4579a7e5300000000b6435d6454a34e6cf1af1f8baf90ef767b3ff7c6d5705c7f8b82930080ef68464a2b7c49ffff001d1c8789db","01000000532a301ed84a84ea5d85b9d2370862a1dbca7a273a71dc862e2a2a970000000014875bdc3e79c34b5967889bb54b6afeb6ecc8fb4a7b225d22ccb1a75414a946bb2b7c49ffff001d2d12995d","01000000978fff93b59e1ad59c85c9c806fa68d1c9d4aced722d8cb8d67cb03f00000000d60c7090fddbfb7c4e9988207f064bc827aa5c5b5d0f8e5200b37ce87c04e13b5f2e7c49ffff001d18f0aca9","01000000dfb19d9ebb89542d7faea300fb3ee519176a96519f8e19db59185c5b000000002605f66ecf282718fdbc67280ef93ab4302b915eec90e2ead6b7143a5ab86c0965307c49ffff001d8ca62e09","010000003a6a5aaaeebb632d74998dda6270f1b115fd4d21ef13ba626bab96f3000000008e50282b94592d1bca68c477514af14b5b904e99e5bbd35996c630b68dabca7776307c49ffff001d27a214b4","010000005f5c058c780806c32abb1e6ba99f0d24efb55fac9e5a172197cf6b0c000000007a00c0822f7ad74fd0e5bf9ce1173fdc5c81459e6969c3492cc0eed1d380960b41337c49ffff001d1dc89bb6","0100000009597715b6e69445325371d3ceac699d324fa5de33a5791c32de46130000000032668c3094735da3f30454aeee4f80637fdddfde4e9920aa9fa7f9b225cdcd9b62337c49ffff001d21227e9f","01000000a6a9aceeed04632f90bed04b2c190fc33ea90b822d63c393914b4e3a0000000074f0162a33f97dcb418a2072b32f262a9f22f7f548871dd2a5f860990737763f14377c49ffff001d2372d771","0100000028f7ef901f0729b960a65365de6395a36dd952339a918330c492a75b00000000d19d356ee060a9314a1eb3211a555b55bee6ee9f881c947a0fc14b8d0397489a3d387c49ffff001d38949b9f","0100000091e8317094eb5b334dbf2ca87649d4ef92004299352d3b0e6d0612f500000000cf52c74d2c1c2457d66337dfd3c99e2add973e4c35c571c117b3779ffb6c35b7fe3b7c49ffff001d1d486c11","01000000d69e9d5d79bc406de042ab094c131b6e8f8885c89353ffb494c447fe000000002baf90992eb74409ae7cfb012291882becfaa0aadc0eba3592a98eda29a5d211783c7c49ffff001d315b69a3","010000007a5f5f90fcfddff2be292eaacd3d9ca53d6d0908ecb9e66f0b9d2dd500000000fffc1776d53a6fd0627e5344efeaaa8702054139bdb076d3f40fcca5d5e503b6e63c7c49ffff001d1615fd04","01000000c83f189028bf82caa73424f36ac62d217a2abc26aaf61a143e9e023e000000001788ea2ce1d82098edb9a12f1664918916574767d49f52faa8dc5de368c3f7a9053f7c49ffff001dcb4aa009","010000006e293f286ffc22b36a293990eafe1888ea1d62b04c4432ca30b68ee900000000ed326cdea4afa2a3ae91a939ceda8cb71b8e5937ccddbc09089edbba9470545873407c49ffff001d32cb3e80","010000008cc2a8ac3fff7188ec079f8b1ba7d0c08ba7aeb1bb9d04302553957d000000005076f505a7b57918422b57399573cdf2d2b4d17e2b06a401affa29b364a8c83583427c49ffff001d1d65cec6","01000000fddf0083321d5aef66a1d5ce6c49403d4ab5a3a7b2dc44d7a22eb93d0000000051dae1022095ba70230bcc6f6d3ba56c2188567793e90b8391de8f1e37b56637d7437c49ffff001d24fb5881","01000000392edc792b0f86cf82869c904e44e3a98966e9e64915f33c8fd0d916000000006e0a65d6ad52d2933e4fa548e43d62a233462957531cb06bd4813dc01b8f3605be467c49ffff001d175dc882","01000000b36b01d7431e33b92b5440d270d96d06bdfddd331c200808998ac0f0000000007f4900404b8d19bdaa45c991bccde79efcfe4741a278ea4c78d7f4c8d0f241fb69487c49ffff001d22f7e6d0","010000001a5251f8e195a1f520b893b6b566e3d167a59e767c1863864718ff8b000000009323f5ecc4f9a1bc99d99f44b8f7d2470cbd4a7a0b02de030f10e3b30c380430994c7c49ffff001d37e9eed2","01000000e0704534bc5b5d257fba24fed08a873082551ceca0778d99ebed484a000000008f0c0231830d913d51a3727dd1984262e85285fe0d961cc5377465a00bf29eecc64d7c49ffff001d2fdfd0c7","0100000053285de40f9f9748960d08e2a74998df1708dcb7d6b8de48cbf8552b00000000f14f51187ffb5aaf881bd4040b4eeddd2f2bc31e9cc0633be74193c6d6af6c4d274f7c49ffff001d16c5dafc","010000006944d6066917400119a6b07e3421a3555f19a1637dac1cb8e7032077000000000edfb8f6c0b5c94d45c9e0d99e4b7d7db4764d8eb32c21760848098a35e3ca9fa24f7c49ffff001d312e2550","010000008c4ca46d23fa7c6c9c40073839eaaa2f3754db3b3fa9bdc71efb476900000000530cef8298951838409ab52ee06abda6a425802855830f3e2013c0543d62e8f556527c49ffff001d2d531b15","01000000e204e2e2356982a91cd6d44928c38f5a20eb80765ee7a51e2a55e1a500000000988b6ed318e72d3ef034fc2b129f0146c0afd79a1d04c35eed67d1dd9d4df642c5527c49ffff001d331ae3f9","01000000feeb4810cda1877a6a4351269f72c907b62644942b32804b99a19cd70000000067664d0687f11ca62410f41b1539e1111723f566c049ce4243daee461e614f8d67557c49ffff001d5d80820b","0100000007c6e2266ef432800a4d27e68f856c576b317943ac5ebfee722fdf7c000000006831acd23693d29d4fc68cb653a4c1d59918ceb7b8e0db5aa24d23b7aa9a33362d567c49ffff001d17dbcba2","010000005d40c89dcad3d39881c4fd771cabfa859cbacacd5e866c353b29421a000000003926f326865b9bf95e316aad36a32280c8b94c026fced7e3007f0d3dc623d75208587c49ffff001d16018504","01000000c2ebcfc6180f20a0297ae06f199e223f253825efa43a9d731ca1218a000000008d6540948831e06e71a42d4c3dfc7f997a0436903704069f3bcf5ee8b36764e3875a7c49ffff001d3761ce97","010000002c79dfd31c6cbdd4fc247e8a9c0a58170836e41b55a7e57bd2d84439000000002734c7b45475aa833197bb2155c4f57e06b2215ad39189f3711f6ef337029be0325b7c49ffff001d25b3d333","01000000d3843495a2d9f251c46643c3e0aa3ef6109d98a6cacc59245b8d3c9600000000cc95044a8a91cc2954ece1e1228ed5f858b0ce602187526059391a3b8eed1d86ad5d7c49ffff001d1ebcde44","010000003b5f473be98292dab205cad7829a4587990306ad94172491b94b7b3100000000ec8d1d84f9050afc3511983b1ae4a9008ff0a75cbf348cb5b9993846bd1a8a4c3c607c49ffff001d353cbdd8","0100000077feaee6a13d60a2434e084992363fcf0b572c689e59077f1b3501fd0000000089a1f65286ab233e2acdba6063613e389eabb289015ae696e1c12eb9c9067d571c617c49ffff001d2a2eac03","01000000c3fc15a96b192b34025a7fe6fd75cd568368df2a6798d858a58b79ab000000003fa7b113990c6b34a3dd8541bb3d8eac9c5d18a3d604acad0374394eb5a9ddb937627c49ffff001d22ed878f","01000000e00e4f77c039dd0b36a2522cee556ae17a227110cc39380d9d07c726000000009b02f3b47364360638c1b5f97be5fd50129d03ae48d6b20e382e25cf2066b54f1a657c49ffff001d285509c9","010000000a9a209cf6866d1bb74f9029ddcf445ff567f04d13ba998e3a37e53f00000000f7361096df1f770fa06faf37727f9b15ba1718a8ea75dd77d8e2a17e0bbd20f449667c49ffff001d275692db","0100000031cbff1bb1072ee4b0e01933591309cf46ffc1216c90f444773d9530000000005de52bf3f4637b44d9a008790751e023007e7caf715e25d1222abcd57492b7856a677c49ffff001d1b9fb0b1","0100000024a74d67f30234c2dcadbf0067958e48a74f5464c2e4154c870fb5c800000000d20666cfe0baa259742f58439c58f38d0679db60b8d61a3109b7aa47c1bc6e33e8697c49ffff001d2e2215da","01000000b15059d028637a0b20618ef20327c379c7e80938c3ccf1f5ad9ae1190000000023e21e0a10f93dc4b14d3261db0fa731e9d0ea0df05a97d639eaeaa8f51f30ba716c7c49ffff001d07e317cc","010000007a9b04825db8507c871690dc59e47f68d45d154cea1af907273926d300000000c55226fec8b1e96cfa918cc3df2f8e3ad82a0cab2c45699bc21922b7a1c57ae5e66d7c49ffff001d35fabce3","01000000d8abf4f4c57ceb50acade48c0753564539d380b7d7f2c21d26b8bf87000000001e162103956b36a872379ea223ad6b7da140c18e9a18ba513fdf7887bd93737bcc6e7c49ffff001d2a80c9d6","0100000071e6eb6b153e87254511ede66e5862638ed5acfb21791b51ec375243000000000863fb2195b1d70e1effc2306c97109d13c23657d03c7c2f8bd7408a8872be96c7717c49ffff001d3859c27a","0100000051f6153c629734bb3b967fc6c21bc4c12f97d5e4146d04c26053b309000000007ef714771042ab4fe9dd0532a2e4505480e8b38d51769a3699e3d31f89430b5bce737c49ffff001d19e0a66d","010000004bfe64a242c27be5dd95223aa01c586f22b4d79326f2e40a7294108d0000000073be6e1df05a82127be7fadfad5356de54ca3f1966f49ed353d5f54f356cf2964b747c49ffff001d24b608db","0100000075f34113c86ac301450b583b6dc8e55a7a63292fc927025fa2ba3f0d000000008a6dc2b378503a15701871f870ea92afa030f40f08d6afb0369d5da15e925eb6b2757c49ffff001d037fbbe1","01000000267305c0914479af7aacec78f34e7773de25f85779512842aa0600b600000000720cd0d8e12c4036492600a37945e5e13376589a67bca4e3167ee1c202f3f865fd797c49ffff001d24014ccc","01000000c8cdf94ed2a525f73052944e8b6809aa8cf8ca44cbb6b6429de761a2000000002df231194f07ed94f94fe66cb743f452a91e03b8cce1b0d3d77f7003f60b465f657b7c49ffff001d138c9385","01000000a174703a839bbf2c910bbc31b3c0ef68f8d4ae201bdb6d2615a1c2d400000000d55aeda22d219dd9bb53a23fc75ae1f960248bf464116afa4c6c955b80a18e20587f7c49ffff001d1ef92c3e","010000003032966fdcec86fb74e4617d4ec9eb313c83ea232611c70f886820d10000000070ccaa85daa4418ca1e4436aef7cd0ef80d7e3f5cb91f5b66b583e666e36b59445807c49ffff001d1e19bc26","01000000f045ef1585ec64155bd679a6081ba41a68d55f7216b7f083b2a655e600000000bd9190f84ede170bf342a2f0f60d55db2c687b95be67c6e7206a14ab94100b46b7827c49ffff001d25c24c68","0100000077cd613c84bd5f296df1f7981fdf6098fba33af7f65559b21cb7a177000000000215d3c4eca52138d9bd393fd342f1b117ccb56efe737314d8f26310762152587a847c49ffff001d26cb6668","01000000510ffdba741beaca070ceea949e198ab33cfb498792db58ad2e6d94000000000feacf733094be22a43c5c5e264aed8903db9b3e4c528eba68e778534d0052bde4c887c49ffff001d1488b568","01000000ae9f0c6a4dfd8625c9c060bff0bcc79672bc7cbcd053b681f0ee886a0000000065891175bc50e022760cddef9d236331df1960be40d88fd264d6f2628d70f2707a887c49ffff001d27697668","010000007f749e7eb44dbd2a2473e77dae93e3caaf5fc0de319a3ce12d4e6d04000000004cb9e11bde9580d49d150c3bafbdc79dfa056952ba83c377efbc9671d2885967518d7c49ffff001d2d84d7d0","0100000095f27e8c1ddc34e19f4a2bb8833a26c3fc048d6a03453e2ffdddccc900000000bfa9dc3e2fb26ca7a28315dd8cf4d7891f690275d0dcefdec5f8008e708f913f858e7c49ffff001d361215d8","01000000ea947184cb4fe5dfc6a2518c8fbb6276d5d813435f26989d59b938d200000000c67acda6e9f0d213b46873fad48743f3b44eced9032990d4a0cf6151f7725a77c3907c49ffff001d1953fb7a","010000001450c7371aece6dcaa386cc5024d1f4336ff9b447a85ecebcce563640000000090805ef1b69b51dd99fc314b12d3121677a79d0d9d89285faeb96919064d0b0c5c927c49ffff001d1546fb45","01000000aeafae323cba1e16afbab076e6829d59b9ec8b41039ad73a8bd79acd000000000c32f36813afd73926b060f4106d313eff954b1481e0ad6a0b401da22f00c54c48967c49ffff001d0256d924","01000000d9ccec8100224fc99926b289802b7aaa7ee12e103cfa28a56c846eb800000000de833842cc07d27a4045bc8a4772ec353b163d9c65853fbbbbc1739b56683fa0a6967c49ffff001d18ab7823","01000000dcad28fb0b0f1bd0baf80916a2832bce2644b7f954906032093ac90100000000bac752dba141276f8cb6be7ce794272c645eee9f8e0bd23eab4283254b8046c63f997c49ffff001d35c78c1a","01000000b495e16046c6a71d7d30062aa1e5744fe785c3a94dda1621205e5bbd00000000844619f4baabcef5778554e35ce736b9c7b6d6231734f087abcbb281da8f76f5789b7c49ffff001d04d792e6","01000000053a09c2fb37a626aef918121fbe6c3ae18483ee83005d528aaed7ff00000000700d9f3c96865e9b68e8302084ea6e45cb647465a1ea1f2be91924047034b2ab649c7c49ffff001d326e0fbd","01000000f3abfe082221a1848d5302ff3e06b4cd0b87049b0d116eda6d1248d600000000b9ae0674c6ad6f44a96c68c7b86e7c1621abe1e8e23ea7d2f4ba78bc35bf7fa1259f7c49ffff001d2f010e42","0100000065ac237f5a2bb71bcf5de2e3d842a0c52b3147a1e1bf200387a0d54700000000ef3b69dc0b6f640fddb6e64d60b2fc206ae537975a460ee9051e7762e0d897af5ca27c49ffff001d2519f768","01000000152159670fd0384147400dd1ccbc72999478b155fe606574b1b24fe0000000006b1a5367b73eeda57bd76029c5f3043f79067776797445f7733dbdeb989094bea5a47c49ffff001d22ab8533","01000000add01e2b2078f6fbfe88bec758c6d469024fc7bf8f01d7fc0b379b080000000035f4d5913016ed74edd8b04c00e408d7d029133427bd8259d88f509d27af20355aa67c49ffff001d2c1e6245","0100000017f7d142b543b912f3c822f09ad8abd44bc39e94e3e69638605123fe0000000049bbd0a63002e7d58e2fe1784d9b66824bae3a8e05b96b07b790c3ac870b9063f6a97c49ffff001d1ce49a55","010000001e841649bb39f8232d2796ccad1d7585b7e9c59a88bb92d16e01a3d400000000a67b626b6e9cf8b5ac88e718b87e7a6d8756fa9c7fc4aced54b53b87790e5331cdab7c49ffff001d08dd8309","010000009609722a51d1e8e70b26fc6f887f06ce56d0a9f4f0062007af3e083100000000a95e38ff004bbb44e0c5bcc7d8bae459dafef324592126a6f52d56a4963e8b5326ac7c49ffff001d35afa1dc","01000000781e3073780e65369f001e76ea31b2f4617768e39b2a440bcfa3effe000000004f9b94f94231364baf0ecddf5541f684433c0f992d5b15eddfe04b50e3c4a3ae2db07c49ffff001d28a127eb","01000000dab3796945917a9dacc845ae8046166808d22afe9d7e7a92b56fa72d00000000900207b8ece663d95e0f55ece880af87d3a8d9bd0977effa8eda5b5e55808b7215b27c49ffff001d146ea7df","01000000d9436d52c2825f859426c06157a214174b15055b979a43ddec6cd1c800000000b68eabd475b657786a9b177d79ba75624c6e4ce7cdc6e49fe8c519e70c8f6cbb89b27c49ffff001d06c0c631","0100000012c1a3a558ec69f9366308dc336a9fb0b4ba1f724af3c262537599080000000078a1bf9d66608bad27ff9fcf55a2330419ce367a3cda058ebc232f4d70eb05e250b37c49ffff001d51413e00","01000000d71c75cf9a96501f805b6e0c00dbd3e076db325e6fd142f7f28a0ebf000000009f3550433697b124f75ea55f2b98b148d2fbd1dfd1811e50439f505d6239219fb7b37c49ffff001d15b8ad6f","010000004b28c42e2506449f2d2c03b744784cd802c9cd31d222528e685da03200000000a864bbee78c24116596356c2cdb0884984aeef7655f9ef03a357a86f8e2ac439dfb37c49ffff001d46001000","0100000005eaeec02964d8384850e96fbdcc16eaeadf6170cc05ee4b37dac98b00000000c74fe3e80ce297dbb2d6caa69ff7909d691155ec6bd83b38812ce222d515ff4942b57c49ffff001d153f9754","010000000bdc76c6da8500c1f47ea4b4630f4f933888c742530bc5515f6ecc6d000000008676193f7d492a4eec1d4e070ef3c42d9a3f362247895be29c4c685445dd0c6a26b67c49ffff001d0869cb2e","0100000052a16b0c35d6b9c8adaea9f4bfe0413dbafca2090b7195abd85d22fa000000001cfe9946416ec48faa183ee2b3c37ca6cfbc888f0f5855d53ff0fcae2b320181ffb87c49ffff001d35689372","01000000c3b98cbebee4c72854ad290c18d7fa8599e6fb1f82cbb6d790d7c09a0000000028f9402eda7a26214cd8afb0c6ee83c6b2b5528222b873767e7282a2963bd53a33bb7c49ffff001da80cfc05","01000000e25330712835ac1d1222410136dc651a0070f09848a967f566f5bdef000000003eb49565c4a890715f79b9d1612f5904ddff90bd440f4d1c185f687c9bcc223510bc7c49ffff001d266754be","0100000042b89abb388936566ad17b800573ad418f0f1dadc01b2d0bdb0dd4bc00000000933038ab2f1c81d3f012b2b52688e297ef028af2fb061da851d0f14c630c1251eabd7c49ffff001d04d3ec61","01000000062515b4a11c6af1e6eb18a53f59e26d625a5397195062baf25c4528000000001b7b5d2c9c9d820644ea446321d50b1503b225a2ce21f3beb8c910b7db4a38ab25c27c49ffff001d2ac5725d","01000000ae0adf7b8d5f3c412e7c07e11b4df7fd7d8c757319ddd26ba6e074b9000000006f9df53224c3d5ddb3897618026d13b4ebf9452ab538bccb5e658d4daf0de24f7ec27c49ffff001d36982e01","01000000cb6f21a6038593a2e55fc33ab62c4be7e0da3a9536924053d0056a9e00000000009e4f78626bc28c8e384cba4a0b90c78cb72ace6cca4c7033cfa981ec1ce324b6c57c49ffff001d223f6035","01000000b054eddad1fa1d9b78dc41291e29eae2cb91c7a55d7754cf1047c2f50000000041f79ecebabef6d69a7ddaecb869fd91c53ef43163381a7777874828fcb648cca7c77c49ffff001d3333f661","01000000868c23d71b946b5e4cf854bcd2dc0985e0e001b1fa3bf713e031000b00000000d30a8d811482a0879f25b5765d1759b3aee0211f71f0b9cf3481941e6518ab09cdc87c49ffff001d13e0c9a8","0100000030c13dae8189db8e8d321523da55e51e2bfddee6580f8759b41535bb00000000a5653b1073d8b564714d1ac30c8eed537e86d036eb6d572a641186c7ec65398a2ccc7c49ffff001d1e168b61","01000000f42afca484cd7c0f626afbe329f684dadf3192a117492481e82f31a40000000039f7024ffb826af754bd6be687676ceecbde3648fa0b71bc287409728d7c1ad6f5cc7c49ffff001d330584d4","0100000050710343f468ed1e104d75e84056dfe25e70a165302d5b9fa3fbac180000000069b2f6a7c859dc3dec8052d1dc4128a00116130bbb3eb5eb8dd1ee743f8fd2d33acf7c49ffff001df8f7bf06","01000000d189f45cc221173294e976aac82a49913a504c52e52014c9ad91a6860000000066772fcc242240cec6ec839e5565393f686c638e693a4a1c17f3921b6aae8f6d75cf7c49ffff001d04d50e78","010000009f28390bff70e36d109c568590a4bafc8abb88c1d5b89902427880f700000000887a19c95189c4a473c95b09d6f5ecbf922408ffcab360a4119d5650129987d60ed27c49ffff001d23d7157b","010000001ef3f62ad8f6f76f8bd1732e9f8c14c0aff9d06a550ecc65b37cfa2200000000a26d71f25c248f9bf0bdd86df52fe5c6fd1529054febe2804cbf916de3b3758d67d37c49ffff001d316678af","01000000b11a7972e5b9f92b5e15b41d3d3a9a802f6f634b7cdab9112960853000000000ceb1caa3af99a7624b5b5dc206331fd9866a40465c2744726891f1c195c5ccf197d47c49ffff001d34266f1b","010000008f107f036eacf814c7190e81236ceb1565269a14b33d56e6180a4fd800000000edda7c5ec2536ee55862f4bdfb8b7403dac84f9a797572ee75b725c47b482965d4d47c49ffff001d9c92a500","01000000c93f6be223c328d36e891b147124f73515a5726371ac94bdaa2a822000000000aa6aec4364532485c28e9705cf7cf24dca7d1fec40263d48ceb30318b068153634d57c49ffff001d02eb8b9b","01000000d190e454e3b3fb7536a853b6b5f74e9ffdd05e7ad47cef67fe1b011900000000d6f2c5a1b1f255212a902e953183f10477d3737684667a2a50a820f9c3ad6b61e5d97c49ffff001d154c1f08","010000008d65c7107c19e9d6f90ea34e65dcb2422bd5ea2604b188d69787d6da00000000db84299da7ab4fb83b413ab972cc35cced09f55d88704f1cf406940d6b56542f2adb7c49ffff001d1c45df33","01000000e2233e36daf64948527f4a1d2d3e1de84d8c7ba70fe6732f278869ea00000000299586824b3d8b41775039ed40ebbf6ede25d9c53e340548881b59a3dad976e1bfdd7c49ffff001d238379d8","01000000aacd838b0d3b2e26ff1dee1bc4ddb53ec34b7c0ad2df9e12dc25099b000000009f5d252b3493f17dd55179ce4cb3c17cc3b1b015eb254297cb91e17b0566afec11df7c49ffff001d2097cfca","010000009972aef12c09f39126601b339fac6532a2ca662a6553c98e853c883c000000005605a51987b7f6f7fb8e9ceba2ee4b3ae719b2ac089dc5afe807e0dbcc7dd6e3a1e07c49ffff001d300afe81","010000005380881ddbe303a630fa4b52f1a8d75da074cd9b70b034d84dd0cbeb00000000c4a1c908e089541d7f4f9a3142f88edec7e9459973509d7fa5afc00079d6fea90be17c49ffff001d02976c86","010000003a3b35bdc435d8eb19bae514e30235f51eb55e3da3c29b024a1a5a8400000000e5e499d0f452bc418a5ef01f450b5e2fb6ca68695ad59953a63eb7273e3f06dd9be27c49ffff001d234adfe4","01000000dcd7ee6774056c4520f9325ba1c4a7e07d9afa6a25479db37a9289df000000003159503642f8b1680073e33d72dba27ae1ad296657f42e8b6a709eb1b4364b56e1e57c49ffff001d04f0072f","0100000078305911f1be41e9d34a3dfe8f710c50cdf7d39c85bef969c8cd5b1b00000000bd6c9b4a25b44f43f7724adcf267bf98ccea9e75e8f834352fc452bc4914c37335e87c49ffff001d269b9035","0100000021f3df748915fafb6af004dafb450a96331ba06749b909ae2730644700000000b78c5193ca06d83407be1a3a7133c91757fc7b389d0ef3cba33b8faa105667f920eb7c49ffff001d02bb7424","01000000e847db8272d60599588d2fd76983a6d238c0b799d07203ad9f954413000000008d8027874801d5427277d7c0a864be76f430163d82a1b69abcac0636a0fae6bafeeb7c49ffff001d1b668eb5","01000000b87bc9a3591de57e2f8fa8033225876082d4f8bc44ab542c679d0aa4000000005175f35c33f720e48c4451a16ae396908b4a87300e5d6b5de4f531b4161f06c596ec7c49ffff001d363abb22","01000000f41d482f1037727b6eb6eb339142b9f262e8294f2922111d315669ff000000005782588841ed5037d6ff99ed431fedecb8002a792a39ba0dba2855c223b8bf2aa4ed7c49ffff001d32a3c444","01000000d32acc742f4b2e479511df579a3fb4439e677b892372169e22eee13d0000000002f7ff034ce26f5c7ef14d1ecd8609b172dea9a19204daeb626780666538a0f547ef7c49ffff001d1a56806b","01000000d75b7f38da24420af90a1d6b168c50bbcd71ea30ce3b68136eff37a60000000005b5ff69548c76142f6049e537f3386a17508044ff96d5af30b7a083f38dd63b05f17c49ffff001d36db26f7","010000008dc17e707c25354e4450cf69d7f1ec5a53e705d183f0b7e22ebb050e00000000887a73c221d8f52c428502452b2190dc5c3002c8240ee2d61cc36bd546d148de5af27c49ffff001d03ac23bb","01000000b619c1170add016c5b1492b4e48fcfb015a91dea7344227fab279b0200000000f1f31f4a9cd56dfbb25d99f414c0aa46bc97fcacf7b4e5f28f6492ff44fed2cb80f47c49ffff001d1fbcf7f8","01000000ff524bd8a781f3c3d72e3caed7922782952a0963478f657ff09f47f400000000a58b0abffb4b8476cea2493171bc4a6ad4ab98e5eb3999e126df21ce6c18e355acf47c49ffff001d2b1b8d2e","0100000099edd8315324087e5e3397a2f61138e4caf8aacff2e5f098dff8f13b00000000cb0e987e477e5a792e22b81b723f088323befda723c9c5b083a23e70904b99ce0cfa7c49ffff001d13a4208e","010000006ba030a351ac9f5542a0825cee1239f0781dea861d85f64d343a03f600000000dc9603c559ce98be6e6e1d15b50f3d66243b3854588334a69665a97809c3a800f3fa7c49ffff001d2bfa0b2e","010000006afc84ff18c0cfb9f94976d72dde57000c55cc847d47b18cfa968d7e0000000097c93b878bbf4d7046a893d0a7c77994e9b6af6d066de569d79379edb4621cbac7fd7c49ffff001d2f7ab96b","01000000063686610490bcd5c6e174e0a7cff491153baf57038b32685b8e8d720000000084d226d517b26ce1d825229aa9cf74e7161aef15cbb9c7bd6157d3f8659a29e66bfe7c49ffff001d9b759002","010000009c90fcbefb16ab38256f2d3b8fe6cf7e171930a5c29f8f86bdc225ea00000000becf724ff91d20a086edb050723ec9f30bc3bafc4de3f471aea1add12b00bf8c49007d49ffff001d1b18d389","0100000046567c2a5fd09bf76633e0d6b4b54ee7a0a35b3d975325f662fabdca00000000f66e3d74c2a55cad78c9ba46c5b20f4d5209201b4974a6893abbcd0e447aef0b27017d49ffff001d2a65b710","010000001e649ceafe349178c1aada1950180951c2374fcd6204800dedfb18f9000000006b5f3f168c0dbd186e2e32674dc28c1529e006592da0ad0b97e91baeaf70c854d4027d49ffff001d2821da34","010000000d3181e888b0bba8459b487b7792cf6a6fa4e83542e3f8d9880377d00000000092ee384c1b56d12750c4c02182bb7d078c1d5078b7a813ba1668174595d8d1e422037d49ffff001d32b1c8d1","01000000c5cd3dff270227da2e76a833a08be62ac954c4f38efc1d89e409ad62000000001270e3ed23e797ddb3c048a14482e9e58f5050753a53dea02a94e8ca1123814341087d49ffff001d1a26a6b9","01000000c3d91c846054b2d776628030cb3960fd02a97ed4e9555bf2b51a6aa7000000005756e9d87e899d2de771aea68647689a536ebc309aea92fb4ca2fa1cb5b67a5b8d087d49ffff001d2ac1649f","010000003e25b11220169d7040ae9f7dbc2f6e1e83baa60737076fbbe34cd63900000000e01310b7e5ccbb23311fcea99ac095813cc8a3e39168acf6a58105c4eb293d7c710a7d49ffff001d54c7b202","010000004c3131262ef498dffe6cda6049ca28dd7e6663e7d3bc3146ba8a259b00000000683229e5769079c7d25506fb928b4c6157c4a35a7a8a80dfc4235787f8039bf9f30a7d49ffff001d18178611","010000007884f303d05bfbaa8669ea0974ee1eee6fd5e9683e13f38e96e3dfc20000000021d25a901bcfca8838cc580109f93c828dd43963ad8501df4517f2221ae14ddb8e0b7d49ffff001d24a304b5","01000000899d5f8162681cf4099a1d2c10b081d1cb16af12c64259814fdfac2a000000008c4efb101ea59e5e3317010e32c4fa366691ab1162b0da6c13656f23e3e1cb101f0f7d49ffff001d375cc7eb","01000000ece6bc902a7b7be2ef7f96b0b0e391f956e1b37a80d16405f31b3d960000000077571745e090aa1aca60881eb58276e7c3930539b3423fca3b48970f7eb7623431107d49ffff001d146205a9","0100000075ed9896efb2217f8bea8e3020194fdb576821a653045d45a0235ea100000000b7dedae3cef00d39cc3f13c5fa56714dd133f30901aa43c86513e315ff1d3664fa127d49ffff001d24a36652","010000003407e085329c0ebe243ed4296c4e4144bf1ed85074a360e54a9097c900000000ce89d2347202010745cdbb045441c7325acdfab859fb676446b1a980624cf66d9f147d49ffff001d2d155a08","010000004172d521448e8f82e5f171d840b940154804ea120912054225a548ba0000000052f07e5cc635c6af6ffb8169add1551891fc8bdbe1dbfc2a384fdde5d5e4e519f1157d49ffff001d29a08784","01000000b44ce9a9ff7d1130cdfa31a85ba24ec7956bd20bc6ac124b9f472bd000000000022896523374e3cfcf6725c98e85821a3c51410883ebbc8d7eb39e80cbcd5369b8167d49ffff001d14db573e","0100000050d826f3271604f485d2b04b7ec5026491856cba80392d01efc11847000000003f4cf2add7b048d796b4426cf50ec3838d149f5a23add862cdff07c304d8a0140a1b7d49ffff001d173dae9b","01000000085f7759cfe6ea0fbb755e5d0b2b5c47d9885c7940e2c611d22651ef00000000d4fda321f59850339b73da603fe59d927319982a0602baba521bddc5841bf735741c7d49ffff001d16946963","010000008086e00c0110120c48cdf86a3ebb24d2796f7f5f649e32d01b7d57c000000000dd718dc90a4356b9efd1b6db07a02febf14dc0e4c5113a5d011db76526ebe053781e7d49ffff001d22c517d0","01000000f622c1757eeed2cca6e2fcd7e7db84a84bcfccbdcdb8319cc8c6572400000000315b28e9ee2f695679ddbbc2973050b7bb19a5067e7a8ce91298191d421f563a10217d49ffff001d2fe8b8d7","010000004adaeb33aa2a4c64eefea145fb939dfb37ef0ad2cce494644b0debfe00000000e346ddfb018cf6695dee412134f5e856990dd6852532b55c160ad3dd0a9ea927b1247d49ffff001d1af680b4","01000000dd4c4aedb2736865a4175622d34f9f3b1cb2736114dcfa8f13493dbe00000000a3c6c1e68fa721f00d6fc9a1b0414d89a853474207c0515aea17f7a6f9b57561db267d49ffff001d2c732e96","0100000052fa8d61d098e8a393c424c2cbaf624b1246d221081c85a84a677e6a000000000a3b6289f17e5777cbfe55b2649adbf6d4c133c3986dc5d7d5beafe8f921b29618277d49ffff001d1af12bd4","01000000f9a9334e75fa759820fa3a6fa5d62e5cf5877bcc67d76c06bca9d27200000000867605aaf100fccde44e85fae1c06bf5b63aba6697f03339968999421a287f82142b7d49ffff001d20364064","01000000f3afa0f67baa8e18b163414a92f35eb98e622d47bc5f058343016588000000005cba336bf6f460553fbd324043a9f35c01bafdf41c2f77e5d2a58715c6cff33a282c7d49ffff001d235195b3","01000000a1f2f2b3d1e0802ec927386f666ad5806e74d9d674a3573305d3e11e000000000fc8507e1100137895c01bc6dbe7038c04db1ffba17838baa5938c5a0c147f785e2d7d49ffff001d3218d758","0100000029f152080309106ae8b526d47363a85a3b617f90df3767abc4c43fbf0000000075309a984b0b5deb2185711711310f7cf663941edaffcf0b77ff489524b6c22c972e7d49ffff001d271c3d9e","0100000022b0e1795104586314e52e024a0295177213d6c7bd32f8d44515a5a8000000004c1f49de8f43e627203e15ec18e4d7be005bdf617b25b7e979d24a27724f9590e12e7d49ffff001d241e3ff6","010000002610cb0b0ce4683789ec81838e8eec88e613369724d7ddf17d129b0b0000000088be0f9aaae007208642f86b0d73b4f15995d744efcf928276d0334ea383bb7b76317d49ffff001d22c28696","010000004dd7564a022602e84811942fdd60c7a5c89af7a8883c1c2c8816482a00000000abd3181a805d17d6bc51241c0caecc38d14dd311598f34353e45c65c3a4d428668337d49ffff001d26c4f174","01000000b54f414c8b4e1dc76680c7fbdecb6cb2d5aea2080c643afb88d8d4280000000091e8191bdd65206180d51f5485b154272ae7215c81deb7233909277e415fccae26347d49ffff001d13df4a9e","010000009ecd4e90c8d770aaa3542e17ef1051a2d7ea84603e72120bc3e3f43900000000b76341a1d1829b102e30c945cecd53a9eaa42b14a9e937c1c11b7d7d814e0f344c367d49ffff001d1cac2664","01000000dcb10a95f19097724d27b5848962dd0a1570d359f48b2f8ad147899c00000000ed015c997df338c1d721b2c2385c97d32ccfdf558643918d575635041ef4160ba6387d49ffff001d1df053e9","0100000083d0479dc8812f626f2aae5b26c25af2a725270f7696c379af97e66e00000000cdd13d098d0d5e524b55744a91be2dddb9be52f4c8a44651d05a033016bdda723c397d49ffff001d26a0f6f5","01000000690be1461b6bc5d197b32a0e8e1d3a4b75924a2cf656d8dbb624c4a900000000eac512d59dd74590d534e5ad0425f54a084a30bef17181f92939da848cfbccb9fa3d7d49ffff001d1d55e243","0100000039083d0071d9edf503bea7f302e7bdc2aaef5b9315b48d0c6b38059d000000006cfc00a6b48bf78288cd93d6a8336753852050f097a9cc7a12250b19b3debd5a273e7d49ffff001d1853a3cd","01000000f85880bded8028058cf394d0c63d8e53c0bc1c1996ba116e97d45bf800000000f9dc81f30df5098dbb60d15beb679d0ff5b0aa5bec2a57c13effb9ee0e9cf28a293f7d49ffff001d035e5303","01000000712edfb26af73d6ca5c72290b860f44e2930f15b0ea8bb0da8397fe600000000d509280378f39bf51b0e5b3fd40c9ed46755c517ddbe1c7926f5980fedb34affc83f7d49ffff001d0268f4bb","0100000096ebc73516ec9b630286695f62e3201bbbaff89c953ec44328f17dd700000000932158c95df948533f6b5e2795ca9b21445609c9ab79a22d126b4bbf4d2583d973437d49ffff001d045e2921","01000000d1b2df7febca1fd7d0031c54dbcd58b2f20d7198a5bde80b3725c51e000000005339fa4067a6c47458f55cbbccb6c87b1a486ac4525e5f1d1ae17148ac1ec8bc94437d49ffff001d1763f4f1","0100000056aae14ca5bdd0f94d817f025b1a8683fb9a50d2e9f7afec4bb081a200000000774526178b8ef9772e0c73c2b59be609ab3168ae712084a630e2e8acb98f6b1edf437d49ffff001d93189d00","01000000e56efb354c8060c627852b87500b24c596b434db3787d0fdc957b93c00000000924b2ce0aa435667186cf6ac437ddc28fa5cdfa52ea1d40352c2bfe95c2243714d487d49ffff001d28430277","010000009a4cf311e301a97be98de23bd6b54631a7b44c949003bc504ac94f42000000007c7baa4529770d18d2f72e31bfae756e778eb1fe58e4192752392871fd51f075d9487d49ffff001d1fd340e3","010000008c94c4a60ba044b4499ee23e8b7989dae4492ddad9c8ad88120d0b3400000000bc5f96456a43b3679bac5e196b6e9d1f59e440c4eb974ccd391c8992caa00533554d7d49ffff001d24bd6da7","01000000b674c18be2f077534a3a2b842f094bc146585c06f50eddf34ab47828000000009db5be7bcf99105fd8f42c59326f6118da949c40ee67a9c10fcd1ff02c66b224b54e7d49ffff001d1c1a9d68","01000000fe9f1547a55cb991ac43b6fe8b87a3d44b7a6092bc626fccac19311c00000000794f4f79cf580880ee88e402dc2f4d5fadecbb3bee25100f8350b4028f60d29fed4e7d49ffff001db33a8200","0100000093edead13b009909768e6ef5f4d3b981fd9215046a70858b2c2caea500000000d3b7e7af0ea5eca4842d7a0842bada5a5dc1c6534d3ba469f11cfab4d97b4c7d99527d49ffff001d2c39ae2e","01000000a6863ed54fb1fa25d997525c923e80a622df9cc67ae9c9a75f32d4000000000034fce3a933bf4f09cf51a3dee215cfff1be76e8b11d75365d93cca55f656b262fd527d49ffff001d18f34a8c","010000006a4b4f41518361e6ce3a51c085a0ebebc2a791aba33d0ae79c9d091500000000336c436d235f2b6652daad2cc8e182b058922a4080fd563ec19629549589925b6b537d49ffff001d9e612a00","010000006a5f445cb4ef6f0841f5e5a87a60e490570ba8cb0aeedd40af97bc92000000009323caa6de9be4ddde0f6e771b0648866b7b0684ff10f3b023746e49a9da6c041a547d49ffff001d39e68068","01000000dbac99bccbb530eaa059e750fe2ddf014445018b089974b4bf1cdf6d00000000ace7f22be6b9632009eddf3f605871fbc479fcd32035baa5d47ce8d6c4d1ac9226567d49ffff001d02fed317","01000000ee21bfdfc7fba24c70040a24311bfe0ea16f93de0c2f2cf5246adca500000000015e0417bede590ee79291cee30a761e2afb3c7f16df5ffae0306e46d129340a1e587d49ffff001d1ada6fe4","010000006f415abacec339ca296f9e6c00e16067243f620ad24979d2055e9c73000000005713a082c2f627b68becd8d11fb6c136a229cd7971702a6e1378c4292ac08e38787c7d49ffff001da4189c36","010000009722d221159b649658caec7cdf694242845a96e3082474115dca0c80000000007f04797ba74378f19ae90db9fd6581e303f87c19c60d8bcd57f1204b55d3e2c86eaa7d49ffff001d6fdd5b7c","01000000e783e40c8b8e34182eada7bc212d916b89ef1f447f3b61add8682527000000006d11652084911c18b15db5d37190ade09c61724302a69d2f934a64f747da678a4eb27d49ffff001d9396b225","01000000302cfcafadeff58f2a28c1d8ed646d44c2785f386192ad7bd698b5b300000000e8e87574bd1ab2145f0527bd84aa59927a27a63065987cb6d9ab950f4d72e188c8bb7d49ffff001dd9f5240e","010000008a90070610fd4dd0c09ccde8a060a44b83929c1fa701ca2598638b6c00000000676801ee01649d91e3b0b465de1128ea84f87c73ffd2bc6c9885068383541b213fc67d49ffff001d286d0832","01000000cb7629fbfe13ba550c87681b20d31db5bbc7ea64abb108be9c979edc000000007acadfe358f8fe5b6e9649243a75d22a3c28c7ac7a82ffff9b08af79c0c58601abd27d49ffff001d2f34d607","01000000aec7f414c234e8452c2ee3d16fe23ccdab34f5da374e5127bcc59de9000000001ba3c5bac68fbb5232c732e17e4f5f48eb8ec7492206229c4b80b4d0833d395d75d77d49ffff001d2eed85e4","010000005b811d3b1199e51675df340095387d51bce44c6799a56f5761896eb200000000646aa4356de32b8e6879fe93ae6997c90f39d618381abceab3dd5fe9392df4ccfbd97d49ffff001d48e6b603","01000000b4ebce08804e55da344d94e0c98881d68bc4fe252f53ec7a9368c115000000007fe976b47f72709ea046ad87e40cb3eb293baec65e6c46acd5e2b016492e8c9b0fdd7d49ffff001d2abe9d8b","010000004d96e58ad3f70e28864ff64cef9bb1e9b758735d11ab9d05f9f3244a000000003fb9110c7b8e6a9209f440c50745646227ce1c88e57400aeb33e8ef2dfed19a491df7d49ffff001d22c26327","01000000fa338a26b7d54909c0ddf34a04217fe5543cfe3d826e5569b3222a4c000000004d2510a7b4392764d9a52b458f3d1ec74f736aa14ba369691913f138bb6b92f75ee37d49ffff001d052ad887","01000000a63df89e8bb238e969f66e9b7910cd3164d34365b2f99890af9200e900000000e51b989b06c9fce575edb3e104d5ce0965271b20177b17a2b97e025b10c5316540e77d49ffff001d3424ce0d","01000000e6f075fa6de6e767e22011f5a86683478671bf3eafcd2966032918b500000000d072869d6194ee4a4e0bb8c174cb3dcac704a748022110f14beb6e45833cdd0a13ed7d49ffff001d1cdecd3a","010000004e05253a14ccd2d60316d0ed54d531073105e4dfe1d29b7471360bf9000000009e6bbfab38a5ee5b6b5de0e7a20786b7196d9d6c920e7ce519a2e99212a0b2cac3f27d49ffff001dbe5e6e03","01000000d793973130882798fd20905d4f16a95bf50a3d17daf666d1bc117eb400000000b60817ad39898bdb9a38e37458462b130e619e906ef1160303c33b910d094c82ecf27d49ffff001d1c856697","01000000689bc9fe802d5238a84f4afbb9cc9e6d32ca03512b59add2a757767b0000000076396cb079149362fa6ba61c682b3ad149e60b9ec2ff57e42ddf925b358b46d447f57d49ffff001d0961f6d0","0100000093c44e0d7a5a7a247d442f11f41639a8a3b8baa861a1c47252fefc22000000000e88ca7e0ae9633e7cfcfcfdd1c67257ffe82c75abbe20aab993e7475a493428edfa7d49ffff001d1e209c00","01000000d9b9326901306f362d2e91bf9c4ed51409118fe2a16cfadf7db4b79b000000000ba6c9c97ab323dbb0f673195fb548d7aa3f5af3c0c84d86d3cf53a1af00f0f26fff7d49ffff001d2e35ed26","0100000023ecadd8d13e47cfc49746822c2fd0008acf321ec8e4907f36a229cf00000000e9f2436351d1f567a0fe0db1043b35be579127e3d33a0ae3bceea8f5d65f5c3b3a057e49ffff001d008294dd","010000003e8e9bf358a40231bf1bc7513a3009c262d274e73b0fb98be38b5014000000002628f6c12136b20f47063425c94714010a87a92916c15415b0d6c951a9c137c501077e49ffff001d3cf52a07","01000000f73252d4de0a14e54e79fd030bc9c6ec6da14fa4d323dea485d2f70a00000000c7776f9640c405e9068208c1c2964016a6492ff191503a0ce4597dd23b9678df29087e49ffff001db8862801","010000003a6b0b6c495e53c309a069c3e6f70cbf0d7a2c2ad3a7a08f354dacb80000000082cff3735dde9652f4fa875e6f55cf0db0f9d35c7b572c3c14948df7f81e5a70870a7e49ffff001d36cff4f7","01000000081c1127948e3775d3527235a39a330fb93d0d780d951e17f0acb32400000000845f24e121512c6d9f6549bc0ca86ec2487b58e44b368f1ccd3746550ad1f38e5c0c7e49ffff001d32cc9405","01000000a689baddc7df259c57e89648ddfcb7e499ccc5ae3255b666ad61c3730000000056d8b7e550a56a93c3be57e8010eefb4923bb66f8cf9984fb3ccf3a3e0e8686bfb0e7e49ffff001d370b7596","01000000c1dece210949f750d7d45ab8869d58c56f13a06d185a99e1b950f262000000005fd9ba436ccddec68f91a657aa5eb1250a6b6e2e13ae0f85e691bfd54f32659fbb117e49ffff001d2fa4e5fe","0100000007eabcdb6245988d7dea396a4232c4655305a608ce75d9a6bf3acb560000000024c94ff5cda0889e493632a104fc299f9d2dc832ad94b71ab22d854ff41775ce99137e49ffff001d1fcc8f1f","01000000029a585b88ed967047f39979f20de7e659d614442a52aa130808821300000000dd4f3fb58dbf7b564102f8e5080f72766df582d22d1c8785437b4b2280c0468800197e49ffff001d3971a8bb","010000004c869bb69ea615c888ad420df05759cb5b574513129f46a00086acae000000003753dd4b1d948ad87741f37405691a039191d0257806ba3298918999bea1c657b51b7e49ffff001d18c8c8ab","010000005342066ad2092873ec19cae4a446b94075671d6158ae0749dafea7730000000041db662ab06d6a1169b2173f8e547ebe9dbcdc999994eb16e70f51aac5396b01ff207e49ffff001d33c25182","01000000b588c8b9f368e04647753d791e9425f8e3d1c827bc38c8b8aa17f370000000005a60e0da2458fa49f9469bc6bc27a980ac1527952e246d31fa9493547ea4ac8681267e49ffff001d18be7fb5","01000000c10c25ca4b963e223dd27d4be6575da7aa3f8e5f866268ff1710ca5900000000757c34302e2ccf9840138d055b14d8516e7f64553b101cbffce803f915131aeafd287e49ffff001d3a3451d1","01000000adf3687eb9c9979bdf66d664599d157fbe0347c9d31202869ac0a3ed00000000cc633287f31a84333aa81494fded073a927f1806f9e7024941d418e396db89aa7a2c7e49ffff001d47f91102","01000000e87f2c721cbea0b691b07dee0bc8c8a283d62e19ba3c9380d33ddc3900000000843f758e87d9a83e7ee3b39a187245b627b8b013182cafb2d21aef988b0dee27dd2c7e49ffff001d09b2881f","01000000a49752874adcdd80ab2944fc50c90eb42eac53d44ba674961fd3234700000000c31ac0e175cef7c39c3021dd300d2ff88751bf7af327cf9ca862da1ca53b2086fd317e49ffff001d13d44f42","010000008422c91e9350c2987bbeaaf63e73e47d14b939f1f3a42fa235d333fd000000002bbf3050ecfc688d9d6df68de5e3a57638adce91fd5be8e603bca923c8150b9b18347e49ffff001d2006c56d","01000000dbf72cb489957c8e988a831cb957057ba831c5d3fb594e6ed7873f8a00000000aee5c0ebfe41b7260ac0180df42041bed8bcfe32a360ec733d8a2fe1a9f438ccfc387e49ffff001d23093a29","010000007bccb8843ac057df14bd4f14c943c845fbf3ed1c240608b0c4f1141400000000578c733e3fa70c52fc96c44045b1e84882660a6dabeb8d4b4ed81b0d6f4c9afba33a7e49ffff001d06839aed","01000000d1f70ed52cb685f9e6db7a48349ec5fdd628ea46bc00ee50a73262a700000000522b0d06f4cbf0c5506496f1208e2cbc505d5db9a412867a61ff75d8d3366e66cb3d7e49ffff001d354b007e","010000009139022fe1cbbfd1e1cde141600627549a6cd540efca6acf9703fc8700000000e55dc84a9f84fdb08da357e90690edcee9a5fafe1c51a828584a8f584dfb271ed9407e49ffff001d247ebb0a","01000000119ffdebf07c8eabf5372e6349807715f477372b75ae5fc6efdf0b7100000000c1be1b0610a1ce032c5e9cf6c3d3e1c35784f157ad95d628d6e60c658ff9fac7f9427e49ffff001d1601b816","01000000183c30ad86de8982e4aa25ffa907659b9bb8952543391dd3200e8abc000000000e47a8df9d829ba8874d6060f202f134383f3b59ede047006bcd5c5734dd93892e477e49ffff001d292614e7","010000007ceb7331ea6532c263c473312b4c15b820e1f6f087ec85e58e7d802f0000000019dedbb81f09c1f794df700dfd9282ab977de9728267a8540b979c3d6582d7acff4a7e49ffff001d23b90212","01000000e8ad66342c972510b02c85044f1e97d2721010dab5a4429782a5b4c800000000e8c3cc40d97387d8543e3edf62d845102a004590d1378ee6acc349f5ffd9e4d3f64c7e49ffff001d33dd9b09","01000000d853a498d1b3f35f6f84171f43ee004ad668dd0511d1ae329e3a575400000000e3d876d261ae40f539c1825667599fbc6956d64c47af14911928e79645f611a171517e49ffff001d20fc3d98","01000000148b184e9660476090955e8b9bf07a439a5199e0ecb5e4b18fecd56100000000cab62b09e6ef74660ee03ec23c08c833ec13dab0ed35dfa20e725cbd052200920e577e49ffff001d2fac7fbb","01000000bc5da14c3e7db6efe91ff6e7ee811c15a94118ddd260af6446f762c300000000b6c907532b1d124e3d6f5ac8e8401cbb96d3eb0d30f8ed8228de18f20afc6e2bd55c7e49ffff001d2afb0748","0100000008532e45511f49b81255469ecfd783fee512a989707d669a69cddfac000000001ee0464d05d5da8a3229d3d934abdd904c316ecad056a816d3b6910253edf92d2f607e49ffff001d2a27e86e","01000000d3209f66a5fe021120ea3fc0af3873eca6d4509507e6165e85f554030000000008b19e9cd9288a903ec2e5f1be94eb0065ccb4c79a5a0a16cfbf9c51723289cef4617e49ffff001d33acb90f","01000000fd0b7a98ada37a3dfd75b8f4358187c288a1e594d8378cdcd46fdf2f00000000a0e2909b07a979c3062b58793e83d91055557b58bf0fb8e547d057ef09ee75ee13627e49ffff001d2e183400","01000000c19b96663350f17a7127f860d873d318cbffa2db0215bab01766431100000000ae64bef74678ca404eccb6a635037c7d35731def0a48db59728f1bf54c6c5ddf84647e49ffff001d19f06dd7","01000000c1b6b9bf6cad5c70c6463590a3678b9c55c6f3a451c2180a584f937000000000c520144a76b68043cbeda8f12f30f9cd65d738312d9bed26c8e37752bad88806036a7e49ffff001d03f03aa6","01000000e8657a98ddd709b6964fc7319fe432de1900349d22edae3f7974c8e90000000058f0c580da15f6d72b3ad1754bd98d28c6d9649d89287323479d2f20e7ffde27096a7e49ffff001d42587300","0100000008b076e2ef4e482cb2bd4ad5e1caaac6b9bf2e4d46f64484892d21860000000002a58de79e3c179f4d0e7106647368e35ad2ac2490b4797faf65367ac6c0ff5ed16e7e49ffff001d1a000507","010000001233c8c8a2859b0920e9bc3ebbc09935d7e2dc57c3c94b40961f6f8900000000727062118466e6d2600b4d154968d5ead8b3495af97139a010ba7a7c5e234a1d83737e49ffff001d582c5416","01000000390f332ecce49ace76d5cf2d755e36989fdb540ddaddb7fca9ac9abe00000000cfb8db2b4c6b89a014af4a15107035feaacdb8975b175eed9d2ba95735f81d2bc4737e49ffff001d3a759a97","01000000b41b526100b8abb0f1f065be681800d44cdfa0b94e94a07676de10120000000040154a1af1382bc38d6a56f75cd9d42cc238487a29f2eeb2659353b7bb2d42a903777e49ffff001d4161870c","01000000e8be11e84211e5e8fb678db5c2e06c35fad7d90c29198de72641529d00000000c5d2b84b097234a8e90206fd17e6b1950d167b1ff49dbdce9cf2c7107e24b78d04787e49ffff001d21b94e60","0100000013271a2bf28b7538f5e11dbd94b966595557c0cc4db909a0c31ac1030000000067e999074ffcc002ab6438b1914b967486582f5332ed97fefba8c1ccbb3b748ea6797e49ffff001d0057c4b5","0100000036ca002b2276c6485ac734f9cfef1e7db2e95b41b9578a2660d69d2d0000000064f920127a63503eb75072f139bef7a58ae302d0ab6ea3cef1f28a88797a224fa47d7e49ffff001d38955866","01000000539ef39c30f2fa4e165bd2b770ae9b85ab10a8ad02cf24323fbd6b6e00000000802d16505af2cfe365e538cdbc713d6aba144f2e5de02a2da882b276cf168bd8d27f7e49ffff001d05cba464","01000000dafd33228d9779fe48893f13e8bd4898911b1d3e5f3249f33f747643000000008abd58a57aeffd061e6a99e6f558499447490bcdb1c64982d90b5684311b8c2086837e49ffff001d06d73514","01000000d8f53e6a8652ea1cac229138967c0b7d898a5bb78eb9bb4d600b988600000000e0dca28250ea4c22eebba03b38969cc9e89a1af7b7901b0423d26225d456fd63bf857e49ffff001d224d4e00","010000001e8856d6228232a1a3487a6683716e5485082cd3a21aba9f675b65f0000000002e1bb20742fae30ae0beed81d1ada74b9d8dce19e0959cd36a900aae021b1981e4877e49ffff001da5549f09","0100000043576a7b2710ffd4d441bb162ed343666f40a279203dbf262dbad7ab00000000d29bf69bfae9cfd989d879af02301daf29633bfa30c5b9127e31a97b79135e4ff1897e49ffff001d240b3000","010000008967cbb38cc5bb31cbcdc60ce66de2f46d6dd10d9a92cfcd9cb2766c000000007bf5eaf391af7bec34863b3fa3c0f309599ab1d0976a517843bd7a67c2bae08ef28b7e49ffff001d2a5fec4d","01000000acb6d2474862e1801e4d046ead51f7584ce1172feb54ac398046551600000000e6710ac8efcff56dbac828171fdf5966dffa4cd24b3d15ea58ef7bc5bc1adec6798d7e49ffff001d387dc50a","0100000053a62dea3f3c26dbe3ff172dbdc7100266edef4974192bb71a69ec4d0000000029656b9e01fced90f872ec80e399ef0bedd7ed8574d7df68e4e89c2117919438538f7e49ffff001d18b9597b","01000000821bca75f865950ba630cd59878bf91415e521e46ba3ecb6ea404071000000008622ca77dc6291379a46fd98299cb732fdeba61a8a51c132cb3d424bbdd4e267de927e49ffff001d00f135a8","01000000a28c5d8864db41da90a304e480f5755fb8633a7d673fb78368c73df100000000323e0b1d2550e26dbddc679361d33a388e833f75c6234958ab5fe620690446ea06967e49ffff001d23049b27","01000000335b71523058163014756de98cbb4fd461bada6a11ae21f11afd6fd40000000050685bc2574c496dcc1f954b712062c83333d945c7c6ef110c3bb75a622d8da58c9a7e49ffff001d228d63e5","01000000b71e7adbbeb7d8e5deee61374d943269774a04fa9f8e9b42d084b9c7000000006a4b6f0027b9e790893115a814e7bbb4ab2ae0921f514b892b007bd5183242c6f29d7e49ffff001d39f6d29b","0100000084f81e9c10dfc154b14cfdd9bee68c953cc1b9c3853b0aeffa3d240000000000e717d0f15b6f62b21929b368e6073cd1c8e532e971fb5a0b611d05d7945c0b6df6a27e49ffff001d195d77cd","010000009ec891d9c73672a8c8a6b1e643cb6f61edd7d7af2d8f45c8470dba730000000005c1124dc643d6483b53bb69b013d5e15bc4bffa17e005e5f7c1c7873e243b87eaa57e49ffff001d2e78acd6","01000000f40b2f135430d8f1e8966d175d6aca610465af7a0a63eed5b792597800000000f8e6c7742d76b8d0293e8585d9380f4af23e0c759ebdbc3ddd2128d8add6006a7ba77e49ffff001d241b6fc2","01000000e63b23ae4b4f13fd1b8f98c259832568b9efae0628e9247ac474ce2a00000000089bf12d8b40ee8279b3380806bdc30f168dc909f704a57eef04a7cb7d9346a968aa7e49ffff001d254902b9","010000001af4ac699d4a17fc1adc7490032ff6d29d7f73ab66e2e944d1cd5b67000000006ee5a2fc97e6d00c5b06f765133ea77170abcfda239a4a00b04cd24a240a90a2ecac7e49ffff001d02a7189e","010000006e72ff261e4f67f74b3115e19164fab42f9b745ba7bae8962d50902a00000000607b840862f523e1c5b798a083e8204c43d274f8a16e8f76053b6dafa0e7b8cdd7b27e49ffff001d0746be70","010000002e40ca27ea4719b9ef2964f8dcf7ac6e4ce1badd743860a9d5b1957e000000006461013c26af00e0f087c2c0cee9c06993b49d3ab311fb2d198221a2311e910b47b47e49ffff001d00842904","01000000f6b7c92c29caccfc713968da0c97d186289df1c783640b4325b6ebbf00000000fcc2ced41d23905dbbe632c3aaa2534bd12726891aad129a0273915146febd7638b97e49ffff001d36a2de69","01000000b3877f32b66264c0318cb83497f2b4a3bee50069cf656561e8edc8a200000000845d345fadd3d09af4cd42ecec543b8f15664786093f73f81f0114c211ad0224ddbd7e49ffff001d0702a097","01000000bcafb94859b3fcb4d6f737895054b29304d35de3f413cf0717f09b3700000000a4052d6b367d8fd7810ba5e186be471d915999baf48c067455e9a8f4979fce6421c17e49ffff001d461d5f0a","01000000b91116f4c5d8df789fc514d18a89d699fed34465c1673dd3466387f0000000003cf583c75894d3922a5d19ea46d1152bcd7207e54fb0baa531f10acbdf70a6e890c37e49ffff001d2fb2f6d6","010000000def164dcd02111a4953da9e4d168c393dadb9d8f0946c276dcb840f000000008f95763a4ae7a580b6c4c912caa5fbbfa3398aad0f22a69d36ded95654cab6a38dc57e49ffff001d1bae9045","010000007704851017b4d2058f88356de12d315485ea9acf8f8c6b02ec6d436200000000c6575fe01f2d49e805aef530276ebce416f9eaa02aefc56234f227d3a0212b6f43cb7e49ffff001d39754983","0100000026a22e3c2d19d49a1c1cb8a68e6ab77440c30e5974404a2a806d49a100000000eabf215e0cc526ff9802fe16717dfe87d734bc90bbeaddbcd61a0831e672f010bbcc7e49ffff001d0035ceb2","010000001a95da875f907fb31f13cb3e93e38f01630af6b8b461859d5cd6d5df00000000952bd3ac60b653d7ac8294340ba5e5468a8a62f11f656f3e240b3dc711b2bfd935d17e49ffff001d335382ad","01000000c0b77cb010de866789896e327d6043a92dda7cd6ba5490c4467a216700000000f5e7687d09bfdbe67a68dfc2ab1d0b787ade88f291951635d1daaec2122a4495b1d57e49ffff001d059a19da","01000000781f2249603f4bfe13301ec1deba005e98241149e548ffd2672be31400000000f581260915ae7c66629f990724bde1802974cb5ea0af6441c96c4329ddddb716e9d67e49ffff001ddbb98105","01000000bb70dbc5e2d371cf90d55a5d090591a1d55fc058065e63b0f8da221700000000220cd75fde034b3dbfcded7f9fd764a0950bafe7fd240b513accd5e3d825d20d83da7e49ffff001d1616efcb","01000000254d276a2751fefe2223d6a8f78efb4f095b94039d5944d48cb1490c00000000f96f40d7ef0299e075e0c71b5a9de266450355ec5becb7e0403b9b0f1a60667805df7e49ffff001d20e6d55c","0100000085aedcd5a2f8b6ae72b57ffd77a3058a5b34f06970a0c65bea39645c00000000ada15f8a2dd66cc9ef30394554c5ac7cbdfbeb580108f71433860a04bc51472e81e07e49ffff001d2750f0b3","01000000cc65667f494f489c82b37e38756da9769bfaad88b2934084cacbfbbb00000000534a15012974b6c177ae6558cbe6ce24d6663ec0dfeff7596b75469c49388a1ea5e27e49ffff001d1e6ae2f8","01000000f3e388d62906fa19af28f323d71489585c9bcef8a46c0f219d45289f000000009602a72be34a2eb2545af3d9b3a891e4e65f97ac3192c191dc848084669200b388e77e49ffff001d048fc9db","0100000092d4423cb9d3c7753a194611cca4074bec17fe4897985f25d3221d110000000082971b255a55141c921b9f79e30e7dad8261c39872a77d771f4790ef9a44ac84aaed7e49ffff001d1904c134","010000004f29a0af6afbaa60129214b1d51699ecba44914d28b9f95d3493b5d00000000096003a966e3859a6b3a7dc7c23bc4fe5424953eb289951c8e89d2870863cf31646f27e49ffff001d3309fc07","010000002bdf82913a66761ba56d0f6956cf7de0328116598aac1335acdd2c61000000000ba8937b556454bcc9f5e209059cd1142ad7781a23c614ea1183661ec06ca41d68f57e49ffff001d195a72a0","010000001e630b09c69476e69f1820594e99a3f6faa1fd4b8f554c57fee534cf0000000015243d994b1c93934e8f049543f4daee5f3c8cffce20b58dbb4530109873945111fb7e49ffff001d1b6b3dc7","01000000b4504993fa09436d6562803aa636e6ebb9d717fc934bb7047bf2f425000000002416b927094d634f45fb5feaa1abeea6816fced1b4311505ad91da7de735d24ef1007f49ffff001d31a4bcf8","010000008261d8b07aa0ffbf4043fbee2499b04cb9a06fd2ded0c39907e3f7c200000000b496cbc6d52777991345b8c72e46d803140bb030a870995036773567fe149f71ea067f49ffff001d2cfb7680","01000000e25509cde707c3d02a693e4fe9e7cdd57c38a0d2c8d6341f20dae84b000000000c113df1185e162ee92d031fe21d1400ff7d705a3e9b9c860eea855313cd8ca26c087f49ffff001d30b73231","010000006397bb6abd4fc521c0d3f6071b5650389f0b4551bc40b4e6b067306900000000ace470aecda9c8818c8fe57688cd2a772b5a57954a00df0420a7dd546b6d2c576b0e7f49ffff001d33f0192f","01000000efdd7b6c4ce1dcbb370690558d7a556e431c3011f2546c896a2141a100000000d65bbd7472491e067d4562f38fc5420bdcd1335b4cb0cf1e90aefe828fef88cbcd137f49ffff001d34a93051","01000000ee6de0aba74595e2115667ab4ba69e094280a449ce7a16febb730da300000000981b2f6f3b1eb1928355d519ee6fdcaef5974a92f6d48b9f6d9a9ce27f84364ff1177f49ffff001d14cbe157","010000004013adfdb6375a209ce566d1219477d1bb1fa409fca8652e037822f400000000638de603de0f413ecb78fe8e568410a891c52a322111ce31e092f49dd27398afc01c7f49ffff001d289a840b","01000000632705ff61d3cd6ee2b6615ce7c8df1cf79174dfa5e6dc2ccecf26fa000000004256811a2b75046bdf168cd22bfa3bff7312f3b135b69638ce7c8293c99d363c781f7f49ffff001d3a8f2d56","01000000d3910719289a729f251f20c1fb849ceb695d78a5af988c63cd0e09a2000000002468504982c6dcb1fa2e231fed72a02ce099c011a1248b0556328e246bb77ca3b4257f49ffff001d0844cb68","01000000870d5b79ba3df5ec418bc5fef364b2f177d9d25ad4e7cfebe6b0a6cd00000000226553e164b2a019f292a6f7afd32c4045b0122ee06cc7b3131e990e0d962e72f1297f49ffff001d17d95719","01000000a65a3da0f4a339be4ac0692526d0a6becbe634d0b414a9f3d14c0226000000005474f9c188772e8f7c035bc7645ad0e53759b3c916c45e5befd005b32d625cd3142c7f49ffff001d2d539367","010000003c8ea4f99fccd00f3089871102ed226ac0fa592bc7fa7e4cccc06d5a00000000838489948e93f0a1d99b2271c5ed144867d1b95137cf8a2a4b59a23a00416a04e62e7f49ffff001d2465bd07","01000000c77dbfec7c88b72cb80b87524da0403158dd291a63083422cb89b2a000000000ab6b3d3776b7503382f07e0f061f0e6e26d4a45ae4bd5f1206ad3627f51c3a06dd307f49ffff001d5ab6af00","01000000d3d69a0d275b623bcca42606b012a37e506a54d9b7d9b0796c5e45cc0000000013ebef2e960f5ccd4e0df313e0a0b2f93151b5ac212ee0a499e792696d797cd660327f49ffff001d03795bb2","01000000b1a3ad8536b02da73ac3da8a50c76c187ca6963420db631b8e3d3ddf000000001bbf80ddaef202a062321af98f96b8accc5453ea69cca0c3948d0b3440e8134df9347f49ffff001d26fac5bf","01000000d6f1ad07f90e1453d24b4c06d335bf0264b9d8ce6473b752b600fee2000000004cd36d9fd0ce2cd3331ea284b1db146a56936facd87f80316957ca0fcee4352ccd387f49ffff001d288c181c","0100000066f031421835ff6517076fb46ac107b35fb72949806ee91af44075bf00000000bb0d8cc85b858956089032da2593e5a4d88ba47e147a42971386261e1e95201fc43c7f49ffff001d2adcd539","01000000f2194a9b08bcfd07c1f7ddc17ad9df95da4d70b2ca01284a1c51db5600000000e69d1d7c5a80904156370268c72b49fac16005166584da4be3b780482f11fdc7e23f7f49ffff001d1459612f","01000000d3633d3078d0abf8d5d3da2fc865474bc1edc575e2e9b42834b2e9360000000091b405f31b297af01db754054e7a1296d2650023c45759200c0394f4a59295cca6427f49ffff001d612ee003","01000000d0179badfc4bfbac1d0e0794e8e1bc8fc9bf5a16d6a4d8d944b9c8b100000000b49f1c333f9b75833909e92d42d51125f246a54464cb593c4d78f8f66175f5198f457f49ffff001d285c2c42","01000000bffc3b886541e173c748bd572784003841c3ee945f3a18c6057991b400000000b74ec39862bc410326ebebf2ffb3ff7ee6ce8e319a66d1139843163dced63113bb457f49ffff001dfc3b8200","010000004df1953bdd4d0ea3c0ed110ef0b94176d39de3a2d6601a1f0a80c47900000000c7a80acdd27f32abc363a2d38638cb8e2aa05fd59a736e26e8ed265fc51b21c3894b7f49ffff001d21b3a30c","0100000025d432b3fa9d2621ed019f95703d9bd5e410440ada5970b2e3dbe0ae00000000331bb6f3e274e80fdd65dd03e397618f6879ea978b758038f67a1b7278103a73984d7f49ffff001d2d69d239","0100000037928fc0d415427fca5bbcc9323bfccf049dedb70675ed89c9d97e8300000000b94ce1f39297a4879e738771eb720691df4e2b218c2c06d64dca677c6932907881507f49ffff001d2a2c4408","0100000018408432962848b32f0abb9458eac6d144787d6914c8a5f0c733de11000000004bcd6111d8ff1743d0be0088b90088e0f4ca84183151e7d3246c40e918d1117e43547f49ffff001d08264e53","010000007650416188f013079bd594412a8b072f418332aa8b1d21970131dafd00000000ca0cf2961efbcc55b4f50badfe9055576610a7bb517a97bd253a08ccf58403c9ea567f49ffff001df911c905","01000000a5a563f37bd86f1a95e6aa7b7267a8f638623e0648b352c9b209a33b000000000009e17f0845e519907e1e0eec90df3f9dc2783400a705f556d1e5e182ca464ba3597f49ffff001d2d86cc96","0100000083f1ec3d14584b9a5b4ae6d355565090854cc39c019a6826d9b07ed100000000864e75d79eb7e0a2bd9126a22539e0722fb87a62f7a17af75d537d54977b4a20685c7f49ffff001d332d4d5a","01000000bb25b019c342f735f42a1663dd01a944d1224b4ed8809e08b76edfd400000000d9fc6b43a4a0de27e38214e8afb3b235d3a5d6a3ee6af7e97f77a2824ba7d73d58617f49ffff001d21ee4526","01000000296a872a24057ce646e75c68a2b0aa7a1eeca9548ae68b1233e3038f0000000078a40e84b3977ddb69d2b770926860ee10d01a27408aec4f5ad24e9b5fde2eb830677f49ffff001d1a4bcc57","01000000d47dc3b4d6ac58cef08b71f85cfafae5bd303ede4a51aa2887f676f00000000034edefd13ee792bef86fad84e559d5731e962feef5ec4fb0b9d4d465a47ddb2fdb6b7f49ffff001d259c5cca","0100000042b874b0005064125d1ba8e2bcf21e27e4614fb84d7001c97957f501000000002bc556db336b1a2e1e86dbb28c626d801a4165217d79dd0809053fdd1ff560de0e717f49ffff001d301ce6c4","0100000000b7729b91f770b84c9f30701ac71b0b7911bec5b22d425445baf152000000009ff8a9394e69666c5704e4370e73595526c4bfdcccb888424266b5a3c042dbfe24767f49ffff001d28d9194c","0100000051e6f60f1888be6bf37641ab861e1a2bd9a6b72a8048204bb2febecd00000000764270947bd11e3ea4b6b3f85aac89479a21a8e0b6dfea6c3fe9b3ccfaf0a1ad74777f49ffff001d21be3646","01000000ae94ad279dc377452cfc1b366375ebb617787d8fe995e900699bfffa00000000152942a2cd1210e720eb46c0ba06da2cacdb3ce48745c2368fe5a43a57cdc28c207c7f49ffff001d1e4fb4fc","010000005432ae7440f6956b96f91566a3b32b88eec1a7489fed0b75fe27817e00000000629dc3848f25383a062a380619ba6d74cfc2e21b192f48513060d448bf85bc1fe2807f49ffff001d09344297","0100000048fef2f7dd2582bf9ec267c90fca6f636d619dc36cb0bd185cc7c3e600000000ad102e0b9d4dd44c8643290734d4ba09dcbdf32ff9590af2878851f5d1e80eb135867f49ffff001d09b561b5","0100000043444249a67f240af37f0c77d1edf3fdb65cd2965f09cbcdc01cb34900000000c1e87c8160425bea784abef4d674bd8a234642225d06614d25630adb66bee9233a897f49ffff001d2b308cd7","010000008562d82965da85ecdcd82d1fea2efdef8c8023d605f78ca3348cef06000000006952b4e8f916f91079b93c2fe7754f1b5ea0c8a2ad421181082527c69bc1d6bf50907f49ffff001d3178fb08","01000000a1211801e92369202adba437bfc548b16f6fd857b3a0368db7255a1800000000f0b43839198ac7b4b1e63d56432f1ffad21d3db6385d31343b51f7e87edb247a30927f49ffff001d34d1aa00","01000000c631d42d98c2b88efa67f880eac8a4b7558144fa0f4fd1be7d244ed3000000006dc0e968947b7c7840b6d871400c04f935f23c1f11834a7570402cc2528028cf3c967f49ffff001d1d3afab8","010000005600b9c448d7df10c13e4c1bf98dc24a0e0b8e11df7540f1cf2450560000000067bec1c66db108bb588839d0a33a2e216c7713dbee9995e5b64712e40967a84df29b7f49ffff001d19e319cb","01000000835a7a140bd05aec26d04aea581ad07538bf4613f413dc78b3b3424b00000000f4da64dde79dab2dd9cd6a13c7757a79d5f8b90a99a262538147279e5a34db88b99e7f49ffff001d05eb8cc6","0100000056933f98ef42d706e7873bda915101822482f92537b41aef73d8fffd00000000038049798de825c5b3cb950b53b11ed8f8ef452f4bff3c37c008a7f15913b4798ba17f49ffff001d2f9cc50a","0100000038d82f61ac49aab9af56a39939397edda704a88d87a1cdbe85fc3797000000009a987239266137663fa33991bc35986b9533e16c2e404b9fc132502c01da93d6dda37f49ffff001d013b1d9a","010000004293965842004bcee61458f069788f509f1c759f889a6132568dd5ac000000004d1dda2b7ef5670a7c840ae1230b99f5fc1e6b301a4a8500199c2ff27c1cd269e8a87f49ffff001d3a0b48a5","01000000fafee16ff84403068f29c4b37d2578ce00542d87ec938119e678d0c50000000045b0a129d44fd831eea82b886ca134308cb8d6d73d0eca2f690a9205686624b649ae7f49ffff001d2bc5ef96","010000001fc229d037a6712d68b65288a8a917924e4ebfacc97682123a36dc4f00000000a469e10e971d5bb2efb23eac7fcb9a06bf3b90321d8136d1991668e1e8f0eefe35b47f49ffff001d26ee2b44","01000000dd79fbd4bb307f616b2d6b485b6cd7f4595f42099c2635da94632d5a000000005de09aff7448b392d511e1fe01fe8b7c3dbe02655bc047700fec58f51dafb2f12fb67f49ffff001d1bdfc8a7","010000006d4b7e609e110ecb276f0c3fe7e65dfb80680fa32640777fe3e52acd000000008459404dc1e6fe7bebd5bb02caf41833b8f2fa262d4ac6e303cde2c0b1fbc093c8b67f49ffff001dc1f46502","01000000d8ce488750307ed03de59598bb35cc255b1f036125c46278389941d30000000033e96fe17ed7827ebfad548b46ef440f223a525ef8587cf273756817bc62db1ab9b97f49ffff001d2c301227","010000002c655b93db5ab22f50c30aea5e620c9bf68b2c30afe900dec0fc243000000000a96ea47b7ae130d110685fcc2254a74d2ac81b1dd4cfcc91cf0df83bdae7d1a95fbd7f49ffff001d390af1a4","010000005d09e69d33d724798b0487bea265320a4e22e6eb4a7b663ed4614d1800000000d9c910fa4a91871011bee3ae09e3e046869cfbd15c2d3985ac6604eba93c2faf60c37f49ffff001d0499d8c9","01000000b7c7a8aa7368be7e9319e87c9ee4c362f38abdd14266d133f6e91e5d000000009a1d285c4f6869905c2be8e3820d91b5196d549c1d7786385873b192a039731fb6c87f49ffff001d25f767b3","0100000070afd8e4515d6b5ba1e61989805c6c549368ade6e073e6acf6c0ffb000000000f2a8628ed17e4745c1d8a98a108cb0cb8d6dd74d00f9665cfc7490f5ecd0510bc1ce7f49ffff001d05fb9f93","010000002908207f00f1505e31be51d018ea490e73d70f6aaa05feb6102595eb00000000b9f543a37fe6b142c961681de6b6b75623bc5e78a66ae7d1deb71585e51df03a59d37f49ffff001d1557a853","010000005c8052612f7c4688a4df9c00cb7f49bd5ac636be984fdc8099da519e00000000bd02de2d87648ea24a53a7ab9c31fd0d68c6854f32a372cc3bf6edf0ff98809602d67f49ffff001d1cc9f8a3","010000008d363336aedb431719dc1fac4b1acdbd3caa6d44b30da99e13bc79ea000000005caf4a0abc609a3c7ba4cb18c3e4ba649c4681609aa829c037bf180b05c356e874d67f49ffff001d7358cd01","010000006452162631b1847e1e0a915a02e3c239bb95365095f207b34f397fc800000000b0d35f2170bcf62fb1d84690e0db19c9f8b9b184316e38fa26ff679c22e03ab10eda7f49ffff001d25269d31","01000000c6cc14e03be513f7670369576ee7bc39a37cb5d5ae935fec90ec3422000000006251e92ab984185fb12c3afb1384f62032cf23fc262be9a8077aba51b2f7a76c0fde7f49ffff001d2fdf96b7","01000000fbc5de01f4cb0b1317629d3abe89e54d05d9106332b68e2026b94ba1000000007db71dda764be99ee3dbc38a1db45c9ab6f81cd9326376acb49ea8b9f9d7b8532ee17f49ffff001d2ab449b7","010000004d1fedd06efe698c6ddd56f7e1e973df9f9fe31a4576468fffef24b700000000762487b3e5e43a2f212fdcdbe8901777f5f195bc2c1ff948f0707e39c0a25c0e3fe47f49ffff001d156622a7","01000000a0208f495a89fa58f6b80bcfeadeed46c9780af1ccbee041a414b26f000000007210939bd6688a6091d8bb5e60c1678c34941c69d07fcb56a4fed0107b13fb3f10e77f49ffff001d2c6928ce","0100000044242a9fdfcaf2cdfd4039532b19c80d0c08106e4993b25e400972250000000012c39addac8727fd15aa2e6c726a3462a1ad40bd67f2d54292810ecabab1c88a9ceb7f49ffff001d2dc5a193","0100000029e8eca9efa24dee92a3aa56ac9125bd68c1b1a15f342fbd91615d6b000000004fa5de6ef3d583fa7106b0a1f677be0b58720b42d84898f4c25db8f91888cef6ebef7f49ffff001d0272acad","01000000b31e79f9818b98e390c4b6b4bb3544a23d943e1c50b3cc430c40a63d000000005ade15fe2d4fd53cabaa9ab899bb4459853b791cc68dffbbd766eb65faf8fffef5f37f49ffff001db394a60e","01000000211e98c10fffeb7432a6ca1e29e547352264f9b78705c47ddbc622da00000000f7020aea49af58c0596da6b2d34224060fd1f2af800a664cb62c8cd92cff315ad2f57f49ffff001d0848c6d0","01000000da44ecc7834e5cdb92896df26aa8a6a58a21569784e27366ea63089600000000f48efa4a46f0d4dd24de8fa54bf63356063d094ba25816c7915d6cbda2e8ab9a9afa7f49ffff001d07619c7b","01000000d986f1ca7b4f7c50be081fbe935791d6d4889a82bb54dceb4160775600000000ecbdc9c5f818ad8bdf209053adc8046c22775f6df238263db52fb36ab3733ee9b5fd7f49ffff001d05c98ddd","010000008fd9abb222dc997e63105b83b5a8be4592a7f1281b963db5e0009a9c00000000aeab91a4048288f740df060e3224ffc719b97d7176781f42c5a21dc1fedb533809008049ffff001d33c5f48c","01000000b1473ed48bcace3367fe9abd05e3671f817e8ba89637732e38bdc31400000000a496b1aa55ab3f81d071562d61d097fa4ee294e11e043c54118c2789bfc091f642058049ffff001d1bbbb942","010000002e5ec76d9b0a71d5f931b6239138f5ca6504485c7e35b142d9fde96e00000000304bb63cc8e70b690450cedaf261e2f5a5d5753365e151e4f7c81caa7ac530c21b088049ffff001d36efe314","01000000601ab4fd3e1c3ec4e0ed1a9b67872312569605b9a804362bfad34d440000000011efe6266cecd277dde1a75d178f903a44d1a386fdd9b8116ebec4b8de0e5dd885098049ffff001d36abe901","01000000d9d971f725162835403db0794eda4fad8f66fbe9ebc33aa8d2c774b500000000d3f0efb9c0b2868c90319bb1c70fd19903ddede4a06a984c2a86a107e7ae585cf0098049ffff001d1a231bb1","0100000081130881893b2f38bde2df983c0bcfab017477337fb59e5839b954d400000000ae62aade331ce4f98bd8b0fc9906c7f46891ca854006c1a3058f14481f916758320b8049ffff001d1548b205","01000000bd4a6fa450ab48df201424c0b18804a0cff259f5e87902f04a9fca8100000000db0fa701e62afd9777cbff6900d4811c92e1ace42f1c51b9c078ae3a06452c54af0b8049ffff001d2ce0447b","01000000808929fc7ea5a70049e3df3639b08ea29cec5f3bab197836d25d91b100000000901e9e260f653aa1225168b5150ba1b07cc06168d122553adc2a0fc0abe19d87ac0c8049ffff001ddba46d04","010000001a598a4bda6d7f1ab135c484bca7eac365bfd47dd85cbda2fdb1886700000000fc23107791deafa9cff58a792a6cbde9c4858c5fc3d75ae4ddb2b34505458713f10e8049ffff001d2c70a5b3","01000000b92df72129eded02a51580941fc7737312e6d9ebadcc4cd10d68b48c0000000078881c7cc9ef3b174ba58378e426add71685e858d2206e4d4233a763e50350c4fb128049ffff001d055e169c","010000007d92a6a2e7e5ba119ea4a750f6c3d77b23a6c59d41a2ce94b1299150000000003e6332a6afb395e084ab079058602764d7476ce5d1d92c4ed295538164b260a8aa188049ffff001d2d9e4a27","0100000088a777bc611a10db83e1530331fe396451c1f03d8a2f26e32d73322600000000987e2afff26a671bfd3027f82e40434247dee7a10206030fe2821b7e896131846f1c8049ffff001d1e9af552","010000007eee1bcd753506a8ea8a11d93fbf21d41f11f10b6e43970c7baec9a50000000076522e43988e6e132d93738115febfa6ba0577c347dbea8e49ef5771e1c0ea8e741e8049ffff001d24d0f156","01000000d4e7dd8626945eb009cbfe19f1ad8a22728725df34a5fff9aaf9967e000000007bc968b225067d6ee03ed36b0527c0a613ca91cace5eec2e2f884794ab11eba0fa208049ffff001d37bf095b","01000000eb166e582bf3cbc16cef6c233704bdb4e5d17fa8e47d824b2bca56bd00000000add7dacf2732d3bfa51745e1b682d8d66d8426e97d260cc6288082c818961431de238049ffff001d06264c7b","010000000c7b2dc6f69de34a7462efb1e136f413165bafe83a82ffb1b6983a6100000000bf193065e16ab23832c5a4fe5e0b2aef836d15f329cd0167f1a45003bef7e24941268049ffff001d3915616b","01000000ef08283063e607435cf2f52dc9be6e3e8aa90b189e3724c452264e5a00000000fcd497ff1a8e287cd8c3b261220e6973f1a19bd2ad94f9e3d6244cfe060fbe2c7e2b8049ffff001d229a683c","01000000d961786f6ce0e5b95d77ab79605892557711fca3933e6417f989915a00000000efcf2895cb390518bfd4ddebc20e2add5b912f32c51cbd8eb8916632b1c54da7352c8049ffff001d94610202","01000000722c801c3f9fa0ac9aa5625c29950a5941f58c3aa445543a6b9293a900000000fdac2376a42c774b52c538bd26f25915ed2945753eed967e9045def18b1443a6472d8049ffff001df7edd704","010000000b99bcfc407d9c04b0d5e252069f27fde3282fd47324a9c3342009d500000000eda5b25242b08a80f832fafd98f3effbd66f8900fc57d46f32e4a1c19a05f0c948308049ffff001d2d1f46a8","01000000af5e20d7dfdfff6adcec4db59dd9981f96d96d9bea42dc3b242f98d800000000715ec2859711d583493dff219c620feaa746fd8d9974a7e98e6f478d07fd35db74328049ffff001db0708906","010000002acd82a2d56efdda2c89390240aa180647045034530fc3357cfdeeae000000001f982da4f358d04fcda07549e33f5d1c3263866ec52ac04531de47c9dd5b5608ac348049ffff001d2d8f5296","01000000cbedd3af783123d6b72df8db1b7cfcaf67bc92785f324e303d8dc3d5000000001c510244aacad2c81c1ff3b3ce89fa348840733e91390c3d3b2c54c4ea50dce418358049ffff001d267d8b00","010000008b0d9192a9555863908e77e17840e862bb38dc7d1a215c5bd8bfd8740000000086feb16a5a05b2a9dbdbc436f7e4a7ad7f46980a6d75cf201c50a4d6b034f677c1368049ffff001d3116134c","01000000cc627b1d4aa221238f4baf645c22b3e5a28485fd91bd5050b6486f2600000000069089ee432639a41778d5649fa17713f0a21da1845de91f486f133dde2f53af5a3c8049ffff001d02d6cc7a","010000000d91ba66db89b93aa6c9b05fe21224aa458a2f9f3428fc8e84d75b120000000026e7436cd78943ac35f7f693725b74d743366c43bda4b62e680b62560a2bf82bd8418049ffff001d082aebc7","01000000dac027df8462efcbd36961836fe9d6378fc3cf220456913ede12934e0000000009de753d51147133aa0fdbff869ab1906c49f2687cbb95ab05a251b726eec145ab448049ffff001d02926e09","01000000bda91e25baf228afd1074280809eaa356ee9ee7f0974185d78a38a8500000000101ed9b5a0519ac30a8ebff4ab80e3978a80a6dd9844774f98ba25dc22d524b23e458049ffff001d26a81500","0100000083f8ea9b307f755dcd00d3519d0cb2672fe4b3d6a640e46a049f7fea00000000e005b011fb24cf3bd442f29d21f52a1071541c5acfea03f578de044a9dccce4de9498049ffff001d1dd31642","010000005702f0a37910a6ad7d25b5b1428a0d9b99984912c49707bc21aa9f4e0000000088de1fe9626d6ad7fc80f8fdfa79bf13df182dcc5d0a8a63cef9976835294153a94f8049ffff001d39159675","010000001681a359c7aff5f98a6ddd216b436d1ba60844c0dc2ef12fb1871e6a0000000092126714267869dab357fade793d972826b1eac5f757f84b2eed16966b9522e093528049ffff001d2d526515","010000001ea8817890dedd102cd64f098b4b625e6dcf5e9cf18e9faba8dabce8000000002b5a9825af49b201adfbe0f1109de196066147bb352f2fe4c82b1b862802e1bdc0578049ffff001d03912aa9","0100000081d9b051da4cd5ad57bc6e0e643f58ca45682096941e060b83f8e67400000000aa064dde454a6dbc331e7e5d7464d41da3d0b5552f05550fdc930a5483a16effb55b8049ffff001d5317c112","010000006b939053196d17fbe25bbf80a49c16c09e61e99d19bf259c7a38100c000000001e5ac6946950e675f7d5ec6f4af22f53b538c2f0347bf41dd854fdc6e12a41417c5d8049ffff001d22920255","010000003a3178561944fa806b3078cf1b883657864217fc72ca66ccfe331a3b00000000e7f7392a4fce7a547b05b03b1fdbcd7b4935488302559735a1fcce4602326545ba5d8049ffff001d5c06ac00","010000004cf8d6d058a4d962b913d3b1401a190320464dfb80984ee2dfc9bc3b0000000069a56a99a0389616332c7bbbaff4635fe4a5a72ab5ae7e9d221e4e808730cb1df15f8049ffff001dc277fe09","01000000d10e7df9859fbebb16f5cc4a0ebdfd1e14a343aef5fd34d79a3dcf78000000000bf603cbed4dca15f883b9db309246fc11503d9eb1e1e7698468b17339e9197908628049ffff001d1cbe648e","0100000086f84a220a5f290501c27ab9431b0d3cab742997d52fb5ca65f6428f000000008b69c692f93d025efb8a5c4ec217da02333c4fb318ee0a81ff019099ba257464ec638049ffff001d36bac008","01000000d64e07f31642090ccd075a17c41e0657048643b38713015899e48d9b0000000042fd57f7629e8502940ae1123b6d463c485218d002e4045dc2fcd539f7b63cf172658049ffff001d1ecd252f","01000000b97a8a04ec945c7a3be8328543164f05be2301f34035d72fd94b289a00000000119d247e888a982e442c92a7ab060b6cb2e2b9a9c46398d58915ee0613354a9aeb668049ffff001d31924456","010000002718f74576c22380e030f6f1b193f1793eed96797483228ae05ea35f00000000421813555cc8c348cfd9624614f8c6b516f32fed5ce207f714e71c0a21d9bc8bd2698049ffff001d36922c7f","0100000045767db7faf8d4b311ca68615df4bb50fa5fff424404c606a6ae2e6000000000d457cced9deaa9fb0c95886e4bd2f57b1bcae0cd4a143aabfed08caa811a59f1886d8049ffff001d1d3d584e","01000000e8ecdf098230760e4e7c99d775901e00a73b9da059c700415f9f09a3000000004a95ea22b92eed531bff997530d6c75b1255e66d449a9dbbd2191164b1ff5448fb708049ffff001d1853d2ba","01000000f18be736b1c3de68c055e6ba8df0f43dbbe6a2d90a2e09cfa1bf63ec00000000fa4a05fe31d0f6650fb302fb7d2ecb494f77c8aee4d134379b6d40799c786e2da1748049ffff001d04ddd9f3","01000000236a5263c7af6e374f05cbd8de70a4824a2b7580aa11e96003b0454c0000000017a4ef0c9b0bbc990e0c32efc2b036d82693911359c4d88896a6c8666c3dc5895c768049ffff001d2782f583","010000001d276e177ea605c4f68dfe4c64f86fec056f3311b879f772e7f5452c000000007fc11695409178b7c2a53ee03c4c36b10ac9f4e783ded54dbdee5a432364d797d5778049ffff001d99ceda04","010000003c3c0944cf14d3ebbf7a9df6661c18b0d3f1f0bc841f511910e6909900000000a5c483e1b32787d9b6b0785601a33a4718c74122d458177b4cd586e4d371f3cafd7e8049ffff001d1e78d468","010000008d10d2e1dc525c4d3f39d6128ef8c6ce6bf29827f2c95d3b8c9b6ca8000000004c717c10363b61641d46eb0a1d16b573cb5c4cd685d4ad162e9ccfcc9721c3dbef818049ffff001d1c741d8a","01000000fa96a4dfc9045c2bb53e2ebb8e7594cfa9bb0b95a048cc718ebb5e1b00000000b038f3e4a3a1959c56be1ddbff91a1c90393c19781e302ea6c3827320cbaa5a550848049ffff001dc194e40a","010000007dfee8aee32dc722cb38e8eb27b36ffb9953d3fcd0700e1491a34a7f00000000521bc9c8e78c0703cfac4749e12ff07bdc53616b3e257453f32f8cd4969ca799a5858049ffff001d33b6483e","010000009e7cced4d0d391bbd7db063c0f24096294cbb6692365b470975875d3000000002025d4db381dfb8d143361162f74b7ac2f3f075fc3a731d71b8d7b95b8d52d5b858b8049ffff001d2a582cb2","01000000edc7d13d323002255e10f1156ae736687fd2c56c64d9db246def7f9000000000f3f0b931ccea64a7cef03dbd5d43dfa1c49eb0d4f57a85d49ff513b692798e75b28d8049ffff001d074f46ab","0100000075b95601570dbd477c80d3bb61c3231a963487524a28bb9ef0bc30130000000035b9dbb1023cf02f8b482fc3080d186c7d9af48208e0fb2113233d63a43ce8c9fd908049ffff001d2efba6d5","01000000659a8086fdf00c3d8233b03799d82ec4b4bc7363b728f6336fa4156d00000000480686ed0c848cf7dec88f298983e435f8498ee236fc2dc3e152388029fd572cdd968049ffff001d157915df","0100000054ceef373dac86bb0ddf53998824340bd4268657ce8035b0d4d24e1e00000000d12a28b43984a03b6ce372186897303afaad7d1b03d66a1fda47077ee91ca71b6d978049ffff001d8c1c2d02","010000008387de3d211856192b0b674d36fe5bd3f9b21a52bf3ee2410c72ae4c000000000c5cc720ac2f7b204c79d536260e5585479d15a9cda357ab1e6c56924153cd12eb9b8049ffff001d0928e3e6","010000002c7193f1c0b882a65a49b3319c1a8788b1755c7fb046882d34545cc4000000002ec5d0a7374e302c8058bd53d711d6aeb01bf4e8d68c93f456543474bc45b0cdad9f8049ffff001d0545df12","01000000a2c634a26f080c31010e048e6bf72db41b3b0d9bd64f3f69b7916b0600000000010c91637e6c55588fde5c59fd30f775fe7721d7eae20185f4715f68112c027d7aa28049ffff001d031aa46c","0100000067532ef3eb5d4e2aac00c7462be65fbdfc46bda8c4d02fdefff226e6000000001c84ec2d9e3e3a5888e142e35efbb65ff7d7cf9f644f2928a87eb3f43caec61539a88049ffff001d1ab416c0","010000003b4d9157db2b6fcf8d804f17ac0dd3813068d75cf530d85952e1cac300000000a4993b6939aa965ef0d2166d41a3efb9441fc8f0baaad6ad010139b7ccd3597bddad8049ffff001d2f75e063","01000000721e2cff70ede901ca5f9d4533779841ba139d0d52792f806b6e79ef00000000d05c03e85276828b373e51426b9ee6fa67974f0b45b65901ddf56dee1f3b29de38af8049ffff001d17e7ad89","01000000edee5c7eea64333c62a9247b6d9b78f748a339679209b9a402594a5d000000008fc3d5e4b475df6770dbb58d1852b3afc299f8391257ed59df7e83c1511cfb2fc6b28049ffff001d274f513c","010000000be8237a9db0990011f90c18b5809def490151680d237569177f005e000000002e832a7053549bb1c9e1b4236cb3a2f34369237296ab94cce487503d030689c6f0b58049ffff001d38e7626e","0100000074bc91164bd03291001a03f7a6a1866884a8a993dc2e9f7f7a30af80000000003aedcee16004647576d88f8095b5fc46a721f54f2a37ee09324af88bbdae484d50b98049ffff001d237ccb3f","01000000b82c47a71ce0ea9314d865c2237b9b41f9ab48ae45b95799f2aa0801000000003cdf017bb4989d8f954aeb8b7524ba31c7d176e37371c49acdaff59bab51956b7dbd8049ffff001d2cb4b9a5","01000000020f6926cd26b2429dc2ce987c61700c572f1e8bb54d3c412ff3336500000000733e3698e94ee47a79bffb430a887a2e87e74c6e823aedf761e0bb914d176ffa8abe8049ffff001d22f0fb03","0100000022e9eb87af335d7ac76c245e117d62fb3664c531f942b3930ad0e32c0000000033b6fcb4d7f9bd138bb480530f7760dfda9570b3f3be50b7497a9326e57097d6edbe8049ffff001d74274800","01000000b8e11081077150fb3802c688b89a326632f286861bbbbd190a568b7d00000000783b2b4e09a75734d41f3206c22277a9875595ead5dcd243a271b9817c536c4481c18049ffff001d32f79540","01000000ef6b993257f51f5125b50af4a23b15c8fb3baf7a4375374816926327000000002693cb458636025005a3f91dd714ecb8c2933e2c508371d402e75d838e98e5b625c58049ffff001d28e4ba7c","010000001752ec0a4d35ac9bfb72e0f22f6498786acabf7bc9aab34453529d3a0000000060e4aa0b24369987b30c9624eab12f12283d30a5894ddac5660742289863310c7fc68049ffff001d25061363","01000000d878fcdb119dc84cc709faa18f241bd7360d672c6d5f90d5683d8560000000000936997a590e17a4b6a7771b472ca646fd348c5140e08c6d5e532c06dad28940becb8049ffff001d66cad718","010000006677b25637f50a781a28d6e9cb41ad821637af132b2a3b30ede10b71000000003272ec12bee5567ce56c37bf3c2f021c64cc270a240ac400cc27b3c50ab7f38493cc8049ffff001d01ca29d3","01000000a6cc5331fc739ceff639b1f38b1befb1222e5b43924b68b32852dcd100000000154c537b1690468c83c2fda6d9f746e5d1d4e2bbf87681aeaa8759d272e727a34fcd8049ffff001dce726902","01000000a0d45edfb231e274999d78d432a6df080e4beb6953c84f3a64ba14eb000000002e2416404742c16a1b92e6ffe55a458fa4e6648e15bc1f78e765cd5fcdbc8c6fffcd8049ffff001d2f8f629e","01000000de2c2c15c5e2f23e6f772ba9049f705a0f7ec35b8aa3df52ba544bd600000000205a44a9eb2483d1a5b8efd28448ed6fbab362e64435bbc2f40df6b231c4e26dedd18049ffff001d1389e0cf","01000000a715754fa5cff886120d67f82ca559f918b4d92ad00464ffbc5a976200000000ba32720f485797fd1453482b9cd2972d18a887f8fe0c5490516bab64393581af10d78049ffff001d2d93e563","01000000a52de295e3caf94de1b50fc7a1a6bcd1cb6f46038a407f74c85fefce000000006abc4e1d92262162dc7be28852bc39c03ea5fec0d16729ee566e50c23f854985add88049ffff001deb566907","01000000c459ff897014114dcc9fea66756cac24052abcc81df4ec9297b29acd000000008ff30149388cd03d4e1f5b102db14a362c466fde89c8eca870b6418e2d612919e3da8049ffff001d0551e729","01000000b09720c1dab8683c5ec9ee797d36113306192095e9661fff941aaad600000000b4d1a248109170c682e772075fe642bb7725e83c70f65b00da823a5e51d21adc63dd8049ffff001d091db2d6","01000000dd1db2e263b304f7450562d4d638da732b807dd5e41cc9c0d88f163d0000000017d4ca5a4b2f8dd614fdcabc77b746e998392f6b49144c4d9311604ee0f1cded04de8049ffff001d2ceecc00","01000000756cb5caf99258e5901501d79c94d7ac0ae1a75dd97df688ccebf3c80000000043f79ad39524d5530a9e95834fa707a9f51880a9de10aa2416404c2abee79a216fe18049ffff001d2c36826d","0100000099d9930dc071b594dfbc221221223bf3ff5bac8a5ad8cd5d90abf0aa00000000c6a967ca2658278ee83ce71b43d6f6c84ac81d5c3194157f35ac00e79f85650fdde38049ffff001d52f6720c","01000000157ec295a68747723b4576399a8aa48c4029ec56f3321c3d7eddc3a800000000a783127adede247301e1cf210a65af00abb63b26f83f2e2c6722d3fec1059237afe78049ffff001d26b78bd6","0100000006dc4755ee0dc75d5b7750404387c0e5dcce8cc40f8c7abbb914b2d80000000025fe17e7fc2207b9dbcb4d43b9a54991167881a1e8bd44d3401b487b59933f308de88049ffff001d12c76d01","01000000e402ea122b78f274f39cc3f210863c2e3d4ac580205258ebeb1ddcc100000000e2a6deede59de2e9d074776c76c293700f3aaf011698143e2b4a054943df80f2dbea8049ffff001d140ebb5a","01000000bac41a6cc476bb6316fa37c23b2c4411364e2dbdd55540032272c26800000000d059785583135ffc434043adf0cd3ccf5779d9da99d716f56295d0d878d6929c3af18049ffff001d37563eea","010000002c960863178e77b9d522e27a5cdfbf4f0570c5ceade29ed39dd6ddd7000000001d0f2fa4e5bdd2c513987a494063e8398c32cf5e2d9dff4ef586cd84616dcc3e4df38049ffff001d1a96f53f","010000003e01e21779fc3f55a3387c3a57eda43f29b15132429b7d07a2f23e540000000089dde34ca99614eb01b1c192d47c06fd8da67a9e8504a049be9e03a419beee51bdf58049ffff001d1b50b8fd","0100000050a991b1a49c3682fe955e64f8370d6224772ef77700cd709445236b0000000079957d32504d88769cd18f78c6e23679625c9d481c48d7b75d9b23361a85bdaed3fa8049ffff001d22bf6033","01000000887f8d5ae51603884c3daeee65c84ff9a65a35ee1b00f8fe2dc4c4c500000000d19997d1742ec0ea8a5070472a4060e92bec796798d552acd84a6ec8fb81d19b7dff8049ffff001d26d2fc66","01000000ea793341e57faff503120e9215979e7e96d0b7524951df427c5deb6e00000000dc0b9300ba0e71cdccc6e30bf74ea2a3c99eb10d60ec2987efd857d70c51e0f146068149ffff001d2133e0a0","01000000ebf5c100ff4c3773c3b19b384b88425fa981884cd594455769de0d370000000036d1fd2da9d49d16079a4b241951e7fe4108038cadd9bfdc6fe2d8bdae2395d9fc0a8149ffff001d1ce26356","010000002a04d6b06e6bf71b005b6dd9942ab251e613c231f1d20c34b77a98f900000000efd1bf7ea25f75376751a417a21803435e64de3def8be73017a644450211a4fb610f8149ffff001d30d964e1","01000000c57868e6686d224aba7ac7cc60de4aa6854b4187b79b7d57821d03b200000000b3cd49c3b7705a1f0215c57c42e165af535b391754a07ad017fcefa297f6890618118149ffff001d29821eb2","010000005d761a4d521b81466cfea153657199413d505f94db8aad86bc0da8f700000000093389dcdc551e677474e8e5a1fd2bbcf2d9f409a66c8cda2f1a7d62e6df076381138149ffff001daf778809","010000001c67a5ab3930f66836967156228d1ca828c13108886df04596280b7f00000000d293133847fce134a4169c1d3b2ecaba76b0fe3a5f2c872147f55d5aeb1134b41a148149ffff001d06e75b50","01000000e385c9ba6c6ba5718ee38af4e6cc01935d83874db31fd10b411430bc00000000d7a14589d64166623f1a566e1cdef47d183939f968a354917a36c559b7f93eee03198149ffff001d8862e013","01000000af428de0bdb0be7b9b14105d48ddfe30d8729bc051221fab0326a903000000005309aa4f1b4d605302a286965773eccdc46981e54a7643a74450c3d5e6923cd017198149ffff001d0672f561","01000000c670edbdd11b7c55f8def290b2a1c06b6ee5667a5394eef6b287807c00000000a9d61f2561dc31597a75562675108cb94bb4261f7fcb23606238432cac9eaa7b7b1e8149ffff001d1c054f40","01000000a8dec1ed60fafdbac02e9dd460cc16706dd540b208198455bf94509000000000801f9265a748dc82f7208d7375879a9ef62b08d7735ffba23c826b8d3bcc7637b3238149ffff001d39daf186","01000000a3083b81c1dd61264897706eae0a858233e1a4e8f3019b94ebec035e00000000eb8d51aa3db41a9a5504b72080f1768ab4fc5ef44acf2d3c62bd5e8b8aa3a526db278149ffff001d1fceca96","010000004283d5455bb396572fdd4601fdff5a6f7be78c263d10ed29efdfc17800000000f84812093997c673268d672fd37017ac01fe441cba18be3bf7dcc42db6cd2e90012d8149ffff001d17e7e6c9","0100000083719b4497f9fa148c12eb14ce1592f5e28b4e5f8a18c00d672df1530000000042ccce3d283c6ad8cbc8614d30c133cefcc6d7904e01514560f584dd6f623063b52e8149ffff001d30b8b106","0100000014f741ad61feef5ef14f0ed1785195dd8ba4fbbd62fc96286ace3bbf0000000093dc75792bbbf7d10f99df71d349b34feb26718f6cd29985bacffb52c5cd74554c328149ffff001d2366511d","01000000aa54407ea8db1471f93c9b0101975d6932fab93128ad7830499a9a6a000000002d1ca25e869df60122c8a054175f0f57c1bf65c5d19681340cb6c58785e82cb900358149ffff001df5e0c60c","01000000f5158c3911655fcfe1a505dcbdf53e034d1afe8589fd9659eb4930e200000000993599eee7aae37f5feb809c9645f3b452b4e97c0cc1b57adfa8d746ec04e6a98f378149ffff001d349ec814","01000000efd19f3bd183a6b5433f761227d9d8f913f9ad1a98f96416ab63e5ca0000000005480242a03e8347e94d7608c1a26cf11fafa64c24620335471fd3c73fe2604dc93c8149ffff001d27ec860d","010000005bef6c8335f995ba0798451f0249ec49d297397f31a594570bf3746b00000000b99cb57f0bdabe0aab518bcb6aec5016e7c8bd280cb2fb66fd7fcc9c530ef0b7ec408149ffff001d75d88e04","010000009120fab3b9b6f5e7a07da7b0d76623ad1a69515d53ce03858fb4e0b000000000ed92b223e586e351e4908769d6f6eb83f00e63ce7993af8caa1ec413e514c6dfa8418149ffff001d4ed84a05","01000000e4f883e964f18726e73d23f95fa77e386add046d7bb1fceed0870699000000008f34d3825416af95ac1b04431ac8f7d3c06e69b49af7f70215077f95cdb93faefc418149ffff001d304770c9","01000000a4ee61584255c2714d972fb7c0989a48e574ed93e126053b1589bf3c00000000dce2116f1ef4a2c27ef7f3440e0ea43d2aaef66d775e5b3af644f5d93a60168792468149ffff001d060ade4d","010000008e315d1658b891473f56f9ebddced3c967178a54dbe95bcbc990fd310000000077f10e3ccae1954f08f427bbdce88f06d651ad69ac363aaedb4b6b798268758ed9488149ffff001d192fb267","01000000da1ad59c84fd846aa962339a9d081eb1ddf9417c3082138002614a37000000007bc96a5e198c8f403b220c6dee96bab91362a858c8a8045e2aa1bb3faf04c7d4514a8149ffff001d1456bb92","01000000ab445455c0b76c5c3f278fac4e6dafeaf9ba59991f592f6e9504b67e00000000764937555b1d33e440451ea6699be8d262076ea311a01be3007138fde2726dc6bf4f8149ffff001d16c9001b","01000000c5e14255fd2dbceb22b5ab331ab1963652d35f5e2053face705aa61400000000055df735b8c4ad545290daccb73f62f1018a4ca9274fd05de0fe6666281753c7ca528149ffff001d2ad451dc","01000000aa4b570f9433a77b00814bf94247c27bb4f2bb9ef79e729f985985130000000098cb06543e980c2512064774c046959f6bfbb6e7f4aae5ef9a245a293ecb314e63578149ffff001d8e61eb15","01000000102abc26eb0646259392994337c2bffb8c944059adb77f4e5a1c948600000000b3bcf2d3d9e29fa81283725758cc58a7b908f4469e9529e1b625292595bab18f2e598149ffff001d0152b39d","01000000ed839c70461f45feb3a8a69607729ce17282e825247ce34f4cffa348000000005a2ed93cc077425a01d055ebb05b682d67524733134988792811b2c293964294de5d8149ffff001d09a89e3b","0100000082cdd34e1a314f0c74df3ad937698d4aeb74d2f76b29010d2098b73300000000de9c1dede06869f4fada592572981839b03562b7f7ae74fcfd01b5c231935364e35f8149ffff001d028895fa","010000008e94bf9d4c698a0e38a5728f23a0093dfc33451d726a43e0558b1170000000006a8b8f7c82fd15ca8ccc68383a3f7e8039bdeff9aaab1b0248e95848b737dc1361658149ffff001d16c29e65","01000000826c7fa71d0cba0f32609cc0e7276fe5a505f7ef1cd740ee00ac04bc0000000075a9e273da01ccbfc5476f9c13c4b47b34b8a0db6bbbf2350edb20c38ab953987e688149ffff001d1b1f17cd","01000000d325b3e8f065d3c9f9726a287ff0a680b5fae77d621869d68256e91b00000000ecc5013e849546afe719f2ed7bf5bdcdd8239ab9f825486178641b2fb41189f6fb688149ffff001dec057600","010000004f5b5be8818759193dc50ebe438659302c01942e8491da0df783a4ab000000000451cc15e009a0281de1923e26a7dc3d6de68ef5517af8294ef9582cd8003972016b8149ffff001d1caa1273","0100000098c803d91aebef60f466daa8e2791df3a3c931adb95d840e1ad7fb210000000067578e200a98a3bb853fb768a5b3026a517c94c6deb42aa2a91f1062c402315e256f8149ffff001df8a66e11","010000000582fa49cfe9b2aa39fb7f5a7b52fd8575ba06da2e2687573b536dfe00000000737b1d9ef402c1c3fffd7f6ed60be6f846b5e465b3ae0966ea0c2c4f505eb308646f8149ffff001d33438793","01000000660dae223f63b679e30ae0fcb758526b51706a0c49966286b60df6720000000036215278d3a3f309dbab5b893ead1e835510c010c3d3e48e24a36e372c667eef10718149ffff001d3a049b67","010000002169916837136c1a9e4770200b71852b5f47f2e1ba09fc69c8290a96000000000edbf13257e5313107361d184b4916fc9c45e0b835b2228e6b21c9e3cb35cc59eb758149ffff001d06ceee2b","0100000080bd792e0959afd073c339fe85f5b19a3e4b7717537544da1e6f29e600000000d5e7c11ec99fbe93c35624177de15b0d7949a26e8dbb8662a64835d311ba589dac798149ffff001d0fca0d0b","01000000dca9f19aefd7b4efefdfe12b84609e4d468b6849e509c6a0a7f32fa800000000014e821ba33b3e522813f7ccd8154091a7e81e3cd07224f26e09907fda045161157a8149ffff001d1e36c2f3","010000003ffea21724e8568f4f61ad70190a731e365c7a623e2c075310a3a7380000000041093fd2b097b0e31927f3e209cf56316e87bd0782c079c915776991fa403cfa5c7b8149ffff001d544f4703","010000005daf0550c86f4306a1470d302bfb08b37b9b6c144e6f0e98f9a2b7ef00000000ea1cf8dccf6b189f0b70e78e051091c448ccebb6e4eb0747e262a5b5fb46ed1a787b8149ffff001d5a6f4700","01000000cb9fe07a98e7da06176cc72b69441f9e4a48aa655aad5418e8caa20b000000008bd81f36eeb8a17323997995458e800b1b4e825bf2a862025b5e7054311e7266307e8149ffff001d2a219bbd","010000009629573fa3cb6bad18d38e2122bfbded4724f07ec0f92ed04687df9c000000003353b69ca1eec41ef67bd7ce5841f6f059eb6cca7c9c55a485650960d30c805f227f8149ffff001dd0c03a04","01000000c3791dbfd39573b49bb30ca146c6b472188f54108b0766209b3b1e410000000021e31694e275edb59c7a54154be20202570687f354f92586ffd5816b874dcf17b37f8149ffff001d1ac9ad2b","0100000019b7fd7a856ff719152b15c1bb83d32be0e4b5b1463c49693b85e1920000000045b06e5fcb09c2bef5c27267ea568d3aac50688977f8dcfbd8482f1f42057795f2828149ffff001d357b1a3a","01000000fb53377492146c5cdf142105c0d857f1f71141ea972d821c2a69ce5700000000f36e365282a54c46eb973aa3c2209d9c76dacb34302a63ce1510974c98a468a55f878149ffff001d1b2d496e","0100000097f27dfb3034b5dbee902ccde2d90714d22fd4ce06d79354cdfff0680000000092dd541f28f4c2f8ab7e3db7c297ac8a39b667b014eb945a2e94ca638b3fbe4e248d8149ffff001d1e363e3c","01000000fc7115850e1a62df3804272f92bc59783166ee58d6d267d5c3f7614400000000e90e2cc33bffe31fff0e5f77d94f69abb29985efaf266a38d2135c95b0d3f46eee8d8149ffff001d73c0e901","01000000fd1c7b6058c00f49b9cdf0e9819ed549841a72161b5321192e889cd8000000001acd7b3a91a7259d94a127d5f7d8427177048fd6d519c8e5b53a1fd5e0fa87c88b928149ffff001d32a017eb","010000008de0bf2062d0f6837df72f0fb3d673e9b357c184cfeee74aa5e00ac8000000006b07577f57b97cc01e83536cf0d0dc5c78bc1cd8e7937e0adc69cee6ac0bce7c49948149ffff001d34384315","010000003b4db9b71dffff29efbe483892587c09e8ce199bb7229c67580b49f0000000002274311e8224346338e5705354e5ba2bc5837b13211b8c8de2c3fc431b67818c99968149ffff001d20ceb849","010000001c2dfbe55cef5da5d7b117837d9d19f1adaa207e3fefbdff7a19fa9f00000000a6f1d5fec1b7ed28b05026019c182ccbaa739620075a1acc31673943f231178a89988149ffff001d363161d3","01000000fbff631e0931fe4e2ac3599206f7e44157c9def6e9bbf74c6b21896d0000000045a0e90039b03e2168d48da35d60993c5733d466f3d85abec8dc09dae668613aa3988149ffff001dbdc0e200","01000000f0f6da7e882d0eb3b3a671cf74ed75a82435edac9944dcbe07eeb0e80000000085f6806341aa24b338b350d325f627aba80b97b3d9cea7451470e6c2b8956604839a8149ffff001d244b53ce","0100000020f1aa1e8a681af3d18c6edd95af0f3489707014c16722398538fda0000000002ed62fac54c340d3132993b647be7c74ccc0dde3cdbb513f431ffe561a67adf2ed9d8149ffff001d1cc41d62","01000000d263b6c61855cbbd116aa6deddc50a7cbda6dc2ed284e2e2397aa12c00000000a4d2cd07c573707a3ac65669e9deb9bbe235fe4cde4f877ca09145f158479cbdfda28149ffff001d360403ae","01000000f6470ae324b8271e1dd3fcfa10a4256f0c3c4ec8afb233aa47d2fe0200000000a8d752c190067bfc9f36a28f629dd1e92efb560c1a5a0ea3568735d6271cb156d2a88149ffff001d96497f19","0100000034f8afacc798cd7f9f6128f21b96a7543cda0d5e68ea3bd8787a31ec000000001a26d719df9301af72ef5e8f0d6b852305d191f39a713d14a49f353fdd905ca4fda88149ffff001d1e645135","01000000747ed26e377d6d4ce1bdd52f2e08831bde01f832fe0ec8c95d5261bc00000000de58465269abbc9a9772fbc572bda5279eb85eca8611161d765bc815965c734c77ac8149ffff001db09ba103","01000000fe4a7542173442310a3fdb9caef32fdbf09e9987b5bb6c50b066548300000000dc6e7986bc44b3b51f9cff6523d50e1e4ca585534df713b39f010400328491b68cad8149ffff001d3772775d","01000000b8d0c77c58e4e2e490562c776258570a62127508f8e49aadb60c586f0000000014c1301f6a02c26296a1f0416d9fb98d6d6e243ff199bb240b2debc515c083da01af8149ffff001d057aece2","01000000cf4808974c56585570f2c5773d7b6af23153045a6ca5950a5c9928d100000000f6c55d75f3b6bfa7cefecf8caee5a00a00d0cc1058972759101151efd9c5028d42b28149ffff001d08274dde","0100000096cf130154d00f736f140bc94a02b3edbba87b8a935bed07cbd20b3800000000857442ad700cffe14e0ac7d3f13ce54f7e331d6facfda078ecefc1f0a0fea9084fb38149ffff001d95a6a404","010000007166b6eaef3980dfbdf364b1e4008383b04350ce966cc3f248a60b5c00000000642c088308828fce51df175da4ffd78665b4fe9a0819320ffb2e31bd7aa86808bcb48149ffff001d191609eb","01000000a549a5369c8d8ce06423295136c6b8c6c57556c81c7026cd49574daf00000000c0429e68f017093d536d7b0f0a689165df5bf67eef6452318eabed986ec3353263b68149ffff001d36b51e2a","01000000370c31299e29fd23aa545cd85eca3e5935378b855cdb75b6176de5e200000000ba5d76b061dbf83775e1543da27b11245bd49d4f826cf190a05a76d1d17d2ef244b88149ffff001d16fe2623","01000000b3dee6000485c2cf442a8907337c613093cd36ba64c3e533c270c40100000000156336540b2a0b6415f8266668f05a4d438dc2d700154497afc347e507cc08fc80b98149ffff001d29c86cf4","010000003927a1cc3915d83bff6496a7e76c9f31104fa0cc3fdcda0e1e37399400000000336e9a7b8c0a78e20b92b01ef10c4b2ff06dc225de9d6ae4b93eaab5e83ca50fd4bc8149ffff001d199cd1a1","01000000cb2cbda0afc4b568bad6a9779474b038f37481d8d8ab4f02910dae6600000000b25cabd54d15819ea04eb89d668974840f48d9f1648885a6b939131311b203d0aec18149ffff001d20b6957b","01000000210e6143317fa778fda05e6e7e527bedbfa6ee70529b2b12797c9b78000000000993560db8ea594bb3c4cbfead701e1f4733562f5be2f67714c2b0d55f5879b336c58149ffff001d206f0b19","01000000dfad671e18059197558df87637f6f0efb68419ae46fab0e053f0d2c7000000009934d5a260dd23a7c38dfd4bd1bcd7bf4dc72250f88c230a75bee35e1dfdb3e0c7ca8149ffff001d2e21ab1b","0100000006044e40a7e3b9552367c52fe265cb53ed9f21cd1c7adeab49fbbef0000000007fde7753772ac3d3b70acfd6837e22ede377bdfba4ac3e1ee0f3a2c48581fe6835cb8149ffff001d4e90be01","01000000a68162100f9f0a06414fa9c8099a078b441bfc0acbbef4dd4c826cf500000000c6f6cf0bc063f7742d283a7b6a3fe294ea281a70bb113d7eaead7603147588cf02d18149ffff001d2f82c326","0100000025e9337fc9eed0b80f8649806716d4a5512342a92f165cd40d0e0b7f00000000096e5939ed48962eb6082410a69aee7896a9865d70a4aaa745115c2c4503b6388cd28149ffff001de0100a04","01000000f9ed1fc3198f2e1c8f8ded69d840bb91b0e43e4fe49de33f20596aa5000000008c6c28e154552b2c0ed1ad7ab75592f8b94ed2a973c942d0ac744cb6ec2661a797d38149ffff001d358fa0dc","01000000271749bb201e74b45a7bbbe0c479fc163c356600bd2a4d64f0a02b5a00000000a05b61382a0e1126972c7ffc29e61d0f3f86b6b346fbca33f58be9b56e7afe77ecd38149ffff001d3e148f00","01000000bb0bc57e64a89f3e5f98e13c70b547f89f00752ddd0245043a515287000000009d21737fe764daf85a44db9afa8478640c02ef86a9df06deb09b07db52bc9a9c2bd88149ffff001d1e24a285","01000000720b4e4afff43c25965c30eacffc2b7a65b210d616b7bd3504f091ac00000000329b953354a246a696d81c19dbce0fd8f2b22b062462d896615258ebca6ffd1896da8149ffff001de2fa9f06","010000006ddb87f853a4dd3a46f63167b8d33d0ce0896abe25d341051a1991df000000006270cbcfe384dbebfea72e7c60e3bdfba294b89c832bc95f49dcc5c90dff67890adb8149ffff001d11c51e02","01000000b858c19d12589619977282ac97151817d3e9d89fc3b8bd9eefb51f8b00000000b7ff56f3e2eb916dc445c561dd6a8524cf725c828f100736d358f8be90d4a812aadb8149ffff001d36e4e010","01000000f27e3f87ee79e626e51593911c5e1303072783150c34dc182863aafd00000000d5224be2bff39d1136e953da5ad53963dfd1cc9bdc83019470d1cb1a4286db218edc8149ffff001d4bf24202","01000000e5c9004a61af17fcf51ce151a805a80d99543b64eabc3f801ce2b74f000000008a3a58e03e1a31393defc66c1618e29463e9f1d3faba22aee711d4a89795938777df8149ffff001d6c929608","01000000630b553af9d8047ee80112b5f92f5a5df670dc0b17643e42f7b12f9b0000000010c9d2b058d8bbb192ad6e8c4d484951e39958b4d97f520e5a33048c882c4caf57e08149ffff001d1863d991","01000000a12af654d20295395eb23a46ab726f130dfc47cf7c49888b197bc68400000000fbc2340f899c70f133a4b9a5081ad1c6fe6527a9471dad85deb14636181d5890cbe18149ffff001dfdb99105","01000000cc9126d2a328370010698d6b133b62acc89265049d3cca52ff71a1a20000000086c0e08c0872a441c2228d9db66a4f5717166bb1224679d11123b0b12c8c7a948ce28149ffff001d024bbba8","01000000141ac8f73fbd72dab394eb435c07e00903ae3e7b152ab06db0a2c91600000000bb45bd9f4fe89957ae0dc370859a59cc793c8b08fb437a68e9ea12283b9d9a29fbe78149ffff001d182fa149","010000006fffa0d951466aba706115e291f4adc019ec7826e66c3e45b893eaaa0000000096803070152c8def511f3609860556a4022a322d2f111f5661c48e891218b708d5eb8149ffff001d38162a41","01000000d6650fa68aa9ce3fa23a6101c6b260e165631bbbfc02a7643273fd4000000000fd2f545d129987b01ac9f7a84bfcdecf8606fbd49ea0ba5267e9c14a4cc50ca26ded8149ffff001ddb41b100","01000000acba5e3c70d287b0780c0c290a6821efec7a0e79cda6c87861158475000000008f72ea9f5202edc1a63fdc12007fd7c12ca9192f55e44626a3d35760d5ec3f31baf18149ffff001d2f51d834","01000000e5406405c210babfe27b65641524235957e736fee38c393fb31d1f3b00000000fa4dd573d4ef64ff7e52a38bfbcca2f9973ad0f81b93236454ac701f0352259b08f38149ffff001d2c403d06","010000007896f437f6b84d1693fd56186585d122dbbdc68f4b5c3462fe75e67c00000000ae59bb11f23cd680b8a71b4c3b391cc8d1c682b31555db139c322a0cd4d8f48b46f38149ffff001d371278c7","01000000f1dd7e229e05bf236650f8610d99b56e48dba3922d8f9c00c3ed3a2e0000000011bf4b05bf8b1bf2eba12ac983f61bf573f1c37776d0c216d6f8d4f7aa59c308a9f68149ffff001d223761dc","0100000018d2af4091fd5ec1959a212be23ad6cdca54892b77696d1e6cba2e5b0000000049b2ece097e33d92847705c9eb3887b108d50d093feab8fb1e38c03343d44c43e0fb8149ffff001d1d169caf","0100000077ea300d9d1d71557f53329697674da6a6c3f18934c83b83919c51af000000007ed92cc0ae70925723ad8f9c86c471f4c63726f899bb44285be618116f3d2e0c07ff8149ffff001d26875b99","010000000a0a30a7c087174a4c386f29222426e78c579675f65f39b265d3eb6700000000b127c5ab40948ccc70a94ba3b07f5246b8518ef1025b4da140b2eaf9df9ece58d0038249ffff001dd16e1010","01000000bbf30093dc30fc65c5cdef085e3503b08051ea55ccaef8cad1c78ff30000000059cafc9d01ff8a977639680713b20d7e1d71672f584a8dd1dff750aa17f4899aa3048249ffff001d3124f5cb","010000003ed18861ee824f18862e272dfcd201a62975f099f7171c5e240a157c0000000069514a9b2456485e37f14887285fbd7cd79c602efb012ae2a1585d2caf0bf795bf098249ffff001d198ae386","010000005e7d6f3d61ab2c53e94543eb9b3e5475ba09c49d79a3f0bcbb10706c0000000047797765f2a3f4e7e96805fdc07bb59b66aa0f05d8952ca829386bd86beae778540b8249ffff001de7981607","010000008e77ae52815d8e38f519948e01f348c6671fe8293e371ab1477c41d300000000abfe489f425aa3435bd00497b6f92e7fb563beb7dae47236fa8de30d2f187ae40c0d8249ffff001d0e0bde08","01000000f6e9e26997dd4ebfe48e41a37182d560ed6302e7dfa32b18658d238d000000005d1fa5eb998327f99cf2c57139751f81f7b6f0e2d5cca9bd7b6bb961b9416f450f0f8249ffff001d0534a7c3","01000000c3aac958f3579bae2ac404af3d3fc507c98441e58cbc35f45638a0fc00000000e26b61e7b7a2d8535b65533313a73d1e3cef67abf00227121fe222a58dd66966c2128249ffff001d533ebd0a","010000001e8589743d188df0105f474a6698337dff96bc7c87096ca5e80abfbb000000009fe9d8ce7088074ddc211efa1766132dbc4d00519a60bb8cdf6588a733f98be318158249ffff001d19f0c24f","010000000b2107ae4d6e4755bb9fe968f6950e013f89e25fd07ae627f6bc3ad000000000becf681a4de75feed7c215692b10fbacd9efd6898fe33a78effeddd19d8bcf8577188249ffff001d1f4ac074","0100000032b15faca5188b3c383da3ee7c314ffebbb106f0f70788fe495335630000000011c1a92bee511f7492e4648093cee61c57717b030dae7a1d0ed484ebaa27474bb6188249ffff001d1d141601","0100000054e1e404f99ac7f1b3b30e42245b76cc0870d3f69fbd677ae66cd83100000000dfa8a71891b9fffe2fa1cb9275e5db0d68afc9f0767857fb83e5ed6b4b12d5fae11c8249ffff001d06abff43","01000000f7587ad6a409443a8669e6c22c9d7042dbc36f170671bc7c5460ce1700000000e96bd95469c33b173b3cb81f8d6e10d51a8ed424be02d7b50e56f94d47a53d835e218249ffff001d054a81c1","01000000f07dbb3184dd7936f34633ee4647e65081bf40961bb082f340ca521000000000cc880417e6d6df13fb1b6528b87b3ba2515a5158ef5034853bf92ab005bc8ccf76248249ffff001d1849231b","010000000205b021a6886923eb2cc0c8c9fde8ee3af6d2624ad879a71720ddb3000000005f9c6fb90298179b8408e2074f0879551be4631e6e01d54404e2df8d4285cace97288249ffff001d6fde3710","0100000088903ff4c84ed6a1cf9500c2e86a048448a9fdf345ccf73e6d93bcea000000007cd37d73b5e6c9e3eb449edf213b8851e809772229267d1ca4b658db21c3e73f12298249ffff001d2cca0736","0100000014986de79b10655499a4f114b146a6d352de5c7beb2e0f804b3edad900000000bb5cd18f01922c9962b3d645df6b482d6030366175768c4cd3f4a420e848766d452d8249ffff001d38b03415","01000000e69b359fe0bafdef95ffaaf4733308f623922da5a3c60ab0b154956f000000007f5fa143717e9ec8d07304368827c45f82d67f7aaf27e03e3d52df994018023b442f8249ffff001d36d5ad41","010000009bda74105a158397de2ea2cb8796e544e95b442668a9e574f5d5435700000000d4964ecf63ee17e025663a08d1862f2270e4009ce71ec4514e68b69d06914775c4338249ffff001d030633a9","010000001662e9156e86f1fece0a378657f2bc1812d73e90a689dbf89cac697500000000f785358d7cb27838523860693540c3a28bdc9e407172faf325ed20ade4f3577583348249ffff001d1f5e4700","01000000f6fe399b11dfadaed1a3841f2a006f5bc14d37df465c96b178584d7f00000000f1264aaf08aa81abeeccdfe109720b8ee116142cb7ad12d62877204bc2a76e92f7378249ffff001d26e9573d","010000009c5e7deeac06b865fe7634c575a506053800d84ff6e934fb8ff59a2d0000000052e918590de546a8df5a0773c4ef5f765c04036517c20ed3f0ab79cb7a85b1bee13b8249ffff001d188459c7","0100000053b718f06e18888f1ada7e5670a6f6cf0f84798305e32c847f44771e00000000088f2d4802396567a51755a47e479807ffab424889ed360c4aa2167639052bfefc3d8249ffff001d23fa06f5","01000000fa4af5c8141047ae5a8b7c07db590e356c6a2189fe9430082abdae6500000000c4874dfa7dc4b19fa7d42ed4ceacd640628f6d7f9aef9c5d5fef76ddffe5725f25418249ffff001d3bc60704","010000002df7e1c8190430d42c5e97d2ab1f02e6879e85198b6e3659ced75b62000000000ea4333bb6c40a698f45ae45abce15918581f3bd98d29a8a0a4623005cc61c7d1b448249ffff001d3155725e","010000000c3217723ca0481f250f04d5243dee2fb9571cae2c5564f02b2068c0000000006d07e544dae9109caea63904c83d3fb474704aaf6158d29acdd05dda06bbbcc0dd458249ffff001db2f3eb04","0100000023b46b8348a0daa6b737a752492853967c6d1a0c0e5f32dafb8cd58700000000aefee6a67770d50ea30c1e29a40b3ac18422dc7afc5b79787bd08ef46d78136b2e478249ffff001d24748457","010000000da8690440e0cffdbef0b0517f0a914d97ea40f79e8df7c346be60ac00000000976c313f1b8d3a1bb89edd4788e97f683f4d1273d316bbb8783c537ea088b5e491478249ffff001dee1a4501","010000001afdf649c64ad8860d4337b95bfac9a0fb8011c5336d8dbe7f5028f400000000520d988d007efc93bd89b292041a655e05d560069a54054db50223877dc8849a694a8249ffff001d277bcaba","01000000f8189cb81761c3082a6fa976b6efab540cf0b1aeb7c7dce5e11f739900000000452f2591c20d621bbb8d184ea58b106cac9dbc5479d738ac2226a47b6ffc5cd3034c8249ffff001d30ad6e86","01000000f67d4d416d17675fca4d74d8a7c8d9e225ea2b99aa83d6ab9f84f51800000000975d63065adf88552a0c11c348ff6e62aed20d5a76cec6ee1dd5d630db43ab0337518249ffff001d25e2b0e6","010000001fec002c8a63d70182df6a3ca39e41f6e656291d474b6179cfaf73010000000058aea1d43caba560420dc4a52b82c336ee82175b61ab1a814127f0c61c1168f960518249ffff001d0d851700","010000002ac90891c2f59e17d5aee1c8a61b1b1369a46ef755b13d606e4adf07000000009d6e47385b6b746163b4c3cf3d040c924072dd3c197c1c2c1a6fef57b5222a4e1f548249ffff001d5cb4d502","01000000ac448dc8cdc96008660d1d428c77b8e02af7b0b470785c32760e1d46000000009c285653909817cbb1bfe64671b5131dd64fc32ab4f6f3a39a326fe5eb5d7b7df1538249ffff001d13e126fb","010000002864a3a24df4159a46a59a33b803ed337026d7d32447549cf5621ade0000000085d1f5b188f66d8bf31aeb16e19abde1d1b84c849b1d542bcda3ab4e7fe0bee251568249ffff001d06b736e6","010000009edb1b747e7b2f86448f52d7ba427c8c407c37a7a5663e0f5b884558000000003367d8c6080eab610af84d1893f5d07c75f64c74bf68e582a7f9376722878e2c8e588249ffff001d7c927f0a","0100000009ad7d93d1cbb571273f401ad6b34920f89b86ed07fef5b5f4fda5910000000098ca5a0ab704828ec76f98025d8f2945633b0051a36c84c25ea7b0f353805099235c8249ffff001d22aaaa8c","0100000063232872e833ad44fa68307bdd61b6fa9ebe0e23e03a4cb4543c290500000000af62705c18b77e818d04d639913df0f1a70379b3db7f636e7ad14fbb334758027f5d8249ffff001d31caba67","01000000a45bcd0914d4429aa83f9f2da7c09c402a5f5eeb437ae37b661d0ac000000000a59f4c349c2acbec1f7a077caf6f6b828a9dcc1625f1cce2e151e6de8164bcca5f638249ffff001d01a26c80","01000000aa02d36af09c52ea6a3e30c9b597d524a942ad7e6471e8158f3c513400000000f63fd118ca546cb81e1a2ac527e52f0e23fd10756cf7c2e961a393a88e70285ceb678249ffff001de6e0bc07","01000000d830fa407ebcae051b826a4937fa6c143cbacf5c0f331ef40961a083000000004466bdf18f790ed67c2387ff8e6701ab2e6bfe79821c114945c43f00e190a440fa678249ffff001d220b47fc","01000000a7c6350a1b4dca08d5c88114db68da62e89c4aa8876caed15c6059f800000000f1e55b1b0174937c7794354bed4724ee9501038c28c93c7ffbb9bced648119031e6a8249ffff001d1a0bc678","010000009a6b772e9a6c42d694c42dc3fe5437f037bb7050291be825bfd82327000000000a45ef4b21fb5464fb5a0a7b217127d8110e6a7dac976ebffba786ec99ded86f926b8249ffff001d1dfa1494","010000009cdff5fedcf3665124421a8bd216166352ca589afcc04dbc5ae352b30000000009b0f78b6cf0fb92f05818d8a4d4bde508fc256c5e6760af60ba4e8ddca15900ad708249ffff001d186083f4","01000000d6361228fafe5038e6e76e1fd11a082e3f5ab4c5bb69e7a1600b60e000000000fe61eecc97ec674e45ade4f5ab87ba3bb080bd0ed81a8cb88b56b1bd89eec875cd728249ffff001d3a76104f","010000002299250d623df612a1143241b069dbf252acdb0e07d1746828787dd500000000c9d99162d2bf6d36640cd2f0ed4af49edf981eb7f78c28b0bbe7a2459c887e35f8788249ffff001d18cde403","010000007a07c067ced73d692f7180ab3dbb023fa48c08d371ab9dccd5dd7d94000000008adc22a7a4254e301c835aaa48058b076513beee71c5761da066b9ffb8d01f6d727b8249ffff001d2f29baa2","010000002c010360b873e05a79433731e8247104544956f4019750783c616fc500000000698b7f2e7b116068a72b7a1a29cd58d8277f53043ec3eb81d299457bfd9e22fd14818249ffff001d1d870305","01000000ea80c8b8925a2f7cc8cbed6debea1c597fb340cd3a1dc250bcd27fc000000000676ea5248aedd08ac7db3b9cedf34b67582fddb2c316b80116328b8169d1ebb778838249ffff001d7a64b906","010000007466090fa20d89bfac5849043f6ffffc4c3052cd9886ea2a38c17c0c00000000288cf4a70f7189e72fd22324163f267d2611c3f5df2cb47518f072776e26a68a42868249ffff001d20ef7cbf","01000000842ed9d375c677c0c4b6653f8d30b56f11e0271e1dfe6f778ddc945f00000000bc9a03276bf82271b2697236d68d81419fd08c72eb38811a8af2f97165e9c7f7ce878249ffff001d36d2bafc","01000000eb6c9ed98da4387e3a4bca0da32d8bbdaa3668eaf78a31b83dc3122d00000000d71b565381877370e779e2841f835dc307e1b6d3d96ecd41abceec56cafeda145a898249ffff001d2e61f5f9","010000005534a94c865a2ee0d67547959289a5f56e676fab94e998fcf248fc84000000006c724673e629af1928fee16679e85bde354127f15d56414a9e9d5a34fa5b1ebde38d8249ffff001d2595be47","010000007bf37bcf219899f825c645b565e93b4c925041af44dd983a7665fbe000000000fd025af48314418652ff539eb4855bc9ea2fecd99943646c1f1dff40cfc73018d2928249ffff001d3a4c5003","010000003370940c3dd9c2329302e2e862f3da6632a01b55082504e2bdb909fd00000000cf060c4e332e597a5870d7be399b6794c4a2a859b38db6e1edeb3e542a3f389753958249ffff001d60e06c0c","01000000f076536a9a5348089a872ff6db2784ae8bcb9811b35867fd83453a3000000000c2f32e8252f2c4d92666bef4c7e7b834632a051998a451f9ec6b90d5f504872262978249ffff001d1ffa5af2","01000000691aeb9537bafbd5e4a27b2bc126061cf0e17de06e5317e49d64107c000000003e038c40e37eb16b17389d375d73c4f490749548bbcc1677f9d8fbb48659a12041998249ffff001d25b76523","01000000a68c541af64f99018525b9482c236734422eadec20189394ac483e5a00000000e168aade63248a56ef669152dde0a1f1663c635688e25767e2fb41650d1b33417f9d8249ffff001d212266d2","0100000098fb5b2706f7fb8d9f0df96d3788087131490281526bfd564ea647cb000000000a7d9e5366469545b32c2ef41a932e2e9e2022174c1b4f4942b29edd2e4fc50eba9d8249ffff001d3c2a7500","010000009e8c050117efeaaa16d33be294c2e422bb9ecde447fbfd56a320b3cc000000007980f66f833f0e8e2526277a31b3a063835b4b8a168d8b7188f3d86a121237425e9f8249ffff001d1d46d60d","01000000f58ced945b31fbf03694e7faaf240735c0f0f4c5a8516a3e2f04ebc000000000ead3df5c526823e25a898b349c6b40ece5c63f3e1b4686731fabe7e690c945ebb2a48249ffff001d06f9355f","01000000402e8e922ee56c536578a66a46aca8121f242e8a29115b4f20a7bc6800000000c8db9775bf8950c580b32e25e244adfde72ddc843aef872394df5918174892a163a78249ffff001d078bce2e","01000000c2798aa4654ecf25e1700a7c6842d3ab15aa7cd82bbb4c54aef7a914000000004a233e73f50d46be113e6c808e24d835fe0aaf4bf90b60f054f88e7823e6e8473dab8249ffff001db681ea12","010000005978b865672f63771cf4d7c363d3520e066b2c9fef162cdc199d32d800000000e1d5cd66ffd91df288d6f65a367c7b9807c591d33fd437a16a2a5a16c6ada90b23ac8249ffff001d140709a9","01000000a3c42cf159edd5b7a58221fad62e50d2effcfaf24692c04a8f05a39100000000c959b5b6e2d2abb8042f8debe2611a58588e4d62641438b86de7e48e4547f7251bae8249ffff001d39eaf846","01000000d2ad1902e337fbde741c9322c450ad45fd52ace62d57c7b4a242861c0000000084c7be69975a03ea7bdd81a2ad7cec88e77589473d4b99a0c6a4aa4dfcfd774b8faf8249ffff001d211a9c05","0100000043945e2cc5d2c3dfe66329f2fe4c4ed1ae77dd984db17ce9d9bdb2fa00000000b8d8a593270d34812ef91b23125b83e501907b692915f26789e15eed4fcabb0757b38249ffff001d1539b3aa","010000002e358c06c83896cc62d3b126315f4e7ea3efc44d268f0db6e00c091e000000000673755223dbec3d1bf99229613b89c9cabcacd9c3a0fedafcae850a96340b34ecb48249ffff001d2bdd1079","01000000029bf127870aabbb0d8d4153c54fabda7ba8f7af8510aeffce2d358b000000008f6ee0ea2640a83d128e8d370d4917d18fba42ae25d33c8ef6415f32ffaf558b72ba8249ffff001d231a75b0","010000000b673dbd6fc77980884300635118859c6400d9cead80286bfee63c7800000000f2edb019347b743b519982d905c1c76c8f2e2fa5cf67e1ab557eaf896bf828b30bbb8249ffff001d100c3603","01000000963e5dba8d7329f9750b629db2cc5c74b24108d21d63bf36ed715c000000000006529e71e46ce724b690c54b5df05657f8b13b1c8a9bf2d942c44bec980cbc276dbd8249ffff001d3a6ea1c8","01000000b28df1536f3c5609126442b563e705b6e1b6ee584bde1fc293df3af6000000004edfcd4e248048db06a253e07cdfa77f580a9438d2152b1aab066b38445ba72f88c38249ffff001d2ad497db","010000007b3d4edc4b0e3eb962e9d1e204409f0bd0089ddb5d9fe3729418e4fc0000000068eb0e24ffd80e16e18a5c123016b2ddec822922f4f5f317e808fe8d24f65b1e53c78249ffff001d319a5795","01000000f0fba078bf444943f667afa1babe60aa364981b7dc87af837b211d62000000006dc8380ffc0d5798cff9a9d0ea672395fc3dab624c5c524435ae26e46777e31c62ca8249ffff001d3ab2d40b","0100000016da6fd9966e1b389a0e4187f42adde05b7170504ccc1856812a9777000000005f59a72664c24c2dc144fb7bcce9b2e9efe54d51dba0f30dee6c0c93297c3b2c0fcc8249ffff001d8d2eca08","010000000d92609f96f9fcde419a9e622d8ea38fe6ea9c2b47abeff0c39a2a3b00000000ed05593acbc00e1974c2f37af7f7f276cf18e777da964583d539db4e6fd170dddecc8249ffff001d01c1373c","01000000feb15def0697369377925dba74c8c87a79c7b99566bc42aaa5242d1100000000ef052b2cc448b303405b0626eb70e5db55e70785801a2b3aff6cad660a2191c10ed28249ffff001d00a2342b","01000000b456c3f86c2b7c7e81713f46577e55e240c35ab94fcf63309fa6c011000000001aaa972c06e7ed910eef421e830b534f398f5172cfa86d8fda1447c891c1e572a2d48249ffff001d1482cf59","010000007c819e098badbe9c49f46dc25fc7b0a41771c775b8114d0c1177e90c000000007d87cb332f36e57b7648f24ee4f001c574c9270025b98c7439dafa26bdd9f9c7ecd48249ffff001d11930801","010000003a45b7b0ffaef57b86795fdeaadd6d40bfce23dba4ae6b3d634b0eb8000000007fd6b73d46edb9d6393e8366aa161e95a4956c9175922f54ea6a9f36fc4975bffbd98249ffff001d148d2633","01000000a95e2352d8c271c7381a0932732a286915c9eacc6f05c72d871d62e40000000052d6ebc067ceccf750184c98f72cf7006df4670a4fbbc01547c6fd57ed7443e7b8dd8249ffff001d01d746fe","010000006250503045b957ae36c985995f321cfb2689a78477bc44aa33f22470000000009a3bf5e65aec3dd60bc154ad673988bde9eadfa638782f518e49cbb2ebcf6c1248e28249ffff001d328f0858","0100000002f22d2d4bcb3ea6d7d4667732489329b1de28cf9f1a13ad447eedad00000000cd5c3289745366cc377ee4d3b045bdf0365e5b6c9f4bacb8882dfcd9c86ce5a29ae58249ffff001d2bed9a96","0100000099aa0283840f765b5456b247adb7a76e1d704eb0910799a936094e8400000000ddf94e1e566a2c22034f7b8ecdeb91c5fe83261b26138949b6244acb5960f30e4de78249ffff001d24046b5e","010000005882b793425b6db6ea45b454b683b085c4045949de459fe6fc66ef0600000000e3a15c063e9bf7df71385f39a498b93ac34e7969d86db3e5e6c86e3cab653388c9ea8249ffff001d082a0055","01000000eac2ae5b3ccc407a761c12e17ecffd70a1f360149bae89a470d878230000000055732dc0adee7a2246992225676e71098dd8b9c9dace884a15d0aa0e0219bebf8bed8249ffff001d1f4723bb","01000000314c14cf8b7ad4ff15ffc6458e033f8fa68a21662bb126138fc15cb10000000097d2935f281d46bc8c66914f68341e6eb0080a187195187afc2f3004b51ef155bff08249ffff001db2906c0f","010000003b2b9985d3cab53f859bd5b5481d25976c9192b60e7df8294256469800000000306d001336da7e90c39eda2a6bea9e3c42d4330a3710d00b42760d821839c0470df28249ffff001d0320b672","010000004c38ef2f281f639a0a147658a3c8f59c684d91df6c511eac369a26e2000000006acfaa77631ec9d5223aa51a7d3fa5bf837c5e55e10ffb5b62dc9c056f6b6a7292f28249ffff001dfbbc4101","010000007f1d925f63c3bdf7d8bf0b923d3a520e08c3bc08fbe23006b7d2fd4f00000000a45dd74158f763f5fb98aa5554e15740db471aa76739d6e3184d2df5a75ff05e59f78249ffff001d367bca15","0100000081b3cc7a8f0efe9912ebf1b80ca193340cf5e4de54ebdba6befe931000000000f02f50829e7fdf9cfc1a1d38c646178efa07e1b60c50d062d5cd2ea06715e76380f88249ffff001d894dd502","010000001d209ddda99122cef466625ab7fb1e1c2fe65840d24a22b5979a56670000000000807df287fab057a6e6be10453559355ed22fcf2390530232972045c47d3a3b3efa8249ffff001d0832afe9","010000008458f64a2c4870e1a793fd9fa3a2cc07a7da6950418bb779665cea57000000001ab832ca0fa0f4702ea8f7b23cc26354939cb9a20aff6abf923a14e05df1efdfc8fa8249ffff001d721ade01","0100000007c5e7da4c82fb8abb553e5c6580da3ee13ea506c5f9c601906f638600000000f1c0dabee0017a65eb7a6c096a29caa2313c95e42d068ec01d1f2cab7ab520892ffc8249ffff001d08a5f500","010000007482f02a5543597cb3422a8d81c293a301cafe285cd5b0a6c4de4d5100000000ddfa0b86ad0c0844a598f7f2c522290b03d6a8be96d92a81dcb0567e90b9a131a5fe8249ffff001d265b0407","01000000ec125e286aaa33b154f61a0adc061911a9306f140737012d17fbcb4100000000995c51f6b1094fd3400a00d0d79cb4f1550a50bda010f4ca3dc1c821795872fd43ff8249ffff001de9282502","0100000085fadc34e410d030e811d59a87fff6ac9b4b8b1fca9217e866a6a8eb0000000095c40f521b973e7afdc32d38aca37ab3009602281e23f3b096c413ad8c21fe9cd2018349ffff001d02a6849d","01000000572c4583532d397f3597ef3576ff572e724b59dec5da6e137d3975aa0000000070afbebdcdf82287c434939b32a8b60cfc3f73d2ba18a299d039764ac93c41492d038349ffff001d0b3a0906","01000000284dcc9c784258b3b0f12a771d98adf4f6e22e43df799dec731fb278000000002571f138d7ad3507ebd0b276ef1e411e3e5b5a63d96711da6b27ff61035217ff22078349ffff001d27aa7f4f","01000000c914340547c9153b733a8b28430d31af26728e826e476a96b42785e8000000008eb443978077295122daccbd70c7fd56c667d7c99b737ad84fd0d6941c364f82c2088349ffff001d20cafaa2","0100000096aadbfca1615e8a26d900353f2b61cab7df03bd05f6b9632fdcfeca0000000092cf591e6e30b2b7094de81dc3400fb57192656280b0977ebb5b6d61b2ae4bec310b8349ffff001d3a1a47d8","01000000e779d5a2b04bc7cc2fb3586665dd71b830e7bb94c2670908c59cfe80000000009d492d6a5df3edbad5579f77490acbfa084e8263152cc7464419d1944c0e84fad80c8349ffff001d08acda56","010000005159256c849fde7737237f75d5e460d305f2c9728f8a7593adc5ebf4000000005a5645b0c2fc677d6ddadc09899a0702b4fa2e90452f368a939072d9bc56493e6b0e8349ffff001d81fdb307","0100000039ab2a99bd81f030616eeba0961336f5dd10f9a5d5f4573b375bad7a000000000b33fab6f6a20abf12771cf017baf81b3eb13fd0c06dc9aadb33083ea9be90aad6128349ffff001d26f71f9b","01000000ceee49010555fa7a11f287369276c0ca3916f17b544a4a37f5c9970f00000000572d151a18e0e22364ff14a676cc15be55075489425b0a9a518e0b34a9638be3c6188349ffff001d08353b53","010000008491b21588d636c69fa2cc6fb2a477bcc3d58ea455f8bec81b98369800000000ba1366eec0d99cd70cf082d748ae7b6b476cafb6f052e00dc29232d56c0b3568621b8349ffff001d387942c7","0100000078fe38f5c8392c72c88eb2ac4bbcf04decbc45e4dc57b3adfa17c7f500000000974445f0ee7fbd517cd79dd4adadb566fc651ae534f54e38425323ada34670a98d208349ffff001d33f0eff6","0100000041348a6967bdb8dd5c8ef507d76d67cf0bf5101ce92f8dce585a0e9a00000000bf1fff1ce8e147ad54aa7d0df7e83c44311050028ef5db039ce935fa7d663ffbf9268349ffff001d218ce6fc","01000000ec0da0e9f1496a7549d4a6be43c71faf092ea507b6a5740472e454e200000000525df0508a8a4a1fc5a541bd971478dcb5c0ddb2b9570cafe727d8c1ec68fab6592a8349ffff001d27243287","01000000f4965f37c87aa34ffe887b784fdf822cd47c372c0746976ab396761400000000a93d4384aac198b364f649fa7902e8e191c794023593dca496804ba68813b282d82d8349ffff001d2e6fe02d","01000000c112d3f3d99e18fe4c08aa2f7a470603aa24dd28fce6f1d8d46f26c500000000644ea067c5b2bbfc677464f5df1c248b4517183b0a1cd27a9195b6ae9669edb79b328349ffff001d1f51fb6c","01000000b325f51675b4ee6fb173b780ae690b37c856a3f5e1d37266cc1cb7d400000000e081370c4518c45a0973ec71db653187fae8b728504aefd24aabb441e4f7d7e4ce348349ffff001d2c8139b2","0100000043cbf51f8d4c79d8e97038fe1ebbc576d44af24ffae732e57a52ffb70000000066ee28efcfd2827d08fa29b45da7db6aba1fdeaa291e83cd9eefe5dd789e376f3a388349ffff001d03cb02e6","010000009bb42cde8a7ee6be1d8e15f21030ecbd8dda2f304da155185491da5200000000d768fbf9a178759297ac8b8c08ba5041d4201a548795d534908365c0e1a5694a103d8349ffff001d20e4a377","010000009507af88ae439513cfe8b1410014d6ff0f25be748f211509e99fe9db00000000b502fc41025cf8b74cbb96c697e439d3b68e4fe12cd09df19604aba8bf0e235e3b3e8349ffff001df18fb903","01000000fea751e3fa1acfbfb9723edce2e543da914b67356a44bd70c0e7bb6e000000007e9a55d946832fa49e96ec0870755c123bbac8d763687f70f6810b988f7a3a7fb2408349ffff001d297bdf5d","01000000eed06a146f9a70f10ce21f1d409bf3bcda24979404ecdf5a987c90e2000000006ffe122b6c8e22fb5d8c4182b99eabe445905702ec54f98df4753fa7ae321f3c72438349ffff001d04ba7165","01000000a9d8ea5b85ec25eff3d818b1d65a2dc39ffb97b8a3ec54f110f89ccb000000005434cb52933930e34f94540f6f1ed90a41c6d7a32b9bcea2b0b93e24b11bd06c45478349ffff001d38d062c0","01000000bc95982334e093aa6b656635a3d7a3a8ce45de266f3e1e02d495098b00000000c3b7445905d887cd07b253e0fa61ec3d8ca8d3ac4b7c35db5c92c9de3186bc9b18498349ffff001d1681e950","010000006a5c126d16d5eec40b42487037e501d639c2da6be8a44047be31c274000000004eafa7c8f391fc20872869e63ff4c73b58954cb0357b0624ab99a38280f47829c64c8349ffff001d01a080a1","01000000fee9777b0b6a305f0ebcfdcbf220d054c4f24f49c21326902b10b8d400000000e47a818f14f169466851b5464fd8fbf7646a9e82d561a7a1549f0609739d3fc5fa518349ffff001d04d0e3a0","01000000a974f9dbb127ad2a3c03d94146a933389ab5b17d44955048eb8223990000000028bf590e768ca2b79f11a43a9886be514d873e31472cfe0b77401cb9b509bdc58e548349ffff001d2f45a977","0100000021ee17907d7b36ae872850b6037025602548a0af7a93366e46d7036c000000000632a60044aa3873b9e093d613d4ed4f2b371b4b94bae7a33c5cb455017d72a6ce568349ffff001d71301502","010000006caa966c5740bc6721c3949325382f6ffbbdaa8268e62fadf0455178000000003506cc77c028404cbbbfbb709ed2cc6169e380f231573839120a0cbd42e39e3dbf588349ffff001d38b3ce6f","01000000c6efab872cdda9e930e51dea9939d0c5f5371ebabbcae71271ac6d70000000009cc430d16607c075b1e7b7db0e7b540a17ce50148077cd6a229d9bc93d0e9ef8d85b8349ffff001d24bfdbc4","01000000f34a085d5651d415f5cd72bc417e10810d7233b35b3d8e6aed94e54a00000000275f6ba44d253928bac05f0f2406e63ab352a8587943bfaeed90a1976f5634d5e35e8349ffff001d3f9fa80e","01000000a184c1dfa377feb37ab82c7339c6f8bbe756d896ebdb29afbec72b4e00000000674a49cd8028b863d4246b6bd39023ca271a0052c9133766b1554aae99c3835122628349ffff001d3478a764","0100000060a9da14752bd633c4733c17e4f6a552c5b321674f83402465874f2200000000bee35a905d9ac35b5ec1462fcd1c8159f2c15a2d90a01f5cfbd940608e57f2cbf4648349ffff001d311872e3","010000003f267ac6d689729e625dbf6ca82a21fa97af360e0a13cc37685c8d0300000000422611ddf1e050921d1f84072e7c3972be83e14a72cc9b3405dbecd5ec998a0b57678349ffff001d005bc641","01000000acbb6f10045ae22a823cb4ef1d2f92b6e68281135df9411a5017e45a0000000030ea296ec2a1694c650623cfb13242b139a4d9d0bc4dd6f12feedbc7b4ddf875236a8349ffff001d27a5b239","0100000063fa25478b9027d66a9c12ecab2f450d8e153d52126ed5184956c05f00000000baca7344a2ed3635d16e6fa4e77180c2c258460bc2802b231e42e7a0656114c9426e8349ffff001d31ad45e1","010000005603f56cee3e6253bbf9ed6932cad71c4cfe8745eb7cdc5c467cef6c00000000f700bafa8db6585576008d74943f0015f78755ddb01f15d2ba38d95e07793bfc33718349ffff001d144a757f","0100000013f77ea1d38a5a3ac9857a4c0d2dab180c121e4de041130851bea6dd00000000a1d3be92eb07c1bf3af7619edf38e3007a0306c93ec3761ed2b844a3b516451041768349ffff001d32ace3fd","010000007abdc1a23e3cd2e218b3c73f2e530e8be30291b316007440dec82c8a00000000a226a7d1a1d780a5151f764de33c11c7b674e54e69c6ac33cf1fa8cbb864932ab2828349ffff001d2a51e506","0100000058e4a51f819cc7d70b64569cf424f68c4f8e51d67fd9b7ed912d7f5000000000e6481a3580b1021c781b96daa7c810050e71ca98c4ed3f69648c5f198bc27d3bfe838349ffff001d1e21094c","0100000068b4475bf8e2cca686047deaaa3ec4e558048a680326751d0fcf7d8800000000c00fecbc5f688e0d95073d45af92f98d005a92ec86b00b7b7505037f6002e1d14a848349ffff001dfe778b00","010000006729b952286a3ec5202096dc84296d89d8947fb2eb160225eb38100800000000038ddfd34286b1edd44ba52552884d99c46d696fac631c2849faf9abae816b84d2848349ffff001d6e356201","010000002240ca76819045b5f8546ad2cb79b9401807e60889c9afe6efbf27b1000000004211707a8262fb904837c3e517246e0aefd508748fa3d93f1808b8c4ae2992ffd9868349ffff001d05eee8ba","010000002d3f9f89e50b1225a612b09f30584b7ab9e392730faf402f73a40e0400000000846d739bc5b979876d5dc90268f3cb3e0edda0c1154dff15dbf8460715782df5638a8349ffff001d13d1dfd5","010000003ef00ef8f04e3df11dd98d529ea445f07ee8dd1d61171b5c2cbddba800000000756de70c6ab4d2651d685826ecd029b232ef0cba3184b04fc60e40b6a9401c1a33908349ffff001d054ca400","01000000fd3e379b2947069793bc022153fd1439bca954f8a919e6f1085e851b000000001134313c697d1f71526a1d8ae98e02dc0f747f121465ca428fcb9ba2f31a1608e9918349ffff001d335c8710","01000000cf69d4e759b2eddcea93892f66a90b8c381ea86bc927ad990c744df60000000058cac99cf480be96481bfc099aeaab803f4018fd4bbf6d23a297a4229997647be2948349ffff001d27e2a100","010000006f21aea2cbc6f874b436f4757d590859340f8df506ebb8f5ac964ce0000000004dbf9dbe46178db2a87bea8110b41ae6dd8491990974b875737650c836d73a900e988349ffff001df837dc07","0100000044614b167beddb806e3b889b3b944c6ce66b62a1496be210af2e871c00000000b9dcbd581782465ae98ba6bef93f06e649300984a585ca639a9c6013cb21728ceb988349ffff001de7be5503","01000000f9b108e94b63ffb56d09b3b5ed4c575c5e0343bebc80dd56175021d200000000e097c2dd37edf3c84888460af505bf484ef9b40dc5b2a495bc47110e3abcb2d8ce998349ffff001d22a006cd","01000000377fc2983c98820d5288c7d7f4618bcda92c2f67d7ebb40a47fe857a0000000032d44260c894cf2ceccd43127d33bee9758047df84e6eb523643dfe1060511c7839d8349ffff001d1af7210a","01000000b71330d5d7393d2f7ffb4eefdbd718933127e1a657709c013fbad66d000000002f8dfbf40ff753b5873b2411a28821b6f5bdf8d2c2a6b9e5873db65e71047ecfa79f8349ffff001d1a5bd49f","0100000077089f0e6d7ed45ac70d18115c1c2cea26afe90c0a82b5bf3f88883c00000000c565443b35f19462ffab8333c3fa9bf3fde5ee65f320aabc05a0f0ab415452be13a28349ffff001d352cf3c5","0100000061045b61ba46d6bbda9d1add85622131057398dd8823b6f40f1445ce00000000469a4830fcafec227623d4d40c5e9ccfba64004802c24920d89e3ff0b5d9177d56a68349ffff001d1f124a08","010000004aba1edb63e962e3351ae45f26259ac9b7b0501b5d298b7f5ce2c741000000009d9448bf8d04b652b61793f048b22dd77657860f6dccfe0e63b34fb1a70740db5bac8349ffff001d2d8165c3","0100000071277c7f17f56a7e5cdd0422b3f0716a10fc0c918058d5b9b28a8bc800000000648b4f9be623bcddeda5658cf91bb073fc85e48d1e64a637f964bfa781097a73d2b08349ffff001d2f2357db","01000000b72ceea503d3393610a764b219df02061d383e6e39c4738b2d7a48b100000000a8d85a3699b6a4175091d3f85437afd193b1e46f1c7babdcf5239a067f1dd11bbbb38349ffff001d1e27b240","0100000016d625348ddaf3967bcdc5236310f45665c67cd725d1e64c85f116420000000017a1cf9ce6ef308f06969c44a3dcf064e9191e7898292518472107a6b2d5edac80b68349ffff001d3584c32b","01000000f49d9ce0ffd454575b6649d1470c75391046f967fb2edc75179c96c0000000000783fa54db0d8a139e3ed8ca190141fd163c8090211a2e84f60341694165d357c4b78349ffff001d2aab59fc","01000000ad9d691398d753ad03e09d3004a6a780512b940e3989749accc4771c000000009ade19b56196b19546492ea1b7a3323e37c11c09de416a8bfb2ce3eba6f3e3e8bdba8349ffff001d0903ea03","010000003523fe05fa184d4114718a63333d72a0a038d6baa2dbc06315c250f600000000481338f30e4c2c9462e8e227243481ba0c6d0434cb2d4350db0428686765871120bc8349ffff001d1884cb99","01000000abd6486ad2e49b7726f0f11b8a1aa8f9ce0aa5049c578f9ca0a190c500000000defc74a5be02b8f86ab8bf1be747ca85aadc15467baa4df49bb9de9e9c2d7ad6cdbc8349ffff001d84adc402","01000000e97bc3bf115ce47540f5c761f124deb667de28bcdff6f8dbdc7980ef0000000027a9439045a69415a103751042b510bcaab126e96929ecd02fefe32850acbcb970bf8349ffff001def62df0c","01000000e47fa6a265816af3a02f2dbf940650e926c9110edb8a0fa44080e0aa00000000f444768b361956db1cceace03d6b1ea7e1c92025ceb409cc7c9c6977b8540f0180c08349ffff001d08d44604","01000000fe8380d99e6bb9991e71c14ca9c50cc18ead588aaca97b9ee72c62dd000000006a49e4eb8a461b1c96d985c05b20c80e2970728ac18127406445a9ad35dcbd31abc58349ffff001d1781d6d1","01000000b5761dc54b48a6fbd44253999b3d81a16a929b3d4a0b1091e95eea6a000000000d2fc2dd2711042eb85cae594a79e726144e5a91e38c48dd2894cfa0a997cfd3c9c78349ffff001db2ff3508","0100000036c735f81d25d554407866078bccf2867cb97cd9ef61a36e6c65154b000000006f4e065144575b7f1d05914e63afd6db7f23ef6324b564c3cece73b977054d7231c98349ffff001d28728b2a","01000000258fe0f306f0b31db96ea448f8753a5744e7b9c45758bf26da27ab2200000000e3c344e7a20186d0ac71656d9514b27876d2f7c26cd5d0113fb8aa30ba29ffde6ace8349ffff001d33a8333c","010000005f7ad3696f50227d1243131b8867c3ffb3d0e2ebdffc808f642e7774000000006b5239c0d01613d3cb0e83dd312454a0a6880011f61bb2611f2d5ea706b867c09bd08349ffff001d35fbc337","01000000adc6fa0c729bb0bca0cc2907a2aea61987f5260673e4602afa2c9cf700000000b0b5710c086e6ddaa4cb8f9e0321ee193e5969f22f9bd84de250088f34a29c0ad0d38349ffff001d307f94af","010000003dbf744e978212014cff80c548fa60227e92536575d0bb2cb772040800000000ec625711552f53200e1edd0a66457631dd5aa131c7d18fbdbae1426d1364c2a878d88349ffff001d27adae35","01000000adc1e7320e059bd21d11730ab4b6b5beda822f89ab0cbd454f8fc7d0000000001ab3ba4d966c7036ff68f1f933931fae23c4c0cb9a037dcf87d168a50d2c6ea674db8349ffff001d14e3c5be","01000000e216016d938069b0dc1a53d70f2e31b9770a47ccbe1149b7a6d5f6ea00000000fa7955cd3f920f9f1f9465ab425a9a24bd0f264581df227ea1cd121646394dfce0e08349ffff001d1bb4cd6c","010000004cc730e880c2fcb105961a8525fd9bfa05f029c0fe5ffa813cb21949000000006634ed6c1c94bc8e7ef5c6303b068e7a3e4107794a7be94224371af003b0e063c6e28349ffff001d29680c49","010000006fe120026cf74b8f24ff5e0de0f6ac8a920de277afed4e0ed47c04510000000025d8db4c6207d80459e63658d0ec147a5719f788e13cd3947aa747d93fc189a191e48349ffff001d1fafdab4","01000000272c6490041377b2d8098cf3d670852fe33f99011e5c3f3e6357add20000000042cae240d90b7a73c768fb7cfa006ac3bca32bc51b7b7678bc38f61252bd6bf8e3e68349ffff001d59b8ec0a","0100000049cf1aade26166a4f5d72b4677996a945913acd10a2718d08a8961170000000059f35ba50bf2d9148d7e9b622bd0ce2fd32b76ac835f745287d83939a5fd074c80e98349ffff001d2ea06a2c","0100000006b08b82aa72da9f0d2059dda0eb8d46e152017462455990a9d09388000000004ff61f26d4425e456f8ba7b3127e525aa7815819d7819f96958049fe2bfabf870cef8349ffff001d1e192ec5","0100000005a4c6042af928e72827badd1ca0e1d51a8ce7de2c8fd285fb97630600000000c22d7e914ca2b9c062ac1375924bd6725ee82cfcbec39b71ac78a2a6451e858ca7f18349ffff001d319b8693","010000009712a26496c03cc0defa8a59aa6f05a9640d2b6e14f5da73666f1f950000000025376b06682fcb0bede7e66738e03ee3a27c51fcd10b56a2422a7a88ebbc334759f78349ffff001d22c28a0b","01000000042718ac802c78ab709219ec7122e4915ad6672b28e444395ac66e710000000048c6d9bbd1e5cec281357740c954056a15a7f805c38195199eea90d62044f71574f98349ffff001de5ff9b06","0100000087d91171cd72c8a1d22906475c1195fb6e1d88c505183a13193abd7500000000c7153bfdf61c25cffd7016bad40493bd1118b3fba5c330c2062a75ea16bdf4ad2ffb8349ffff001d19d271c8","0100000063f3545c65f679515481b3192627748bf9140bcf0b5d29e5bb83da740000000044e41ab42507a0714d56d08ccdbaeabb60c705dee1011b0c1484e22e20c47450a4fd8349ffff001d1a9477c1","01000000cd5c0cfc9faaebe4185d64e8751b5708225a0c201a467d2e253043ef000000008947e43852fef33f4e8d801330ebadc40f85384ebe2d0e0745a2495d74adb2eeb0008449ffff001d19a1f87c","0100000078591e3de72065cf1d6ad258fc2d56046d58006ee9c6778c0a01a88300000000b5909a25f0c342a2f9e961db29585956b836a6d9420b13d4fc5716a7ec9a074c28048449ffff001d161fdb54","01000000089a0176704bb007b509b8a80731e3e9e7dc369bd5dcdfa657ecf2120000000006f7d08dbc7db78887b5f65171c2ff52ab85084e93a749e2dfadcf6bf3664710a1068449ffff001d31fbad28","010000009d33402ef714770e76f93d0900081a9d1419fbfde3c080225a39250b00000000d27019007dcc061c306d293f1e004a2a959596afebe99ed790ec76665775f46e7a098449ffff001d0849f6aa","01000000e0888796b1f03ae585188fe94e2bece9f3879ef1926756dff3c1dbb90000000075f5fa12c667b5b95c1db46c34741b1afe34ca1540c84efcdf1e715d1c00e028c40d8449ffff001d2c5f3b11","01000000c557790170e362a4333efeb096ffcf33bc4fb85c006e3f3bd8376c2d00000000c34b948f4acb2559fe6d60847c869a3a322f516517ee89dc0147cdf629005b17860e8449ffff001d2a4fc2c8","01000000b37883c39efc7665cdf6a7df0a0d30e1e3597464b27ae77a7b8a6d8e000000005015225669d30080c22e36ca07fd6f8c5c163c19f0f1ca5317511bb032d54edb23108449ffff001d071f2a2e","010000007845277f4369640586314457e52bdac27fe344c7b56dacd38359de8f00000000b4fdd69c910fd97fe004a755d32cb1913cade19444181071803ff218dba23b4345148449ffff001d25adb8d0","01000000990ec43356476715d2300e8258bce2a39f88739d2f023ff368ccd07b00000000e654b04b662f3eef8c60776388bad9d48845179f9ac085dc3796b3522690d09362188449ffff001d20a02d0d","0100000078f988e9a3b0f5d5c570ac256fa3940d39ff7fd42c2a1014007aafaa0000000069cce2a70b210e2f58cd805b1cc21ed5353c9ae9101cffead356568ce7869374a81b8449ffff001d0504770f","01000000ad6fa6cb8281b08609f6ede11e7e9aa742a8f8c9d5856ea1e2bf6eaf000000007ac208f6bbe4ddf22ea5a7d05298b0a7f34ba346f8cf5678a0c53f7fd1002c2ed71d8449ffff001d1fe271b6","01000000aaa2e95cbf2c608ec17b10d81d873446a5b001bc7faa460669838f25000000000f21b92afb4e55720953df8e042fb4e947d82780a1b15cc762212d7cf5680b23b41f8449ffff001d193f5d8b","010000002f79b5f116b380576c7a530b6612becedad67dab05f61c444532e2870000000093ba16800d137a0236edb7a572c88a3bfa54e3ff1456347ff99a06d77b39a62a81228449ffff001d1e28a504","010000003e26f6b5249cdd6e6b74c6a7bcf163603cae63246c11eb8a8387520400000000ce12cdd41107b874267b388272776641bd5e99c76b289fc11906ab2b0b44c49bb7238449ffff001d24a823ae","010000006afb4ec870b1ed1a18d090718b75f0f1da6f3fb423fb02eb760e51480000000063320eb27e9d9096565d03bb1dc18623436e1c7c32d54b29afe112f487b2567bc4248449ffff001daebf2005","01000000cd6f18c501894d997e42e08e2eedc384a34745c10247d507b729fdd900000000bda4c6c0ea3a896b8634b9ab6056aeb52643baa7487c80b732caf1382e08a2d3b8268449ffff001d2c23db23","010000000582f723f71bccd1835a98b71f38480c63887d90af11a2d7902ec2c9000000009887f98d62776b8b6bc769204c93cb30164a23aa536663cbd287b9295422b4536c2b8449ffff001d1b893b74","010000000bc3b701815d9f99048d3ed1dcf380804a30f623d07748b9eb70438e000000003d6163ff613714272c597d1bba3a39dafa144de917edf7b65e0ec3507c1488828e2d8449ffff001d294b48d9","01000000544eb317b14b68e33a471be07330be3dba3366ab3d4e6da6f25d0967000000000ea8158eeb0d2690217fb1ba827c55ce6e18957cd02a7dc8f9ff324e04ed640177308449ffff001d1c64cfbb","010000001c258403b2c8fa77d1f223261eb0e222c92e1d67cece74bd9035aa300000000032cd0a6638bb4371209a2ebda17b50967f82a3a6f7d06c0f07125765fee33012e3328449ffff001d0bd56006","010000003aedd1da748999e160af02f85190e1abba1b94852af45dea4945b923000000008c69f854fe114b845c84ddd22e062ea2216eba63ba6ae8847b09a065cad758fc58358449ffff001d3433e022","010000008d231e9dec925c5752a3561b99001bf10278a4b51fd80e260c3a87180000000040add94c650ca52af31645f0f0eda1b5c9abb8ff4c1b0f7e12c074eda6ef783781378449ffff001da7189904","010000000dff25cd8bfc32238d13904f6faf8ae10aa6a4c52e21d11712e2ad5f000000009558207e4eccc551a7c510a08f9a8890ba3bbe458b3af9d6845e2723727024aa94378449ffff001d240d6982","010000004b6374ffac298c06b5dfd1cfe35d263da6a5e3654100517a80329fcf00000000a0c209fc2c26304719b974e62ced8833f127a6372e5295d92a31ac9e1adee9e387388449ffff001d49a92604","010000006f78661d0540427f3e5b3f73a1b7caf11532eb6540c1a1e6faea41dd00000000b631b4b7eeaf34b33657f6df410181baa9dc671548d1936df353d68370c821a4213b8449ffff001d05d5c850","01000000a65fa5cf0180da40e57e570e7ba7cb5dfe50e6db5fddaec6855f25d9000000008a22c9ad7cab78d6e4c509bc5753778c290a0f24c3258d8c9ba455cbf1440ee6fe3b8449ffff001d391f7103","0100000012e1af62da001fb9b85ca9326b5d02460517bfa63d47e2509025e6620000000049c8339ac7b9404aeb2c1e760d1aa98da5136e35ba2105aed678fe77ad3b6c09973f8449ffff001d095e3925","0100000069382410a69cd62f9e07a51c19898176ede9da1a1c7d193a4cdc825d00000000de3b610cfd7c92442a41c9ee996debf0878d510edd0d735ed05af3ba368eb8a061438449ffff001d298d7cf3","010000001a384c2f914fed5f744b74d6a174c43cfc7c146382cb1c520e91b6a20000000027973b5befad506bb9363efded8019c71cdaf4ac9ca5956ff5e420f99f3e72308d438449ffff001da6796100","01000000964c3b3df98dfffc7c3e2edd56c032d6c93bcb0239e38ffe4f10e13200000000d45b2f8d88197517d2b7ddef7fb1775da146c0defea13b4c7f1639a4d4c2ee3e70458449ffff001d195ee3d6","0100000065fb1ba632baae2d0991f1a129e17ff399de2824982729fc698f1c6000000000446e7a46bcdfde92cb8d83d0bef0c4fb7572ac09ad1a96ddb7b4be9ce219e8bf79488449ffff001d32292e9b","010000008743a2ff4156a1fa176607509a3554c06784d6ff29ac43ba45e2b61b00000000779a402a5fc61569f5f2dfd3a840eff912eacba6427da962d57f60dc41d541121f4b8449ffff001d2b20d0e1","01000000bad904d2068763d1c6e244aa0d0d0b0421eb946baeb553dd014426780000000015ff00e2eca474c6dabe9040b92de1fd366d0387f826fbdf26dab6054e6e9b2aa24c8449ffff001d95fcd205","01000000484ba3e08583502936cebd9d96c076f8d784726a9cff486e7261728700000000fa2c52bbf1e40718101f0b17711c1570abd59446f92946f349056549729696d68e4d8449ffff001d1cef4928","010000009fedb87b9b8084939978578e7cd4d2cc52cf5710e44d171df5025790000000000cfdec59277aa92846f1f6dbd8c1c79fe1f5da0bf3563f72291d3b185a313fd96d518449ffff001d18bdf7b8","0100000048ff0f1eadd35850845887a9998db4474961b3beab9c361bd68b3b160000000080b95ab4c8165e0aa14f683cbd7a833d168d21ba11e11f98c3534e0a1b12586a7f548449ffff001d2845563d","01000000f636dccafd7e5adaf02847ac94a218d94bede7676240a8040eef7173000000008043930308e198d4e1f1f3d368604f654883456020a948864030b28fef84d5d98c578449ffff001d38317dd9","0100000054f17c7d161016a77eaa23753b0c73ed2427e51966c6472c27077bb40000000068555a06d9523a31e30699bfd1ec735e979b656ae946bad128562db96b03719a9b588449ffff001d87317005","010000007a55706c0e418cafca3c9d8f2c314f474dfc62238b865ddc314a4a5d00000000ded903e4b7b62279c1efc956b50fbd8c75f9e08433007c1474dc4e52050c02386c5c8449ffff001d2b6144d6","01000000bd0025a2b43105bc029ba7417698e985ace25bd6c89939f3591a68230000000090f811c8ab2956c838e0b799efb0d6c5cb05449da3f50aca5ed99df3ddbe265be85c8449ffff001d4b36e300","0100000032c1cf0bdb88a609f00788a862dff7fa0c0c7d92f096ca33db161947000000005878dbd7c094f33ae4b7b461a8cb1ce6d9e3715fa63733ba0711d43553e0d34cb9618449ffff001d088e00de","01000000d028436636d09de04bb19870f0ec6406ca11b5ff70743e4b55d8018800000000ad3b88f31f5848e045dea41aa1a31fbff8d007329a443882126ff27fa8e1830938638449ffff001d078472d8","01000000e52bb375fbf840eb8b863aa202c223a08916e6b4674632397b0c1e350000000096782bacb8a02c31c329ccb6f279aeb953466b8648509ae2d67614506dc2baf37d658449ffff001d38fcf783","01000000c163d510eb6deed40b352812c5688f72becd887db9e2a98f56e00b5000000000b7910803e04d25e561c708f9e545d0ab79874f5c633f0f64c260d5a4a701a393fa668449ffff001dc276d602","01000000e740a4234840504d03dfae30ee624aba1897738958e6c90bf98dee5d0000000012e7a9663bb5ebe0f0fde81891a288da70d57afb57ec992f183fe7349f6fbbb734698449ffff001d2f9faea5","01000000c9a30be56482cff489daad4c5593a59a1a3fd30d5328445584a86fbd00000000ac0ca46f757304d99cb7135edf320ed8305f1a868c24fe3d5ce6c299b8a7a2548e6a8449ffff001d4a8ea002","010000001f91d3b00d402a242d97383696fe13f21341097f5f0f60f7904b04a0000000008452bbeadcc11bdc9687247e766fe409a14fe45043b50cb40354058f07490c80ef6c8449ffff001d09d86002","01000000a251744e70e9f79f2ea29d1e6c495468cffce1a51ad190d2a06f2735000000007b0658b680e83a64a8a27247868e401db95499cbf43d866ef4160f5edd9679dca86e8449ffff001d0157b1f2","01000000d7d7412c4861cf2f79fcdd202ff0e9e9fc2100c79b32d9920a68482600000000e5c1a7cfd5026d751420179c767a09eb3988271a9221a3f921ef543b474a12f69b738449ffff001d37e681cf","010000009202370a6d3fcee04b395f4486be231eec07c7a88999e87d97a4333d00000000b4200b67457aa12659d7707106b7a6920539c34df8de2f90fd512eded23d2acf0c758449ffff001de8234506","01000000e803710a3a7d703a142035a3b8b355e8c1e5b0547c7f43f74eb3ff3c0000000091a2eb9dc4b051dd2eabd75993974d8abed47ad261a1aabd9f0d3abc937d115041758449ffff001d1ce10302","0100000082464920fa675afc0e3609ec6638fc0701cfb92ad1e418c9ffb16b2f0000000087e74fa7196cc69b888b225f6e42380633538b4b4f5c1870229e904c58c17dd3c9788449ffff001d36165cea","01000000e9e5bd4ae4fe2de7df969f1d36be6a1d9a1c7a636227f69082a46e9700000000197beb520b8c360f796944b2d2c6ac7fbc8b9b642dd0dce6592cfe39a84bb689a57a8449ffff001d2b11cb70","01000000d1e3237bda67ea8f22d3b82d28f425fe7a5bbc5f1814992fc87cfbbf000000003e41c8a1ea5681ffa83241923579e54c61a611b7fabc1acdf608df4e6bfa4cceb67c8449ffff001d22e48058","0100000051f257d3047518ab455fcd65563c949e7d1f3b2669af07fd9d7fe6700000000070b1913f18c059e1a17d7bbd55f42e5724a32317ae29f13591816e2b358795b8de7e8449ffff001d25ee2d81","01000000035cb975ea5c71612efc048211c5567308aa24d94de57df2a9ac880d000000009730442e048ae170dc0d726252fbfa70f2a5e9361454d8a1883b88c69a07f15c55828449ffff001dd074d40d","0100000002a6cf8cfc95f36723864263abdbf8f298f6ed218c5f7c70b45f4f230000000034b84e5057fcfcdec32a93ceaa869bcb95f5e58e9eb3e63a4f3b65b8d2e473638c838449ffff001d003a44be","01000000ff34e3060b87c88984de12878bde550112ae4bff4e93dd3ce22cdc36000000000330eb8110843b290eeff9b3b59419eae7ca16ec93eac402fb02bac5a15bbac0b1838449ffff001db4205000","01000000166b116776ce47761955d195d48448a463edb216d991169f552447d800000000c7069f05f1095c3cb32063a7ffb0fe092868c6dae3ae1f62d6100d056b4ea16934858449ffff001dc2547107","01000000c5987a2ec58891152d22d7cf9bde239b2385e7c29f84948904021af10000000030c3c5a106a5d28429a11801df9f2aabace8ab1e9dffb8c55c095fd9296c880c49858449ffff001d1cee1700","01000000fb83103c511c8659d978e70022b95d39e3c1ab7bec796ffd1d243ebb000000001e8a4e96d68ae5b57efd5cdce4a67570fac84cc8dc47bfc2d75e6966ebf14dc897868449ffff001d03887a57","01000000de26dd9d42c156bcc346b15e5c7ac42e5220ab1d22a68681dfb4275000000000700d69eef76e4793cf93a567a5bae7d0f28e31405f58d4a14d278f8dd195855bdf888449ffff001dcdfa6d0a","0100000002e0b1f7aed5e5b3c185396c5c5f2049e87572b08af456aaf04b399b00000000213b8be2d6841ee360d36b92a23bd7e63c227a9f4c9bf3cbd8c7cce7882b57900d898449ffff001d286910f5","010000007c4c0e4541cc02d6c38a28bb004c18cb2c8d616c1c61ffa63d0c86ab000000002776183410f913a41bb5c4487d6ebab54e614fd45e26da5249f5dc54485db4ca398b8449ffff001dd8723805","01000000149dd1485e47ed1c2fca8feb7124a634cad5ca3d5df027a9c8374c2600000000cb7797cedf44072158834ba3c83b6ed17ef38a7760f117e72246f1a801c1195f9c8d8449ffff001d386a7a2a","01000000a33c87679f71c5502f70828588fee6ed43aee942257c42a1f05bbcff000000004d128cc757d68b2ef86ab1db5b87af82f21b9c156e98c0e4222c8c9f0eb7b58d388f8449ffff001d23c38160","01000000c5d20fa5dbdf4b287ad8445d9e82ecf4a6877f6f4253dc020e13d4a800000000ea2c626ba8b85e6ec129bc5edec1533d24d7b20a51524382468f9787eb9ecd1923908449ffff001d879e9a00","0100000048dad21a2f14f98d7bd4ccd0f0967a46b6711f8a8b31e8ea4f41688300000000f1453f2e5995b405eb21752c3371489c0ab8f8d9d823146b936b47a0f9820e52a3948449ffff001d29e6b009","01000000518f7521270ee7efc5b2631386cb255204f833d14c6180ee7a8894b200000000e3fbb75d40522e94969b93350cadd0ccec874ccdc3ebfe8d9ec6c9ae8933ce3f1e998449ffff001d2defb840","01000000d7d779a518a580d53af4eabb67cbeb8a15588ceb0060ff813fa7071e00000000906ad2a0f33b5db126656d8834e243f3ea8f438209f2217e3f27d55b875d9787709a8449ffff001d51dfa303","010000003b525f0f30a0b14e5d6a15fe466515be1a8c6096ef1737eb328b214500000000cd8868a83d80d5d8886bfe8b575ae4ab01d930f52db8f083aa2fa71b9f6cd17d679a8449ffff001d71711200","01000000d948e07423c0cc2e2dd5ed87547f81b95649c8669e6c3aa71ba6307000000000990d6e885631e4d80680e920c4704a7ecbceb1638b3518cda5e50dfb5a8daaa8dc9c8449ffff001df444e007","01000000b6a8ce70d4d8b749ef47ba7b0a6811b5c7efca49a7bd0c51cf41b92c000000008d777087eea95fffe6a08796924f739c21df07072eb64f3f37fb09d4116f170b4f9d8449ffff001d28f7ae9c","0100000062693bde87133d4c210542c51265d79e5a7bee36c5fb0588ffd61e2100000000970199db7667ac56c860a32f76a3bce3f53a5513fed3fff3e14671d44ebddce1149f8449ffff001d01db158e","0100000088b3fab2920ace5645da71c184d0f21535322250f07c1c425f51e3b900000000639d14f44c845bd94cc19d3c1e8af4add8578ff04ee0b5523254e209f7922b3e869f8449ffff001dfa070901","01000000d9e04aa72b389adf0534956bd3aabeeb29b1682d2e439c3ea25a051b00000000e53c595e37d4927e12456268a15ef027f36b11b9d61f8e6232909f400cbea88cb0a18449ffff001d6bbda901","010000006ab6b0d52cbf1e1e063eb30047e51e009cfab958e08724c8e6b1c906000000009614ba29879bc27acd2de65d8df2ff51fb4863f25d5fc5ef3cfd5cae55d6f4b333a48449ffff001d139421a2","0100000060143def94939145918672428fd93596e59bfaa3587832c485f41f5500000000aaf277406968c24e22f05c5733c48f402b727900a78b14c068659d61077241939ca88449ffff001d20e19551","01000000b2933cd8d3ac275f6875664be0c42b99e2a0fce8287674236749c26f00000000fb465f631f2b67265b9a48273b9d1ac879d335da5b1589282575a9873e70358ea5aa8449ffff001d34260ff4","01000000d4d9f0696efe31dbdab6d73152e87d3dfbf05e4e2c90b304cc98a37e00000000667d6a6e03e1c367d9e9d33c67329566b45a41f4d0cb74a58726c982427f3eabdead8449ffff001d03508040","010000002325b1a68503f34a752d8b98ef47ae29427666389c206d2ec67ae2800000000002e54783d01f0605b714fb341a6899b41ea5b47afc84a69cfa7cebc30d676e3b6ab08449ffff001d34064269","01000000858aad4813b82a249334b7d3b98f40bfc01b6c10ec0ee0fca92e02f100000000823445de7b6621511f252fbcdfc1b242abd174dbde0db11fb1562f0c9ab191d405b28449ffff001d22003dd4","0100000050b129c1bd368c007f004e55327a69f5be20b60f75ef294cff271a0e00000000bec208b52e8fa1c8130da4b7ebecb7f84219de58de04bd0c600c2d0bd57e1a3eb2b58449ffff001d29101311","01000000b0cfcda2c225e6b637b513fd26f870bab275318aa16aecde75f1201500000000b241d50c638eb26e5df377b6fb5c7bc91f5704d2778af35b278034b30cea9600f5b68449ffff001d06db6178","01000000ad3e085eeed89751ca185a6d0ba8caf70f9c90e9b71502114624299b00000000084ab098b6bcaa91ebb10aa25fd36e042cb77524bf9578149b26592a45919ad99ab98449ffff001d045abf77","0100000029f697a251a3015e62aa9aa1251c7c02373fed7d22eea7d0a70cef160000000060342a3e686b8ad7f967bdacb145af62a00f8c388fe3f14020893e60e7dc205b99bb8449ffff001d24c8e08e","0100000032e6538fe6a6ef305f05c47791d3030505060af802e133193e6cfed50000000053c29358035e7237ead5a8bf14e3d12c7c2ac1f84d04f7942eb619688c187f4e82be8449ffff001d1956ca23","010000009337d298f5d90da929ac92d9b728b277620af49c61060e6a67b43c1a00000000ed05bacbc4140e9852efd6e778695be85a93055cc482452847aa97ac7d419c1098c18449ffff001d04658ac1","01000000f32e64f455794a36064e8cdf657d81c1f9956486a6bddafe25b677d100000000dbaef171125dc3c63e8163225f0263c0aa2e1bb9aec8b8d08ed8144d393e500f13c58449ffff001d05286ea8","01000000a3a1c46ef3cb6487cd2403cca07b67ad7608cd7d8cfdecea0728942d00000000b32b2e84c8cc0c8e29a02b4783ba3d9d58693732173ab8ee5243920d46c5edf77dc78449ffff001d28179f5a","01000000c4c43432a63a9d3e6ffa738ac21ce12621417810c6129ad0723932c300000000a5246817edd868cb81c65e60c0760ab6996f7c9d0b9ec540e6a93084fcbed45816cd8449ffff001d1b4ccb23","01000000fa8fae725ef683801df3180490e523e9aea65aec0611825f3b2f094d00000000322c6fd3c092b337a95a54db681b3fcc173f213e118c60404dbec48b0429bb5aadce8449ffff001d36947b84","01000000a6b41d233773ac21866cd33aca9eccdd8f394d0b8ac5442009c621f00000000009e4bc9fe42b2f3eb46f1e073655a2c0d66270a07d40cdbd62cf32ca2a6c0cc3b8d28449ffff001d2a0d541b","0100000045e16f4260865811707b4a46ded3d2643e00bfd4102ac1a982e00cbb00000000cf3d29d1af63475c4a32a4b05920bdd12cabe3d206db6c1cb7149b1ad295e494ead48449ffff001d7666c405","010000000e196011ca6a9a4cc80d8af998dd0c7aebaf200374b733eec96a9dba00000000c2143821a9017771c541a3bf817fdf1f8083c6b1d62d85bf05e240ff1a392f2c30d58449ffff001d03c2a59c","01000000ccf44311494fea3c9163e1b3b7bcf8061a0e91b457ae6a8208e1805100000000e79cb2e69def3f45d2e66965293fa4bce605d192fd35ac7a631ee2f2cd9274a045d78449ffff001d2a526f6c","01000000b853b56c42def74a2d544735cec8f915d6abc26744d6f087331f524400000000ed69f06f664ee4e01b6534f9b6648426158988ce6af5e1f3b8029c7b47dd5f32e4dc8449ffff001d1b401f76","01000000115b30d93d3e3b7678091e4b4ca865eca8ab92b20769933e461bfa8e000000000bcc0dc57bd70bc349a6094f33fa343b184a29d79da19ef1d1443105a281301e93df8449ffff001db76bf20c","01000000b35d8420f76a5518eaf3285f6f195e96973aeb19488667b8e81d69e3000000006ac754d5420c5536989c62513143bb5b9a412312f5c38f55b7d4a3f1422a4606ece18449ffff001d57a14902","01000000697c1b685fb57329a5d04d230971a0efecfda33e539798ee6617539900000000d1f1f24752515e5c934715fe8de8647a4629f655075b51932191c2fe2540c49fa4e28449ffff001d03271114","01000000723df9f0f4a40391406fb798f235f717135e89330a892f0e6fd241ac00000000583415787140d7a6b279f098869af30d94af7a285b6933bb4bac90f1fef9d71ee7e58449ffff001d2438c285","010000006d68fb6380d2dcbda868ba1c7443de7854b4013b3a1e95ab105c47fc00000000904e2ac45dc3b613c9a17048c27bd17a0d413c2634bf11f4e5272d9424417cfa08e88449ffff001d33f55b9d","01000000ce83aaf8bafb0d0948992ee1030520f77511b141d23a2a32743663a300000000cde1b1afafa7ed83801973d6df316f7e2accfb5565cf57c0f44bf31c85892566afec8449ffff001d141c5b27","01000000393bc3700236c5a89e5b063270c1450323f81b9e591d2a157912ba5c00000000bbf7119931b0304823db150d84a1f99d28209a0e2d6b8946f584349fef1cb3f250f18449ffff001d32024880","010000000fb22e49434e3c2daf18ea1b9645fd44c7f82ecb20e155173a50289b00000000cf39798d2457941dde361dddda1e83a77fff5c96f91733c75ea9f11ae2fa399d16f58449ffff001d35ecec1b","0100000074b283d80d62f4fe8c5b1905afeb297df0b3aa20e601d1a0e9f5f29800000000d64fa31c2cfbd836f2bb6190c751eefb73104c543d33d982d1b41005c663123b28fb8449ffff001d17dab05a","0100000040fa775fc10b5a9b6d0a4436fa7c61f95bf44ebc00ef1e51781010d20000000070f77aed85c49d1ec490065637238dd561a0ed3b1df8aa5098175a86dbc7073e8eff8449ffff001d3147ad6f","010000002979fd4916b96f2342e9ebc1265d00b69942f9612a1aa89ea297435900000000f5e61520f6de8b05aaae6f831a96d3ea461f269480ebac4ce53600bdc111be4916038549ffff001d2e763b6d","010000004955dd0cee4cfcdb3eb3e05e164a94f57ea8066e15aa8ca5c52a687f00000000dccdbbe9350aff0c006b3f98f1843f6cc34563f16ac5edbbe3710acef7f8280e73068549ffff001d28af49f2","01000000ae778e3321fad3342f967c9f9fd08eff0dca808f6775f359d75eb285000000002bd858ac5ea443054305f261d8169ff3bfd731277aa58081335bd43564f7a3621d0c8549ffff001d1e4c57ab","010000005efc6616ae34bb7463118082faa23072282974e6bffbfbb08204ce6c00000000f3d1db6b206ede6daf424b42d5dde24cd3112ae28b17cc7a4c6198acb3498eaa77118549ffff001d3a4db112","01000000d216be3921b3718cb6ce9b0983924768e1c6834b97d0de03bac4d1ec000000003154f4e8913d51469993a7f4ba2b056cf3f2597aff1f1e63a068e1585a57d10df9138549ffff001d2848e433","01000000403a9fc2f536145770d895915af98cc3b156ac550646fcfdeb229893000000002d6d3d9ce46d97fbde2c4828972d3ee31d09589ce7d2ea47345f13cbed30634a56158549ffff001d02066078","010000008e3a0bc5fa361c181561b0b122a3d135752e352a8063d4c552e9eeab000000001518fd321f7026b2b29c4eabb402ba58e4d6ee51b861271747778174485de4d284158549ffff001dae048100","01000000a82f6a8c1ff601a83f23e6af02b9aef3dd42d4825247a8132e167be2000000009e1cc54d0170c6ae2bb9510a8c137093632149b5be8d36de15d44067f369ec9493188549ffff001dcfaa120f","010000007c9cd3c41f24719713f2868d1da0e21a05c0f507c7aea761d2d3816900000000fdbc70d1ae13f89f635a79c92ad478c2c68d6956e73ad8b1843ae7ce454160de491a8549ffff001d3300c2da","01000000590957fa6650771e23aa7f3067a53726ec91def38352dd6d18fcc5e5000000005ecd3ddfaf2a32158bd649a70e02824801278307eae3568142e37cc6525e90ba1f1d8549ffff001d04dacc90","01000000dd247534a73bc4caf361a1624750dcc84d4c640146d093d2253bba37000000008ac199059936e21786414c9cbc03af8bca2f222db0ebcc6f7001b958afbe7d6d82208549ffff001d2f37eecf","01000000ddb4871ccd752d6c73ab028f11d61690b9814a0fc785d36eb72e191500000000e916581fbe0a23711e68738c5bfc5acbc9ba4875643325ae2bfcac72f02ed8361b258549ffff001d0265832e","01000000ffb354d88385c5e2355b0850c9adce6f1fe2e9986ab6124cef07f83b00000000aeac0e4ca4e3beedcb485bc6d056c6d05f4c515dadee1eb740b025e090cb79a42c298549ffff001d2684d029","01000000316d11af051f94098d6c1a4f881fae58405f3b7faedd423ec726177c00000000cee072e0ac837cdcbf7037b8e3a6ba1b61bf3772e4a78a48707758039361a8bc062c8549ffff001d01a15905","010000002f29ed663bc19bd8e1718601267c9e33ea5ff6376ae226cafccdfb2000000000bcb9ef627fd0bc7eff21079162b5c25f20d2bd6e5d1d9f0f22f897b98918cbf686308549ffff001d29310a27","010000003140710b9b4ff32a2853effb5d685e1d1aafd0c41a6ff606ad8ddd16000000003ce540db51ab348c2b2b48fd889ce7ac69c9af171afc61e27d8338c2412b9e89a8308549ffff001d6d681800","010000005e99727fda94a9cddaaa0c66ecf4e0d479635e560daa419bcc852cb800000000525a37cf91185b70fc29028ab2535a6799c003259b2b26c85fbcb946b238aa02ac358549ffff001d377117ee","010000003370cbff68f682d18ee70f276e2c09c1e84d1d3ace8016e8028969e0000000001ac15caa8bb7f038cf40a60409467ec743677ec17e65383da98424280ff1599652388549ffff001d3518f94f","0100000032e8ed0e4c524e75f0ec6c5545da1fd6a1bf61a29fb055d3a9562d7a00000000f6caaa7e26abda5d4accdbf448340375ae6f496a241598b81c4ea81950f1a1d923398549ffff001d61bf1802","01000000c16b8c4448dad47e2faaa0143432077b4bbba0636d735dad3bac46c60000000065d3368b640e75caacabecfef2d8fa84a4ade0b9280c03ae4628540c42fdb131113e8549ffff001d313afc7b","01000000dd14beea6ccb9fcb934885ad56c09ee5c13686b38b7819c6425db0ff000000000852edbdb21769c69f4113c0bf8fd9d0d6b8ddfdd3fd03b39aca63130a945f114b428549ffff001dd2caa202","01000000e1d7aeac1feb216bb0c23864a3bef55890574b036f32bb8d2c7addf100000000ee35e36822eb6d1b8bdac1f309437077dc2a5f68fed01a9d2885924fb193280aff438549ffff001d080e30c0","01000000aaa3b170d183716100d62b79e7582563ba54c6af2c575d3c2a5bd7aa00000000317241c518c904e5f37273e39731be9a5f7073d299e75ef6797898db158a621b3f468549ffff001d0895837e","01000000b86113e882706d5ee40fd50f3e03b3051080e487f7932e7ebe7c754600000000f3fd4b38257061f2624527b17bffaa210b105edfcb4010c11df2b9491f98edfce4498549ffff001d230ee7d8","010000001c727f5c7847056a84e0fd5434524a0d8a23f6fe791c8235a611431e00000000bafb192d2a66e59d7448ff5347758967dd89f6c7938fd5aae1866f7c54784532ef4e8549ffff001d33ee1c02","0100000024768edbc5d69e6ec0548c4484a4204a03889701bb4f842bad4498bd000000001f66a9d499bd807e2da53f14b9fbdc36e14bf96852a2f3e696967317447081e518518549ffff001d54486e0a","0100000025adc8720d632f24a598e4e504729f8116bdc3f8a37088ead8c7438c00000000b0a6ccaf7823566ffb8c9955bf8140c67c242f2e176023efc915e73b63cf08e453528549ffff001d813ea105","01000000912d848e01bba5e0f5059a6e4937ab03a0b97a8fc25aacbd72b96af1000000005a37aae6c42979c5b35a4003c60764819d65786b6975423e3f28662e7afb0aefc7538549ffff001d09145807","010000003812f9a448dd8158c79565ac2231b89effa6d00a72ef7fada4c5a25900000000804d4d1056416a75b1cee05ac9af96f71816928715b9553e36371837e8c26e9dd7598549ffff001d35d6402a","010000009ec61f6ec9019a3abf7b01b36c4e58fcd5fb33dbdb843db52eca5c9a00000000d6c704181bff118c31142f6ad96b5989a886cedcbf7e4d94c7a38e1dc88f4045c45e8549ffff001d331a8723","010000008b93b696497333932a72a488ce6f8505be21243036c962e5fb04a996000000009a0ea8130435b9b176c1e6a1aeaf602b211036539558e611efdce82a6b59d7c3d0608549ffff001d0123db6b","0100000080485cd59b1490f5dfcd23cd3a40d68b46f0583d19fbc8f9cce4e5280000000065b9a6c6f5fee030fc0fe65bc37280984623be456c211ac891b0028a31d5ed41d4638549ffff001df540800e","01000000c1dda4c46eed062f3efb5f7f58741bedfa9ebc45c0ad9b10fbee8e2700000000996d8692d5906bc99e002e45d92e8b10363ef4e554717a01346acf39b185aa7282668549ffff001d18c5c0bb","0100000098233963622ee89fc347f74ee1539eb05f89880998f7936770843fb000000000cc588fc6e334ef2c3f7682a39f98915a03dfe38e13bd067dca39928c8fe64560606b8549ffff001d2edbb705","010000005133f84dccbcc0fd4cead9e482ad555715135498a2ed73120a1af3fe0000000011dbab3744dd50982e83834333b68fc4564b0102641236082c236e48c30ef258ae6e8549ffff001d262a1dff","01000000e2d68f901b38536e95c85ab0f2cf878d622777113f73d40c950c76cf000000008aa43c088249d2676e7c48697d77130e83ed61f8d1b09ae212ad6f6c9b11bfd9f2728549ffff001d2d0667c6","010000000fe8df6c645ea65fc1f196ea20a09d8c6009b3607970a0c2bbb11d74000000004d4eb0e9b2474a79089e27d9975010299a3243e7d92dff9ff31ce974aa5c6f2591778549ffff001d04a876fc","01000000357ba62117541d8ea9df161f3830a425a7fa5336425e0545193a2d5d00000000fcc65d611596bd6965031aa9e2621397955c4217f9e3674159cb43be756acdf71e7a8549ffff001d06739ed0","01000000c3bdc8da883ae4d0764c97e4a331a555e26151c36393ddaca1a5cbbd00000000c65e81102c5d5dd10d3a21a3cc1e345a84e5802bfd6cdc366789b586be143be5477c8549ffff001d0752831e","010000002140a78b5107e204d119d87d1a334777372afd3fba1fe39a81a96b82000000000285d042954f31cafd7d6157fb092427d9e572bae214f722cb231b7a13294e74a1828549ffff001d054604e8","01000000478c0f05b54e68f11599bc0dcb6b0c0f92bd1bc972a6d07a75feff9b0000000073ec3e8532c92fd948a7dbc38e02c133f3460a9b5ef881396ff658d95853e00260888549ffff001d279fdfde","0100000058549389b4f56a598760ee565aad143a5e73b8c727533fc9ce3a2b42000000007ad637ea18085b4c38bd5daeefefccc00c4582b9ddb17ae351426f62ff8caa0ce98a8549ffff001d74151805","01000000341953abbca1721616313547d159a1c5ee42c68b1b06cdc6e44240d4000000009eab25d399d10cf98d242617aff40fa941b3268a44c64449f8a8c5680a0e02f4668c8549ffff001d3a752507","010000005a2c3647be4ae3ccb0701443af90403fff2c0e73617b9d1bccdeea40000000002c8f1b6067a9c7c3b95baad1cc757afa87edaede22fcd87ed452c979f917433bad8d8549ffff001d02da87d6","0100000087d754d08c3fcec93ed13843bf0c73bc3ee63dd7aa79dc2d0eaeb165000000002ada9785d68425bbdcefea4a819d5e5c0188f81349e242b0e2949f0ed8cd6f3419938549ffff001d399746af","01000000b7ec59ccecc9f7716977bc060d2936b0b4bb841e0c14d81bbef1b05a000000002561738f778245a450b787f7971e7f31cff2e0c1ef449c3681dd74ae5814182685988549ffff001d1a6ef381","01000000d378567cc533e3a5068e12f1f6771220709cbd1af1257892ff1c3e1300000000b66adfc63202e4c68d4650adc79e1a245bb3f3dcaa7550fe41398417f0a0b814929d8549ffff001d093d7d74","01000000547198b7bf960379d2c4ee2883c72b907fb7bb1ff93fe3a8fb4662d6000000003bfa788024a1b432c24bc97aa101625d216bd503a2e3ed954159a01730508e870a9e8549ffff001d4060dd01","0100000042d8fdb6d65c2b2c76fc6479999c775692f038a2d2f1ffa27db468fa0000000040b00a493ae2885a7b24d48397a283809fb6d466db9579b6ec974af68a0665e16da38549ffff001d37f3b969","010000004bffca7c4f591c1a517356cccef4bf4b7c82998781ad5f1cbd6888220000000046a92fa0033c7e58acc2d89f138847f1f75b4ac500285d6ae35a950faa73d39f3aa58549ffff001d190d8404","0100000033a4d6be8b9a7ee671fa4a9e089ba34ea126315a2f8153f67bd56cd900000000c375357ccc266b8da00fcb08f903be94423fd09d070ded23c4ec0b12d606040762a68549ffff001d09f91703","010000001029a356cebb62ec4deb733687dad4908f0f4cf25010bb318548a791000000005266cc4ded5070310408b850c02aaa90c2ef530fe212a5dcbc69280841ed69c3c4a88549ffff001d327868c6","010000004196c96fb37bef4c817f9ae85393ba660553e4ba51e8a9e083eef21e00000000d11e8f9cc6a57b3e8e5e84cb0277b9900ecb090f3396c1bd12956111846b34f244a98549ffff001d8aaf5c02","01000000babdbec9141c60edc5de430de5cb9333d1bc02e9e30b9838737db81e00000000e36002ec02e58566ae3c7099201d64a6276523d149ca98dd38381d2b0d42bdc49eab8549ffff001d20658630","01000000767ac955319a05e28c8a975dc16a1a9c0c281b8986b97b66c201175e00000000ad864907b1aec4fb7edc23426cb317220ed3b2e522bc15fd455caead359c8d60b8ad8549ffff001d2c1a5c00","01000000322bf9c82a87a695364801c72702399d252aa55dd24d35f5a940917500000000ea231e1526c3f29e6263cc2f6efbf50e62a11463ad4a68e558d03220e318484a55b18549ffff001d1461169e","010000003dc4c12a4c7621fbd7239a8ee42858128acf702dcec212e61035326e00000000cb7c5ae0b98f6a319280893f808906ab91c53235a7a6e2077ac69b2e692a0c5bdbb38549ffff001d2f401343","01000000b72c4d3c194601a3f9cb120b9e002599f899a61610b2a3093a02df09000000009d6ccaef1602c2c85a793dbb5704c23d405d0c71e2a30b98ca7f8b450f70c61e59b58549ffff001d0897ca06","01000000425adfcc3865c4f210f95062479b9da23447e91b6e7c0f4e75a1f96b00000000a801d9c533b5a97b66dd21dd1291a27193a0d0e6fd3d744a9dc7c7b3703f2e0590b58549ffff001dda5d3601","010000007d76deb48d0749d035fdbf56d6f4e10c93f8859e0281fb101c080463000000009ef458b64174d145b8bb9397e24173cf7665fdbb2d5a2c31eb4f50142c7cc44dedb98549ffff001d37e8879a","010000007b1cdd754280f6d22fc967531d7f1baa3907e0c589bd6f388c3cf8f300000000a0ffc1f75c6a018639b7879d76e71b1e5cf5b4ba7c5fd453987fb1be9bd523c6debc8549ffff001d18ab45a0","0100000054abaaa4900bc79448fa07d375fc930db993ab3c89651711dc41922700000000c6f6a87c848c35653ff954f8e06f4c348b6fb7d47ef84907b0df798f4d5283289dbe8549ffff001da329bd06","010000001723323da5d912d5d39d8f5598e96949013f171df2d4c077ddde4a4e000000001c8a5ce960b9b0bc705338f200da6d9fde5e6e97969a9a1ac78de985ba345b354cc18549ffff001de18c2407","0100000097f8204ee3fb5eb4e92fbb8bac874878dcd40b5f6b07ebe4bcd4940d000000000f735f8f1b0b3d3db21e20cfdf20e7586dac9aa14bb7a279e7978e6089afe32528c28549ffff001d13fbb504","0100000091cb9b0f06c559da271cbec1db3abc8f2b5815f56ee4df5455d608a2000000001db22d84ea4348c0f20a15f112ce93bdac8c4e20afe99be2f894bd70c7307344ddc38549ffff001d77e4b207","01000000427c1ae78694244f7772612aeb6c00495253d88fa8150b41968f08f800000000d5709c9b8a95397310311e7460e68f6663bcf1ba084bd991a7ddd1099a29fea639c78549ffff001d26c697aa","010000000037177a0e945a96eeeb9a598454aaef29ab4035bdcae60d98cca41c00000000e352127da3a38c188947e8111782258997d8bfad3a3870af76cc8dddad6382a6e8cc8549ffff001d04fe84eb","010000009049870c0e7b49b26af6ba1b9c8555375439883ce095650188781bee00000000355fa5423404ca89aacb90a854c19891aa62498b985989ab5cff309ca31fed0760cf8549ffff001d1809f940","01000000b17c0755da0ccae0e8ebfdc6236bc7eedb2bef7f230004b844a39b1c00000000867dab2a464b50a9e7759c568a6d7e64e68af7c3562a3c2144d78f98b589dba798cf8549ffff001d7741d700","01000000dbb9cd13cd5d15cbf6257507cb414db5029f36e058371fcea2930135000000000efda93fd05c8fad90910427bcf5edc50c3067b27a4758f42b4ea68f93adb27145d58549ffff001d2fa4b877","010000009b94fbd7985140e02c399bed58997147a3b47ea1ee7e9ed31e383eeb00000000839d41ddb9905a890f30ce34a1301a0ebbc7bc0cd283b2ae76baee836d0935afa0d88549ffff001db5662210","0100000073a70a863da9e2d1c9bb3db546a41289af320f43735132df41c3390f00000000925caab1e0347bafb6dbeb45b91b89163ed55b48a25acf426edf34d6305c7412ffd88549ffff001dc78e3101","010000002d4a815ed7c2d89aa19574fa4a274ff56f05b08780f63c14a3ed357200000000d22988bda72a4a9d79bec1fe7430053d9e9c8ec70d0d10f299b227d13ca6fb5e68db8549ffff001d030e7b3e","01000000868b3d41762f7e7e496c145cadd4ac1fd5c95d1a4cdb649c988427ca00000000d0741576e36bbc80b9af95d13bddf700a16513a452a15d10302c065b27c59fa628dc8549ffff001d108bb602","010000000d16f3cbec6b01c63946e657c2f27e42b8ad4dafc2041283828f625900000000bd0753e544af58db69e9e2adf29851079307e70c9c09a443a733e278229b9e70e9dd8549ffff001d27ac765e","010000006605b933cafe844fa002799c4590d411c41a0550e2b02699fcf0847d00000000e9dcfbadb94fe98ea8f63595fe9e7e4cc857ab6c20520f4cb29155825230795eb2e08549ffff001d65af000b","01000000f7d6e91bbb05524a57853f38f1f29254b08e14ef2d3aea28ff668550000000002abebe3e5f4feca965d8108e8dc5d77caf10ff9e65c092395a16bf17bf40dd4628e38549ffff001d23a4f241","01000000cc5c5a09a4ff4163caa074ad26ca4c66eac9b89d39000cabf5353306000000001136d976da3c08e902796dc92325efde01292ace9e43966863b0a0215ecfb35fbce68549ffff001d045a285d","010000005a6071b16d5df73836223b539a5acaa42bd49680b90484e84d859e0300000000188c113a7cf9feedaf0cb64831c75141db94beaef48a8900b79b8f5979cb1d423be78549ffff001d099d0e01","01000000ef189c57ccbac72411a4550bfb5e67b9e99105119794788f12e989c80000000057e5969f4a3900aa47322ef53f38ee0f0c735a54f4726fc2aeca489962873c9c02e98549ffff001d388bd5cc","010000002bccdcd009f081efcd42bbae95dc4bb6da8bee6765985178aedd73cf0000000035a4a5e677daa0f4d6dccaa20af31bf7955e3de7fe7cfe867282b2a1473738ae6be98549ffff001dcfcf4a01","0100000010489c4d3ba001fb504fceb53c56d3dff5a6b0a55db2713fac6a4d29000000007e8df9d96b52026c55e7a6db14021da974e556a9e0c1c131cd7391de7b29292bffed8549ffff001d029be030","0100000043502c4149aebd3a706394f82b72938513e77a096ae93361081aff0900000000de0c60690fb437c9534a173b7c3b1dcac543ef1e45b67477627b82a881cbac13dbee8549ffff001d0c91bd03","010000007937e0c83b3ba2df769c2ca25c15e7b1cc1ccef824a8ab011868f21600000000091dccd3b76b176e018b98d55b4143e0cfbdb319de94f2fe7fb86f2d48b0ee01a4f48549ffff001d35d9a13d","01000000ab96db152b2a65a31fa1f0eee47e29d07f5f56455380594003c9da5600000000ebb971b9c868997b569db96e82e6bcf21ed18dfa8fc6446eafac7a44ea97bb05eef58549ffff001d924bfa02","0100000034b789736e8192a9f4e39811ea1f2b9dfeca2308f547a0612df77089000000004ae320ab0bb8c7657cade8360c4231b55a32c6296f3ea9bf76385206a69cc8e26ff78549ffff001d2744bcf8","01000000426d3662ccd47217a27c7f781c80c20e1cb796e7b7b7171873e3b5db00000000f43df0209272aea0a025a75aac098de24d9e353aaf0f9fb35db6dc4be900102984f88549ffff001d9d2cd904","0100000086345dc00e26490393c23cfb7bc50477a6a669fa2d139e2e8e2e8a43000000007aa2e8e4858ca1b49a9f3b396ef561afc75a95f6f0dca1c4945efa611b4b64d62dfd8549ffff001d24f7fcc3","0100000065be128f771dcffce442214f5ab1530fa18501afdd516d3579b3cf1e000000005440a090e979b9dc0579183036924867647ed087a53f66d1247798236290403f10ff8549ffff001d03886d90","01000000eb271f939f6af203a3e4f5bf14d1b1fc23c95717277f1b59bce620e700000000fdc70307c421ddd1085fc596a8230d23d3f7123d353b16d3446977ee9d5b64eb98018649ffff001d2085490f","01000000ae1ee53c7e37b782b8fd988e4ba07e920ee26f7b629bf02437962234000000002617a7988dd0d78194a682bc9f3dbff12f3753f02bab5618f31a8bba8afcc8d508058649ffff001d31dacff4","01000000af82f2a970b9d7142cd14b8f37b6ac3e32e6d3430aa8f48d86fffdc0000000009f6445ee2c3626c076ff06f3cf50926d2c9519d2d41d370e08e22762fdf38b2a5a098649ffff001d15c4b500","01000000463f911624c31ed1daa1abf210724432fdc970ec7f43fd1a191414cd000000005fffc912e4e59557738082d04e37260d659b2088fdd6e4deb707b1c46066e3695b0b8649ffff001d1a9e2cdd","0100000024822f790a6faf3cc3b564bf9e1fa90360bf7190f82273b86cc32f9900000000dbaf4dfc9d1cf6863ea3111b49df424b370458efb42620e67b534b499966accb8d0d8649ffff001dec75b103","0100000075556aeb5960c537b50b43b2859d216fd1ef057a7035cfd3e7b45faa00000000e083a6949158e08afaafbf27d64b80c161bfde450cd709682daaae64703214f2510f8649ffff001d21332c07","01000000c35be533cddd7a4ddc3dce428180ef58d8e436d4d3425ec77c3052d6000000003e766c51a8ede2b82bb7966bb96f91004489d193d765e661367094454eae1b8e24108649ffff001d36429db7","010000000c1d4deb2701445d52aae56e091022d7d11c0d31c1af42c503636fe500000000ccb42c7a1ce466d8692980baceff029ce717e1953a83db8d857a73419ae5270fcf128649ffff001d23984c0a","0100000041fd6fdf981b2cab06b639978813e912acc4e31f165c33accb1c90eb00000000a7f58ec8dc789e823dbbe0633d34625625e14072942e240aad7cf26c263df5690a158649ffff001d18105ec5","010000000b7d865e4a138f13c20df656bc2d524ce323080731621827e261f42f0000000054bffa39078d1c7550be17e874f50252ffbf5bed2392cfb2946fe8f37027a1d6841a8649ffff001d243a2caa","01000000345246a57c464632add6fbcfa61d5adda36fbbed32829973257aadd700000000f5a4eb7ad7cdea74fd8356885444b6e8ac965f1702c3925190db8e329b14196021208649ffff001d070e307a","010000003f8d65e1bf2402b50d0896b592b49fc819cae377599725893b6fbcdf000000004d802579baf79f0502b63498678d0d81fbddaa470616d4404eef06066c417dc718268649ffff001d1e4adb53","0100000036cbd9bf0f32f109de239f8f94505bc8911dee7203533b4e8e58cc190000000074f30f09f58fe0a8212db7b5cbcba9c6fa8d9f5e2659eeb537407db6370be589a0298649ffff001d3867f110","01000000a6b05133bbc334eba36535f38a9ac9852dbe5eeab361461932e1a22d0000000009ae2e25d5b7e928fbaff73fa049823b85dfd61c52a54d794d1ef7431de7f354c32b8649ffff001d258fbec1","01000000c618919e8d0ace65d1b6a2ca5eb3497822f028980978c7a5da74c9e000000000249a81d628fad751ea216942b3d1b02e27a56e80505cc995d9b2139a35ca26c9c02e8649ffff001d28ee4525","01000000c5d95f8b76d56cfcb514dc02305c4c0cc76a405d4ef4db20451a62a3000000007e12006a7d61ae4851a59e1bae8de8a2f9dfdcf9d5fa015d48826f8675274e08102f8649ffff001d45947200","01000000e93c8c802270a753458d7a5211cdd4fb446f90e1a4df117f0a16a772000000007d441871bac89a29ea3b41bda7a1f8eca9355d5780f9e230d116ab2fcaece03f07328649ffff001d02b48380","01000000f8a629058b4ef4bfee15ebae8816491eadaff1365b44b19c06a3a9c000000000ff854a56a521774c1f03dcc1dcc752759860ba082e9fb9a3c365847eb9c8c4297f358649ffff001d74812502","01000000f660d4ec0bed53867629de538b18fc5281110bb5dc19d24f702ae094000000003d9d853b97a1f9b1e0a53a3b74a04524369307ba876019a2979f3c972e590d9040388649ffff001d141f1c81","01000000da8a0c0b9a160ce575032266900c4a4dfb19f766ea34d5c3652c17ce00000000fafbc6a7de90d01f989a72c178615595d2e5f0d225eec561e90dbc8008f1f84623398649ffff001d5f7e0004","010000002cfa6523b98dfb0c98fc8761bca3151dad78aa61258af379ad8e1cf1000000005c8ac5f8bf392894f9b8ff000fff13af0d67c5daa1fcd850a5fcd5ac8eb449f434398649ffff001ddb702b00","01000000b4ccd20b7fa945a50aef8bf7080f7f9773e1400de9d5b6f64701585a00000000527443c6ae4eff88c8ee31fbc50599d5e754cc02b86494347863253e88d481b6fa3c8649ffff001d2a1fe3c7","01000000260557d2c33ee96c753a8975979737d13ada83e1fdd79f8c3502f8d4000000005cfbeb51d94de422501a657e30af7ab5bb132331b1ae713042c6cb20484fcaf74f418649ffff001d1d177bd6","0100000096c6a3e1d880dcbe5eba1e2c20caea79c5bc0f74a783f5ca97dcb37f000000001ac0bb0aa1dcc87bbe9d0a4b1a953290a2233241623758a597f0c1437b541c203b438649ffff001d3d32c508","0100000090597d73de71ba5553a7ad0b1afbed12cf3b0ff40ffd5e8b75bc77fb00000000f1fdb99be5f77d8307e8f9a0ac36ef30ed2414bcf1e7ab4290c90367e7f4425dac458649ffff001d04eac08f","010000003e95de970956bafc967165f17bd44d72631ab80426536f1e91cc558d0000000068c54de464244e510a0aa92be29a5543d6efcc8da2a4766ccaef5bd2e8748e293e488649ffff001dccf4c107","010000005af2bec5549ada7df2acd78b61d56addf51388e05a2597dc42222b3000000000bd41e71ab41de365dab269ec4a56915451742248a5be3f245131e04bd1a51c80d44a8649ffff001d3f10cb06","01000000a09016ad9e79506ae05ebaadaedd3ad34fa6b51523c812536c704b1400000000bcea2214386d82176ef6b499994fd0055d56b4c38c46dfb6f93a2ed040b8f83f4d4b8649ffff001d1fd1e681","010000004d4e62c1c82b0755fc6b84991e8478384196a4c2b45f0b637dc11f8600000000044e2712fe334e12ba012d16a329f430e0420288c48dbf3b695e1983fa12ba31dd4e8649ffff001d217438ac","010000006c8c168e3143ffeffd493201a4ed7078293ee0226ac23a612302e6320000000086251605e2bc35b6f55c6dbc4671fbd633b1f386f37ff67d57c9cc3b09c53808b8548649ffff001d31b7101b","010000004312b2d72e5c3e6154571f72eb78a0480206ad05b86bf4c794b549b6000000009a65428c4576d3817c5860a91812cda0b829dd996f698bd40d8ceda217ae2cf0c4568649ffff001d4d969d09","0100000052a65435f1d6e7659a0bb11b2f21fe66768eeadd9fa3a84f2f9d1ac500000000a616e8043a06b341b7765d790b1f21e5fd84d95f707e47f190273aa3dfa39a0b87598649ffff001d364dad95","01000000dc7f00898c16d72586e565a8fea93db074d4bf99a766487bee81497900000000e63be1c6600a95b38ee898a492120d74e8d5862b92f979eecedebbfc5ca3a66d0d5f8649ffff001d17b55a94","01000000868fbc9cc751e9c7426a60e006a84b4d910ca43cee4aa906e7186c13000000005e11bbe880728c39f44f237cd1cd0b973fe116e90d89966e2f979148e607cf87fd618649ffff001dd8300207","01000000fc2e050fb701e01455e96af67a696e3f951ac238f18d0608049b216800000000c5679b39ced7699f67129c4aa5d44504434e04c2c36edcf7e10e283ee3d72a9f93638649ffff001dc8192f05","01000000e3ebad98a617dd67715f1a4c7711657cd41f534e9155e82013e1d050000000000434f83b07552cde921a210e60f2758495187dac4c898cbef679c16849db7a88e0638649ffff001d07adc55a","0100000032fdb73239056fc6ffd3b627ec81323838baa2fd77ad86eba560fdf0000000005fa543ebec49258b7a3b83a004650ae77392cda814bd79fa5b5d49a1173e90ed5e688649ffff001d3793e468","0100000041910849ecd0854374541dccf96b275b88729e95f628b8744a65208e00000000ad59618176015358f674e26be7aadd10a12cd880cd72110d2db9aacceeaaa3039a688649ffff001d63167100","010000005a07fafba79a9f8c83d13cdfb224d67bcc2b53a1ad0f38ade3ae92cd00000000eb956227ce0cdf2f0f3a93e754dabdbe89254bb02cc691bb95d4252739ba5eb8b76c8649ffff001d01f3bd50","01000000fc146fb5e99fb7ff59b90719722d6bd2677ad4eae7bb9cb141e5f761000000003401428587e89fc83a39d28f35b8ea015210f348ba53ba648e3ac8724bc7c4178c708649ffff001d1754b085","01000000df2e452ec1eef07e3f2823a88993728227c5206c0de1e2e634e38ccb00000000258908788ed028c8604bacc0b900ff159f8f7da293985a516a4de7f7adfb8a93a2728649ffff001d0647ba0f","0100000056f64c4125e63c45c1e37f78c278bbdd230fc268d2c437529f3f5ee100000000a4c8e91f7a98eb65e48640ec7d7405a8d7009312d2f78fa53a63668ac9b179436b778649ffff001d21982b9d","010000009335981da15e1461ff7cffba2e699b7581b494b564b24d7ecc6f69a2000000009c15edb3a2050f0c2cf4f89a3b24e683bc6a5fefe262768125f4c216b97a4867fd7c8649ffff001d36b8f0d2","010000002ac3574a111c2e4957d39d1053d039febc14e6877a5173c9ddfbc5a600000000c9aa7102c24933d84c29ef0a607a143b7df76402829c87eb4fd324e13ea96c48d7808649ffff001d2c893214","01000000ae233761e40b0dce1b33d5c64fd840cb249b75d5b090eca8d7d7eaea00000000665624de0d3848652f7dd088b46c3dd36b10bee77a9bf6775754592be864725e2c838649ffff001d077b5d64","0100000085a3a405f88a55082db4999ee01090102b74e4acae99fcf25830842d000000006ebab7a680d7f0989038849828f200ca29aab3e61dc55cb7e8fa9f5c3a07a59f5d838649ffff001d8bb78700","01000000325fa84288630b0222a2f667b68595621d4d8c52e1aaa0b561aa2c2900000000fcfbb3a15426ff8d160e9411531db8e032d5b07583ff9939df1c76e8f800ea3198848649ffff001dc0cdf002","0100000068a6a9b6c913c230a07c4e4e303f829aeaaa5cd9609990cbdb834e6c00000000679106fe762a406ec8c546f4b52add60fde299ccd20364bb2420f6dd20fcecd128868649ffff001d5823db04","01000000241a87b06355b2022db8bc3df9585d34177b678978475b26e2a65c8c00000000ff6218a4c7f20b6d826d0400d98b6bacc1af07d2d663fc648ddbe361ad91f290ce878649ffff001d28c69341","01000000a7fa9d264b2832ae6d572b575e4024ec46ba8e128df9799b66f48c0d0000000000fdded34cc1c6f32a504561b71af8c792a2064d721398e4c05148093020915e578b8649ffff001dff429310","01000000c15ae32d9884c8218399f4fdc00485c704a5f05a0692411b14dd033c00000000c9b55e9f53332fdfa637958f465290931766d01acd7959600595eb511128b3d16e8c8649ffff001d13bd033d","0100000014ea5994e328f751c20da4973c8f0690e52ec0569974fd72d4ca64d700000000ae03a268eef28c6afae1345460aea7814c467769ca8a02ec79499631c20831fac08d8649ffff001d512bdb02","01000000368277d9ad300e2c1c967ae0f8ca0175f3acf7c0475cf08ee980048f00000000e3882bde1d5792a0ebf9a3d2cd68e64ddd34944bde6e1358a789442f47c4c5e094908649ffff001d256c3199","01000000962d976bca267c2bc6915a0a61f924b8061cfe03ba3f91811abab93000000000e0d3fac3ed90f6c68855431d957a8f4a66656bdc4183dd048d1f5ed43778a0b47c928649ffff001d15e08149","010000005c85912a5f9b5d75ab608313eadadb0b5c0d02c13ab4d6ac482c4bc600000000767ed7c77a099d5a3a479108777370156de48c684cb021ed599da4310e9f42042e938649ffff001def860b03","01000000c34de897224048a970c25e97bd9ab16d98cb35e577a6015b1fd19db100000000434fb2f7b141e1c1d2ac2cd2872a376a30465c6374e72ed74ab836af0da84dea19968649ffff001d062ffab8","010000001df6a84480c7b309d4989460ca3b2e2d415356bf8eb2603ddbb9689900000000b76cfe057afcaf25489dcacde13f1434a407e9da5a7b8de44676a5cd335c0d5b03988649ffff001d01301019","01000000c086d70d787780f6a20084cfa28e595ef1f3e0b4007ece34a5081b7a00000000a605621c5bcce8481906ef261988092bae5c8c74248e61ff3e4e926893363ce7b1988649ffff001d0628b401","01000000fe09b3fa1e4f931fe547d97f1e0a154701004203caaff20c6898b1b700000000fb8e2c1e142095a248c943d39d3acc23e3cba4b5ca39d2e3dce42bc6ba416d8ca09a8649ffff001d4d921b06","01000000ecee8f69d66a090d2ac964d24ac0a4a39348ac99497d5b5c3f559ddc00000000612c58a4a2ae4fae0b92bd598a49b552cb0610afde66cda7998458962013ba4ae89d8649ffff001d24fe5d0d","01000000f985d4e75bb59694d31d1fac5cc725997baa82cf8d558303873066cf0000000037d2a235c720ca03cf0e79f2c1311b411a71a10b80c16c8c34ef9cb2fbca09e61e9f8649ffff001d2a962c97","010000006abeed8bcbee12a61cd7879ae85a81d52962edf525b92d817f2fa28d0000000001b039bc67a8ebb3d1fab77dadcf37e7cc1b7c69160c22997dcf843eb4a117129ea48649ffff001d391b6247","010000000cbca5ebed5f15d838f0ea08319e8a123f251cf18fbd2e53bbf731170000000002b754036d247fec193c194de84798ecd85db1f0a5a1b5d0916408ecc2a12f469fa98649ffff001d03530131","01000000ab4417bd04caa08afdb2402496976ab62f27cc4cf200ae292d52659d00000000a7f29f75bd598a19abc4cfa0c3e564ad0d358d4b553d4e2186a3f4b6cf4646462daa8649ffff001dab824f02","01000000d9d29d3e346f1b7cf7130d75a5935c3d282d3dbe23cfafee5405233a00000000892f9fb8361d24f6b32df43cd929bf233e3afbac5db36dbe27354104b067a7ba84ae8649ffff001d07468fb9","010000004138f1013a9f16c3d74d4b48d14662e9e1004f7da5533cf9d1ddf3e6000000000272fa263979ff73b1d35e377d02a9abcfce518539bb7751d465342e70c4aa9b4eb18649ffff001d1dbb33bd","010000000b2efd6537b5fd542bfe0da36a807f216eff6a20683bd7d21a694f4600000000a677c4c9cc39b1586832e87ea88b206f46717446213cc13168d6aff94a9dce9921b48649ffff001d3269a24c","0100000008f4012a89a2b1d59adfca623c84833b6d9cf4f20402e6e04e78a20b00000000a27e4262887e64ce2a0608df5dfd403d8a9f01fe6935d3a0a8a050256338d07796b48649ffff001dc7ee2600","01000000fffc43d4682969cf1059fffbced58582951cb86ed83c7e9454743ca500000000ed4d36600cc7b1a03f1bc05dd08aa613beeadf245d91c55a607bccdb4f52e867a9b88649ffff001d08b78bd9","0100000004b55d786f003c418e18a4cb9fb27d81bdd05ee4175b581adf2273f800000000c3776695f5bac8966ece95dd500f3849b9240d5083f4f75971b4cf3adb456a1621be8649ffff001d06ae2e7e","01000000e797ec3a5acacad7412fa1358d233f6b805fc18be9c81e92547e8cbd000000002c21cbba153ed753d41c060607a5daae11750d0299fa4c54da4e65845fdb775ec1c28649ffff001d2a316bea","01000000e4f2f8f1187b3746c469f4612d08b3c53ba0554452a47ddb83eeed9e00000000d1bae38c127cd5b59362ba0e94935aee17fdfed88806ef01e1dea0e5dcd4202e05c68649ffff001d305347f7","01000000a62d22d630edec1877c73e08774ab8a57ccd3e64d69911d76bf04aa50000000004e0c182d413ce69935789a16af2c3195369db3bde6cabd63f956d7d16c2c4479bcb8649ffff001d29e0eb5e","01000000c3b01ca26c6c5e420f18903f01ff7cc0238d121493f8d0a6da1d9e7900000000156013c8d2b574c3fe4d9f491f9cb65fb5a9478250a8d232adb5e980f104fe91bfd08649ffff001d1747c727","0100000071902e66a72474db203c515a4ed747fb9f9e789a54a7d285dfb1128a00000000f15cb7f3456236a9ea1fcef278856edd0ba8aa520c76162066fd8228fcadebf373d68649ffff001d1b93d0a6","01000000e6a7afe93d10907077010213c1d93e0f808ca8a069dfbf2ddece96ff000000005ceb31a1f3ef45ba40a905f788f77c42a1a7c7f28fe63c620a198924567f7313d3d88649ffff001d06ff79b0","01000000db5d6bdb514f7f1bd4e7ae5535b9772768731701e012c0e63ef3b82900000000cdd2341d23085695a94b99e68a0034d5ad0aafd3b2b1112a9b062d5705d5136baddb8649ffff001d15a6de65","0100000065fe6f8c070a16b4aae66539d86021c48bc70aeb4a7b206025d007250000000081facd742eb01a6fe40425cb701ee3b8d065419da51d79aa81ea9340744f4fa2ccdb8649ffff001df3e04300","010000005ae382a4eaf734fa33376d1f82a87501b173fd5a481be49e05f2063300000000d41ab374491f6365fd41d7d396bf2c127c61ae757d23049808184de73e2b90282adc8649ffff001d7cabea00","010000004d01a97166c06c714bbbf2d56640eca364601d7f65202b633139cab8000000007a6b90356ec1b14e6deb0a9a6609ec7331310893b6944c8edbb38c1a32c20c8df2de8649ffff001d64fae408","01000000733abac54125992cb1ff516943187e9b6b024077cd38a180d8e0bdc700000000a53ebf1cd724e21f5bfefaf4b2db79eb7365e6eaa2f209371d335aa5541bdf3d0ce18649ffff001d301e6de5","0100000017c4b861a39500d4cf035617a3098c8c627f3730f72df3e9bcc9d3bf0000000082149af8eb1952fd4a232bc0d1d10a69144c0ba13a611916b4906da51ee89c4fd5e28649ffff001d1b967d10","010000009a28998058ba9825561288e84624a541d4e8d21da34d5f727d8c6b350000000041d07b780514a34d3efe0dbe13708ac52d82299515221da4a727a0966829f94b1ee68649ffff001d21f30de4","01000000128140f4a17c1aee327b7a9204cc82889d21aae2d622b276f44102ee00000000c7a53defae34918be164f06c9fe8c4b54db2a025384e6bc55379c55a46a3ed482feb8649ffff001d14871572","01000000257e0569039a9f35a02eb3ba1a4a3050d363a54e4d7990fa5110f04b000000007309ebfedf47d4ba680b5912b0023a113aa2f926fbd313c3ca34f87231d7d8233ced8649ffff001d4c701e06","01000000c07074d91b18b85ad037d2906bcba6960a8aa46052ae32b64182f8cf00000000edeee833b7f8f66c52c2fbd3ff13723f98ac35da336defb921ad9fb0dc019fbb1ff08649ffff001d2f02ceab","010000008c999b919940769f2cdd9ffaf99566d09adab803d6afba70a157726f00000000d9607538f2a4dfa4a449cc16e8299b45869ab22122e18b757fafa3901648f092c8f38649ffff001d1a7e7efe","0100000065590f557b9ebc9cdadfc765a64e304e2f60473c823d88f35b928b9c00000000e7dac937b6d6742e1c9df4dc0420973d8ebb0b9ebfadd9edf53752d0b30e302737f88649ffff001d15919868","0100000067cc07bf8ffba7a43e60364d4bbdf479d62e2bfaa1464e0bcad3b2be000000008ec28acef6e8af48d57b82d5fcbbf36f4732951a5cef59fa4791b62696720da16afb8649ffff001d21ae500f","010000007d56d0f0e7c507ddb8fb5a5724642c95df5d04c495721f23f74991dc00000000c824809ca3447f84203dcb1d4e5ae3963587b8cdb72555d92fb9bbac3b046716c9fc8649ffff001dcf2f3001","01000000f64bf582ccd8e9a2a9dc7dff9ee947ce215f51696a81ae83c3abab2e000000000cf54087a1c0a2c19adbe76ca2943b42f5d69b571ed76b7a442e04346d2322d7d2fc8649ffff001d39a77947","0100000007d16d6fd5bfdbd41f5d9b6d843702dff5a2057ff080facafa03323500000000bc1c846e0de9a8200f9fc9885b300ef16b66c7ab6daf82f46d9c809650859baf77008749ffff001d2e76ad7f","0100000026ab145a005c07c62f0c26115c33d6d0dfb6e85a7d963e5f94581e4700000000c6f8af2d3cc6aa0f4271aa5a7e47f853ffcbf2f5e78db5b148275c7d5962b24efa018749ffff001d2832f606","0100000094d78afe48d42375618d2e267a928b53334f7dee8928a2251a172027000000009e29a404f5f637fd74ac8d6d6c231d26dc4d16203c7bc16ad6a4f6afd4691ba6ab058749ffff001d07b31d20","0100000071fd803911c962fee3237e2c43c6b4090bc5a0b9687f5a1418b2c0ce00000000142d90beefb9833dcba84c170c5ea25be32ecfde5b5c77028f8ca18d61351cf538068749ffff001d48a64302","0100000006479a738309659a30fe10670ef3b52f442c9bed64c8ca6d13d49b3f00000000e002f49abdcbbf93205d469007b2d44933bb8383bc3e1fb3b7201661b50ba31ff30a8749ffff001d02ce15a6","01000000b65f339d2cbc3369b0e5cdc810a94c500d15d195271fc8c94e7956610000000041c7311c530f0a39ea37f77dd180e3767541614db3c77ac715c104fa793d5ef21b0d8749ffff001dffa4ab06","010000001c402a3f91e9b3d87ef4c35d3d16feed05fe53117d6c627fa6ef16ab00000000b35eb6f337d0f19e48a4b435472e4548d3f0a25f8c93361e31ae3bcc089748d81e0e8749ffff001d26764577","0100000064c0ca738aaf27f8407e55ddfd0a038f2a90dfc065c7fedc6a81052d00000000a6d44ce0899a81286d60c8ccee493a82678702bd0d3a9ce7d5f5a204901d2776a10f8749ffff001d22ded821","01000000f2a64e016d50df8a02cb689e101bdda92e0b1ecfaf6e0a566b6d459200000000cc6357c60bb25c4429509ee9c81caf4e6a5049a5c03024112d3691be33696c96df118749ffff001d0f02190a","01000000d429a02105141c2a35a710b482365bc2078233af9e7f3c169fcb926e000000000c78e2b94ba3067d606c8f7a5520337d899604b5054bbc009a616479bf68aa99ad128749ffff001d05c1497e","010000003db4b9d2639b381837d32e1cd7d8baa28c16a093e832038d60cee7400000000084cc8703131db9b2de137b219fa3265f2c700d57fc88f08f4da38124690d0166e6148749ffff001d53eedb08","01000000494ee6cb457822d3e0513112e409353ddc3c79a7633d1ada8a72f5cf00000000cba3aa2c200a618e070a4030c6282c4ef6b1aaa23f37d96c8c94bcefb2b2aa22ed148749ffff001d1b602a0f","01000000009b4f1aed4f7f15123ccd711c16f20dcd5357419f80ccafcd6c03f7000000004c158830563aeebe06086a8316720055d7800d96ffdffc43b12c34ac290230e2b4198749ffff001d3518a098","01000000e10d53a1bed5e56f0a05c002200ffeb011db78e563efaeee175d0d97000000008abe5e94dd854dcaa64d05b504a3ca41171bd7aa8831f4a34b7cd99cb04b26ab2f1b8749ffff001d32330c35","010000000acf72f01f5e31bec3ede3dd2eaf583803575a025a8d8c9527159de500000000244e9ebc348fe621c1694490772de7dca9ff1106220107d1e6e80d1e82715549ac1c8749ffff001d2f3e1b9e","01000000cb41fb9a57c9a39d9d9837306404ca1417a147fe5b1192e944b79e1500000000482ad03088a8160a2bef34ee55532bd45f1a72e006d91ced41c75d469445c1c9d61f8749ffff001d25f1fb72","010000003350f243ddba2f1d61735574d89cf0664a1c1d18a7eaac2c6135893a00000000ad486cc62f8d92d35ecd7842ad0a6df649c4a66298c2bcc448b20be1be94d4be06268749ffff001d2af9afb5","01000000b4df4757e2b952f909811cbe4adb289a4f28c42be8e591a4e9a4c4e200000000520bb46fffa5c4fece903e315666bafb51e5fb686d0f0b206aea1e838e90f92f172b8749ffff001d29a8fdf4","01000000377925338dd5cd32bb3f1d682d387c3771edfac7bbba006e7d6d200b00000000bc2287daad1ee51d770a551d0c13015ce81ea274b9d50ad2ea1718ceef9616cec32b8749ffff001d0369f801","01000000d35c1baa3983ccf13852ea8acb6fd24ded9e031f4e9c0dc60976a7360000000088a1fcb95b2d9b8d0ffbdfed8d9411ebeb700e78997dc41ae805ab6bfcf5da10fc2d8749ffff001d1c13e3cd","0100000088441bdc28211ac087a88f25cfea22de1956541924b80a079216001b00000000f168b058b821d0e19b1d9080b7147a62c62da76e87ecff498f21d50166fd65759a2f8749ffff001d18122e92","01000000054093941011b7bc4312c3ea83bf0a9ac95fa52f60fb6db6f98c75f800000000d34db3d38daf38f4d79e7ab2496c7afa1d5620fbb25bb7df0c5f010c7ddce0813d328749ffff001d166a2dc9","0100000014c5a41440808e4172b48359f140d15762e63a4e51d7b90b6132620c0000000041f4d49f91034b37d84ca622e7e4d0d9e6a7151bc0bc642fce4c09af234d8185bc358749ffff001d37e2d080","01000000f72677367c4401c8c6a4a2ccbae48204c67340fec00d0759d4af142700000000e11efefe535de66dca5a49cc09327a1b27b849b92cfead56b46683d797fdf07c92378749ffff001d33d00bd9","01000000a1ac58d51082a1af1e2656e929cebcf792eb2ca73dc1bf81767c301d000000002ab568a9efec5a272e42a15f1e4b2725f77619d612cb216a336bc4ca54f12fabb0398749ffff001d26a188cf","0100000080ba49b921b779209752269787a98fbd9aa2a995401c60adc3946c7f000000008f579719d29cfaedf5bd1dca1e7314e4cff54efca35c6c98c36398eb11a45981d4398749ffff001dbfd33e00","01000000e5426fb1e150d90a50fc7696e2d7311a91ec4194730e2ea7886db88e000000007b2ee5dee98a0db240741e37eafee2eaff5a06c72bc35d4e4881fc2564434bc0ec3b8749ffff001d19ef7316","01000000b0eb69911bdf88f1cc8c2ae3ee1dd9c61bd3c194cc006a383853d87300000000d0a87fa7c4959248ffd4a81fde27f30d7dbc29dc19db6f3866e7e8f69924b946a2408749ffff001d252371bc","01000000d4ae8fd8b25296104f6ae8d793d11df9ed3008923e9542f3ac26bb3500000000f29e9cfc04165dfaa509f5054473093e655be2970d9c3f2fbfc534127bae017408478749ffff001d31b9504d","0100000047155112776b4a4d16fe4e61272342d39b6faa4eecb51eb1ca842bbe00000000316529641e3bacc02d89761d6f1607eb7d09f31151faea5d5913034149694b375d478749ffff001dd31b0d01","01000000b7e9aef5b246e14c88c1a40a3a467b5c65c71294b08788147f917585000000002a2c2ba93551f7aec5fb42a7bd219375979af7fd7f78ec9379acba8086a742c14c488749ffff001d0bc08b04","0100000061e206221a7f33bc7bcd2e5c016014b7ee206303a0b2cbc4e7519b8200000000e910b30bee575a516ec4317b0e9b1b4f1d6e88e16a09137989219228b2b05518154a8749ffff001d1d791bba","01000000d25c3a08338a4030978ec8a928d750afdc7519be147b7d1cc8fb53d5000000000113cbb5b6b711ada8bf7f221211196c1f069db234f802026f655ea9800e3dffa64e8749ffff001ded846012","01000000e2a96cf898ec11d84cb115e3a393c97b2ad5307a25690d9d245203d500000000b9809403e1ff327ef15394a1354e67ffd0493681aa99d10526b511d0e5226550364f8749ffff001d07084440","01000000d3c7a859e43b3d75ce2ba93159cc8f51f2ca15a58a823880cf786dad00000000ce4af1d5cf83a374dc923621618aa11ec26e904e508d55bc2078d3aa0369a1cc53508749ffff001d825fdb00","01000000180abfd2ebfcae1d8e16b376b0b56ee4098c5bdf1e05b33252951949000000004062fd7b4e673b5eeacbf169da4bdb550158e11d44dc5c1db94c8db9202cf008bd548749ffff001d1e041fa2","01000000bd9461fb9630249504f8544a84781afa98ad3843a1fbf155b17b387100000000bf55a12b3fa2b32a6d563fe8d30b4f104a23401b78eb03938b9af16e283733af1d598749ffff001d28340c4c","010000003d13321140d51f2d874a9e886d1a5a6c1975831f09255e95ba9b43410000000059f7c74aa94affc906a06d7894cae101b9e21d8988a38eb59c78a567ca7efa1bc75d8749ffff001d2f9292ce","01000000c9eb0eda452035266a42da9449e4cca3768a292c398ecda57f0487060000000096c976f4828d675ae93a92db24ae9c4c9296aab60211278b6a6e7fac55eec5a2515e8749ffff001d4152c200","01000000777b76d7543d1f6cb7b84e93baec85e141f0b94089a96d4881eee2db000000005b283692b1adb21959e276c319f95fdfc8c9d57a40edd563ca017ffdfadb42a086628749ffff001d1981f659","01000000b032576d93345b338a8a00755c9349ec953944b924838d53f16ba1b700000000319babec4e42d157fd57ba0218cdfdde91f32193b78949b2eaac64024b73312756678749ffff001d15641ef6","010000000f299292bd5d55d6358cfc0338908c6706e45bde3c1278287850fbcc00000000513591633fa2a5bf16e76604c273ef7d9e3ae9ea65c34c07bff408f581f9204780698749ffff001d090c3303","01000000a26e42748229275dd28b5ff30d934f658a3c0ef2627cccaa5d04111e00000000ec1b332e85789147bfb7acd20b87d013bc9e68c3b08f77595e8714cdb03fa031f9698749ffff001d85a33e01","01000000713c6015911b391b6193a9fa75882cb628ac84997c02077e7eb8db2700000000c19a4f920fb15d3ad16bbd2ca2751fc0c4315fe3265f3d26cd8bd36bef82d75fcc6c8749ffff001d22e6ed52","01000000e975d523144a80ddd80b5efcc81153c8c582eaa3591316bb75dedb33000000001f5061bec18e0b67731421592c6275eec84714190e264a246944ed06affd41d624708749ffff001d1c703676","010000003f07292d1d4bfe8cbb19ff8e924d59725cfec7757f3a9f80a435b10d00000000aa704c3d90493c325c2b4dc83dc15881a6ade5e509320e23ff0817967156dbe0ab718749ffff001db825e503","01000000d114e6ee358964db6c312f247ef551b682f75b3cba9383d3d91ba36200000000329b3041b145dad16c353b949ef70b50ae3fe5adb2655aa602cc8fc52ba405ed48748749ffff001d2785e8e1","01000000dc24742078c1ad87c43f5407f1676a2ca1c23bbb0d5409ba0aa82e4900000000a650529f1a0a1944953922bc0cd754a65cbb70b922d66d88ea339f15f806b907c9798749ffff001d1fa72d74","01000000d3a90c36bcdf1e862713d8276ba103ee0535254ceef4f1c0ca3ec09600000000ea47774cdfc85570a49b969d9c5d047858fcce9c88564430adfbe062313ac2174a7b8749ffff001d03ba1249","01000000708e1e9228df990f75f8442a99a7f16a8c4c7284aeb311a276f01e1000000000ed6452f1e217e5ae659048ad68f14eada2125a11b0b1f64d89ab17ad354ba3d6f27c8749ffff001d0ac18707","01000000c72054121055ae8ae81ace6f5fe64b5ca7a602c7805a913b0f40b3c80000000057548547e1c594e94216f665eba45220c52418cafbb93a5ce506a2e1d17d7b24237f8749ffff001d27c814fb","01000000f17a6167c289a2976ca392b6cdf57359ea49a556c5002f1c3e2ecefb00000000e702609f7eaebc3fe53d92b950f99cb758831155b9913754642ca53841349ef5ab838749ffff001d2cb30762","01000000d88f228738e1573962ecb5a1dd214fdf8ed78582efc3ebe7aa85bb5d00000000ab6df06c74868428509b6a67d6d277df958dab6894340722776ad87a4b360d1621858749ffff001d84616804","010000002c549d85844f779d88549092e5a1871be72205c249f3eaf37401535500000000e3aa963a250373a4900332055b6d5e1c132f19081e989376f8bbec9a6ed9ca72ee858749ffff001d821d3d03","010000007f915a9511d98d6a630468fa6757a4f3206d9bf6465e691e29598fc900000000969c946c42b6c43e4681bf24af2d7f18dbfd7bf98d9dbec1e69076c82397bd94e7878749ffff001d21904ab5","010000006dd1d03b2b4eb1aa5e001e0d6d2548327c5e903f4cc1b827fd6071b200000000c7ec8ae564fef7371b00efad23c4f849a92fb69b3b47d9fe01b3f394abd753f3788c8749ffff001d1602e858","0100000014bc71468ffa62cadb1d2dc57b3a4443a1680fc2cdc977c2e005ee2400000000113be99810d665538583fd6c1804a52c7c6e436dc768654aefe072ec4849fcd39a8e8749ffff001d21d414a5","01000000ac3844134f40590431dc4944a3ae7e7e0a96365cb357f8813c651d26000000007d63b3985f55a7db671b1cc1bbcf7d81e4e2f998562f7e09fe9d0acc3f78a9d1cb8f8749ffff001dcb373105","01000000091a9576a056d85d38859db7d34f49c67d2dbd4b3238a54b636c20930000000001746ffd5ce067c4cd71e695a8e548b5f51e69be11a3b400954978c77105dc051f918749ffff001d047bb345","01000000196ccb185c7217a6438a20bdf8add189883ef1baf36446fa25542f95000000004b5017152808b0e68ae07e37d85d976d674bdab81afad49f859c440839d992554e948749ffff001d06400392","01000000ef6a4b3eaaf38820c8f1ed708a06c88292e562f0596a371ea1e5bf49000000005e182e03b615d8cd88792b323dd136526bd060ad5c4c605b1464fdddce56419bac948749ffff001d6f0c3201","01000000300bc0dcb9e4c1b73077e1b17f6663f556184d4d9b6e443834f5d30000000000ce3a5c5a01aab2935561af172425320c957ee40324d99a56b97e25ad70ec67ee8d978749ffff001d2eb4bb00","01000000a0cf3e9bd68afd35b58c7adbee22bd6d09f1562f4984bbd0c5db3a3200000000d527716593d142fb522081b812accdc4c168b2566dd2c339ea0d011dd2c491184b9c8749ffff001d2be6aa6a","010000003860d87179c85335f258168d2486af1785fb4cabed195e0aadca33c30000000056fcdf9b5b8ddcc4657acca6e599a387834c51fe61066ab3690e686f8a9d00a2e4a08749ffff001d071c2744","0100000087668930689dc59e2f2bf9694ce5f7ac8f84d2cd524ed848f195defa0000000058ed46aea547238fd59d3c7538534745a87e4d91316380813f41ca4c35a24d964ba28749ffff001db0dd8d04","010000003539cb484e2655a87228372fa51de4a8468f0a69211904e396200063000000004a1e079d160663700ba2ea43f6d82af6a3e50444da344aa5af7aea4923ad0a588ea28749ffff001d03d95851","01000000c1b813c76a9c327496ce6f4e67ac146db65e80230ff343623ab9a5e1000000007afd79ac1386ca2ed5483eba1092cf1442c6789d5eef1d161e79272f8fd3f5924da58749ffff001d30d290c6","01000000f4d3a76dd61fc3cb61cc22ca3615482d42dba9307ba0cce01eef6c900000000067557918bf215ec6380e9cea3747f6ea888ea057b29ace30ab7ab75a1dcf0293d4a88749ffff001d1e34e5c7","01000000b421a8dde05603361a357bf1e14e695a561e4ad370b80012b42696e100000000778e8d9b9c35acba5ce664eeec0d931099686a0f15b8af86b26b84c6dca02f1ea8a98749ffff001d81cba403","010000002148cf579a5bfae3bc1a2e4519edb2f7e8d13618c2d142b39c2e55bd0000000018458b9b8b891a8c4e121a10123389ce57a8d382dde67e4db12c61898e7c2326faaa8749ffff001d185cfe7b","01000000aa0934e70a7a57431b2f9a1828bdbe533f18394834a5d8a8dbcbf6c500000000c0a27ba1c7a04d74c55ab55b34e069f5f90b7764643716eb6606d195b8593ecf4fad8749ffff001d14f9dd05","010000007be972f610a49ce54ad0e4ff06473b0fb14ad6f7fbae6201155002d100000000150be2df975a2a57f01c64b1539973497be5cd7053934530e813cca125b6b39868ae8749ffff001d2bfb9609","010000003d8d5d53babc10f9cd3592f9a010bd6a00e6d9b7676c039d4c13acea00000000a0dd4c4ccb4abeb73333dc3fd0df799db93fca5aef1b30d87e473e0363f39e9500b18749ffff001d2791a0be","010000006dbe7954fb9271684a1e30828e1aa7f5d9fbe405740782ab3ce4204c0000000082335b446f76b14334cdd2c1da3015215c20c9f4f93fd52c9582d53849099d58d0b58749ffff001d35b13c03","010000005fee36dfde0f33681b2da48fa9032928225c9b5a3c3033b84b826cd600000000bd5d44ea5d2e0437c65d47d31c48c0cace21f01e9cf0de227be12151554eeec9abb88749ffff001d13917e0c","0100000060c00d6b0629565ab8ea3429faeda0e5ccf3ec61616f201745a7e02d000000009c92ebbc5aab5dd356ab30101659ab7267f965b162274fc8f97144b0e1cd6a82d5b98749ffff001d1d900c03","010000000ae13720bf3fcf453a6aaa984e32d752755e0683269500d9e08a32280000000036da1c4da3d1b177ffb580c3d16476e96af10a5f7d035b7177862a0d9074387a3aba8749ffff001dbc929001","01000000656c38da479d91ff3663a97a7796175f6a8218466794f392350f2bc400000000acb29bd74e450a48b1cdbb4ad5b62e5b6baa1495591377d3cc731912512f710bfebd8749ffff001df1936a0f","0100000007d56977525ee05ec93ca2b548309694059499b7ef6e87d0a03eb95400000000bdfb5be3346e2a5e5ae3c7acd698bd9169d481d9a693848398facb7d81cf01207dbe8749ffff001d0454d562","01000000360b7345d2a3269331eedeee1bd95094c4af099efc660f4553b594b200000000911b7be75d96bc93399ec6b0ca896a8d7139ebb1dc9aad31de70f5e76b39e3aa28c48749ffff001d14ec0c7e","010000004fc6e547409fe9a557e61b2f6113ff081d153a59f5fa995f0386cc1a00000000993a855228202fd3500e1c61727dfe43930f2dfd579d8e082f4890a8818e72a44dc68749ffff001d1d675df6","01000000284dd73b286116fd40d5eb897e9c79b47708b78c56d832c76ec26ecf00000000567b02eadf0e72a8fbaa01ac629b895db2dd05d5ed7dd32fb9c8e22612dec2096fca8749ffff001d22eb9e83","01000000a4c4e3441c87f39b28b82872de79b57714253c95be052f27f155fe210000000065cbca8fcfb37bb28089b2ea59c92058c2d32ddc2919188ffd98464cc4869a286bcc8749ffff001d1f8015ab","010000005d9c91317f5d8176052ebb4cfb8bc2d685d0190c45433ada4d3ba6490000000022fe95062a103f4d344ace6bfef793b692fc99e3c21865fd235cb77fcea708cce2cd8749ffff001d06429e00","0100000087db56fba2898a4c2595f88d38d3236b188a3cfb6ed5e869a8cf500700000000dc999e91c9ad0b9935bb61ef807f84e0b046a0ea1c7d542c29bc23b74c73164934ce8749ffff001d34660b50","010000006911ccbfdef7cfb448a71d52b9adaec6afc4f9059c400ae46310bac10000000007baeafa25516548f231d9f4cdbfae2c7f181abf01f462114d015ccf3189831bdbce8749ffff001dc66f3301","01000000fba569607bdf371c8ef9e5779a30c9fd34e6a7ab0b87745597d3d7ce000000009483acc4efdf84ebb320db4e4fb18193cd10e7c1c9738a5418bdbd2548ea25db40cf8749ffff001db9540001","0100000040b3692d383f7abf703079dd53da5a749f5477e9f1ae70af2dd1332200000000eaa6e755d8e1d1ed87cd1c0bc14659b987216966d4904a2107214f22b35b4a173ad38749ffff001d205bcc3f","01000000b97dd4c0e55a8324e48f60043127c36cc718f6e56611455ed03c0ad5000000000ffa6e23e379a5d7fdfdffe388263dba3ebab862b0c74276bb4fbc118f4bf50035d58749ffff001d8ece1705","0100000077a0c0dd72eb18efaa9579be59706fa96856f55e1025aa416884aae500000000ab197fa03e551f549751322c9f381c9b1daad0fd2c8d8723b6069f64deaf6ca7d7d68749ffff001d0588f230","010000008b8f59140c76858b753148589d15a15ce2001845dda1fd25f041311800000000358eaccd9a9b38f5a604d53825fde9976877de98565abc2f1f6b37b5f35937fd18d78749ffff001d8bddee00","010000004ef59b8ac75bd9de2e169f3fd329ff675604cda80b67980c7808768f0000000020c968a5a0e69494faa438372107de94b2004cab2becf16acb5b7f9e91e4ada703d88749ffff001d4b017504","01000000f6e732e0ed390191dc15988691914eae8a051c0111e15aa14b6d355c00000000c88b45a9ff5af1fa0c0b042cd51767aa6ecae63069a159f5f49e7a38c01df7f3a4dc8749ffff001d36d10dc8","0100000083b7e3cb975563633cc23f18d71d550fc0f3a62565b7dcc921b106e600000000daa1cdbd0d86d4b676b5dfc02b1fc3c1eab2306c7281259ac548169c0973b0ad55e08749ffff001d38c2646d","010000003ad9f3593f9e246e20a67ecbad12332b706e638a4ffd9a839660f8a700000000bf47e09089eb008dc45fc37f1727213173df377115a497b5dbb363d7a95b12dc38e58749ffff001d183dde12","01000000a7591c159745c78cb5fc3400d6d02b29e3c841c7fec1cd6c8c4a39f000000000b5d150ce08cc60521a19b392d259b744c8753b9f676f8c895e299cbbd37be0e34ce58749ffff001d12060600","01000000a365b841aadbff370f6a8606e1207953bdff43c6c4e506838b323169000000005a9667a2908ec571459388e42a40b8bbb9b67a4c28b54b265694f5839b3a349643e68749ffff001df126a904","010000001774c07fe07df2d01e5ca70d3d5f4e0e7bb319aad1b5f58807f0cf8900000000a498da12d4b414d8f507e87ae10d3643da8437f768aed6a199937ecdb74e9b3fdbe68749ffff001d49fadb02","010000007b6027379dedd892e37e0b4a141104b1ac274ff5b79544caa2abc65f000000004962f2f4dfb218df630dd5af9bc4398b19542729d2f154989b6a9dc40876db7345e88749ffff001d304414ea","0100000079934ce3dcf9eb77a588ecf1ce827c59faf8fadec8cfd8e0d1effc9f00000000996ef5c7f19a8ea0bf07a8a07a5eb9106eff47dc8b7067ce13159bdc0a9010cd6ceb8749ffff001d279f4c4a","01000000d5a5193d906767b37da28e57055e29c4295cf007bc08e7429e99d81200000000df8dd4eadb9cf21b7843f60acac54a6894ad83bda92f28504cb14ace45dab6e21aee8749ffff001d26a0f620","01000000993a3e7eae633e799481deae3631d924c84d8298f6474239a2235a3700000000c5fc4104445b9ad68819da73ff8520f67e7cc439ede8e78941181db71b14fcacc0ef8749ffff001df7bfd107","010000004748d017c9efd4a691fd1594a847db7c3f532853c560699d6445bc0800000000da37f14dcd21267f8c2a3e517ff0b5af0be5186b60f93cf75785a9cf54778690faf18749ffff001d073e848b","010000003fb292a089d1145675829aa26d2f504815be21ac2fddc579652ad0a5000000009bd2c2eb5ae75d11f63939d0cba60b81fbf3ef1377a99eee5feb77d2acd1859f78f48749ffff001d2d9b2264","010000002f161c43a60ce55ac92dc5a5d46e7f83afd04b612b4aadbc07eeb72b000000005128ec5917c92677fa529f67632343e16323d15609132c161b15568069ca547e77f68749ffff001d29867370","0100000001fed0e10ca489e3903374cd18429e3752e4ec63fd85eed8cc05f5f000000000ac00f2a2f5ec437770fe12c2fd4613fee5c022432951cbd70551ae4af9fc71882cfa8749ffff001d1812f3db","010000009886eff959b8e9a5de5cf98b6eab5e32ef4db19ddacd4619421a25c000000000e6d30ec7ccf909cd9af524e7bc1e0584c40eef87e3ff48eab4cb3019eb67fb518afc8749ffff001d2696f470","010000003d344e3a5f99d19b9a0e1d3873eff41b46aee9541bcb0d7575fdbf6e00000000ec82f2a7eb7743fe0c00406171e96169ed068d32d07f100fab767191c1d0f2b186fe8749ffff001d2a4b1f21","010000002d1cef7df4465000dc91d218b99467b910a585a4ceff735786f69374000000001358eda6db09a4e1223bbfbef1112af9771ea093f023d8c5f6d52b42cb6ed23884048849ffff001d2017ab08","010000007e84c722aa24402362177440dc84c28ce67fad7b74934f082e3828fd00000000df0e4951c22d93b0715604c0f41eae4a202469a85f57d632bfa3d57479ab0797c7098849ffff001d05d7eb3c","0100000078878acb946925402740b12f6f6fe9d09df27c5b441bb8f6184b19b5000000009e36e31371c93cb37d0d8641eb2889e9fc1455c8fe67ed451232842f2150ef518c0b8849ffff001d1b7aecb4","01000000fb45f3e537b393571a97806f9b5250224e18778290895c45a474655100000000a3f805dd6e41130c53283daeeeb945c37971a44e24d21f66b29ed9e0a51b9dcfd2108849ffff001d29b73b11","010000004a48e67f13e24a4ffcb73c051ba4e9aad4987db3b8eb9af2e3832eda000000001f4d99b1d85533ba8d7dadbf6e26ce5d33d66c339dd89579ea8a48bad8771575d7148849ffff001d040d3585","01000000cf2400a11c2b2ec29d085911fd21dd72ef988e8554fc0f68ca0f095000000000fc7e1caec6d23565f1dc6bab8f611f7f6c5bc0a345ec81f5538ded2574eeeb4e59168849ffff001d4fa9c303","010000001abd5cd1ea4a62ec9b9f4f8402c0a5a79bec4badedd6c070ed3c79c7000000007fa63e1e3e7df677ad80876e3361d04d686f58287abe36fa03d03fc98d9591341f178849ffff001d19023229","0100000095ed49e8a938aa1266f0dbb2ea8bada6baedb227f0e7105195ae156600000000c8807224f6a6e2c9657961dcc0905ab3858bc3b3b0b995f53134be2bb1905378cb198849ffff001d04081408","01000000aa43df338ce15b5bfcab24e41b936bb7bb484c9886b57f60d913a05b00000000271893020d460a2c3fd20df920478d662ccde7dd93c33b0df92b315684fabbfe921b8849ffff001d0380a04d","01000000be58f4826962558a5839ec2b8e8215bafcf77839a46078e2b5439f7b00000000885e56d59f98a06f21b4fb24dd445686258fb06fe28895665e2f945365d52247871d8849ffff001d32987841","01000000b051b84a6e0da689f2d395c9abf1c845d39515bd2d5546e2e22ef8db00000000cb4c74e14576d6fd7a78aeb38a64a60d2e2ddcbf95fc85446739a7a7a7f0a1dc661f8849ffff001dc3433f03","010000005609116409f19d18d9c0b3d74f24b769551e2e310431ae3be62e54f700000000349e066fdd094154018e2e1b7253a357cd49287a8a1461b34472f36c0514c0857d1f8849ffff001d1bdc974b","010000001b3565d5c82186e4d67a8f02adaad8140a5b87989f104e2f3b0c6029000000003cecd2bc5eac8bf703115dd2acb1b5263d1a8a831db5f92c1b0f662309cd003bb0208849ffff001d45369805","01000000347c696d736bf9faa0a3fad80ee56e99173bab0343073d590761fe8200000000eb0c0735d58abffaa0812721ad2ec0b07786c1114c2b68b46239632b99a44a3e22218849ffff001d2dc0bdce","0100000073d46a1c09374803425745158881cb9334a5cb58cc4c549ff88f465d00000000e4e0ab43605f3739c37597fbc2b84dc88ed32a845a9e5c305b05f53265502722d9258849ffff001d2d2d2945","01000000262759039ef6f25c97d43de399f33e9ba9dd10b10b4f92b7ba9e9b10000000003b05d5089d90d2e58cda1d26bca5aa461d2b4d5b02c984ecd0844adf887e14652d268849ffff001df520d000","01000000861a0f578b3a18fe5b3977be0a87d7fa8d2b618262562861aa3c6ed4000000005fd4fc5e1c5e1c4bdb3adf1046c79194f014352ebc89c7b5d0fca09a6c9f79e170288849ffff001d844d200b","01000000baeffd96d7cee6bedc516255959bf82fe080c161be18366cb1a9f026000000000a279fd10adbb8c2a19eef86464037396977034672304189147c0ef8ff0c8c74892a8849ffff001d084def9b","01000000f2436c6982d4790ab4813f8f13d52cc74ac9cbad5a9965ad57e35be70000000068f5c76e49870b1d27012f681cee8c214bd4d2c6a4853cb47cf0e48d5cd244579d2d8849ffff001d2eaf641d","01000000ee619e79e455736e78035143250c29744e894e4df32f775fc485104c000000002a9af653c176dbdeb09f91257c3f72483d6b3896b94f80d0a46bb0cba8ec570b0c308849ffff001de231710b","01000000e307e6274a9ae59cc1f1d4e5ca05281bf5544b01a435a37ec2c1e6d7000000004ca0ed305b93b9e55fba581acea3185c5815c86d59116414aa61c6f514db261634328849ffff001d039f2fb4","01000000470a974c5eec34ef4f8ecc96bb73321952b54a4b509de114b56765f2000000009dfc70f0396685f679b79a572289bdc50611c541edc069ed35b9c5973627b14f80358849ffff001d1b6622f1","01000000005ebdb120b559f5fba99f2f002e7b6a2d1ae3968e0f70cd8bcf7a8f0000000042ff15382dd24d7216a8f3be59d28f2d2d4ea4daeb8eb81da125db1abcfd0e166b3b8849ffff001d17c6b0e2","01000000368a118abc02d047460708870978e56c7f4296397b1def71d6d3848d00000000478fa69f26fb8a58eb5054790c8672fb5a71ee650871ca745af8a84114f612e88c3f8849ffff001d23f6ae60","0100000088928094ba638ad8f10422ad4d361f14e08cde8e2c06f9debec836ec00000000aad52a43de0233ae5212f23b816a8ccd0f7552d426c6aac83132a79f6f7ff8ff24408849ffff001d1df35801","01000000422e0bd57e351e3981a591dcad8e5d57920d41e13a3670bb0daa10b300000000e6f85a3fddb3c7181eed6da91f42fe7f0b565a55acae13e87eb5a68378ae97b297438849ffff001d2f790a44","01000000a0131de5c3b3f6fd42f074633b4cc30e029ea899b9ef6da0630b9a7c000000002a42d8f3b172ac3bf8a9ae3b53142e3b653f9c336445aa9ba42b8608fc5ac28995478849ffff001d220d6c82","0100000029045f668cef1106387bb7d3d36c3bec4ba9e6986118e2b6c557efc80000000055ed046f5dff6cce2a9b98606f647a9b8709dc242df99c651f8dfe5ba3e737df95498849ffff001d95e16f07","01000000856e4cee06c1b13ae622ff462bcf999779a3546596478ed584cd243200000000d691185d8a05ce33f4d06304afd10565566982c2af9768410db5e139d17098a0e94b8849ffff001d26c52289","01000000ffef7c8dfc0ff0fd8a6033d17291bc279c8016171cd908c58d420d350000000015a19f28b271c48931cfddc83151c0548c5d26ff551980906333eda568bf9c54304e8849ffff001d85702406","0100000005d4a7b808d81e5a227472a20fdfba4b0d3aed4ba45525c182f46a6d00000000eadeed18715f6a5d6f60173961b056ba29ffbd4d804f8507afa887aa66df08d079518849ffff001d1747ac9e","010000004f8101354b44b1def6733d0f362fb940aa4483d12b7fdd074abd651c00000000c3d0c7054b9042f90c077d79a0c59eeae6e7d9a360a85300deaea04fccfb7cb793548849ffff001d1a5684e3","01000000db35fa4b846ac7c46f788566b9f01dbf50c15a1a7d08122461a1274500000000d52ca50179f597984b295300f58a53f846a2be815eab81b6cfbf2349a74558467d558849ffff001dd5442104","01000000f7b4abdf3462ea2bd5991db9a32c93a15345eec25385f73d90c975be000000000673c5a61529d229b072b62f2b6335e306a2a91b329c4d5ae34970da905bd22175588849ffff001db6ae5a0e","010000000769e35a89f4b17244173acc7404346c07ba2c815e9dbd745ff68999000000004a060a9cdb3c2db349f22c011c4602bc54bb197d0aa88e189380b1861089a5d72f598849ffff001d2a7d7803","01000000c753d36f543e68b3ec97fe2e24da2ad35c664205e0cba00314f053c900000000d35c3220cce946645382f9d2ab420b12c83712127708fd550a553f699b56316c275d8849ffff001d020bd35f","01000000740e34e1de6e9a2833810c293dccceb2c76f2a058a4cb4c9a178d0c900000000d47e5015f96e6e9a9f64ac14d41168dd8704b4623a391d34e253af41551fc74d635e8849ffff001d02819b99","010000006a3250a2b4a0c4e040731b0f984dfaa05d293c33b79e62ae916c6c5800000000061816687844ba941c7b5f66887c4c26d60bc94fb29e7247756001a058cbd8e315618849ffff001d29b57825","01000000753995dd8adaebd7954b7298cf4bfd8c74c1d7896f1a516bfae755b700000000c8589b077394fa95018bbe4705eb1f40262125d7cb0f2a5eca2668f493b562c20a668849ffff001d1a095760","01000000dd81f5aa0edc8c98451c1e203f08471bc213b40cc4839413e32ad349000000005f995dbc7e76a825f170c6501de169bd5a792385f072e35904552acb9d3dd2f1bc698849ffff001d30e437df","01000000b138e9ba3fc5445e0dc66e6eaf7a45da590af619e349f480c828e01100000000ffb61e3af53a07759cfffdc83e9a8051cb2ff38e5f37d79cca3e418b321dc127326c8849ffff001d38e4c77e","010000006ad890a023c7662228ea6b352508e0f441e6de6a5bad486a900c14d10000000042fe60a582cc160383f7b35f424a3acecaaf97bc01a5900907317aa9edf457e6316e8849ffff001d03303e2b","01000000189f54b692374b957d077faea3c32e75f8b641ebd0a6bfdc19bcb1250000000040a64d0f2058ea6892694a5701ee89d56f0f1f1178cc23428a321b48d74c9decdb708849ffff001d31b228d4","01000000799c2f432ac357e8ea0d8b232e97b1cd7ce2c34a4a405a8496dab37700000000935d9c8c5c7a8db0ce24dc50ff9910cbf6fda16cd544b185652a7fd9ad2e310587758849ffff001db9a4b912","01000000c9984ba4a7185241a68a8ca46e50c04f2418842a5a9c9c4b57b511a40000000005c9936a2895fb3e2d738c7fa6d44bd25a671b2fb5b91d8aef79da41b8e8295210768849ffff001d1a134aa5","010000006c4ae0435ba081bffb619b516783ccde9113bf0bbcd1edf3690fa9c70000000060ed3ebd23fde63d6f0185a15e906daaadcdf7f45f12a6f0356468a55e2756cce2778849ffff001d87460e07","0100000061ad674782b6596768a5f26c7a449280ed0e9e0154632fe5dae9107e00000000064cc8f71bc082ef1aa6a182eb049e92ab313f851497d455b1ec5dd260753ef075788849ffff001d70936701","010000008b6e34efa2d20e0f480851287bc421b0b9ab26ebf44e9106a76536b30000000042565e65087f61f62fd6acc65aa8e0fe66102e361203750b5b6fa8c9621a01d3767a8849ffff001d0243de9b","01000000876487a7214b8760667a531819c28f130883fd7bb2830302f6ec6b41000000007210670907cc0a0dcf8be778c6f54cae6e5404b1646ec4963a9dcb4b219558d2b37b8849ffff001d07fd3205","010000009bbb36709ee5dbdb59102d0653610e9fab0888297259f2908868da4b00000000fcdc5f5f4141a934fc90a6468b6c51ca4277fe0cf923a935a3f8ec4b846827b2637f8849ffff001d13aee0fb","01000000593d45f7531d13cc5fa591c98ede4fa1dae92984515504cb10a34b2b00000000126872788b05aafe4bcda5cbc2971b7711b9bc9b9d5f002545caee4908232e639b848849ffff001d071f904b","010000000d392e8c760940e4797c426f8bea2a2f03110ba0795944787258db5e00000000113cc5ea600ea052571135403148eec5108bac754a907f63133126173dfb0483dc888849ffff001d06329459","01000000c8e1a2828449bad6bd85450c29fa7ded17517c52be0a4b9a901f83fb00000000b3a3d06ab3f9f63ec9ddeb15cead9f8c263aef3da7a3a7ef5e2f769617ae6fa01c8c8849ffff001d2acbfa64","0100000092d20c48b4798a2e623387fae11399a59fcbd5160872fbb8564a2b9400000000bab15d8b8eed9ec110caa80121f09435ffe16854c8f2dc0e3e6007b6bad4b310538f8849ffff001dc5b14708","01000000785fe26d8cbea1a3c5465e829b5d6d67d9a2b9c8eec9d95a3c5195ef00000000c45abf34feddb3017f60922192232c6d94ddfcb06bf77136e12788fcb8f1256d53908849ffff001d23a43a88","010000003d6a4fe207585bb4a9360084747848e8ca9b297247b40e5cd53d6484000000005de78766fa67579193babdb2eafe9b15ce32cfb79b0d6c98a4a5e4a0ca61d51ed4918849ffff001d428ec405","010000005cbf218a5ffa65d396278e8b9cfa52625f25ce2e6f58e222d729c44400000000a8b97353671ee2a6c63b01600b2cbfead256ccee30ed0ff14bbf3bb062e57fdb74948849ffff001d0554e331","0100000090a6bd0d8aca233c172d13f75ab9a8cb1458d732e65325ded2e019b6000000009855577b35b6fa999533350866a7688fd5b0a9c444fe850f905a26d53c36a00cdb998849ffff001de9639418","0100000075f5a2bd7bae994e5e956ccc5d4e2f52f96f390cc5f64130410a22ad000000002e69d9020f0663f3a7894474750bd11f021266bdf1722137626d97ae9e21ca20339a8849ffff001d2de965ec","010000000b909bc0073311d8c237e6b6810bd521f02c0633a47a513fee51907300000000cb47c442f00408f5ec4217b13f2dc5a16cf16c3a861e89e113f8dff91facbe7905a08849ffff001d25921e64","01000000474553beae45ec3ff4017f789222c5a087f7597a355868b5cac32bda0000000081bcd3fd167a65b50d00f626f76840bdea67857ac979e37f8dab78cc79ab4ef04ea58849ffff001dbd0c0b10","0100000025114cbcceee2754991234a89077281594ea2c8f04717850fd251e80000000001ba1974e2162cd8fd58a2e8fd6c796b12490f9b408a5cdd737432e82923338cbd8a58849ffff001d2c47550f","01000000d23f3e0dbb927465a96eb1c3ac025ec18b319acb79cea469137410a200000000ade09bf8405c71e1dd2a7b7b7f56ff8796cd881ce1197a9b8e599b94a318c60985aa8849ffff001d1ba996fb","010000007c0a02f39a42184e1a1f27ac47fd7e1370dab4cd866376aa042e34a400000000f13c0b5d9c8ccd4e66beb337c18a8432f2fc0df8fce01f2a67b91e851167bb8a05ab8849ffff001db1d71402","010000002ca28f8f78110387aab01f8e76cf1c95a8a4217bdcad37d168ce03f900000000a56bbda4baf3238100509d4872bfdc1020e000cfd6c699cb9acb917edd606d03d1ac8849ffff001d371b4ed7","0100000076226c5894f643e0372b86953389b4d7a38179a9612c1baecdbcb3a0000000000ded946400d8899dbd2ff9e91983d75604f479f6d00766467b702ed089109dc217b28849ffff001d38487398","01000000d779caba8777b9d203d8e2e82164158d997cac26fa73dd3762d562a900000000c4152342867a51a583a5651c763eae7455b25d32f9ae4842893ef88a32e903d361b28849ffff001dbe2bc100","01000000f5eb586dab6aec9bb2c6e92c8957571d74ee9c5b061b4c568abcf113000000002f8c9954ad5096a43955956ee04c9fa2e5993601432bcfec9903d5a626d8e74795b28849ffff001dade60701","0100000000bb31d7a5e55f3faa70f3b03c013c6d5af290df9f9c133982597578000000006984ca8a933e6e630b95b30ae9def8714bd37dbec4e4d56ceeafbd05138a0d0ffeb28849ffff001d78591601","010000008d127ec9d126bcbd28b19faaabb6ce8ae1e6b8e1f593990d8c6ac73300000000135462c8d81f817ed371c337850511787a20aaad9db3ab1aad4cb0769b2f51fd53b78849ffff001d2048e87e","01000000a0f8feac05c48dbe71f9f952d0dc9d6fa6a2d01428408790754a588e0000000070f6157bddf560a1d79458504d18dd433ec72e7fdb5daa8278b9e231db3a3d3256b98849ffff001d016dbe0f","01000000c69acabe391dd9a0fde9ccd17f7fccc7bcd0fe764acb9ab2ffd82627000000009c455036e91cac65f9fa2117f5105cfd9a781bec30966d33fa866af7694446a771bc8849ffff001d211fb1e7","010000000f75f69b915ef7a73876cb976d259d798a838dd7fd8ac7114d1bc64700000000d2df9bdee179bfd69b806345d6c488dd06fe223f31245d0b6bde6f5e2cbcbf91cabe8849ffff001d149b7cd5","010000008f3cad18d2957f1a840e47acd5e1e06e06686b34b84b1c512428109a00000000e77be44febcf032f09253e4714c14a9124701d8a05d1b60d7cfbc7098ae3394a4fc18849ffff001d284ec004","01000000a6fa4452d1362dea85cea4bdd78e5b906c46a7018b3078ca806df811000000004e835eda1fd706a98c9222ad0ac2ac49d8e447408f9ce52f37e283d408590df106c48849ffff001d0715f110","010000005d99144dd8eef852cfa8c26dc898072c7ff6f12d5d0551859497c4ec00000000b98b5aae705eec0e834255c20db252b27249f97c51a09e20b23f297f51878356a9c88849ffff001d332964b3","010000000ed4c49ec7a72d7bae64046031277aa607b469d393cf306ba890286c000000002926713c67f2be90a8ae7b3cd4ca54ba1f7a6ba9579ef5070b98a7457f9470e97ecb8849ffff001d38463e5c","010000004f0eda5d2a45ebd032169747b576929f715fbbdf08707a0a193cbf2c00000000b2777771ff20b3dd39ed3d91d7c850b08e0a0c5c905bf7cdc0dd5c202d24274094cd8849ffff001d2ab7254f","010000000e471c0b493c08a275a5f7f32ddadaf2675bd6bf3eab9d81e8dd5c86000000006c3f4989b820d94a35e5ee2b5bce50f8c96117c574c2ac976a66d719894b93fe6bd18849ffff001d3963df6f","01000000799106008943c769c81ac79aec484ae148005523ae860590a6c37e6500000000ee2c2a6ac281ef0515fea54b7999b342e2eda9ad0c25a8bf69fe99b576ec51302bd28849ffff001dd3521d02","0100000083c3f9531df6318ae484cd37a6eb91485f1a63f5c14b4ec9a89dd64b00000000160c7c54b729c70601bc090f3dadc5da57bc1d4cfd04e8af2880bf30273174481ed68849ffff001d05602055","01000000b16702b97754fb7c14830a52488b6283dcdd15130c43a730287580e500000000d25d4cce506ebc8ac27193f22895664c938ae10a15ccc4c17205a33b0a6795a690d68849ffff001d921b3001","010000005d14a3eaca31a2a5eea8b1ae9b3a1f112b87ae26f3ab286ceb5bdb9d000000004cdf077f4ff99d7310cefd163730c55c77ec38a98577e62fb782be193ee17413c3d68849ffff001da39c8b00","0100000068b1764f713c066b14cb129a0ed2bcf38f00791d0b1cd3cb42a6467700000000c5368d9472d2ff1428a8e1a5686b65eda5315aa4bb8cb7f34d13ecb581d1478a67d78849ffff001dc464f201","0100000077807091644ffae78e99cd5c686ff9d5973d491e50eeec616fe700f3000000006a1fac29ab5ba8382bce83e38a72afd64766707fd27bb7043e8dc4f7b5ed5445e1d78849ffff001df2993f00","01000000daebfbb83e77f9b1d8262a914cfcf361f06432fbd971005a92bdd6d70000000048ddda31809de62cbd1b5d8d932cee28a4e14c5942b5db206b0b3979d31d622d44da8849ffff001d0011cb09","0100000046fc1bd68140bfe3dcc9f2f4403f1ae91c43b0b81977395f019f4826000000002a704b69a6bab6ad2fe2c95996bd5f0320ddb52722509caaa46026d6607de5fb5ade8849ffff001d1f517278","01000000025c4fe09d7ba7e46db9e583e7a6b209c9a92e64e77b2db8aaa8b61100000000056afdd919f98089680ff8bdb8165131b31b7fd8d13c90d5192e49aeec0d27f62fe08849ffff001d273eb69e","0100000042e5fdbc68c7d162ec31da1bfbd50214c0b0800a349119d48b6a0ad50000000053511fb50f29589156b5a5109f6690096659fb101315ede38f2e96541ea5633efbe38849ffff001d1d324e39","010000006db9a8c419e864e4b1dd9b947df01e840f74bbdaad7eb3d02bb5720d000000005544ea855192c0f93c568707cbdae0106197854f863afb6479aa1207d7f7eb4495e68849ffff001d07c93cf2","01000000268ab1e47bee3c9cbc09f5a5f01e2ed2c609153574ad47b2ada8aae9000000006d3d0922ac813178206884024bbaaa2ca4df05950a105b9d9557642987e59addd0e98849ffff001d36a8298c","01000000ae3742b289b133b66bdf1e11a591918a5f3815db64c2afa2b7bfdd0b000000009790a7b2a9fe0c19ee35ce7baa273daf584c395c2d20369bbcf89996a7048d6236ee8849ffff001d76938513","0100000060644da2dc46a5e051c64665d24aa47dd6cb9e955d91e244e23e4ffe000000000a84c3e3c9bb2cb2076cca55c722ce232eba31bd73903c89f645ded3e0a9114e1aef8849ffff001d070d991b","01000000e7e6ec63be85b48c17feaca12113e8be6a4d34449bb85920b157bdd30000000072a097f043d7cdc33676fae7fd373f8c60165f648d318f64741af55d81f4d98350f18849ffff001d1741eeb8","010000002315e6290c9d1b27fcee0d74d98b72688532630ffb72769a339fc40400000000f6fa98dadf2bb8ce0b18095eb51ee603139a541217b4a0ece490574bd6c7639db5f58849ffff001d23508645","0100000064fb55438fc014a1fbc374560a65d304446a1889fc8d65c9497168f100000000ddd2442d25f3fff28cd0a7d7a6a57f5c56b9e587a11ea7d0bef79321cb3fb01ac2f78849ffff001d085268f6","01000000a185a1ebab073dedc50f9bb0009eaf7d8ee67debf0d02de7ced7f0d60000000074840bad70c399187f20a0bc50878cb2baaa3a92e83e1d2b8fe5a13a2f8ae6501cfb8849ffff001d235c120b","01000000f7c5d84863b9dc2b6c291cd7603c19a842c00c6999f7c6604e18ac7300000000d7a21d8a1f8ea19a96d4d31f479039dafa7dba9eeacf0c2ca5e69c926c825c92a0fd8849ffff001d186595aa","0100000018ffe81d7eb2924fad0cc6de22e0078734698cfed3aa9928735d81a50000000066e22278e07940229f245b96b0dbe7dcf667e41e9ec44f846d00e721946b862578ff8849ffff001d2cda8485","0100000000f0c139d1bf4fe187d4a20415531dd6a71ebc59fa5660717e10bf24000000009d1a5c93afc324888c0ca5be9bdba512f7bafa614b7b08682d2cdd802b27a5b675018949ffff001d38ece1ac","010000005f01f5409c922cf135616b03bc9ba5ca71907708f70c530edbbd5ac7000000000f17064dda17bbcb5e328072a767f7c6f69d5c51a96cad4092f1f59e93da8572ac028949ffff001d36937205","01000000cd6e6f248429cd3fbcb39dd212f85bdfe02d495e0a915a33a852a923000000002345983628d591906923763e14672dc05dc3c2d3bade1d52d0abcdbb3c82b5d776078949ffff001d182eac22","01000000765da084d6089b26ec7acc23dbc93002781aef679d594dce81ece809000000006868a66162cf770c88e0debee02f6f7ebe33ce2515cd11acb2a5fb2f0cd79a60970a8949ffff001dcb14960e","010000007ae298893bbcc6940ceb08dcf1f992fa0f2a6d0760e8ab43e10d3cc0000000001ded69a92395663b39de810416b771e77cd780de3ec4a83863fa973529b5ca1d220d8949ffff001d1fe067a6","01000000b1aa9dc395c0cf99c60282d9e2e8c74e514ca9c2ed9e1576be6b9a1c00000000e1b811622a8109136b37891212d3bb594b4daca9293b77082efbc327abc53d5a1d108949ffff001d07a30959","010000008790df436a97ede9b395298b4c63ad7bb41c832ccde46140a913985c00000000d20987b758d3d20f636453ceceeed1340a63def7c4cb63165606751736335b6cef118949ffff001d8f766d07","0100000061bf9091ced0102b921624418c773ae90bd3a91a91301b6bef9e9189000000001944eef82ec854d127d9170fc48e9e1962bcf190d1a224294e663406578b0fd9eb148949ffff001d17f8d743","01000000fe2c7b5ac233a96fc41349332b68e96a373b357eca0e476570ba9ff500000000d72486e59688139097b736452877d2a599676655449e26064ceebc56b6d8364a71188949ffff001d375d2050","01000000cf2b4753697af37ff7333e5b168303b59b379722a43b688e79802a3b000000005897036772aaaf234c17062730498714c3f035729ea096a21206205a6b583db2d4198949ffff001d4aec2505","0100000048d2f5e8adbbe34fc5276525aeeadb6f936f1dfdf25dd2b9a6b9371f00000000b5890258ef12620d68b050719161d9b646bdc9059a725adf0bf62a525851f958371e8949ffff001d1d9875bf","010000001eb8f382e3ba5bd4966f5616fb285223a65372f2102b4d15ad06e9030000000044c2f5d0dbf1b1759060ec73ce785a40f642c34df4307726eec7bc586ced39986a228949ffff001df99f9504","0100000042c4f18bbcfd6b94d53c420e09a09d6a673929ceaf3536231662bc340000000028192a62f5c39238c1d130a31e1e2710c1788a8d01a880f03a62edd202dc2ca3e7238949ffff001d292e07b6","010000006b794a902a98d9fd4a2a19458df29ec803b0b798a7772dc11e17f5370000000088863b463d7aac6b741a8c8ca0f4b572b706a9f84f6c7fc3a5546ae2219532faf4268949ffff001d24cd8ef4","01000000086d47e3a760058e47ed3c76e8da48d22b31a906ecfc5253eacf831d0000000019e0837246abc5d833b23ee719918838fcf89439a73c70801bcee430de189558d52b8949ffff001d2da0a209","01000000c6a74d2c035c4da410629079cc372119f2f8553ff37f855e76a03931000000005b682d76284f8a33731734ecc36480fa9d8a72140dd36fcd2b10c49eb6230e96bf2d8949ffff001d24917939","01000000e5234764720fd93c7a0cbd4e2db8e1f23d988eb08775dc24c248f4f100000000adb993a219754b8b906053c500db990c7b5674b851bfbace269ab86b218977e5a0338949ffff001d38031e7e","01000000da31b9a7a3d2b9868c43998b940b3b5bb239b34da7e2d07f93ac8fa90000000094741fc9cb943beac3a038da2d14e4b758ac33a320e4ec31f040d1d87def1d3d83368949ffff001d11fcb80d","01000000b9562f52f528feb5eb56d7ace05cd6dbe12277db3a4a5abd987efced0000000079433ab1c5496317e3a189279063987ec5d8a0cd87c605dac78a37815822d0c180398949ffff001d2c584a07","010000002fd08b873d2c0b4448c1731e4667fb17756e650171aa4785d8f8ab9e00000000d82d999dea900805d5f0932ae9e43b181889532064be9f05eea02868ed9d8511ff398949ffff001dcf0a4101","010000007b8446f0efbc5b3ab3ef41c6dd31e7d9d1be162c73c27c6929b26ac300000000165dd961887543214cd1b9a6c55670257fbfc2a069c5b8393e6820686e8919f1853e8949ffff001d317789b5","010000001a2880a5f2ae6ce1998d8eeb9a287d7a8f6ff9b32680e1c8fec4c6e10000000021fecf367afa0a63f2f2c57d05c89a2d1ff4b807c0519a3778896ad8fca6e8a738408949ffff001deda3a207","010000000deef1569f98f2136437be5ef0df051802ac120aeedda8b05a38e76f000000007b8ed6dd3f8234fa7c8bc2c8b09ee29a3a079e87dbe55d3ae46999422ef9c1192c418949ffff001d24782a02","0100000012961dfa71729d8f75e0050f81ada9606bee502bc937b0e133e6e6fb0000000034a31596e4c7965d3c901b98ccf7cc5c75373ca275c883d7e642ff6f96dc892227448949ffff001d24225a5e","01000000e17d587ee5a1ad0d4915b1964a9cacc6c7593145523c400395f9c40f00000000bcf52529c75fd3e5150748ea08f50165d844683cea567ce747e2a1affbc9335a95498949ffff001d2bac9154","01000000470a7c2de7372214af2baaa654b634a3004401ae9ab0939b38c7debe000000008a7cd92c60b841072f024d32132adb2633cc61c5e826c03fd1cd270c47d1899aa14d8949ffff001d20eb2ade","01000000d088f093f718198019f25f101b7476ec3e5033af20e25a6c1d533cdb000000007cfddb115136717936e8374cb8250696c154212cf448151e08df021cc50b34a4ef4e8949ffff001d14b4df02","0100000071cb4fa074e868374b73cf05117a9332d0b50ced0b4bb6cc1671f78500000000dd813b20fe299a07dc0bade1976d5174b01f4afc8f4e58851645893c6da0de02fc508949ffff001d1efba82a","010000000ad9b8075132be2db6d8ee9f465b178e8e4449b88a52c89e202c9b0800000000d77bcaee3ed5f8261bf309cca86c069dccef22223ae42039b66301efa159c529af568949ffff001d32b9fbcb","0100000043188df3bb7c51383a199a1ae3c42306a718f91b1ada3d7823d5670400000000d732b09ae2f6d6a039325a6d69b00eda6c441b69daed8865d3b6268c7caf4887775b8949ffff001d14f44249","0100000039fbb1ec41e9810867a7b1fbe4ee0bc3a7e348916e4f9644007ccd49000000002f7d173ea88b989043fef48e272e74803fe055f40a88380e43304a6c9a196d87445d8949ffff001d63917206","01000000752400eded802bf1bb95721d516b1caea488f8c2280ead470319bc4a00000000e1357800bca9a619c5ebc53bde26741921cd363abb3a1f58b728229e708c5cf97b5f8949ffff001d14263792","01000000507e8349227644d613aad729013d19a49787156163e1842f2f278667000000003fcc0d9d615ba077549ad5670b0d8fe202d4d794f56b1b4b1bac6fae04490096f5618949ffff001d1732ca82","01000000a43d02c9ff80d90c8508c69d2dd211a2bede6e78797de4d1ffc13f1100000000261cc594d65b149b9755a70e03cff9dda61088900daadc73f6d1c513a2b825571f668949ffff001d373257a8","01000000aa4b09404e4c07ed00bbeb847eea14db06510f5bd4c44b749789715b0000000031e72b4e751b5a3ce997d5226d6d3a110a37a804ae2361daf1fc357b28bd79ecef688949ffff001d097da496","01000000fd8031bddb79a4f8c742d309e9ad700da8c152cdead83e3bf37155f800000000c4f555602f7e6d8400fd173bb3b68a9d749777a3aa29d848b0462b41cfaf35ab866b8949ffff001d25f8bacd","0100000043f743ae50cb8b0b4cca26eb7713ae8aeaca4afe93d212a3511d4fd90000000016e911810edc1fcfff3b746f7081c08cec6ac31586d4bc1b850e9bb0c52459493b6e8949ffff001d38124642","0100000047c4d249516b8ecd20e056d0be241a3244438cad6a6b5c77c7311e38000000004f4d7bd5d5993d963786d70f1f380060a0a1926a6930c43d591c82dc2a0f6bbcdc718949ffff001d31060cdd","010000005cb5ea0bc3f481ae9a2fef12ff246e2ab85a96a8ada6d59174d28ce3000000001b19cacdf35e4d1f5845b74ab55a3f784721bebc23076eb68b8657f6f8689f0743768949ffff001d1cd6cb5e","01000000850cb54d6c83cfc654804620c368ace00f3232c11226d8f0402463ea00000000497eda8313629fc73cb9420462d255acb5379c3ad0c234d77b98587776c2941e597b8949ffff001d36ada695","01000000087e6407bb6ca8f40516ec17c7b143377c59490bde4e0370e4067d2c0000000034d8dfe12c4d174795a8ddc1ffdf284deaa2f8549440875a2d1a9d1479c79fed637c8949ffff001da6538504","0100000021d1ef943684aa9cf27be53a8b219e05f719da02686d4a25dd1a0e7d00000000bf6fe202151483b73771089f16a0698a21dd4aca5964da06be27f6080cc3c416fa7d8949ffff001d0d983104","01000000b2f33509911b7d0bf7f397a854fe2037a54e82b27a0e1c439bca9d940000000021866cece4e4aac2f649dffc2ef9861ec564f342bdb03cdac76d3bfdbd68c2b8b57e8949ffff001d3911629a","01000000f7fee19561ff4ee48300985c1c3de45a55216efa122d9122b086d893000000008f8753cb5523af6bab823cac896d8dfafced35593b0d8da913a3db480a3446daa1808949ffff001d34c2d234","01000000bf6a52ef5504f8ff0f005cf71f39df72e9a3d8f0853ff89b21352d5700000000d82224f8968c4fadcb6df39d7b883a38e60f481ff9af8e7163749f32a1754c9736838949ffff001d151b0e53","01000000cfb975f8e09ba2ffc45c05d1e2dd50b7680300f4f310fb9441e1e5c8000000009a4f2d48f613981fca686a04db41f2e809ff89aaf045b9a0b0a2eb4b9628301b1c878949ffff001d2267f57a","0100000027e9fda184a4f253637469c2a8baa0aafa8928535a08bdb9676572b500000000fab28a3e20ecc1dc32beae8c0bb985fbcce95d943d5bc87481a78ecffdf99437ba888949ffff001d0592dec6","0100000089172432c9313d6a8fed98ab200b9267a32034119901890dbcb1c3c5000000002d36a916d0125f7a4f9092ad6f7121d02be78944e91709561402d87759a0fee9898a8949ffff001d0c1e8308","010000006f368f5243cdbd9f3a743d99a6ff71f7c59d7975108926d679fd3adf00000000211607479dbe7be7063a76a59326b83d6b38eb3a8756d8b2d1fc83b7307ac021148e8949ffff001d1f5c5611","010000002b8e22a969ce9a0963ea321e8a2eef3659ba49719c65a406e662eb2900000000fcf6ba6a52f3296346106ba1007e6afc11f303cf66ecef5527fc2bf7cd3541f128908949ffff001dc2fa7d05","01000000db05db0b941a92237d319cc84e0cd353c63b0ab96571406b18be210500000000495038fc366072b7695454a12f77b169c38246ea5e991b763dad82a2b93e00f1e1918949ffff001d0840308a","01000000479496f91921e7fb5b0b80a678b878369258e350f199d6300d2248460000000077dc16ada0dc705656c615ee98b0ecf5a3c123e23482aac2abf9849abed6da6028948949ffff001d334aaa1d","0100000007ff375ae238964165ea0b9442dad489fbafacb298240975b459bb36000000001dd55149169a23b12aabc4521152e69c8175b72479ecb0eff768594ea430495fa5958949ffff001d3541fbda","0100000039317f5070c4e3cfa142ed019528089ce1efbeb4c7223da9ebb95d25000000008dd2235f35bcb20b48c00eb95697f02a4c8394ea5b5a453d5d34b135fd564eb280978949ffff001d68a97e08","0100000068b2f635f047704169cc4e93d518b766214db370bb3c2e456b47a72900000000edbd57307a045d6894b3ac49ce13d5ddf0fc6914412d1cc07fdbca5f4340b7d0999a8949ffff001d166a8726","01000000e7d44fc554495a940a78ca27d4887f170aeb7fb6049a0fabd28dcbc60000000097e20e6e2869d990e6da6c57bade69d23e7bc7ba9aafa8860a68d969c965f91f9ca08949ffff001d24727b4f","01000000870ff38d1fef524eb5a4d0a9fc52a7b4eb49ffd15f31be70adaea83e00000000e3640ac8113e2ef22bf17bce4a6391c594ec81e5360e40e2bee69fab78462c111da18949ffff001d84ffc201","010000003806ba00b3a750c85fdb00dedc0653700c6a1678fb9204e3dd1b93f800000000f96f37c1b62f12e4f1e496fbc98bdc4c3e2e9d745925a2d74d28f280bd17992223a38949ffff001d2dacb463","01000000bc5533306760f806f2731300dbbe831211f71bf23988fe8cf21aa3f60000000066c76bfcdc98d77aa12e3e989eaac970457aeb0f44b49510d26fc20654b2a607aea38949ffff001deb4b1001","01000000ed7735f7342f2f8f179e7592c37e5448de66d6be6e8698efae6509370000000056191f44cd3d0833bb742b8412d906eb45a86f1e6834b4231ff376bb04bd57dc62a78949ffff001d2eaeb876","01000000188fad3bbee8a195910d89cb6a5eaa9f9feda33bf37e04a3748216f700000000668c36967ce8e34108dc27db897c2fea92b4f3cbebba233c5b619cb797e335ab07aa8949ffff001d3a21d938","01000000a891e8c59e7fea54a4cdc24bf467afdd851eb9cb1a184825f39807ce00000000ef0abfe5236037ed2dde35ec4103747c7057f81a62933374cd2094a809d3325471ad8949ffff001d36b12f40","0100000054153fec9f8cacdb28ed9a3e3dea2d811baf31659558e2309c1bb80200000000591c80c878514910e4cc37efc7633e99289d3dd36243d4f950302defc6186950e7b28949ffff001d15f18ca6","010000009179795d12edbfccb6801c6e593a91d36ae253cec6d1d5555282e895000000007ff98d25d2ae12af1402a9446c1d8470c87a7f2cc2a7f75b117e36cdc197b41a4eb68949ffff001d030270e2","01000000ceecc5a15008989f2fe781116dc152a4b0ec969964119b46aab9814a00000000020c73cfeaead2bca91404eaddb98b41038334df95e43edfd9fa6de182d23d7761b98949ffff001d2eb98b91","0100000045886d600cd3ca7b5449ce79a343ee208abcd469c9718bd2986b1dee00000000e6a47c6a0eef6f4040aefbaf1d817751fe3b55a25b45c430ef64cc1f6419b700b9bb8949ffff001d023522bc","010000006c7f1cf17c224141a6265c82d887c647c934f78f8fb37b8a1a771bb80000000062f59a7502ec54d71f8f518b8d2be5e6487bb21e979fc5d9f2554b4a762ad7ce80c08949ffff001d2d2a9303","01000000acfee43d50d0da0fef955437c94058bf4de61c55135b8438a489013c000000007b3c22343b6ca62a0e224ca5bb0618b544a8a6fd9f5954118e8447746eba512bccc58949ffff001d9293d50d","010000005154e9f3f01247492e829fbac583e07d4d5f71187c1d2ded85b357a000000000cb3e4b96c353f10656695acb8461dddd68a58657f69cbe8c7551df635ab9081f54c68949ffff001d0736887d","0100000017bf17f9190889db311f3087fb6eb64fc29b5a21e2eb41ec42105d6200000000044d9983b30d338c3a74e4dc99598a021835248f0d4e970eacff96928f97d6158ac88949ffff001d075e94a9","01000000137614137beb672cf8974ffba6b87294d806faa418256c01e8b4b522000000009e561e3c0148413883b2e867643e4f4bd26af1905ee8fc2b52aed4e0df5d72ec2bca8949ffff001d10bc6b04","010000000dd4b2b7635e9a1024af8619e06f4c8f2a8e51443253778c600287ef00000000e2e7bd92f14dbb84e0dc5bc6962aa5d1c07bc489be476c0336bd26244a82ee493acd8949ffff001d03f7762f","010000003bbe00c029bdcd0e28d8aaaaf636eb42a4d79a3bdeb79a4e3e0b001d000000005b8055f96996cd7d68867d9127fa8f830398ef4c3f7a29f453c19a4681b5ef2029d18949ffff001d342645c6","010000006670b4c97ad542bacaa79dbdb0e25bcf8c22ba7ae960f510bb21ca600000000003cc0e318e26ee8956ca8e2e99d7a2a8305b60fabbd181664b4138fca45235deaed28949ffff001dc0248103","01000000d4e90abe5ec29516567bb2fe0e1d4afde2961276458c62c71ebb3e660000000030e2f235b7f975acfac5c6e74df864ebb8c801166c573efbbb707f9608a26ed570d48949ffff001d2c255499","010000005bf064ae1bbaa7e8118de7121c8773f9079b1014ff0e90368619e9c9000000003dcd08238c8d82b8532c2ce7b4dfdef0364013823f3adcd58d5798651fc66e3829d78949ffff001d1ea967a2","01000000ab533e59ddadb317bb7657ff9d62821246fb5c3c91e859535eeebf9400000000abdccdcd7bd02835f18ec000299c64a88319f13067539e7233c120f8dd39fdb90ddc8949ffff001d242aded4","010000002116d884b365bb57916633f880b7294520184831e4dabd4a8370f8b300000000052b3e11e7797bfbf586d9fedf8253ba0c57731244d68710bac12916ac9e8b34f5de8949ffff001d8e6b7909","01000000436e7274b1bfd6f3104ce456035db7afc3c6999f628b2e0060e4864500000000dabff45d3061a343f111e904e7b01e277ce677a55860ad648ccd4e7907ffbc36bae18949ffff001d19902480","010000008a4a640c7431f66aae1c31b104e1b3f44a8f6e650bc87d7491c92aad00000000ffbeaafa6342afd79bd556546c58cdf74bd6537172c99476790580fa5b6aeb8682e48949ffff001d340acf8b","010000005d17619f29649b7ce05c53e7ed7581778eeb23d5e8d8af44cd328f25000000001736c7be80602fc69236f13f2a485a013347fcc26289c28869ff1c07a828011e23e78949ffff001d8f0fa30c","010000008e8ad03b6623a8bb806ad9302f75e83bcceef9cf2f811e1146fa012300000000d676ab29dec03829a9e54c33989beeaee1e8085b689262b599a4b111c7cb156d6ee78949ffff001d03367205","01000000bb2df72102aeeab1f92715b6aaea5ccb733bb6be32e88c4e4c2e2f5f00000000efdc877190261b7f203609bd9e878472386f70d53c10b37d995c101695d6d99ea9ec8949ffff001d31909a43","010000001b6b8a106d856a0d94156ae0c589700d05110a4a78366cf5aa3f21af000000008742f24b163f9b0db4cc09420749269a9d83388a6dfef1e0dc1aaca1905dcfbf2bf08949ffff001dc68bf610","010000006245f37226920c349e884f022ad84d5daf9491eb417dab7f11ddfc9f00000000f22339442a92fc64e35e459121d875811b74e50096b7bd7290b4e9c6ec668e9ed0f18949ffff001d252ef2ec","01000000d3eea597255ebc7e23ac73b732bebfc3e115f61683a33f4f3e5ca0d900000000aff518066044bf890570987a187300fe3c100370fb1ad48a88c56b730fa4cca4aaf38949ffff001d37dd6242","010000008a36b48fa1eef13734c4d7f0286e9f15b605094c4c22a97822fcb5fa000000006f52d1b342396b73035a540016319e1e17bf7793768113dcf5e499e8af97340825f58949ffff001d99f5ce03","01000000de219ad026c111d3e8475f3d4f4990a62e12d7fc371e7bff7f0d2540000000006a0999f95f898214631245cc1108ca41f0c63efdc8591519f947d06f185ac13ca9f88949ffff001d2397c896","010000006c7d3dd0e5c7c4015146bbc9f0913011794ee069d436a30bd6186995000000003c530bb7597d8923eb81782a067a6eb7991faaca40975c27ddf1d87eded8e39aeafb8949ffff001d1d6a8185","01000000d4d5a55216fd1dd080137e97791bf2572c5a52b51ad4d867e4c33a960000000098a451206b15acf124b87dd808539a6e94b4439a537c5fe648c0a8e1d27982dc8afd8949ffff001d3660281d","010000005dc56e20168bee02a36e8eb04a3b1599658617c7ba32a62d9503184200000000862b9065de332b6fa834b5b05484a312c7d7e73d5d5d932c781b9ee8fe50772ab4ff8949ffff001d02ca3888","010000007419eb791afec21908cf0b0e3d00133f4b3c616787aa78b66246a89700000000c5e465bc5c5e9406aefd610a89c905b772cbef5ed0fc17006ebe4d58076c793ae3018a49ffff001d9ead3a0a","010000009256154a0b85e69bf06c213fa042610874d302a25c34e47f70416242000000007c54145072c497c5ee48a9d721230f178ee6e029308029373fa130cf802ce6858c038a49ffff001d3488314a","010000002e091cb1fdc92828596797492fee890be01559b2352f06dc87c7b5eb00000000e8e3ecea91706e314dcf8e977315eef84ab7c7e119fd988e76de9fe03b87f8e66a068a49ffff001d39337aa0","010000008afce0e6865ede2adbd86cd671aa050b2ae193a3c4ad9f7c1727b9b7000000006983b8409de3ba63e892902198b4c73b9fb0d0071f0d6537feac2dcf74726d4a3f098a49ffff001d36e8d8be","010000000e9cab6fe44d160a3642a51bf56b7064f01346dbd9d61253eac49d990000000094f0b8db058535c57df0477a70523226d335b9a48ce61311048895414874afc5e7098a49ffff001d80cbd802","01000000cd9e4f8be1cd8bf42007cdcc2f6a6176a51ef1f8dda99e4c76aeb77e00000000ca472376d6aa1618668dca7c3b03f97df2c41f2c16859a744072cef2bcf558decc0a8a49ffff001d360dd4eb","010000005e5d9b53bb5b2248da77454faf861722203e6c7cde46cc03243efe3c00000000a54544c0abc5d6f05133cd889935d24fea8e1a8ed9fe6bf16218ce543050d0d6570e8a49ffff001d2f45c63f","01000000b0f7460afcc852521003da2a5955031523f0fa742efc47058d93524b000000009aac7fbdad90c516a283bed9292e808c2305b164168e3d67e96d436c642fb4ba8f148a49ffff001dcac8d80f","01000000de91203783045cee6ac1ff3456966a14eb1456454eee4d6dce882fe700000000d6fcd2756081946c5250f5b7c371d4b730f667faf4a8933711821d1e83ab4141c6148a49ffff001ddf3e8a00","0100000064337f90166ac01d8d077f5a6b1e5c5707b81de0eec8245709c6adf300000000f4066d3271afd41f77c39258cb75b660d58df46568f5eb50e1a51d9282a0adcb55188a49ffff001d2fa81077","0100000019439da11bfffd0cc849324288fcb9420c06196137e10b433fa425330000000089cc48a562b7c22a90ee3dfdced160efae64c4caaa99c9b45271343cd57165fd391a8a49ffff001da0a3aa05","01000000ec8221421611ee8d3df24982a7e4ba523f45a4bc49cb08874afdf1fb000000003c0cd5c055b39f53ab1c50e57df9444039bc7ca73169ac5504b8201f78a7621de5218a49ffff001d04071197","01000000c56d3ac78b0e4e18f38720bfd9fa747eb004d678dd26b58f2c95eb4100000000153d4c224efbfe95050644a9a851031b04c2914afe42a68301993338549c371f4b248a49ffff001d20832481","01000000fe000aa8184f173d44e87acfbbcbb43e9f98c5bb63b29d5c4eb19dd400000000b3bbc8cf919bb8d4a80ed1073cc4e893a46957e866bab395de5b752316adac851e278a49ffff001d313e5384","01000000e1b837593d52caafe696dadb3dd972e2a4c3e97b8c6d456874513ddc0000000020647ac761ab4627e24e768e59bced065ba10dacd28a8b783c24deae9481a997a62a8a49ffff001d064331c7","01000000a0343c3538c82a0ac51a69229e6ba89c62e9131565d2b39ba62a12c100000000e5598cddd0a42cba34140841bdae49fae9d90fb6b034fe8fa06bb7ed35dfc318f52d8a49ffff001d08749a38","01000000b5e8b2cb192ed9dfbe89271ecf508470b3d9f5b9592c7a10fc6ca6dc00000000a9c5f5e5c4ed933ee29e47097ca6b4eb2a77b515104096df25d2e1b4218ed0669f2f8a49ffff001dcdb82903","01000000ecccc9206e3129378072d907084c2d2eb4dd47902aa9d42bd0dcf78f000000009fa4318db0c873cfc0ce6d6cc3d02789e57fe84830b343db0bc795f68ae37e2fab2f8a49ffff001d05500a68","010000000bda136b89ba0fa25a36d6ed81863c6f43965244ebe494bd59d237b700000000bbf01a70e661f7974490cde3aaf3ddac09584e44e4bf09e05579f4db7288310c84318a49ffff001d787ab407","01000000104b3b41947bcb30e9249450216d81dfe1bfa74a34dc9551c1dc164700000000343a2fb89709396628a5f94ccde1bf0d5b1e5fd94e389e25f6ec6de2bfeb548249328a49ffff001d14f30df9","01000000c2364b2ca9495f88383c38bbc375c123da079110be4e720646d9117e000000008aa2c360d98a52abf008ebef19898c26fcabaac1c22e773f76a97887c0d150a373348a49ffff001d53088809","01000000a54a0809af12ccce65057c7a41b8e5ba587ba353dda13a18c35be37800000000a349161e8afaa8dcc9b48da67a9b1c3c661a1765e6332badd153c04d732a0e8009388a49ffff001d2ed66b69","01000000d9c25beb7d78728204ce524989dd863d25eacb8c768ff4b30a30b5c0000000000136ba7715e7ae22c46836f924af5291dea4f96447f86f75b03eba1712caf2aed43d8a49ffff001d1c328889","01000000d9d179b75c9e6a78c213ed28afe96d62805b1ee0efbc61060766dbe600000000a1dc7f5e55e62120d54958c6ecd40c93bacee24e58045721a23a13d1c9d3772d47408a49ffff001d1e3ba502","0100000028f5bafa65f463e12956dd40285fb01e96ab778ac52c26b9cfaa9e12000000005ecc870fb6481eb1d1d02fb5ef38637e4192bc5bb2ec3aeddc6a36ffc196bcb344438a49ffff001d2d15ecf8","01000000f488605cf711aca5df1c0621a5aaaf1d0391a983f21672082781747700000000d4733d791603e33f5834ec6f96d3dba3163271d2ff65d06487a557182bfada1043478a49ffff001d5c9f870a","010000005cef3b38a8726bb88d363db906655b3c18ad44a7d49e230a5804202200000000e59f86c29738913cb94c4537904b3da894686e55077105544178179f7096b8b428488a49ffff001d177d2dec","0100000030d2651d3638dfe1defe3660218634e1b08ac095eebe99b83c7168570000000036a823efb2e8811b9c6ab5d9ead8251526e4b4e4dcb14f2c5b48cb54272eae5bb84a8a49ffff001d218c722e","01000000914de94b106a88f155b8bedd3373ec67298f90e34ee28a3105308b2f0000000021bea30bd00487a83b7c5f6c6f1ee2cd77379dee3d73ae2bb9a9b14362fa79e1d34c8a49ffff001dd103c609","0100000016f630118b7fd9e9db4df369e33af5ba142b5f36a8253ee9eba6253200000000e9df39745016012e8639076ff4051bf898772f82a8407c0ce265e3213d937beee94c8a49ffff001df6bb8700","010000004d24cb49c0f3bdffff0bac7fbc8ae03ecc88f345c517d7c5d379142200000000a055f6428cee27b700e582e4b0bb083b5162600110ce295b5ff682c9e8490d49dd4d8a49ffff001dded65c04","010000000f422ae9a972cba95b5c872f99130728dd3caec5e55b596db51369d60000000049d6348df4ee49c56bc4e8526348c8a1955cbd325663f2384d3dc2ca51fef7d9e64e8a49ffff001d45c19c02","010000006d688c73f6910723a1d1d629d270ba895605ca9eb7cea89c5ddc86b100000000ab304dc40c4f22616c5497f8ffdebedf039d423a1c99565eb84e745606a0130f4b528a49ffff001d20c574a3","01000000e469e726724abefab5ef2da8bf39b78006b2cc8f72d0374b43298fed00000000dfe33a3a8e38e406329d51959918bef91aedcb304c6228800ae0e2773bf940419a548a49ffff001dea4e260b","0100000012999cb73c3783d27918ef769a8e742b54c8e4f7776661feece2034a00000000ef8191e2bd804622daf2ab916435a4883776dd5ae097cb9114b323bc263d872072588a49ffff001d240f4eeb","010000006e3f80175697383bb45bd13ca223d95844e176832a14c5ef0492762400000000d4ae82d35c83b696ce8c7a0c4ebf376d469f4f22240383be561db5903374dfe4795a8a49ffff001d2e52b927","010000006a703ad3d04fb1ddd9346e3f1f88a2c149e53da2a4a6236d56abb8780000000001043f5d30b9f4b9c4f3781018d2a1cfade0d8dae7e52358d8df37c437c87525535c8a49ffff001d1ef5e7cc","0100000027fef120a7f8366a8308bbbaf7830f89afbe2ce17d1248302e345d0400000000958bbfa944fe0fb52606ef40b1aafea7145bdb7edb68ba34cce798d9a374a1a33f5e8a49ffff001d3070d740","010000004b08d6225231d2d8b24872c519b58967322616a453c680f5380cc5370000000066d0837082362f30fbf4e2761f93a25c2365a1f604f3f1cc2f320085dfd0785cb9628a49ffff001d14b30a51","0100000007579bd028a457452c3cf21d3fa13e3f44da5a53fdd3a0ce2fb7df3a000000009c6f500e5ae2e3035ed052b849bbd3dc30e7d3ad5b672dbcfce194b6f5a9478b53688a49ffff001d2529726d","0100000085e119ba4602ca5064349500472f16c9f1bdcfa8fa7279e2428f307b00000000f5df9b8d04f6d6bd5450adce9274049aa1b5a5456865f8b3afda458a7f7b872a546c8a49ffff001d16961c92","01000000edbc6ce112e8789abb8423821aaa812897b1e10641cfb95e3224a89000000000dd91a53a931f9f4760129cfb1fb49067f88769e822bb2cb16a4ab5d6378e40fc486d8a49ffff001d086b4104","01000000e01cd31cc951260742285fd9db9c04bb17d413bf05bcf5469a90e6b300000000a85fc25e8a4e6d320b524d6d816178435475ad0580fdb735d69413d6b87807b4ea6e8a49ffff001d096675ed","01000000d1ba8efb463d60326b96bfdf9dc0118567a99a20cf8db8356f903f3e00000000e738a0cc13a378ab34422cfbc65c7ca0131ba5b93d3ccacb08a6d313b7a2faa2a3728a49ffff001d1e29068d","010000003c620f2568ab74dd9a1babc7b6b8d8677652740463162b07f833e52f000000008a11cc0af6690b5b9eabfb71ac89ab2602a26a1558722197c0c2ce977e41e6a16f758a49ffff001d286a5856","0100000019ae06bf410e1410ba02bb00706392d996bc1d559bd8d65c6e1d872a000000005f3b11f344557567c26b671a6ffe232330c98525e126add5157833268b440032287b8a49ffff001d083d8a7e","010000003f9f2e15ad10d22b5a110cdba92c26c28b2f7ffa0f0768e0e793f112000000004fde7000d86f005cdd84d681e3a38152da068579519fe5114bfed2627744448ad6808a49ffff001d2a818c79","01000000127089f764b0ffbacea7821546397685cfb0ad7c5d24e0cc8e79a4460000000028056f3cbdbfd2a247e75c70115b9cef81adbb85927bfd7081e8f7a5dc5b469e11848a49ffff001d385a3359","01000000d0be1ff0396eb64d9c35de182e869531526fbc2599af8a5e6c525d1300000000e760e3c871164e9d641f622baef313f598abd3fdb27d21a4d19e2cce58bdf65bd4868a49ffff001d25dc228a","01000000f6d9f37804c447dd297d00963a2eaf13d9f6afd255bfae8fe66715f70000000041798fa4b2924f6196e13b890a0800fb288b5fad0472e4dd92f6fc2c154d755cca8b8a49ffff001d14f811e4","010000007a5d264b136d4bcd49b1935c9e52f498ad94a87dcfe464c0bc39879700000000bc7defd1492a13726aa0ba27b082dff99bf4e6fa102f0b330f92400a69c5a74c8c8d8a49ffff001d16b3a3ea","010000000292f186802d44b17cd2ddfa7b1b5eed893ec7c3b4119326f03ed89300000000c25cfb62883b4a881072e5955575b9756aba1fc67a9995c9c0a7b5d004f2c589a28f8a49ffff001dc0c49b09","010000009d0e1b44b6335bb47de01bd5a600602bece22d750add184a23d6bd48000000003c44e78b81f00efae154542b162ac4131cc95c6491af80bcbbfb5b16a7959ac047918a49ffff001d0840e9c4","010000003249f03225239902df5e1f2d73708e7f9d7470b11715f0aa54f307ea000000006604e863a7f870e1fd6b21c67507469933dbc8beac8c10da1f54bfaf009c4acd7c938a49ffff001d2656261d","0100000066a439209ea9398c4b4de3cbc5939193051480d542374fcda188a8ad00000000821628f382d1f0c51535da8cb1066e1fa962c9c0041c87f46c13244295e306dba4978a49ffff001d38415e6c","01000000782be06fa7c9b265ba781fb62a68e77faeafdd6a05404e3db9cea3a000000000f83c035263f32db5c4a2c9d150eceb1068de288a8cfce6b848fcef88c71a493ae89a8a49ffff001d22954f1e","01000000d32894f815b54a5feed067d3cfe7e35b0e3939a74705e946732d4d870000000002fe37068bd470084a94fe3d23baf8513f3d6086c5f2dde88f086be35c4a86f3a29d8a49ffff001d3a93aeeb","010000000717c6ea4d99b81b4d0d403d8ee5bf3b80e51648a0b58dfe6c20ae97000000006d30ab46575b2e082b2ed1a8f7773aa456b4d5e373dc64a91e71e36ebfbde8568ba08a49ffff001d18584017","010000001a6aace0c54dfaa70216861d58807d64b96827754507d47dd10c8a1000000000aaff088884562cbabb76bb20ba0dd1fd39637305555b143767b518c9ba19b08afba48a49ffff001d1cedcf42","0100000076f7b72a29c200d578a02c11bd503b3c568ed75b76663d085e18efcb00000000cccf96ae586c90568bf46f5ddf0326445d3dea834582a0e10b547d4903031233b6a88a49ffff001d1fd6befa","01000000853b624e97a9ef8146d13438c4cec109ad8cda502b013aa426a2f2000000000004ad5b8aee2315b3366634b75dd5af51e06024bed01148f9a665affdfde886224bad8a49ffff001d37d2ee2b","01000000de43616f36764b03efded21ae7a2633cee2b4940226b18e428cf661c000000001b74da533b361758c2f6c4e7314a57d90638d4ca4251557c243c681d2734e75c0ab38a49ffff001d049d4527","0100000019de00b82dbb880b0534454f4ee1d50fa7d2b9d2f0c80d20a4d6d6f1000000003e1399314803b4a5b046dbd7952f5bc12491a530cb9edde7ec60176656f843538fb48a49ffff001d3810a41a","01000000039eb2f03637265101579b50c03877192e1a905aa06debd2a589966b00000000a5a6d0dad51d022b0bf1193d0dcd7a581bc78978e68b5fbfc674f46c2d668f4a6cb58a49ffff001d3715f902","0100000015b8e1a99c3db388d7591c747084e19e3db7b1e77f64596be783a09a00000000dee13c93193c6de3585788cd6f379a4ae3b67525c3ca3262b5881020d1e1ac77a7b98a49ffff001d242b532d","010000000cfd2db228dd715fd81dcc4ecd5cbe1737c325a5296cc367587b298600000000aa53c63d270c750e8cca54bcbac5d09d58b646ba1951e2096f2bf3d32169769e1ebd8a49ffff001d1c5ca166","01000000bb301e7b6bff011f3c683174b77149f29ab5f1297a14800d767f59bd0000000029fe680abf37268e7df5725e1d8e44ec5b4f4e943ea05998e6cf13e3296d7ef9d5c08a49ffff001d228b1c7b","01000000b55bfee5f662222cf0db2b9de9fa822ef1a7b3efc2f864df7115931c00000000e2755acdf8e90d2bd55a34656fd0ba81dc7cf8e2fcf75122b38e0d746f5978ed1fc38a49ffff001d2e41ec06","01000000f4f0c65c0ef95d2dd51b7a54639a024816fe4b2804bd98bf36eb140200000000056acd245c39b80eb8f6c09af43083a1c9863200743086695f01649a3ce6b10c06c68a49ffff001d3a1b0449","010000004017b09182c6cc2cce3a51fb3fe3523df1c30c7cb2a1b525b3e1e5f5000000007dc60a09efc62a338004cbc33e4db8db2727a3a554cdba1930bbbd6d1603c267c4c78a49ffff001d380c9c21","010000000c679f0438e8f6ef7c3513e7513c5b75c2fddbc128b62da2cc00239a00000000961b1d0d743fecacd9b0747d7a673f126a068d793c2f3334f82de8d2dff770201dcc8a49ffff001df3973315","010000003e02424e391ec00722402d182d9c73e75c3848dbdc6cf7348f0198f300000000e39a19210a960cb83a1442ef3a274638a767e074d5187dbbe08e4cab4250143aa7cd8a49ffff001d2c093e86","01000000913e18f57476b4a2fbddb8fe81b1ba2c1225ac41f52bd58ae152dcbc0000000099fc7b6f672ef009d5290d335342da3bd1052cf26b83aab27b7a10cb2527a7a8a4ce8a49ffff001d013d7704","0100000007898c5f687cbd11d75ded5bd0be2db36c296c54883148af7e0b475400000000ce3228770b882e537ac15bc019c65ef9cf0beb6df02e3793068d70a0906cbd714bd38a49ffff001d393fa0b9","0100000038178020705ea6852e355d955542684e3dd5668d99bef6041315835a0000000027f9e22af1bba1d133334768b76b6154fcd807a2164c7ab695cce7b8aae4919c0fd98a49ffff001d29935ed4","0100000044c944ea5372926af3b58bea2c73ab261fb7fa6aaf5877d8309e4ede000000007faa22b7f246bf16a6cabe8cfb35b9eb2ef2ca3e9e3e640b05a8a27f48fb2cf62adc8a49ffff001d98edf30e","010000005d841bb428feeef8964a642e2eca3e7d677bd823bdb7be065c5dbd6f00000000a4fa0c7721e43bedfdbb6e2dff985ee7a0681a70db1d1edbcc5d22f664e4fb1c7fde8a49ffff001d344c8226","0100000065b3864f233ade3acb83baf977448f4e5de5e342429c741fa41e38a200000000ee9ae4c109a13f2cac06e456cecebd139dea34f7d8efa432a5b37abd271f0558c2e38a49ffff001d04fb1f4d","0100000004eb5aa7652b176a1ec96c48fe44dfe468dc38150f128b895a8d8d720000000050cc910311e2a0885ae0f88327a3a68dc8cc5265aff5d26935a481b233f4319da3e58a49ffff001d4ebff108","01000000f8897a000a75556302cdff69261b56cf9f4ec00f4b74496116af06530000000074277f6e01374e6ec76b95fcab256e7da02cbbf12a753d86a1ac16cd68d03a7bd8e68a49ffff001d02bef33b","01000000170ebe801db23362c1728313741c018177dff8fda90275a5b2a77a6d000000003ebec93b27b231307c87ea5014773c669f600a2f0defd91de1e1b51f88eaa7884dea8a49ffff001d35dd2af7","01000000314bfc3ef8183ec2a5e4fc0e45c389252024e71dd632ed9d6537bfc600000000adc35156ddbf323115efd014c00bb2a66d971d0955174a76df9ae8e8b9f3c00fc5ec8a49ffff001d24f18ab3","010000002bee921506c70c5eded155a92e5b819a5d66e717f82006068262141e00000000fc6a5887a50b714b7722e1a8dd8072ab4cc98b18e6b8fccce04e46c0e5c025dd78f28a49ffff001d01e4920d","01000000a0abd6bcf0eacd3c8be05eedd063a5615c33d9c6c503e1ac20fdfe76000000003230f8df6d278bc1525c494a91051a29e801e010c5bdb57daf902c3bff526ba677f68a49ffff001dae697f0a","010000008195b57302f4a58b91ed24c25a317f3abb607b8b89157ef2e7b68c3f000000001cc5b71c678e6bfeb636cfef7bfa41069f42646a3729abf5d49d385ac9f357462cf88a49ffff001d23b3131a","01000000cb5a232f7b63ea435a286f5c5dda71c18db445fdf624fcc2f28363d300000000431d917676747649c34e9accaf2fbda7a1ebec9c7265f2292a75cea4df66873edef98a49ffff001d31a52151","010000002794ce3a7008aa2df40d1b71e7dc2880a7d4c60c5b4f6d07f4a6411000000000cadb05d3802352a0f70a8d3edd23178dc71b35e9e714a58690eb843349a9aaa39cff8a49ffff001d1d8c1070","01000000ae03b7d2ce58ef0ce23eea800e3609ad43d1726ac6f00c2d45c3d89900000000c3ddb23b65e36ddb11b714c8ae59ace51bdf664092722df452ca5e5865cbbaadfc008b49ffff001d050b1c69","010000003baa72b2dc8884307a7db43d4586e33a56c05e33c6fb235359c7812e00000000396e4149bc688228edf46dbfc65e57c653814930d23c47cea63b0c42e6b79880ac028b49ffff001d8cd65704","010000002ae695ad34adee5d8ca96e5018a2e1550819c972ac1b39a84f3dd4a7000000003098cb1eb9051823dc24e94245dfad1ebcdd37422ae9b4f0cfe48a114d6de8f86f038b49ffff001d32a20602","0100000008632c9a0f483c3675a4345f4d0b09e73934d23476a80d46c73f60180000000078ac039fc6dbed719cbbc3145a052ccec6aac337e82b7966379e78206fb8028a09048b49ffff001d166399af","01000000d9a27538b63273cd1ebfd59ff27d54cd12cc189efab03fdf0ec51a920000000034367980da8eb252acb09dacbaa458a7cfd45d7c5bb566651ee295bf326b326137088b49ffff001d018b9f08","01000000cbf2a8e9f3e9186ce08f6468e1d53b57b77e14e3d8e488ccde512c5e00000000a39b73f6428a204c1be5913092946baae0dee4a6cefbafef968251025df65716050a8b49ffff001d160fc14a","010000009b2e66028decffa1a3a2eb7b60019d4968863d77fc6f43ac7e04cc450000000021bde3b379b500965b939347c01310960bd031f243ee2bee9cfca9206bca46fef10c8b49ffff001d32d8bc0d","0100000013f24dc79041d018874475337c4c3c651daca262c5f987a98149a58b00000000a6bc61234cece73a689d4f05274b1626570e83a1f82f0f4572f427542f638fcd5d0e8b49ffff001d016651dc","01000000119d3ff97b484a22f0cc0c9698b928158ec7b5f5901b49ef84caac3500000000a5d47a0c529951d7f61cf38b8f5ac6a6aa2132a09e0d5997372d0e559592f6976d118b49ffff001d26b131b4","0100000096cecf015c3eef8ad79f57ee4fbc982f5757004752993efb42e6a1290000000080910e88a065fa0422edb1316df8561303bc4e22dbb5e093ad0b2c6dafd26c3118138b49ffff001d2a63f404","010000002a57c4eddb1a2b5b62caae4fbaaf23b96dcf4b61b4355a7dd44e037800000000b6a72e17b890403e31a079303226e9fb447dd7f90b05fe0d1222d6348945a07c78138b49ffff001d184ffe58","010000003c4f9a5a976304b82031ccb9546b3e0a2b1cebce5843abfb1d7d128a00000000b9637362816a9edf5696e43aff015be677a2184684a45f37429f29d9640eeb5290168b49ffff001dfed9e40e","01000000c6e41c7a6fdd7fb3940e5e02b4ab2d6dfdfc69ac32d0a987cb8788090000000070823e4981d00df51610ee66e82684433a13f410c2c02315e38b3282f9c5a872ff168b49ffff001d1cf018dd","01000000afa9d352f53c0cfaf9b54e3af2d56192c47b1b9dc3c18778f960c28d000000006a6f55351c1f9eb11d9e1bdb7fca3c73597426832ac3fc2a10b3ea12e337634936188b49ffff001d80a29403","01000000c896375d6045b58c8f438281b113d24763fd2f4d9509d203ba7b33d600000000ecae2695992342b61863dc0451f49081a10136ce7ae5156f91618d8938102384d8198b49ffff001d139bc704","01000000c1a8bf8aa70a52bfddb26461ea61d2e0eab21a57fc13b4a529d04e0c00000000f411a891d464bdfda3fd080b9c9d06b918b454b3ec5fdbbf54c058664a95d570521f8b49ffff001d2d47e698","01000000127a06d93fca4fca3d4d88f54fc532dfba501bde4dcfbbff711549a800000000a8e66f764d41d3458e478b7b6bb5f983d2eebeeaf32f88265f2f9e968d6f173142258b49ffff001d26efe69f","01000000a3763be045cfa07ee0aa3254bd10a9e40a20afdbfba5804e304c4f3b000000007af66db7e3cab98e3dfeb1fed6805851312ab3fdb939abf3e3669e18afba1c9bbc278b49ffff001d3fb77207","010000002e07dcafc1c7c526f166064ca2549275da3d770565efbdddddfb88db00000000584df451660f66f78d847242e4ba5becab01fa369fd794480de3c6300d236075df298b49ffff001d2c43c94e","010000003952ad01caa9af830d588a441a565b0512898d32c1e412e6d007d6c7000000006974fb4a305dc3d0e6a13538a64ba356e5a0b4b9446eb6cee39195bfb8b31043c62c8b49ffff001d03cceb50","0100000023fd33ea10c36747f27758bbf0fe4e03ca48c06995bf35566455e91e000000003cda6882b95e8315e1b94709ebfef0f4c81c891cd3a41522ad19df150fe0159d38328b49ffff001d2105fe54","01000000486e07a1db190cb5aeefe427a97b8045441ef0da724c33832e9e6436000000001155ed8535a7c19d5301721acfdd48b877fa735cf0759419089e279f87780210bf338b49ffff001d6ad41803","010000007478bde428b25450b9a983d70c1995622b50cca207e4bebb67627d4900000000b088b4356e5fe1ac1359486a2aee1faf9299031bfa9c2a66d2bf5b885d9e842ecd358b49ffff001d15dcef63","01000000e61704569ff1b1066887403439afe4360ac6db8296b48f9fb0c22b4b0000000033247166267fe1b5edee1434607062cb25c486024239095bd7b5f9aff8169289e9378b49ffff001dbef11c0a","01000000e3ff98bcb17f454b522bc67382d272746d5dc7a6f9f3b3545a2b4ff10000000059a7b50d2bfe0cb8f07cf0c0ea4416a785eea8afbf8ef9d29326a0e9c8aec9eb2d388b49ffff001d071dd88f","01000000f2ddb48493df4de94a3a568c6a96675994de983c86e8abcc0dc0893600000000ce0d2093528be204a0968e4e4fa5a09f0feed356054f51057dcdaf5c55ffcc2ccd3c8b49ffff001d267036f7","010000001d5850706f59e07beb9b64dac7ab888186f349a927bf9bcbd78f72660000000028142de12a9029241a08ca8fb162f97ea0466505c7b75d8e2c2380476c0f2df2963f8b49ffff001d6c7b620d","010000006fac1be918bdca3d35657ed540e772bb7ec226e69dccfe11f7fcebb000000000a9c2f32c9ed8888309e1a7352e3e0331cb71bec4eb729acdcb726ca41a9171d4e73f8b49ffff001d23744d01","010000003de3cf782074652f4a35a92a599a70f05620d44019947caf9af743d000000000ee0253ffb4d85edf901efbef63dce62656a73c4b0d3a8bbf9b9cb556b7d1b53b16408b49ffff001d291b30c4","01000000707b5813b21e3c568f490573272e67c81448e8b6ac98e730fe60b42300000000545b29180199ae7bad29afd82aa154899991fe045a8156be87f9a0835e7db78a73448b49ffff001d23222765","01000000592094d6f36959fc26c05211bb2d4b64206893dceb715bd8e600750a0000000071298c89d5fd0c3f75dd4ecd34101573401a5d9fc1b9f353335e90bdd55110f081478b49ffff001d21592406","01000000ee0c062498683760695434b586631dc11078d8753d1361c3f0a654400000000028fe36af21e3353872f53ed734ca49c29dd2309edd17cd8cd980f5a3815f13b6c94a8b49ffff001d5f54f20f","010000002f3b7fab0f589b18c192a4c076579e6d84775d562130b88c2afe498c00000000520d37c60b85281668534cf24f1d0fb88ed0b399333adb6bde42d79bc4ceafa7174b8b49ffff001dda003c01","01000000c3f8166f3ad35d11e9c6f12a22257b5c93881ec444891b776541e01300000000d446f2bdf4a8c3452c19a6341c6a9dac5d4b0f427d55e240cb11ccf9b5b42996464b8b49ffff001d33655600","010000006c5eacbecd3e9292dafaa6d317f347f50954ee27e30b369ca378e8f6000000007677b6ff2366e34da4cb4994cb53710ea09c9b7cb5c2e2a52e60753fdcfe9f4aa84d8b49ffff001d270bfbbf","010000002cec7177aae1ce4b049f05408906a60def7fc92d9525ca3899d3bb0600000000a29bad734c6ec76a7b6a29bfa106d83865d639ec77f58c568ff08c2fa095ea3ae0538b49ffff001d1561de71","010000005cb389d6df4db7f9ac66cbf35d8aa1d89109124d12ec25f0692bb10400000000ef393691ca2520437e459729610e219a66c97debba6b06743ae8efd057508ed3f9548b49ffff001dfc313503","01000000515b9995a9ccc4f403bef7929ca59af7d94dbae5e4a6b4e6ee1716a5000000007aaecfd300d818ada749e555a5085084be133dec13a2e969cf39fb1cfe8ca0632c578b49ffff001d161a6f25","01000000d51aa8a37268b611efe6aa21d77eb4a8d139f1a46a7fe8e72eeddbc7000000002b98eb6ab0c5ed36585945009cd91c145cb6a97b7af3c142b9b433825010ef020a5a8b49ffff001d22148d03","010000003dc105f0ad16be17b42904d15504b6e8529a647dfc0843e7e262a79200000000a7558bdf2d4850fc02e8277f7f085e13fbccaa4bd6def5bc2a1c313a94d6c337f25a8b49ffff001dadc03204","0100000091aa107d52925554729cadb043b6a319ca3ba7aac23309d095326ab200000000ec562246548faf8a7e3af9e2fa93725293683a45606491ac79523da4d45a611f1e5c8b49ffff001d347d13ce","01000000a1194c5bef08933d7591327a3f5832c91d2346d664a62c5ae4662c65000000006018311f785fd86030932a81057c1f0046d7d2d180e9e9e73c13e2a513bf866f3f5f8b49ffff001d1c6f442a","0100000009a1b3cb30aad581ca9cc27fa6657f7dd8e01b7988300b13549c4da70000000092a73f3d670bb7689052acce05b0c218bb44d41a20e6b088846f480aaaa8fee1f3628b49ffff001d2c5f6290","01000000a06e0e901944c1b7a80f51ce2f005683fd7b22ecc237b0fa0a8cf6af00000000613daaa0f73d82b4dab053f1613bb303eae99326c36aff38074e0cfcdd92fbe8a0668b49ffff001dda9b8d0a","01000000855d786bd45f41c7e0b643913df9cd15056a7f3e77d2a766b704aee50000000083a6a47d5e08be0e5d161873368f3dc4413a488af00feeaeae23f324bfb190a44e688b49ffff001d3396a303","01000000b99362bb8e5b04832a770f37c5ca4aeadfe88f53691b2689b102942600000000a488e8f5211b8f88212a9d4cff886d8db6d638bb08d1b5a084785f3d292af28490698b49ffff001dcb068f03","010000006a1c5b61e1b142dbf9046a6aec552a105f8b6f0999bda985998100be00000000ca23eb58ce674db8fbeb8211d10f7ca6f9827339bd4b4e15f0c4aa27212a9621556b8b49ffff001d2fc0735a","010000001b7d1507388d7a92d035dd4a9c39a9b84f31383538042b401053b3f6000000003b22fd94f88ac30815c8b6a015a22b3d424580c727c184161bcf002ab470bf40586e8b49ffff001d1bc46f55","01000000bac935caf12f8fb0ead516d7f9d03a9bf7ae0ed642e2658d82b08034000000002c50426116576f0cc34fd5ce4723e292a2c8f51db27461ea8ae7381ba8c4d5b509738b49ffff001d182fcf02","0100000046b42da06ab83ddc16b16faf733c08b77028713218ddeafd3afe967200000000ce9d3ef420bac6b740855b8050dd32d936465c070264f4a7dcfc3dc1ece6ebe042738b49ffff001da043cc00","010000008a057d539d5567e04425157e035185af1639ec6962ae6c7cfb0b361c00000000fcf5d477e8128f8ac31dd1e1fa8a117ef2b23cd9ad83e868ca99db4952ef1132a4758b49ffff001dd46d7706","010000003a63b23c9b08bf817ae809e88ec7f97594e564a74f611f38acde8b1400000000e7e2b2e558052c2facfdf4242e11bbecdf66cf971d9a6cae3bfbfcc6e926c0b3d0788b49ffff001d222ac22b","01000000abef2e3ace5f3c08d6975aecdceefb425d24256b2a2ffb9bbd3a6fde00000000cdb15701b834fd8b6365635660a5739d7dfdaedfe22b6db7d99969d4be65a5811d7b8b49ffff001d1c22d904","01000000ed9891dcdada44978481931e086be42fd85d90b23489ecd525efabe70000000047bb46e39c617646b98c36b5e77b7c1ca68f356de0c086e88d277a48826e1928377d8b49ffff001d1ed2646f","0100000057f7df646a6c3aa0ffd5724f96d313dfb33634d15dea1dc67b5fdfc0000000002e353cf40d8a8d211a51a776b192726ceed6780a90362e490dda7bbb1ecde8f49f818b49ffff001d03862a5b","01000000b16ff58decdfbad208e8090b13ea819c5518b7340ef4e7d9e7ab602d0000000001759330bba3ede53241a84441eace20c0e45139cfd835f9b745fcca7e666ff1bf848b49ffff001d5c38dc09","01000000fb9a870b452390abc1a7dffe8df97f958e02cdcd63c3be0e07173ca400000000bb5911d43161b12afc118bea4d5a64d1161e20b751b61d8a8f1d372c15d475a3e0848b49ffff001d656f7200","01000000a8b0e1c1e6bf80134da82478c138339524583b4d51268ed396b588a20000000025fe4cef39b33c244044408055a75c6b7caef70eb38b55e3c3c90edf58de7d7d52868b49ffff001d244f485c","010000000f9d9a0c3e50edd0701124ea4332eb660fdce15658d4af4952b06a060000000025e463fbebe55254388269138acba684cd6daf5590acb49b2d9da1865162bb429a898b49ffff001d2ff407be","010000000c48afcf9b653c2d8615df43230268245e283c242c1ba30dc5f9454d00000000e15b3551b83f2b444e54c0d9b75e15e2a60c64ea666c39e4834fbd832eb5c178a08b8b49ffff001d33185809","010000008ba3a834aadc701144629a4232de7b0479cf87462a4e64b7385a3f78000000008ae4629db8a61858aaa932ee3602d64c4f71892a354e7de693a9e8f12d83af3fd08e8b49ffff001d33ed38de","010000001133194988b277f1d286af05217d0b29ed49800ac7a3c6d8e38e0b1700000000565ea8c2ac3ee9942a8914e3344acca8739ce13fd6a70ec7e36c4e7302acf4bbe6928b49ffff001d1a655fb6","01000000bf7f043ccc2538682e5aedde8acb84548b205f7c700bae79e01b3a2b000000003f2ad11af8ec2e213c71e71d0d53e2731b71bb9ea479a4a100b12a84938d8e0670948b49ffff001d0494a938","01000000ab4ce4ae68d1a87a12aed9cc3c095f56ab13fd0a51537042b31fa7da000000004fd1469462f22be6edeaf4028ac9ccfc00bba4443a044691391fcad93dbd583336998b49ffff001d2565ebc7","010000001009436b6dd1ab385d63dcceb0ea0dbdb40610e54649e465304238740000000051b0ce4bbd9cf3f04d4f84b2662c0d59549ab9af5fac61823d2c1dd74fa3011cf59a8b49ffff001db3111906","01000000a6a8e155049c4bec15ef6385d78a492bbd6b5d3703f23c3fb96f3705000000006dcdce21c338dc3f374a4f04269660e0d2c6795fdf8025d9ad01d7c275572ee93b9c8b49ffff001d23afbe49","01000000f9dbec7c2b1036296bfd154c59383a19e9f12f93160155bda2501efe00000000f8f67cbf7f826ae21b68655d84b006d8c03101a0ee021ec2220d1b732df115e4dca08b49ffff001d30e2e1c5","010000000af049e4537a153e491f1686098a3264df26ad5ecba9038e832c87010000000059324a612c40310b3d354b95d3d28c2cf7994db4aaa2afba2bae623faa57817b4aa18b49ffff001d48378f00","010000008fe30bf7de156904cba9cf8482db1c4bb92105bc74171ecb81d3a0f800000000c485b384a814c360ab04a100807e5cad96f2d600af6f885dcdfe53f832aaf1c12ea48b49ffff001d13890b0e","01000000cba5eea905acee0931a18448956d187861b4fc31970542c5bdecd0da0000000095d3af3ae431e38ba9e3857a7b6e7e30349c51d4af17ec5d5bfbbbe1b38b6f5daba78b49ffff001d255796c1","010000008fe4af565b270b4792aa0569bac1a47655971b62e7a3ad27975b26440000000097d5e17f64a8832c363886e08a084b2af38cd5cb9a544a5c81c7792feda9301a22ab8b49ffff001d1b5f4ca7","01000000f4091ca9bbcb24e185c85b0b36ea4a2c0089a0b6b359800e4e8acbb600000000f7c688e7b9b4143ee6a7dee540c5dc05924416135cda5b4a9efc7e726567b4b418ac8b49ffff001d60dfc702","01000000954804e0c822144207ceeda4d9b696582cd9843c989aa19b7e9b4a8700000000463a18a77c5c6deaa525adc4f9e380ce8803e1be0da38a80b9f207b7e77c19379eae8b49ffff001d34a440b5","010000007565ce98501de663ef05ea2e8d0043fc94116d9aa77bfda5870885b9000000002a2b9f636a768e6205c3b6e659b8e71089b20c0ff1cf958c0d6d945994cc851118b08b49ffff001d184934f2","01000000051a891886f64ec0c6c950635e7a1f8cebe6251b30eef17fb0b7cb100000000057bd3f215443954d44061b35212dc37f659989399a4550c895d2d9d38dcd65901bb18b49ffff001dbf32cb01","01000000080fb5d02c8a3cd82fcef71d491dc8ee1063ebd73f024a4719fabbf600000000f57825c880ac7c1010b59bee36406493c2fb3e4077fc4a8d32e8e5ddbb4028cb18b48b49ffff001d208f49e3","010000003259cc89f707af1aeac6d70fc68909724d82265983511a070c159ffd000000007a8754ac25bb8447a2c001296cc8fbbcd526009268b9a962e8181c96bd8d28b3adb58b49ffff001d1c550871","0100000050d674c0e695780f5b053c5f4840c61f413aa5e4b04ab85523b947470000000078f40371fa54763f6f093c1595a104b92d9d751a5ea376fba265326aa81bedbd64b88b49ffff001d99676b04","0100000067a0a653ff206896cc50a9d191cf3b65669d4804a7001899679f2fc5000000009e5d04748ceedd29e85822b361845b7f1be9d3d60d22d668b672c17198bd4a0e9abb8b49ffff001d25bf037c","01000000a2b41720a40329976a2228f48333566512bca68b39973399c31c073900000000f6242b08367277dfcbe8cfe68ef0744ea6357b672525268b9500c9559fec34bbd7bc8b49ffff001d09dd9d01","01000000975eb827ac04cefcff0bfb0e7064e461e3752bc86fa060b1d2aaee1c000000008da883a355513ae76cf6a27127a15b1740816c9cb778cfaa95591d305a9d999c57c18b49ffff001d0580a1f4","01000000664d60c798e3d8851cefe2c6f906f55b268c08fef5f880611bbff6a2000000002c936a4b4febf0010b60d50022e036e1a9f92ab432894670a103986e574768fd0cc48b49ffff001d2840e08c","010000004b6ccf926f099fe4d2251b613cd7b511d84cd43c960f9d5d279d0ffa000000001dcf21583ae34e9e345d28d04c16699238ce5e9c2fd857ae84cde600e00f76e487c78b49ffff001d09115b74","01000000329fe4e532871e87ddd54ebb6f48a74dadf76295dbedf8dcc777d99d00000000fcd7d7a6891a6fac5d71415b30692c45175b5f9ffab5bef509c1411f94d470c199cd8b49ffff001d26273b94","01000000dabf630b05449502e21dc8b4efb70aaf5cc592aaf6cc8a6291baae9d00000000baf82f5963f1259317c917de3e0ff848e8a6a1cf3a83695a52cc53ebf9a3ff9c5dd18b49ffff001d2703231c","010000006f1e630315b7922be619b68cdbf14b210e2c6992d80656f59ff13b0d0000000057638fd4382b67f1da23d820e159f57b817d73147bd85602caea1ffc567f22b673d68b49ffff001d1de8278b","0100000087d2a11ed6b8b640def075bd57c1ef0fa8668d0d7cfe307048abcabc00000000bf39a0f8adfd5ff7fda34059b8041ee6afc0df16aeabd9cf00a924b20fc74b626dda8b49ffff001d35bbcbe4","010000001a352716ee65ed38987761a89364d10fae2adb2b80c95b2644aac72c00000000c8afd965b97739d2bb5ff9e3b8f8d6283ecb23cbec2e7c0f7aa96712d4444f2814dc8b49ffff001dc66e6004","01000000605f5af1d1f95daa8671f10ccaba1706a94990ef0e3e240c7efc682400000000840ed0b4280149a7a763263cb8c205f7d05ebaa1fea5da44c8619a3ce9f46c03dddd8b49ffff001d7da88d08","010000009fff708b3c23088437c632ac53abaa1669dced84a6e6524e5b09efa70000000034c5581a45d5356b14ef0e470b0269d2b22b6d0b383fd763b1387b0418249597b3df8b49ffff001d29cd87b5","0100000006baae73c7fd0cc3af98bf1e65e2c880abcb6a930e3e45bacde5c20600000000ee728724b7d382ad6fad3412fdc350e36fed1f6a0fdf961fef4f5228458fdf99bce38b49ffff001de8106c0c","010000003e184f60593f425c1aa5488c3dfdf4ec9b58bd42e05fdd5a768c6f3c000000004346fdeffff90be86a5c519a1582e2959936afb3f4318364494664cea04d3a9323e48b49ffff001d1aa14d52","01000000ae019b224701ac771991feafa8eb3eda69e0b81e3f572a4c64dad5eb00000000ad73205486efea09fdf15ffb66974fdb5c174b8a6f668567c54d208ff1ed9d748ae78b49ffff001d2ee8c915","010000006c8e4a5e1a20e7af63ca9be1968f03851b7358b25cd42aa6fd631873000000000e4c989c6fe01246ad43eaeeba20e40f89bbd37b7efa0c1663f742d5e2791c93dbe78b49ffff001d51e85d00","01000000a2a1d9b76be1211a48afdc57e454937eb527e24501e7cfade513878f00000000a4f1dd3383e900742dcd2aa9e92789e5b09295dbd90c91439af56cf6d2a4406edfeb8b49ffff001d17d4cf29","01000000df414ccff0412fe5ef9bcf46fe6e0ed3048c3dd04c59a131f0c4eae9000000009cd663cf5a9b5be4a9e6d5552bdf9ec8a17063cb7b7af8d4f2faffc2726a49d7eeee8b49ffff001d385dcd60","010000005c621dbd307f3b377ccd97c0f43862381b223f736d0f77a9651621410000000012e2cd369e00c0b4415ce8e39afcdf40c813a13d3404f459e3433f6537edf61fcbf28b49ffff001d05ca22dc","01000000a4852b72715c1427f77bf74680c2368c3932e71bafa4f94e469f6fc600000000bc3ae26a81b3dc253aa87798dffb638d5733f895b97e26f993d1acdd6d3e53c2acf78b49ffff001d14136d5f","01000000a98041632f054eb1ecb4627febf4f7cf4f58b04ea41f1d4086c91a170000000044445d8a35b412fb6e97476b72bb1b7bb1af7590b34be1699cd5bfa1ed24e70e58fd8b49ffff001d20a700a3","010000004d696a59869a3b67a2d117648b82b70214d397d90501eced5d0b0b310000000037aedd0d1ce53278578d692b36e994ff7770711f40b743a0bb3f69bc423db161d3fe8b49ffff001d149ff072","01000000579fce3c72e1a095ecb4b6633665f18d0deb3fca77c53bc3022e0b49000000002f3529175687dfee4edcb4d574607cc2b52c76509c8729f8b98bf9c17a05c4cf80018c49ffff001d7ae73208","0100000014102618502a1b6982a2beed085de4ab82e967393779a247327f284800000000346cbe241fab80abf978f564ca9a7ef68fdcdb5509b509672f085b18f854b88f0f028c49ffff001d279e44b1","01000000f4551d1ed17ff6a05503ed8a639db56826844ecd8160cb29aeeaf0d000000000ec765ca4fa1aefb9d1811ec949f4e3aba072061b15c23bb5970bb616ae88fe13b8068c49ffff001d36139f56","01000000af0e7c81b12ebb7ad3c80c56a3807937a1909c795380eaa06ecb7223000000001440b3c9ea11f89a3968a7365b84b23c68572292c2ca7e4b3f252d08379422f071098c49ffff001d22c5832e","01000000babcce07fdd148cb9145a77f41ad2ee6d529f0f0eddda56e6c0ac6cb000000006c3428cf99eac0e204d5b2ac67ef4a98819ba3c38bbe25b44664fb26d6c20ea65c0d8c49ffff001d24c3790e","01000000a70d72131900559ad4e7bef689989a1f65ea9ce9c974769ab69f2d1e000000009cfca87c4c855dc603e932ffc12eb28b8df3d8ab61a92cdb6a0f1e86c949f8b9510e8c49ffff001dd8a7a901","010000006715849d42bdf01962b7e9ebef1f6d5c5f97d515d3ea4cd2ffcfbc0b000000008f91ba74f1251185bc8acce8097afd91b22a8d1c3e30572a9abb8ad1767ad17b68128c49ffff001d2eb11b5f","01000000b550cf2b0619e5d7b6a18a211586c2b651a1895d3950c73b03d1c4fe0000000023942be779fbaae6525cb36124dbd34d57416c19818218b1a23de62c9b2e8e778c158c49ffff001d31cd5d2c","0100000094d89d4d87fd7e69cea640bc86fcdca78fbebd6a43932bbcd6fd8b0f00000000de3b51b1d2dd26f810b49a2ca50ae7ec8d800872ce13aa1a3754e03543e2cb3ec5168c49ffff001d86852203","0100000049cba5e15869fd3eab4e28fef3e5459b51a766dc90477df2a8c1a0c90000000029a9ee6786c4dabefadd07dfc42c6804fde8e3efab64ae4aee56dce735d0206cee168c49ffff001d37067a10","0100000054c876dffb7eab91502c3828bef751ea94d6754973984074407ce418000000003498539e77701636a09f67666ccbe5319fb31ca79dceeb2c46810a9fbf7be31007178c49ffff001d38e03800","0100000063cd2f9815a6d04f887e5ae58b9cd947a934f7122da07504f8e3f87500000000c3d5d94e61f61f6c075b650749fe7fc3ac1bcf211a189ccbd4ca4386c787cee8b1198c49ffff001d35cddb0c","010000004c2aeb79bc7cc15a44a9d08d0ced655f9cd4c5d468da37a1b4fe06760000000022fa0e78bba0b78e1b7013e27057d87bcb20d605e13aba42dfe97e38e0dfce2fb61b8c49ffff001d14e66d1d","010000001fd1ab5d17ad805d667558cebc44d74513834bb4e0779b876cb1330e000000002c3ed07199d38752f410bdb88167d5fef54333fabf4d5774395ecc6a7e9fe7bf3d1e8c49ffff001d2410539d","01000000deff6c39eb03e592961aa378c4e3f0a9989674e3efee955f306f627d000000001bd9ad3b6c8b212210d9fc83f5308fc06bb887a6dbad934f88b0dd364570470c06228c49ffff001d248aa82e","0100000061815f62e338f6292234d5c11d666d434bc16e9ae21d07245304fa5e0000000014ce791ed5c31e8961dc2a666f41948aef42757b2aeca2b131968be0ed33b1d4bd228c49ffff001da5a60a03","0100000091fe5fa3609c0e02c4b8fbc80c82fd9091b23764e55e8a3b271fc2760000000020c64c77187190bc13825520220a044211e81fe47819888a37ab3a7a84f8db4773258c49ffff001d2a640c33","01000000033c1a5295e4a4474a648bc360110cfd29fd5152b0fbd8a9da8c407600000000b067ce66b1616fe688600fc357bf433b33cfb01554390a115aa97a49b56ade31b8298c49ffff001d29b86dee","01000000498a25c87729525c93f26dcae8315afca2b81dcc3530b4a921eb6b6e00000000233f835cef489254b486e61fe562d26805feaebf64034daa1dedf095dc0e29b5fe2b8c49ffff001d1f958b25","01000000c2985934abbed41b91f528c51ed5ba17b827e2e6e730db1c6cf967380000000055c5f7908cfe246c8db2621e23318b79221f8a61a47335e12254271b91184b06582e8c49ffff001d080e1d34","010000001defb5e7b3c42eebcd83126fc5b225357e65819385cc913051c12c7900000000a17f3d283fd224fec28c9a7ba7e9207a633f4062f39594e2ba10db166e6c599c41348c49ffff001d1edf11c3","01000000bf33c7e3dadc1dd8093d90f419009bed63da31e08c8afe96d3a9fba7000000007c7e94a16e0bc14853b3ffa5c6d126d129a84ea2a6e9f4551573f77af95b1128a4368c49ffff001d2411f563","010000009a747a6866d5dfbe6afa000b1f9934bd7c93102366663634845688c800000000a00c99bf95274a17dda03400c39a36cfb171566dfe1b93365f015db6063e5739603b8c49ffff001d3868ea42","01000000e1a5bd427f429e9c3fa5f7aecd58e9fb19da02facd650f638ec7640900000000f4e221e3ccc8da85553c94c63bc38ddcef72a1d0d9df1b780b3b44e020a164edb33f8c49ffff001d0159446e","0100000049be0e8483c96d7b413f976adf2ee0d74f2d571647e59e878e6c5c460000000040ee3102a7cd9915bef48c7d9ed9a702d3e2e69d01625e5d32b66468959632f383428c49ffff001d04ed54cc","01000000949af63a5f23d1f6809ab3110be387b44b019d460a3b790bee67b8100000000031df6ce7d48c707f3b23344db7a5c1956f8fae7a8d639f39866e04c959d24b6bb8428c49ffff001da8b04200","01000000bacd2f2ee2acfa65d4d6df9668bfed766e4b7100293f814197283e8800000000872e4124077cf78a9efb427db295bb91a4855ac205a9540394ada45c2d13e6cee4438c49ffff001d055d8de0","010000004491e64731b6c09cdb3e30a3aa3d00d45be5d0b02d572b716822430400000000f0f74f35d8a5ec52c275d6911d522067b37fda20924fd0936641f6ed63824aeee0488c49ffff001d3575e001","0100000040f5519b36cc1827fc8a90eeb089f45711f2306d1c331b8e1c1b99a8000000009d4515667adc219d8ad772f5d053ea0da1e11c956a2f851013d5890061070138494e8c49ffff001d19862d49","0100000023da3485dcfc0a35a254548b1ba0a799a0db267617a4dcdde11f77a000000000999f4324c8bf6634b28acf037e973f665dde448ffd1c1d9b31989d7c3a1af7f77c508c49ffff001dd3d9a506","01000000242941d49e17bac3f95b89ded7a37b9017004a167ba54c2efbe7cffe000000008b9fe6b7fb6e540638379ee76ad19cabd3a4dfbb09e66ec4fa6e8c6ab5b83c115e538c49ffff001d0984cb1f","010000000af496df8cbbebffc0082d6271c000f2d7dcd16de98f7fd8fbf7edcc00000000acdffdc82dd8955a58175b240138f3c2fed7e211436e786f4a8f7ae84c7d43bab9588c49ffff001d0689f0d4","01000000f2a6dc393af2323256b0e7491c698c1ce9c096d340433c8da6857d01000000008529c2b244a11b634f0de6e5a72755facaeb5f0388f43d31049968a7642585b8a05c8c49ffff001d0619ac81","010000003c8deb33be8ac01288a323cac0c01b63eab3d35c3d1f5ad000b579b400000000ad3fe2aa443a00c1844699f5bb2639c758028ea418d80dca6dcfa325ebe60442c05e8c49ffff001dfaf38f0a","010000009c8f328fa51240b9d3ca1e4b4ce53a4a471eefad76da4df6e1682c4f0000000067a26d5da902d129bcfe9849cbf2df9a7ed21de83baef2500568dd5aaeb545f34e608c49ffff001d2132a290","01000000eca853235556c4fd68b05514715305d45a9e05ded89e735b3b81cdd5000000009ba2d470b716ec98248e7a481a7a79cec43946066b1acda01a3a54280eae6c709f608c49ffff001dfe874f01","01000000810ba50756f1e19c953b07f3b80229f20530d7c04dae1bd9998e73f000000000170a627c40d7ca40049e73e7abaeb6540cf3239dc35b882e51cbcb37356423d65b638c49ffff001d03ab2ac9","01000000f5e08cf7acc86bc98d6f47df9bd64d519f177a91f2c0bf0f5cbd0d7b00000000d50b37a0bdc01cd9690f030bf26cdf6134917f8b2df72e0488ae93b4fdd2a28507658c49ffff001d0102aeff","010000007a8008baadfbecb8f228211ea7fbcdea069aa5997d8ad7335744a776000000000c5c08f019524b4d5e77c3f7ca1b13b4142b93e615f617d2e98abf2945c88ce046688c49ffff001d21377a50","01000000a50366dc3cd3e6c3adfc6702dd1f3f541c61e5cd0338e3580e7bb0e400000000e091d6e44b6e8ec898cc46520e91e0fca91c9840eb430d42b16a5e6132cdb22365698c49ffff001dcbb93804","01000000158435e6a0d96f7f59bbc103a2bbd7d8b5c5c1518aeb16e8ae134fce00000000ddd5928a07fe54687a19e39b4c27892ad8c213b5ba06fff7d9b2612669834d0c3c6a8c49ffff001d2f558ad6","01000000026f65a95298b920ae2df32552d0c841a5dd53e43540e8762b177cbd00000000b4a91d0fd0f529e764b0112cf548ccfe0edbcc9513b4ceb0995b31de8441f086ed6d8c49ffff001d39afefc8","01000000f41ef73efdb61aaf892d0147edd22c4de76cfcdb7eef434aff25fd93000000006fa3053a12130fe66d0fa9dfa64cb99f8979ca6184ea642b03ba619153e1403f2a6e8c49ffff001d8bd1b900","010000000c7cd9b43da8326975c120c0d1ed2974e1b283ce55afcdb456b5e0930000000099dfd226cd2b391ca4b37006edd08285e3ae01b033a8b2de5778961763e1ee9a826f8c49ffff001d1de428ee","01000000a59d3510932c6714afd2ab88d1e755079fc488c8189e0607763bc9bc00000000929b156c7bb32a703830cbda03fd0f2a0f71ea97d26df4746a2f1e91980f9932b0758c49ffff001d183f935b","0100000091b3b6e3cbaf815f2d5dd11bbe155ee79177566d47f9e3b1a5e0202b00000000918e47a63935b70ebf5a44be012cfa0934b6b721148e9f4d79401d7509a548b29b788c49ffff001d23cdfaf6","0100000030e1bd904b7e611c952e5f8b6b0234fb370d32b05b044ccaea125b3400000000e3bdcc6a41b98900b7f82b13f08bd144c910b4f6aba6c1b1e416ea07215d74afb37b8c49ffff001d23b97c0a","0100000004ddaf7944996eacb847aae219dde612b93077f98d6c9870f20d1b9400000000fb96da2adb19f09b2778b2f4df7d8db4843691a5bf38c196c4796e7399a69b06247c8c49ffff001d1ef2005d","010000003200a320546023d5d5f7304ff93c40b4f7f1696f5e58556d37367d1f00000000c40a97cf400c47412d16db2fbcaa597aa8814c155d59346349c8bf9152b2f218a37e8c49ffff001d142f7393","0100000028034063c6c51a2b722732e2492d7c99cde34ad4e154c32c46911574000000007f9ff931f7fb8694d1aa3eea586e5df9bc6dce35016abc4a44b4a0be902b252ea2818c49ffff001d366dcb6a","01000000177523f3f2c8095028fb8bec6d36627b234fca3df28bd1ee97898ecc0000000089b3d759eacd8a87dde08a69d43f145ae4adda74ed929d74dd87e094b00427d889848c49ffff001d040363d1","010000001a30ad4153a0982661cc3ec8ee821337c08fac32742fd218f0f43c9c00000000cb08598306ef6893fd63aa3a6f39a789c3fefad31fc6d966bf5008838dcff1c023858c49ffff001d70ef2b02","010000009a20a563fe732cab3d43bd310aa4bb037ad3ef18983ea3d263ea69fc00000000bce9aa0257190b18b8022750f4b14286eba784a24694ae96df3985f90dd4f92477878c49ffff001d39ae16ef","0100000051d05de16f006346e7a7110ee4bf13b2014b64656be054137a19bf8e0000000018d08ca90ac22f2e4b705cd321c12fd5699d4f8ec99997ef5a3a2d09dedd28f6e08b8c49ffff001dcd8e7415","010000006664069092a9f7fdb8acb3b7a80ffaeff70cad5b0d080c07d749c9ad000000003d590507558cf7e28f889117cd52c507e8a3e7b6cbdb7717381daed4d41058f3518d8c49ffff001d2ab27a60","01000000b344d183cc126ab3f274db8bbdaf20eb3d5fcecd285dacfc2b9ea7970000000077f811c8306c93dfeb0a5533ecc79a6c2c5cc9ae3dd3999c6c87fa7a4ceeb5dd1f928c49ffff001d19737147","01000000222bfa9030897b6864e9fc6bb0d84de2fc089967209c04af7ba01f3a00000000f86bf23b95d397c737e07bd63fcfddf98b0d96af516c26d3fae9204635df661c6b958c49ffff001d2e8a963e","01000000d38413cad05044c9230f2227e2b8eb9d9a1afc8bc87a3143cc71a58a000000000313e4c6f465defa4f2202e80982ae630fbab931972b7df7dfdffa839b918937859a8c49ffff001d14f8081a","01000000cbb546f26df002e8c4d42cd746a102463588be161ba813977a0f267b000000007fe24cb7b8a6368d6aed984dabb9d95b2960e383f245cab05e10ea81dff6d190ff9c8c49ffff001d18a50401","010000009cdbaa79300814c017e10db531cf3ea335bdb428840978cd6a57a58300000000a85e3870bcb1528061e54f520b5551455bc3e6113008589785b6568dcc456b936da08c49ffff001d283bcce0","0100000073c8a61d51a0ecfaa9b91a446116d3414a338f8fe9828228fba20a9300000000d958797d7171457347b7c8a37e579323fd1615bbc0a3cc0485c3ae6ddbd22d9883a08c49ffff001d40051900","01000000d7b00eabf2a85d0eff656e51ecd88f01d4227f96a19790a8c500fb9200000000fcead9604e2c7dcae1e445788d48a8974418870160f781c04cf521848865cf22eaa28c49ffff001d3226cd04","01000000732b009ee6ec1404fb86186f0afd89fb2cdfa9b63940f71d7da7765e00000000a072a93bc6f25e19e0114bbbb105ea38377e58d9df509b75f4983c22e1c7af3a92a48c49ffff001d394529d2","01000000c580fc1a0404ff27367b4a2c14115f7023fd72e31afe69b710ea7fb00000000091a019021d2ed884b477b7df8257484691b09e76ad3077633e867cda7c9483e573a68c49ffff001d20db9df6","0100000099a6c60b3eae5e6c2c9d3d22698c8ece61f7ecc1f577c0f9c2356f7c00000000420adfbf679810c1371f714f80fda9b3134131916db83355e1b0686c4a9dc65bc3aa8c49ffff001d1d3d08e8","01000000515ab26deef1b4b35b85eb4c68bab4aff793ccaeab937eea7fc7915200000000657d8676c53e79ed1b78dad6fbdffa2af5d7fff9201a43d96aef85e5ed7e6fd813ad8c49ffff001dfba05306","010000008761da1006acd1fde07e7e9a5a8c0d5351b21cb0c26e49b7b7ffd86c0000000085e063e368c61d4e0a1116250b72e8d760657c27ec0a69cae7a78baeb3559e4f9cad8c49ffff001d2f1b37e6","01000000b8b19ae1429782531f5d599657080d4089934600c52796fcd771381a0000000015593694ed8ae5525ca593d8ade74ba36b74bc118b13b4c397d9a559548ca5fba8af8c49ffff001d373e159b","010000004d1f3c1e889a6508a492b6aa7a1017e4c9537fd4968b4a39188b3a81000000009af59c92f1e6f68e9c95a008b04b22eba8ab9c6bf53bf0f13a951cdbc0e5238d71b58c49ffff001d25f4d413","01000000b8796fd6e87e9fc3fa8643d0ca25e22eac06b7d16b49066f164dd98c00000000151eccc7bf6067a69def3a926650f2a077c46e4491511e91f6722f0976589f74f6ba8c49ffff001d03664a55","01000000b51ea381949c0f35fd25b7074d7b876fe8b599aa4935a95fbb310b39000000001ad48d1bc824e58092674fce8ce09282ac6bb7025f5d8856aa0e2139abdb2962a6be8c49ffff001d2bf97310","01000000af25a33a57cf8304c1725e51b6b29d9cc79964e7df8fe49bdcae95b900000000102a5ae5d838d669c7b2a0466207f9312546f5853952ecfb674f02e51a80bf90f8c38c49ffff001d099284e7","01000000dfeb7a2906ea79eb6d261fa57d76816a6305a51848c29bbab20609f100000000137e070ed4231b8ad5862709f6a1262d4500b1d06925e541bf30d522d7abd0e769c78c49ffff001d2e3b1ca8","010000002dce0249c0bccf0cecff1c7e4db4c2af10de98329046bb7549df0d46000000002f9fe298f0ccfc293fa3687664a2c27b062ac94fb998cdd17be548b20b482ea717cb8c49ffff001db4aa200a","01000000c22802e22d869250f96c1ea0a99da1f440a8e124aaee0d31adc6db3600000000725cd3b027202b18364040aef3407633d02557edb8b66fe1614fe06176ba576f67cc8c49ffff001d304f447b","0100000001671170335edd19b582b5d44cb0e1640d1cca47784bd0597c0a6df9000000009a72c61cbea430d873911551d3f56787166f4cce2d1c9422c3f806bf7f2071a616ce8c49ffff001d34c76948","010000007f073d3ac4ea619091463d5504b3779d93645a0dbac175c76807453200000000737b1c252f0b877dc4fc5fca369219c1c67f43f5e0ec0c01bf0e35f1cec66e98a8d18c49ffff001d15765e0b","010000009d25b670037db4618b2386146afa99027f90b8226ac2bac776b4ab1000000000b12a64a7f9de79281fafc62e2ebc7da217f45cc292109513610b736b39adf0a19fd38c49ffff001d16721011","010000001e9b99627e577b8065d6ec5d532c2d9d2ed97beb4778c42ea523450e000000007f7afff4834d876004ab397e22abddb61aff312ca1b00fb50966324791865daa89d48c49ffff001db9c27802","010000009cb62c9d2c02beda9164071791a28520cf864cf2c447124317313af9000000007773ace405b9bdea85cc122740a251cb881b428f72701e0e1769e8ffc8357558c9d58c49ffff001d78cdea01","01000000447b6738c6445e57061635aa6a735e0ce877fd008f709dcec7f31c3c00000000bac94a8ed111f24c596cf1126457227640337d16833a30022bd0a9ca821a0a18ebd58c49ffff001db012d100","0100000021043884ef8bc8996fa8f52a8005aaa78b26148f3022558af342897500000000af4ba8332189ab1eb1114b8c3112b23889eba56724002474050015320d02edcd94d68c49ffff001d21d41987","01000000404e889871dce7329285091ba7fb29b8d50ce6bd6c6e5fe534d4775e0000000084421aab1cab65a9c74fbf1920c8fccefd9c404712bc06d9b9e0aaf85f13fa2d10da8c49ffff001d29c54628","0100000016bea0a7018764100d78a4a8dfebc6376c7dd1ad2d5b1cda0086343100000000182e2c7576db2b62bef5773de535d6ce7481272a009e401a225e3b05ff154c5edbda8c49ffff001d227d8303","010000000130d5324cda2916741d8f95fdc8a09f98f50a4e6911693ec872b80900000000b01ea734686e414c2f0fad4f95c5155a44358cee0c0b32bfc4504f49aa26512784dc8c49ffff001d26c87dc3","0100000004773e6be4b9803a37a45f3184a834d3ecdfddfbadc61f0f4ac10a31000000002aaf0f9c30c98e258b863193918bea460397223a99e585dd9c805f7f83016efe52e28c49ffff001d095c7f52","01000000fd0215b566d865579bcda40d034f356c9a6adcba0b5394279327a4e50000000005c46fb3dfb8968b2cc607281af8204d93028546fc156abe6f9c63c8580b0f48cbe48c49ffff001d23c41190","01000000f5f0dfe4306c031914ba64152a34defd5f071c28079eb50a01992b1a00000000ad9fd25e1fced0773d01ea5a77d45f23f2f175abc5c27c4d23228e1a467155ae3fe68c49ffff001d1aae70c9","0100000090634fd674b2562ce56f0af37abaf20c3f8637f5c21c6cc4f10726520000000026346ad8fc0e962613b5b73a02c462bc40673b803216705591f7ce58e079c04d5de68c49ffff001d131a3b00","010000003d4984ca32dcea23c0b9b7dc46b3bae1b1ccf1536509b919103221bf00000000d7762b517c2f984f3ef54fce8558a6691d646dbf639d50d28d89832ae4110128a0e88c49ffff001d1674023d","01000000763fd7604ebbfec8dcf8d9eaf59fea8c13d11996c48c99d2e2e152b500000000636974dd1ed39cf6c2a95b571425827868e726ac2bebce5a93814aa80853963448ed8c49ffff001d19c76b4d","01000000adbb04425779dd13d0169950d367346624bb17b89f8529927939b108000000002e9af2ed84961a1c401b836bab070ab560c6ecc8a9f510bb48a6daa11e9192a158ee8c49ffff001d01ebe002","01000000b37ab46c8cd2fa7650445357d49512570cb550b1d69afd03ddb2949000000000ba3050bb56362ef05275c87c8fb0bac3367f699aaaafdf8bcca990e8cb40ab6c6bf28c49ffff001dc5d89602","010000008aca95df9960987ac1aab96bbef0366801fdbfec4744b28c73f844c5000000002030f5e787abe72102561fed2ae6d06df5936743b52122ebfcb8a4b6687f507bdcf28c49ffff001d2bbf1e36","010000005df2bb403291265886effffcbe5960201a22f704f1d818d3604bffb000000000a6a6cff176359d43cfe23849e96a06f843c61e14183c6e9bb1f06b546e314b3ee2f78c49ffff001d293e37da","01000000863685ebf6a555c5f6e44f7fabdee3e78f0b7b098f71d599e9371f1d00000000b3e00a9a20542cfbafc6268dbd4ea7620af4d05e0a51f183e8a5799c25f164bc52fa8c49ffff001d2f71d014","01000000d759aaed6787f61acba006c7a422d119c87766173466b2fe6467089b000000005b519ee55ea69708ba90745d4102f26944e744329d34c5c4d5409a688d580f0911fc8c49ffff001d03b6f120","0100000049b2ccde77ad4d865d6523e139fb54ee785cacddbbe10f8416360adf000000003301e1428728e0ae945c7d088dd2cc97f61a0509404be10be3edb9853c0d298c3cfe8c49ffff001d37073219","01000000246b4bfac634c2de8ccc37417a1de6a14df7d91fe743e4758b1aec380000000052abbc12604b50190ec85ed96f5e3b60ccbbb8e5f1b3e9f27f53d98c18940a77be008d49ffff001d18985562","01000000f9557573d6161e012634aae6be1b01f6e1ed4952e81c1f980fe557ce0000000042aff07688c93adabb7bd65844d7461eed813437f8d659e2a54cb5670cff93536a028d49ffff001d2bd6c9a6","0100000032ad7a28b892853b9718a2b086d9305dc7662aff83a0b4668ee0fddf00000000c211d2ed99748a3d4c74c1393543fe7ae7d9a262cec6cc91115787d31cc3f4514e048d49ffff001d555af208","010000005875ecbb544fa89d42aa48368d164e5321736725fe9eabd84ac6b99a00000000e3588d20158a152514abc4408cf48c3b092eaf9800f88190ea586118270acd1216078d49ffff001d31f826a1","01000000643c388df7e1cc321a94eb326cfcbe000ebeb836e7ebf57b7e2c3596000000000bb798bdb7790671cdc3ae4b408e85c2c4436d2430967c7034f51b85eec831ddf70a8d49ffff001d0660ab7b","01000000bc223290c725cfca0e65cc1059a61a5f3e8a61be4a1d87ac9702b71700000000a3c3a0bebc58143680bb98f45d389806f703f756c3c0bd16d6e17e87687b03fe510d8d49ffff001dac403e0b","01000000a7ceb7f4b0a6d3ce2d79d43fe6d331f2ea4597984ea0bfe159bd998600000000de3ede7d96c39f0de6245993cd772f8fbe59091665ed4ad14de8f119bbd9b646450e8d49ffff001d296e8cec","01000000e7035335ebc8d8273dd2bb0ef79f63bd90a919a8a708c4d7e817955100000000dad880981eade5b1050924d0fded83f183ba6f1280234d16514832c734f3be5350108d49ffff001d23bbb8c5","01000000880b2c9060e793a15b2b7fea02f046118fd1173d0d25737c45a5b5050000000060a8365fa5c6b1d046e54ca3754528013e30d61a6d9f4fc4ee9a7d8f9e57bab9cf118d49ffff001d1a44e86b","010000006b53fddb53c832d8cea16620f28db9abb3d608810a0febfa380cb19600000000903caa0ab1e357c556b52b67856a2f61253c1f3c36d3fe64e019d711117863df5c138d49ffff001d222291bd","0100000000316980a1d69886ee2ab8b9d787fcdab8cedfd54b2e133d62169ab5000000008a9b4a00e0e4a8da260d6a376e659ed85d35c396dcd0aaabd450096f38bd1679f1148d49ffff001d4c700503","01000000d3a36f09f69f38c14ed9c1c935367ced9fea757b225b2cfa417037b0000000007e032c0dc2da1f04241ad72d7d9e8bd0e964830e3ee331ff90b20b0ede8b0c6942178d49ffff001d1729a0c6","01000000d633211529d07a7aa2173c168a03bece9c31c9abc049e124c09e022000000000884fd97797347a029ed20ec1d1106b991937c27c1da5a54ce2455ad38a9ccd04f1188d49ffff001d298c8169","01000000bb1dc3d66f822bd26c06e79a865824ee271546684706af85ad8dd73a000000003aa0d911b05c2766a4b7eddb6b65e9877c527355440ed4e318f0bd3dac4663693a1b8d49ffff001d6e1c9e0a","0100000013406f22305a1cd44425e9caa2d07554a307048b5a647b802a0599c700000000d97f551ac96c3ae640e38355b784dca4c75a6f6de2ec8f8b7b2421e265f78974881d8d49ffff001d2d984b99","010000004819278a7710f7bbe9e0719636c1ff9085567ef4f72aba415e4df5ef00000000193abadeaca69f91337dd61d53eacb1b278726eb71470caa6ee1bd1f8c4b76fcb31d8d49ffff001d3f927700","01000000d5a57536647f1041e51d7e0ea4cf891d3bea6dd8bff0a6c3c78b58f200000000b4f64579d6be536f40556abcca3a994e3b9758d68e9945f8575762db6df693d067238d49ffff001d0270b378","01000000c2db44a2ef39492d969a532031e8540408b757c733b1e60cd8f3ac0f0000000022f20ef4692dffc7a30da0e028dcaf759f0efbbb84ab10136dd132302ec27e1a50278d49ffff001d2f1e2c4b","010000006e6f8f3a96a03968006adc01d5533fbdf818667b8452ace8ccf435000000000066019fab68e359aa3a7a624a472d55f418360d18e3bd8b734f639367cfd012c969288d49ffff001db67ead02","010000004e4e2714cd944da02156902411074a02f701b486b4557149897ee78e00000000ede2fd1ef59b8c0e6b4c85c0eba6cda6b70e9adb8b9846b13bbbe677442a473cc6298d49ffff001d18f85d67","01000000b533c41a46ea54f7485259e3926424bbb521210ce4ff37163723dd29000000003f3274e944279d64adf4fde001689268ef74f56aaadd96d30697d53ee219318ded2c8d49ffff001d2dc0f6ee","01000000a38dd89681f01943e59249b105d96b489162fd10addddb4661e592c700000000e8cf212b9ba7bcb2d16d48d417bab5e1088156728ba0d5709a0bbff5c9911757fa2c8d49ffff001dfd432f00","010000009efc44e423ed8a7a1de217e184fcb7c4be39ef2f6cf1b9bdd7d2c01200000000b5e246396f146c573ce268dd95424a0b82bd0a9846c8c63544363daf1f62874088318d49ffff001d392c52a0","01000000397c3c36799979756669a7d0579155ebe7d960d83563b45d073cc13c00000000050c437c546459161a2a932e714845b686bfc20cbb27aeb695548a3df82940f59e328d49ffff001d743d3d04","01000000a2a87d8636b3e9080c6a2aafaa26f91e547df28fb2d28cf0c41001320000000015643e8631dc5b0b668cd8c8cec3c7f1f4a4a66dc5d12691d41f644048e3ef6d27378d49ffff001d18558d56","010000009a837ef0bd50cbc0b7307b89aab3cd99a5b888099fea09522b02d29c000000005619da09b64c6447b2cf10f68e8817b9d2cf810da706a54460b1c06954b9da437e3c8d49ffff001d065adebc","010000008de2d1cee8fcfcaa1b1bf6ea7f7855677e432a71b72a3df142786c8c00000000937891e3412c11caa1affcb5c3497dbee16fec32da313630b401857fe48b0d98673e8d49ffff001d223b45c1","0100000095e910fa6281db282fbc8bc84ff006487c90d538368dca6b1790d607000000004cc2c173e19215b5439e1efda0fb0bf3c852d0cc9042e59475f51c38ec8b9581a5448d49ffff001d2f5376e8","01000000605a0593b6da5b8a24fbe783e2bf3c36fba5fd9cfb3d32d73c7dd2ff00000000bb063171b99224a85d0279344ea7374e9801f4d2e4793b412a7250d4635f0d1847488d49ffff001d29ac4efc","010000007b56e1a677b0a676007e87fdfd427443dd30e6c2a6096a28809a765f00000000ebc674d24a5be4859195eedd35c7d777492b702fbfba5a5ec1f21a4181dcf4d8634d8d49ffff001d23695c6a","010000004abec4f345b594215ff51f4ad87ae1f0859ca214e2bf9d9d234210d50000000045fb00f60a48c6e00f62529a02cf7a748ff496ae1ce859ce8da991274cd4c7e928528d49ffff001d3292f268","010000003c743710b440d14f958cc28314d3be74d59435de8d21dfbf340ac710000000001b0426cd081d781046deabf67082014064a3230602609b53a0bc0cf9882a5719bf578d49ffff001d377de79f","010000009c6a3e6530fb38dc93f2f94e75f33bdca2b3c0cb1d8b4f7d7bffe4cd00000000b031a18196d8931fdc6ab853166bea286c6d2a8cd2e3a8bc70d30b68d63c85c4ea5b8d49ffff001d29504e1b","01000000bb602ff1d6571c91a97f3cbf8a27bc55ee8683ffec6522de1437668f000000000e2ed7034c3834fa26e94fd6b971e5c30bc8a374bb7fb0c8b2559d36ac04efe65b5d8d49ffff001dba895504","010000002e8a864c46278bd560f03eb0222dc8c162a05d3617aade28db52e56b00000000190e6fff944916845a85344a144a5cd947cd874e83c7a74b1df34031b9c71b07a0618d49ffff001d081bcb71","0100000071faf57097b3b9f1866ec670f4d4feb1071d6775b7b15fc96caa774e000000005afe148bfb5d3c32ac5ea08d0b654268b484a884e6f298e57d5642c9cf4c4b28f2628d49ffff001d3cbbce00","01000000c02c060ff577374818e7cf0400ebee3733016687b1f83808abec31e600000000cf39e854f9fd96abcee3ace1b47389cc7260a1d9fee66a12a58d75cc6b999f2394648d49ffff001d26ecb8b6","010000006400687f75b2d078848f0c6a4fe6afb7d6e3c6089f87e30aa4bec4240000000011574fe33d1cc5baa38d76dc0a81d2b990ee57df38adf8c2c7065b0098679ec020658d49ffff001d1ab89601","01000000bba8f95c66d2ad4c3ae8a03b0917ecb50e92bfbeae4aa0659a1eba910000000042def98f23388f4125b4b1b40be7501f49818ff2f1266fecf6b861f947bc56b6f4688d49ffff001d204ca709","01000000c001aa162f46a5f8a13b761c9ce1dcfff79578a43c918165a9433f3c0000000044af6449762922b9317a4a9a3c635275382d57391b0d6cddfb0df37c213b859ab06e8d49ffff001d204ff120","0100000068749b7b8a86d7f4e84d7b545e5e74b8a9d5bc0b25691eeeec5d5bf8000000006a4593f676ee1fcd48bc55d8f3f38da3d05e2acf336acd138610ba681e49308ded708d49ffff001d2a15ba69","0100000047993521ac6347380e9c00e2941795fbf06b2a007a1c9b12096239de000000009a65b048ddd377177dd43f36dc79332cea3997c4b2f1b5a88c645ce7b8b2eac4d0738d49ffff001d1575161a","01000000ecfaaa53882ba34932228294a301a0397df50c22f002c5dfb5e92cd700000000c216db55fe6c1bb3675a43e396785347fad719141d63d3b8a5a1a8e6153799d4bd778d49ffff001d19ff7fba","0100000068619dc7c7b5cef8a89941be25afbffa53410affcd78bbd8cfaf0a0300000000494275b288d2946a79c0593b4b303c964b757e7b3c3755e031baf1ceb540d08754788d49ffff001dbdc5a502","01000000c8bb3c9a97d2a3a1e8bde88085067f1f7c8a6cc7a025f06731c9bf63000000006708a8c19b2fa7ae27bbeec898175f6ddb6d4b2a988f2565d2f53b311dfaf85ec5788d49ffff001d381f5801","01000000ccf95a94a5943347f1c66f52ab1e7f5c856af89af4e50dad54b42571000000006465af44f8d96ef99a3173f4f6376099a5d03f632cf26a817714cf48c332ed5ccd798d49ffff001d30613140","01000000f09674090354a7a09d75bfaa9f3d3c4b42ce8e5cabf33de756af03c700000000daadaa4b47124495169be2455834c6f8a6faf010ab03639a58e384d1a7b251d7407e8d49ffff001d2f42973c","0100000061faa071b8fcb3e76c317a03bf55eabceed0901bf865ada7824073a000000000db649477d09f325fccf5f7af1f67afbdfa1e8acdac22ec7cd1aa052f7387aac1477f8d49ffff001da5792403","010000009d2a87710a4b9021b27f66ff7df3592d5e34e0973b795ce12f9a2f0f0000000064d161aab13ad4c1d47973700481640eda1b8f681aaba949a67d59c440de0dab0e818d49ffff001d59e65a06","010000008d8a4df1f1ba81c06de594be63d136837756051dbc6043dcef08b52900000000f11bc44fd30fdceeb71a8e67fbfbf569af4d11fb3f142691bb538bf9a25f799946848d49ffff001d279d505b","010000002c61f0f0eadea15552ba14052cb513f7d006e296f159ad5c9ce9d6f400000000a8fb47760e9b0ba66b00119fb9a4f6968110ff9cd76410114126c4347b1a54f4d4858d49ffff001d36845d3c","010000000552b33f54623d0ce749374eed3426fc8e5cb2800494d3374a4443c8000000005f957ac090317d6ca92d43764d6f0df436c97ffcd3b710e7bb9ec33f73ce6b0b078b8d49ffff001d216dbf2f","0100000010fd73ddcc53627d8a1f7a7631d9dab563c36746889c46761069d1cd00000000c4b2796f6ab318edea30f50a53290fce1ab789dbd693440c94526828aa4cdeecd18d8d49ffff001dc9486808","01000000d4c907eaf310f9e56064ea2b5f93d55c56c83dd020f84be80e9959f800000000badb6314b649ec98110a4e10c9d96fce6afb14add53a24379e64fc9f0e626480e2908d49ffff001d290936f1","0100000077e962ad6059cafc8121c3f78ddc9a0ad3950dbea376a6ca8d800ddf0000000083b25443fe2c2072c2d5aef93acd1c9010a2980aa4055bb069ef6b0ae921ea0389958d49ffff001d368dfe67","01000000df20087f64a4781c13ed73b277a8a32797f5d99091b14fb54e09f6bc0000000041d35b97605e0ca1a9ac6d0af09e0dcb9698835b939b77465d21b6413b7c5d4da8958d49ffff001de9162100","0100000000a42cf12ad13e6954d2e8a9bedcbb23e00ff30cb71ac4c58c11a38b000000008b7fe67ebcbfbf15b3d5e0be0517d8824f5ac29ef1a2ca83af9323bba6a08a9f99978d49ffff001d215ba616","01000000a490c2fa35ed74366917c7fb31ac9f244871725421482538998aa96000000000ee53a598cbd5301affd065161f4ba1e4b1d343220ca75c151d403be9ce992bc7069d8d49ffff001d15af5dda","010000009a071ce8ffdd7a52ef548ae957d1a6c4209960a7c39d919e1aae69930000000028ec5d8f21a04d4d4c7b5b197629c90928948a234a45dd914f52ea7dfc82a3ee059e8d49ffff001d97dda604","01000000b6c764b1e0eb86e2ca15f4c0ca26a3491719a106e54fa09974772db4000000005403e87adf0fb3b37293be6cc403c80acd6ceb399fb78560adcbe81f5812a498c89e8d49ffff001d282feac6","010000009778e190f32a7def6e878e2b05d747ac085fc755494a0750e99d6bb600000000a962c1da58e7a49d7551f3af0bbf9be3a188550e73edabe777126922b9c4442d1ba38d49ffff001d28e5616a","010000000c61494dd84924a5cd8c3c821ae4de1af4ebc5642fb505e891e1edf000000000f80e2bb25b2f97dcec4fdf2929a4b6f7a4c3fce046b6d9a7fe357170fea71436b2a38d49ffff001db48d8700","01000000c29b0ea3a670efccf8a9f4a682f69b9be6336bfe8dc1671f8a2a9e8d000000000926f3c0ea377398a3cb53086d2017bf472c9defd49b7276659d2ee92fef530fbfa58d49ffff001d30e28b9d","01000000af132a5051be48e33f376b31648a2d36138038eb8eccf61b276f621400000000756dd9c8ef3ccce01fecdfcafadb1879f8c11ade89c00fdae6fe4c11a415652d45a78d49ffff001d6f972107","01000000532cb9d3ec39a5520d2a21ad47576e1a4fb3e12c5d6e57c28ec01448000000003208e38ae927c095ccca27f6fba1855db4f60565049b2057cc0b5ccc74b7d6c87fa98d49ffff001d14cad635","0100000078f5994f6e609648523b16f03c2a571af889fee28cc273f7dc7cb6d200000000bfcab00824457f2aa6d64797ac68f80e1e3d169f9007da424b1cda7a868d82fef7ae8d49ffff001d3423b704","01000000ebb617ce38a34ad777b12b6f76cca4852e4dec320aa372da2097d87c00000000a76a9310820beffbc9afbd5e3da8cdd650ec4025387fcc9a55e76d4e6d147332c5b28d49ffff001d267ad982","0100000052e617564a9ae01e7528b451f819799ee46c99d20286d2eda75569d8000000007398ce6cee01c80ef8879a261d7b4e7d48375352fc156eaf79ee0cbf0e42421079b78d49ffff001d3a3164df","01000000ca73d8a5fb10355813fb11a0207eb26832fb7bc82e2e05357b481847000000001198d3ee31e192fb732238f3fb7eb0b2df158f96f5247b6607a48893cf125f67e0b78d49ffff001d62ea7801","01000000f4495b88cf91f588dce4d8dd7fc303f28158ddaf3368ff5b174561c00000000065263d08d3eec7981aa306de7ab8780c4a41d9ab14ff117f154ce2bf5b68ab261bbb8d49ffff001d2c414c5c","01000000940c9583cb801c2be5fa4391da6c4bc99397c85e903c5b1013c18cc800000000f6d495c346df56a71e1fa52fafd3d501f7c2934f1fd1c128af81f5f9f576ce4520bc8d49ffff001d00d26e04","0100000085e8d92922648b206ed0c8a270bdb9a8fc38a619b1f78327304f9ef000000000a855037f98b3bf7d252eb07cfc31dab179154b1b1a25595815396681954ba77f49bd8d49ffff001d157dd1ee","0100000007c1e4ed03d4afa96d45a8f4fdac7b8df1146cdca8d5dc2defe4e3220000000046be7227dc4899e7ce888995a6a58c34c0f707435ddbd22302e222fce4ff3d2a2bc38d49ffff001d3a6d4976","0100000032ab7793023480c9c3888f27dad862dc1a7706951d68266f72d7fc8700000000a79bab86157c0198f97093582c659b2b6e8ecac1d3db0f76df291b7f616e004860c88d49ffff001d354a16b0","010000004fee2de906e35d74b4884a9a94817240fa9469a738fe195b12dcca450000000085378a1741770e3fcb0cfa36150c216adf77def0c6bb413eb80690a6aa296f0ce3c88d49ffff001d8e97a301","010000004dd2d3888b623682013025b59f5cd1eff42dc46968bfd0f59396101100000000f016b3c9cb86ae213b8cc0fa3258e537445b3205e643e01ad57083f36fb77ef3faca8d49ffff001d358a9f10","01000000479163c9d613d4f7090e068d9a9e010ea967bc385807d21bf4d3803200000000179c087a1ca53d353faf6271202db46cda1c829152ece5aa381e74ba3ea4283bcad08d49ffff001d096cd29b","01000000003014bd834f8b3e04733525b966d6e30dae255599f97c64c95d5a1400000000720dc15e49a43a7eb05db2d09eacc9c100df15d5f64b1985afe40e470d33add941d48d49ffff001ddabc7709","01000000661433ade57f731a35b73a528bde4a7701f217442869fcd5a810d9dd000000002188a722f48f1463beb93b296e0a5bbb3031cb71f624e1114dcf2996768ebe9435d58d49ffff001d13484d04","01000000611f3a7bca614d03cc3b249a66aa81a97b6ac741ed5a74a6622afc33000000005f394d6612195e36f443bfde10d93d2b8b6d06c6890700b09087cf47afa82d60afd68d49ffff001d1c31c1ed","01000000f77e89d28f2e0f8eb50f327be990513ab67a4f165342ab154ab8c85300000000ebeb368fb4ccefc403ba776962b9db0fe98c96e2172b05b5cb13496f108649c13ad98d49ffff001d2b75aab7","01000000a3fe9dc58efbbb94c15e07230bd488e9b6e2ba8bdffdaec179a665fa0000000019413ea953ca4fdfc53003d973b8461ddb5d437eee0ff4972ec7342e95fab8e83edc8d49ffff001d24c42ece","01000000b785fb7c511e244c7bea483ae33aab562762a07ee364421b979e635c00000000e1ad78f2c8f04c124ba28d27769bcb311e0f4aada604aebf735ded89f5c19b0f47e28d49ffff001d1453e872","01000000fdac151dd00e8c8f7b12b878fd0a257c5bcf664fead0046f8a8e73fb00000000ac45dbbe1550b15ab917dba695be8aa9789956ef9070260f40af402b9392f1a593e58d49ffff001dd7dc8a04","010000002b0a9906e6f23e112d33469d054e06d5a44a62d57bc16a77f848b80c000000000e303651c8a1e6ecd7b5fcace1b0e045925aad4c8a7fe4d1b0772cb449a4b50e3ee68d49ffff001db2a92f03","01000000386e71e0d05116a674baf8f9dc54d7375ffccfc2e7335941be9500d7000000001c585b5e1afbca075e5e978d11006f6694ab363f1ee2684065473500850d552680e68d49ffff001da37b7001","010000009cf13b00c4d8601998803daf6ba7493b0bd50fed3fb384acb67c83b7000000007d577615c704967e1da0eb695454a71d99ac268febfcc5136df6214ea8a6cc4c32e88d49ffff001dfa7ab500","0100000082b56ec1ac3283340b242bd669399e67c72cd350b42530a69a586dd600000000fe7a3f532380e5ae6167908e793efe2235a76bce831d843ea53476b451225be40bee8d49ffff001d1e538a70","0100000057a9bb03367964a3cca43efd33c5302736bf08527c439386c11c64b6000000009155c50420927888ad780b5b72ce75cf3b09f6935cc8586105c4103e79eaaa311ef28d49ffff001d19d54b1c","0100000009fee4cb067b6d661d68606bfe6a34b771a1fa75b0bdddb7df0dc960000000000a9ec345388699040e154d2d3fe6e05f1f3654f3cc555f3b04f1bc02d5a472a467f48d49ffff001d25532017","01000000a7e3ff9f58b9af2eb4d008598fbefb122f326c8babe843c2274c49180000000031a4b9be564af21b5a709e46d9b0702792bf89d7b3f649e8e11996aa2381b8cf7bf98d49ffff001d39976623","010000004df5a21fa5f59db1e8b4a4b747d398ddc5d9ef1252d4b923ff77b5b70000000085b6c6723b8e3ca2f015adb6271c220b9763dfebc607f993b310988c00f8d06eb6f98d49ffff001de9cb3c00","01000000fc8cd7915c7f1b384d06c283d1269a32c70d9f3ba06aafebec8cbfa300000000362ad6e1bc649e277519e9d177770ed85d4afd9e498a5a94c1ea3b0218b6f056bbfd8d49ffff001d041c16b2","01000000f026cfa41e6abf9859c8b64fdc7d6481dd196a59111b78d229a223de0000000019b2600f2d1d455788c54428b2a1731e7e43388ca0412bbd40ae5c82b04f9e27b0fe8d49ffff001d7a248b01","0100000052a173ec5d6f9114591a5616b04d68ad8eefd588bc1ba0855b0cf1520000000086f58a8d557d10379de543f2f2407963d8bcd8e5070432a511d5db8c5fa57a9dd8fe8d49ffff001d220f8600","01000000e48cd5b6e11a4b21dcc1bc57912c12391b32510f19ef6e309828be54000000001ad6824c92f33c8fcf378e7050188ca0ea18e0b4affd4c4f4a255ceac1a33d6672018e49ffff001d287b0eb1","01000000c2558c422a161c92d27e866cf81c15d224b47dcdee0c53bb1cfa8e390000000007416de89168c7b2485271eb1fceeafb55a157070c5258848ec22397ce766e2e09058e49ffff001db45c7010","0100000036787a43dc119c434cd0427044a40b022f324a7317f4b18f47f5a36a0000000089c47c20aec4ea3f530107005c3bdfa0b75a658f13e2f6efd6b8f55df0e0b02c70058e49ffff001d2a4a8dbb","0100000097a94d66eea460bf80c5a8c197d00aeff0b4a1a78d0a25615883862f0000000066d0bd60f49a62d89c792a0281cf41f6c752336d5405aab1190f6d9ed0a69cb8790a8e49ffff001d046c76c8","01000000c044177e24f4e2999ecac58a7d748dbed23696f4575dc1c40cdb83fb000000008384f1535f42223d5afce043270100cc777becc513efead32af46a9fdfda5cb2af0c8e49ffff001d27ebebf3","010000000cd2f77ce61f9d057f8f57a45d864cba3ae85de094000e31df3bb5fe0000000048d3ae88eb73b9b35c1dd0a0da6411c16225b57eb0c15c36b435ba871c83bf28be108e49ffff001d4bb7ac05","010000009442ec06a831f026d29eb65705ac08ffd09b0540e858acd2e41f504a00000000f708566275e8155b86f41d2fdf7a373f934cb92fa7718db2cef1bbb187f504f84d128e49ffff001d1e465af8","01000000d9029ced40210039b5d86e6f38ab7e3aba1157010d2dc161aed12b1b00000000f67768b2b2ade5d6f3d72bf550f822000db29322e5fd0aebe43cae71ef2e1c4451168e49ffff001d1f3fd4cc","01000000fe33e2f3bbdb00341fb82347643b9a778fcc908b370e65e5921b1f2600000000164b4d52ddec638f73a41549257308eabbf6a832a250c3346dc4d0e2da5d931f6e178e49ffff001d7f0c0405","01000000a79cad48c37b3b43390f926a9646a4a0fae06354823d3e41faf4f94e000000002bf43c4d8f88a8ccddda137b28de18dec8f809f76ce914df663fbe6cfb0d9d10ab1b8e49ffff001d14a908a7","010000008f5dddd9b89cc283f334f90dc967d526588b7d8bfa3860997f72050e000000003ecd11fe558350a3f9d97d861c2d79097dea114b158f089b151387526ca7a04a301e8e49ffff001d02021a01","0100000085418b3bc559a2ffd4d9ad29a2b1a81e6cba89c2e71693bfe58f55a200000000673948d669c7fdaca7e73fa3be49a5dab587cfcc6d70003b7fbf983f59640e2ee31e8e49ffff001d2b5d5403","010000000cface5cd424e14075329ea38f91d8f6d0078d212b522701aa4f146c000000006e66fc73ec9f741303cbffcdfb922e25b5cf2877a8fa10a3e0cc742f29ca3b4c6b218e49ffff001d36fe6fbe","0100000077cde4c357ea376a9d2fa8865e3ddfb0933ef16033a67e730612e57a0000000018cae2a80db9f5dd87c558a0409171caa032a63edc508e79dbe66c30e8ced3ef20268e49ffff001d3280833d","01000000ed7c2c4a08fd110443c9c591a166f1cf2372afe4cdf3822d8a58c2eb0000000051b75163dc6eadb0dd46622447ede1521592926ea4062855eda2a4fb81791f1a492a8e49ffff001d3281c008","01000000357f9cebe46b2dd64b2111bcdf4b090040eb797596ca6eee3170fdc2000000009b015141b32b1a21ad389c980dc84f3446d5db3cf4cea899987963c6c4a01e7aea2d8e49ffff001d2f7bb640","0100000048859801ae76e13c89c00d14d50ecf88343bc1d1b00cf1706c6682620000000064f32013d3d73dd53336e08638f1d4c4dd525e54d52cf4f594586fed52841ef797318e49ffff001d3a304a22","010000006a17e938f23aa45e319f6b5e964ff10ed00ad10ec1ddf7ef3c50fe210000000056ee82a45f5572661833d358250e1853ab20aeb1e767f0fd23074d7d4533671670328e49ffff001dea37db03","010000002aa54f843c0371adcddd811022bb2d4537951345c5d867b6d41dd74c00000000df755593af06e2d4f8ea2a06bb410c31e0953751d54122ecaec9c34e1a3878a0c2348e49ffff001d6f18b206","01000000da3e5af8c0ceb3fb5acf8b0b036f8f2081521b21b9b4cdc63a8522510000000041ac63ebc89d96028ced428900af836b67ed1a6022e005600a8fc97a3808721d6a368e49ffff001d1d38a8f2","0100000023079548389906184c8906501a4fd94ee9548808a29dc7305bb84029000000005c14abad3279500b6063b03f4bc2681b135bedfea98d256128d882b03eec901e29378e49ffff001d6e1c3604","01000000d98b1cf6d8a3f72bca8177fb77d1bc7a9a36c9cc0c210b72c79d9e450000000046cb02f83a57eb05fe68324f51db8d30d72321b5f17d24dbd365a0155fe018c79a398e49ffff001d329e3bbe","01000000253ab38307b86db22ffb5f91b99ad2fa2e226eb277ea005acaad22af000000004305ccd66eda980c1cd5d08767de2ad49e0a188af0ff89e5904ba57ee2ce1fc0ab3b8e49ffff001d1c86d091","010000009d6a9589137c7029d4393949eafe3369960f2f1b9e4f0ba58291a5a200000000cd3a7059424293e2bbda87a8ee5d489c7a59df8f77f8531bc8348fe14b33c7ba1d3f8e49ffff001d31ef6ad5","01000000c41c4e59dd1cea671fc232bd250add7aaacaa17bbc9036c445d6500100000000031b58d76fa48f5d742bee8fcddbccf18d58f5c5cf7ca6656a07488fcb9d19731d428e49ffff001d2c9e278e","0100000021ddad62115c513f97dba93d83f4358cfd558e1d9b64d9075184972900000000056d09e0fc16ed6efafaca19c313ff9be0bc2d832ef57cb6b197ac63dac6a01fed458e49ffff001d2a2d0689","0100000050ec113567b34437ea99d1a2a4120ed1bd52ae33f806b822470245330000000026d2ecb464d4fb0aa8966c8bb6e72b3b7d595b5a3f3a78271b7f4d79636e7170584b8e49ffff001d1f67b74d","010000001fab18090a0100668d3de0b0b2424bd2f931e0164687d077234ddd2b00000000349ca4021e76a2e468c21c7f71b42cc79d424ff6ea951f754774718f7d671d78424d8e49ffff001df3543c09","010000001f6b2fa9b5ab406d0d1d11a22c8b9954c4f965a38ebd820f54f8bb3700000000f2a44cea81e876b8adc93ec52301b9b5fecde4011b2e2680a5668f60cf97400b334f8e49ffff001d23422f33","01000000cafff4fc209284ba69b3ba48af9996b0e8e7c76f36baf9d049de47840000000060193f172b245086b54a9c75c28c2f15c4a9f3ae2b202d4854678a5eb2b1aad0ca548e49ffff001d29113228","0100000020302523296c552a29856ff2383b66522be69965ab50237be311005c0000000025755cd9389c7ccde8240a564a69ed8ff9beb7b3e800ca0812112de62c156c7519598e49ffff001d4e3f1c15","0100000034ecdb1504a6b05cb1e3c4c5564f41a141a3b6d5390cc5794af305820000000076ffbaad619f55a4ed47ad91fff95bf54aea564f5267ad192bf307b96fc5962e3f5a8e49ffff001d1076ac04","010000000c01ea1671c7956cafd29e2dac3899488116fb1963bcb757e2030c6100000000bd92edb6d245c010b94eae88c10e49b15fc91702dda7392a35ca97676fce2d2da25a8e49ffff001d21208ab6","01000000d344e9e90999e74ae428445ea7de82814048fcd5b6572f0145340bb40000000054e46dd219bf6512731f6eb978f159f4faf1c6862da2c02192a789080aa44903725d8e49ffff001d3a210be8","010000002a4883ad9fd4486882848f109991b7f7a6582323f669aaadee0071d7000000006aa1f029ba2ed74b7b337dd3b9cdc8060b0e8abeeda7ad079bd26d842c2045650d5f8e49ffff001d10ddb107","010000004371e7a1fcee202ffdc52c36095faa34194be8226849eb7e68e1966f0000000049ef3c8b92bf0a4bb9e0097387bf83af646f159d1c80abe911f97f9cf26a3bdd11638e49ffff001d09b41680","0100000081bdda3e5ff1e790e5407558c4fbd8f37ba0b129ae6383953e2dd802000000002bd11c8f92b95d5ca49919b4a100ee80a87d9ada63a51bb22b643e701d95aeaee9648e49ffff001da76dd608","010000001e1ef64420d4cd3ec7c5e1df8db6dbfad9b7d94355fadc52edb23908000000002a794051b5eb6cd2d1b333783b8ea4e59ef058c6b0bf64e979bff24010089f184e658e49ffff001d2dbb8191","010000003e5f6401ae81a5c2c461b44eb5abaefdd4b435e6b6dcecfe19b418ad0000000074015ece018b39bb04bb3fc48f20a5cb731764e28ca7a6aaaee0a35a6d85ba8cb6668e49ffff001d1ff37a08","0100000048b2fd092d66bb48106ed810ab65d79dc735321dbe2fb73537c699fe00000000470422ec27970d4389d7e6dfc834294063eec649e502457a0427d8b83e73dce2e1688e49ffff001d36afca6f","010000007577555e105d4383ad37e6cc066ed0d797ae3294e1e6cc0249d9b46d000000002e014872244e9fd010c862ed1ea967b80fa57b1db7aa06e25ee260a885f9fe01d26b8e49ffff001d37f70149","01000000e87ef83a25608e1f9e901973dea8bd84e3db859c202b3c69e0ad9ff100000000a74d0e562aabdd84f30fc2eb6cd4df57848293ddde6a661ac3200d52cc565e707a6d8e49ffff001d1927a7ae","01000000dcfc1fbc450044ab97c3f077e2bb8c96983a1f249b696b008eea80cb000000006c60c9af421f1c36e8a3bfa42c2d1e2de1fb500afbd8d6367b762ee9cda44758d56e8e49ffff001df967c503","01000000940f8bb85b1a74e5b3be9b640712c2047bca48368883d7a3652b16df00000000291256aeb6456690bdd0ed38ea79fecf326e11f4674e4c23335044f08f08ff57716f8e49ffff001d9420e402","010000006ae020239265973db74f210167b28bdc3b97783c785760fc5253ff4e00000000aa699f59898607fc7b2cee1f36f99559a0dd6fcfb2bd2cc53909a526204d2952d5718e49ffff001d1cc2f3e8","01000000497ac49bbc359773dd97f226a5e122194ffd8852f0adcf263cbce93300000000da07d487baa62fe642a8da58a9ac8b69462bca180f86a794edaac87feb0a6167eb768e49ffff001d2208ce34","01000000cfacf444579e3f67f2c438999bc3bb842e0b8e60cd6f6cb4d10e0bc0000000002b37c4d5a82015ef035fbe287063705114790bd5a8ffe15b31c6e75453a4d0ce37798e49ffff001d26a9b2a1","010000009650e7c3c8ad5d3843c8f9ab9b3b18ade4e23142ff8231aef332543200000000d962f96b2591dbde4623f29828f2353eaf7ad1718f1823db4ad9004e9827fc7cf07b8e49ffff001d1cdd4bff","010000003b2694d2f70a1fce31ea62fa4fc9bb1d72605b02b824ee3f1744965200000000ffe4695f7c41e51bc310ff1f0b6072ecf67f1984ce3365a30a5c1e2e88406991bc7f8e49ffff001de3d04e0b","01000000c3711784c0ea6a4f70d31c0cd45df57f05d1ba53e9e035183dedf82000000000697fd74ade779251347792eb3a4037e0531d6640796818c77cf2129eb287556c2d808e49ffff001d02026852","01000000fae07d7437f5108bc788831319c7b92461052bac6acc7692f1d0ca5200000000e7786327c053c6e6c2fe584c5b9e2bcc964470f67240ac0536a065363fa90b4047808e49ffff001d9f273900","01000000948486177215b0b45eb4c46680f936f556da5eb48ee0e5d0326f5d0e00000000c1981eccd83a5bdaefcbfaad34e1b1a2ea478c63b3b842a1b4e59c6a5ba7589243838e49ffff001d017f32f4","010000006b59fddad4afdfc8a866a24034a8f5f843261e780f12ed91a9f3536b0000000003b678bca7516bf0defe34dff3e2cd8701cad5ff05519409cc18f122dcfaffc8cf858e49ffff001d3895cd7f","01000000d001d1bec0dea06064ed128330b51e619e119aac8e4d7d7e306abb97000000001849b36c156578d4af08aa8603829943b53bda3cbc609df80c607847ff07220630878e49ffff001d98057806","0100000073a1bfcf5db3149f8f5b424a4c55ab7a07fd4026114b4e32bab3b2d9000000003cd793e1cc6dd44cfa20255746930788dee042e900a48289a8a2eeea70091376cf898e49ffff001ddaf52e07","01000000a6f366e67ae2a847cb8a94ae76346c18ebefa9f0ef16411def11987d000000005c65c8762d9c485976249170ae361d200d6a67ae1aed58c3cdecb7a21ca2e5195b8b8e49ffff001d24db5518","010000007b0ab0e938aa46dba4b032ec9e156db51fa661abb8cd2d83bf47a06a000000006f4773f11c6d20b72e7f06d4d107afc4bd7892223f2c302948d08f839ffd139b0c918e49ffff001d1751ba17","01000000bd4f961363de9a9ab1fdc06d2d4b0668a8db91eb7a1cf08821d00bee000000009ba51fce3472ed03f55e4ea6a43ce011d0bd89ba84c43466ac2e44e92ec91dea11938e49ffff001d2c69a45b","010000006d1841c9606d101412ffcb206d2de1bb390bd5d902145f49bbe99c4b00000000f32dd96b75dd7053f69c9f2c23802156c20ce18ff893c2ec4773abc5dabc36c2fe948e49ffff001d952c1809","01000000db7091791fdaf3beefeecb0359bdfcb2793816f9c638c3ea774832cc000000008fafcab1f4b9598eb52f367e49dbac19652be3f90c959723518dbdc11c63c6f048968e49ffff001d04d30fc9","01000000638831c64d06a44ce5d8a093992a684382a791a552fb0615582aa00800000000af748d43d5529cbfe3816d0d95b32612ab457459a25bbba4cde668b1616c912690998e49ffff001d19d752d3","01000000043144cf63b4c8acf8a6851c824cb7cfc20ad61b0b54d29532999b81000000002916c309e7f255f61eee5a01c31cfe3de252b9e900ce97c1b8640ed187000547929a8e49ffff001d2d2cf703","01000000c5db6e064a1168b3910c91bd33771f092e3baa732877f5d7c206df4f000000001d2fbef4fbb4ec0f0ba2d6509f96291ec6c84afd7bdff76ed9e57d75916c1aefd29e8e49ffff001d3a379479","01000000c8ef1133cb23be964499a0888f1c56cf6ab0182bacf3c9a939018997000000004d567107731ea9e650ed84274a3e779a869e06afc55a87e466a96a476188b1d646a38e49ffff001d304a5037","010000006af8668b521eb3b6f47e0f539847353d6ab73dc2c3bb40f85a91879200000000eede4bdd7c2792308bcd2fb4016b2da45b57dc4489813da64cf3b5ade429d0a3daa38e49ffff001d3b1d2301","01000000a74e17cd090a07103ae957a5b8f55eb53ae705915a4007642372803000000000984954603f405fb275c75a1db0628020bd8ac3077808af3969caaff956758bbfa9a48e49ffff001d1c21ed03","010000005987d309ac2bee62b5834f736ab4e1b06dc428a0e40ab2713312590300000000a8b13159366e3f67d9155f2d48cbc2ad6fe4e3c8346d79cf53b4fe010e7ae0d909a58e49ffff001d1cd333d9","0100000018997398724b0d45d99ed923a21f87beaef17cfb07480d957a43c96a000000001dbb1e078d77fc90b79b1ae1a3c82a8c5f538ba7ae3c4ff86c4644eb18624c33e5a78e49ffff001d01d12093","01000000d29e4310edd94c00b6e60b5105fd19d3d022ada304aa1cd94a15dad700000000d6067e5daca93e5e1760cc3f0f4d4aaf437ff4721080c43fa90aae5cc408c4bb08ab8e49ffff001dbba45f0f","0100000078f6347870c2d802ad669ffe8d1587c442f65854fcfad33d50793bc3000000005416222ea993e88368343014068918192bc812e38ffdfc04d7a83c3487abb142e3ad8e49ffff001d324b8c62","010000006efc926664d80094cc905df78fb376168ca0c0af149810c05327df2900000000cb08fdceef84fe675529a404ee4927f464161571d53cd962f55c12c2b6d25b64d9ae8e49ffff001d92b8af02","01000000cce20b95b60c25a23612e2d38867b8da8987e96d9f01b54a5fb0d6a700000000ffc1bb638bf3000f9d3e8c6d3f623752a8b3d92a5a2763ca916119f718e1836f85b28e49ffff001d078f1cd7","010000004ab2cc9c1a28107d1a3b44905ed0a8107f752541493ca85b0296c8c4000000008e9fbe66993a1fb3f35b6ffc527db12c65d5178dc0163d88b21071472bbcbfde47b48e49ffff001d2bee5608","01000000304c8c91075523bee2ebc25c834b2698e61ccdd152ded7ffc320369700000000f5a9b49d9b943784f98f21286643583815f2180be9f231b12b6d9a60aef55660c5b48e49ffff001d3f836b01","0100000027f4b92f77bbd8213f311f48c297cde3438b611a28be84fee83cf37800000000b21e6d2fdd7e19f0546ffb9ef446ee11438d240d3973e89f23d2dca66886a9b177b68e49ffff001d093ee830","01000000b6498b00072b65b2fa511de3b81e883a10168cf6d82cea32104384fd00000000b7742efe52cb82e7d50fb0630df2c8a8376080e3f3ec47c44733c27cd6e54cea73b78e49ffff001d682e9504","01000000721065855d7f6b7b3c30e491babf8e70c4426e243ffeaed290b170d80000000001bbe32c38da0d9b3641ce8ee3caf6c2a861deff6b36564d074bac73496384fe0db88e49ffff001d06a4bc7a","01000000513e25745eff309ef13ab11926f2ef60fca0e88e5be4e7d36cb9bf5c00000000499db8093d1de30efc9ba8b73009ac8be9dadf77ed0faad4581305da6f795f9574bc8e49ffff001d27b1ad6e","01000000e4448ea0697e9ca859121dfb89c778c4cd1216588925c3045033746000000000a103d9dc82d667b0f39b34accefca434381bd3f398abc4901de5a3a73f7b4ca87dc08e49ffff001d06e0e09d","01000000fdf448aedf5396f1b1a706df200d386bd6fb6347ad1aea174d1f4ac500000000e2cd8e2a698c240d35640b540272bbb8f8bbcecb6a4bf6d3171f71e3763d5a9d48c68e49ffff001d023340cb","010000003df43b5954836f5e44a1782ed2a37d7117b1568333b822149344042200000000891b4d023ee216ca260707d4b804e62ee417188e49a5b73cbd6ee2aceac5077656c68e49ffff001d6e651000","010000009c11171657dafc6276b216843581f08d37139aff9556052a2596558f00000000fff8ef781e6dd592eabce101f86a7f129c6b811e05cbe5581c6b136ebf9a9247f8c78e49ffff001d3fa11608","01000000b58f9433fc1f2a0ac06f69cef042ad63872cb524a72932e0779a26a900000000c7e00e13f832bad915effdfcd95e11ca68fc5ac0f1d7477b8bf4c7165051bd6d17ca8e49ffff001d1a1e7a78","010000005c200f6105f4f828731701d301968a3b77f6cb98e1c93bbd2955c80e0000000068bd10de526a70187348ba3e37abe7ede3f886426d01048c4f7d643021c5c87034cf8e49ffff001d2519bfa3","0100000069099e7530541fe9c81883cdb979739d567348f6015d659e01d48baf00000000a45dba84de3e42283b23fb05ceaa756065fba7ac9112a8816b63fffbb9ab686e7bd48e49ffff001d1e7d063c","010000000809f1904dc2c44b75124e9a457e34bec4b2b746ff58701e447a77730000000086f438f8f1a3c6f44f713d038453466b36a94ec636731140f39066451f9158e891d78e49ffff001d1ed58cca","01000000c1a89cc9a04f43086c29f7a89951544ba71464b7d1b5e5d35063ae8700000000068d674d689624d17591a1f01e3ac52d07b63147f1c86f6d06984d2c79704d6613db8e49ffff001d143ffd26","01000000f65f9fe527066085ea03ff3f92954a9d17abe890ca71b4b739342f6e00000000110ce085676de93bc29c3df21b5ef6498b0c9808c4d1e9434b8beee81a37c0d54edd8e49ffff001d310469d9","0100000060ce6743114e20bb73aed5e41091358219bc78e959a97afcaccce7f4000000008ebd49baf385bdce1b38afe373c9ef436d840221308992d44c7732fbb4c4c80e9be28e49ffff001d1a7fbb13","01000000289f395739afc727e09b9d7b7c252a69fbb9b17c9ef625e33695ec9600000000de959f79f175395226717909f59d877293aa7e7eb5b77dd4c1a3b8ff0c73875a21e58e49ffff001d69f82c07","010000000e1e42d4b1580dfe41ae22a164746c42c038806e7e0be0ceaffd632d00000000f59d277f64a4a96700e2e91272c603885e9ac68000126308e77f532c023fd49485e68e49ffff001d386b254a","01000000c414b5020ef79cf768f6159eb150adecab30363d924ed88f44f1c31c00000000e6546c04915bc55d1c1f1623d398d2ce2df0009071a58fd3006d93cf4a988a2f6de88e49ffff001d22bd05d3","010000002542deb123fdefd48b0a06fc0b7db8907f837063a76305a59530effc00000000ae1d4c032f4ea7db5fba52f0ca5dfd3249e41a17e506233bc4840b5a9a7d780890ec8e49ffff001d1a5b5cf6","010000004ba482aef3cfaf495953b7f524c8cafc3a58f68bf487253b5a9cd422000000001c757f1f5f858861b3e39441eb37e0562c7221940277b85916ca89eeb27f7049daef8e49ffff001d218d5c0c","0100000094838e15d39a5fb4466361809ef1afcccaac32539df1d1060dfd087f00000000a482f65071ddf0351aee02fdeb6db62ed86dfdab2eda33ea457b7c7757d7e83c23f28e49ffff001dcb1b6201","0100000006bfdd644bcae9f07af3db9c2b620030e64c78656f81c0119c8a6b2e000000004cbdea07156c70554118190963a58b625970d06cf7f9167cf9cadf35c44bcec36ff28e49ffff001d94140101","0100000068e6350e3a10f83f93f7ee2955b0b5815ece5afe5ee7adfc66ab5359000000007f80c0506d1e7d3facacc3f9eea42284bf0393b5b7f1c5bcf15a5002d498103783f28e49ffff001d58544000","0100000014df3874c03199068a11b2a47da93daae39b7ca9ccb7186bb77472e600000000b7a55410bbe6a9f60241566b876f0810d9503c7f01c7b19ddd586419c946d2a47bf38e49ffff001d228c81c2","01000000dcd01616c258a50f9aba7750217ef2f15e3c52b63588b9f89cc4ada400000000e040630bea9877a9ff16e949ff45ceb8e3273402b37f57b5c8d02aaa30bfefe199f88e49ffff001dae22d10d","01000000fc362b191fbe912a92be3187a91ee53e99596379aeea938e2d4df8d90000000002c0318a05f0596ddc1099ee8b020c59321c5b7816a108392ffec484513f2de165f98e49ffff001d3a32a1da","0100000094297560871d47d06e934e674937a0dd4d05f01bff39e4895d124f41000000008ddfb1bf6151d3c690ce1306a909feb1357638d87362c632f627bdf80618b9e6dafc8e49ffff001daa78e409","010000001892e434c8a4d9d4afc5efebd9ea9862e426a9b7216587595e73c7c40000000039c36dd8592c30cd5de2f46e70433c481bcaa6e93ad397336b5c90e3d2cec07c78fe8e49ffff001dd831ed07","010000009607cacdca07a84704ac3c23bdfa82c51e58cb83f64beed14c17b7fb00000000608e5bdf4c9dce6cdd51bc37657cbe1389892b78e3712f0fdd6bff1e9b2c8fe08cff8e49ffff001d19c0f057","01000000c6e4f9c25c4c62c2ade9045705f8ec240b71dbc714679b2e14fcc086000000000817d6d69bf6fcf8fd968b559a7afe8a11777f5fa0e33076b05269e0be78ff3219038f49ffff001d15a55b49","0100000059855c60e321eaa55ab1447f6b25d9d3c90849c87f9fae7851941c7300000000797444f449f7a0b308cda3be70245c505a8f6fd127b3cc5c7495de91762f438ee9068f49ffff001d3a11704b","01000000c083e78849a80f49bbbab4e2c9c4787055ba83791e09db1c91b5cec4000000000aa067b9174b7c5c963d1b59cf2982c16603a85ee47d4a2f12001e8a89e845e01a078f49ffff001d560ebd00","0100000009f2e4fc7acb08e19c2b5302605dfab83cd5ea4f3a85538f3a3b391400000000a03ea85db8c487b43b4a624fba714b49c6f986faf2248a2ae9b60fe940d7dacb9e098f49ffff001dac246006","01000000869d83dd1c0919f80054dde3a9dfebcb1b0549ac3a702c4e1d703bec000000004f16aaf6ad714c6a164f3e786ab26c7a8dbeeece2ecea9d0e9b02d95433308e7510c8f49ffff001d37c5d4b9","01000000c8c9dc2a37cd847b11a4f75c18e14078f033fcdd011e082f048786f400000000047aac7f743b7e2e39df567cdb4c4631773a58910fd1cd0c6b31628eade867789f0e8f49ffff001d15c58565","01000000cb2f84afc0010fa4cd3f779114c8914c26c98e23744e9748a42d180a00000000a721cfd2a6609e41c6537a09b7e7135e0163ff52e9bad4ee8f390861950d817062148f49ffff001d0189c5d6","01000000977d54a01e412bef5c4a16fd98b6309819a75ffba0fb62a195484de000000000c9883e7602af88f5698b56b8c5f819ff9417770ed43aa90c58be777d498ce7804a188f49ffff001d1ee9d305","010000008d3a7efed0b29482cea5914b52ff56a8081d545a0dda30629d9ed782000000003cd5ab693add652290a4c7ef5f30f87f8ffc3865e0a071402c8a37e6c098067acb198f49ffff001d15f5169e","01000000a63958577764461d2acbbdf6a08ac8589370573f6cf869d705cc66b700000000a214b95209cca4b74d92d5b6753b8f9fef441297c87a386b64bba2418765f26fc51e8f49ffff001d24f70314","010000002807095ae8aa79e82e5b607731ac1ede1d7c17eb5fa4dc28dac844be000000002927071de2b29c0ca3a0a65c1f2ba0327604343e9c0b37e21b29b42b6ab7a0e8b0208f49ffff001d30079d02","01000000691289ea57e931d2bba11f3f238763888ad25cc673a2e6812cc42296000000007f121d31b9da2862fd5c179c26f1e6fc5ec58b216e52c9b94e02cc3f0c646f7a1e218f49ffff001d1dd25d56","010000008a0de83d6e34b5003a4f55f363e7946ef2a10ea5d2dda8b92d7848c5000000003eae242c5152865c9baa5cc9f0c529e22f97f1698d8447145dd9f3288e7a413786238f49ffff001de5eb0106","010000003e96daeadc124d44e4c6529aca62db513371403d4d892e6db69b40a500000000db58f9825d9f90124dcfbaf160512e3925f8cfaa15910c5b2ab98f061d525dc29e258f49ffff001d215208b0","01000000fc8daa1511db07d1578633db5d085ff52fffdf27db6e711e69f087520000000078a8d534d2005a418649bed78b45f9f0d7165fe4672c042a7a99855012c2e536dc2b8f49ffff001d309c2d67","0100000099d55c16e0f9d6016eaa9ce4cabf7c9453542e8acf403b0b0b1f89ad000000007b2fdd491fe63d0df8b9fcb9739cc06c9558f1f639c61b47da461d3ffdbfe6a37f2d8f49ffff001d35c5a263","01000000ea630664579f651cb6a5d7f72e9e92a452168edeb7e9907a85ff6b6a000000007c4f87589a8ebc19bd3b96c424d9545f3c52b61c7641375358f856627289e1e4cf318f49ffff001d246e450b","01000000f692a02d820aecc7ff1f1e9403a4fadfdb3f003521fc7be3e702ec8000000000a31a388d6838a4e6178de6668648264d2571d1aaeb2e3931dac91960fad5608bd5358f49ffff001d34b21187","0100000041483735653bee4c97ca84bbb1cbc750a67e60f921bbcdb9a9e2f1d400000000be8463673e19e4674eeefa3f1fde75cc57d49f53823312eb0da06bdf6f9586787b3b8f49ffff001d16afd4cc","010000000efabf92fea4c00ada96cebe2cc7f9a17363ca9556369ed3ee90185200000000f1a34197d2646f69866e7ebe531cf1b3d76f578ff09b550aa1ac1e4edfd83dd25e3d8f49ffff001dc6ee0f05","010000001df5f077a096b2a3e2b2dcc26c74bd9489344e34c827afdb3d74b18a000000007120c0c3708210e3b84c74a0b69fa2d915ea09f1fa5013a701f260ff5abb8c69993d8f49ffff001d3a289d32","01000000ccbb0f6e7e0883514b03e4a9c050a8554cd55ab6849434aa52fa184900000000fbf67cd67b454902b94dbcc0f877abc22c2061240121d4730e4c2001c01094c8cf3f8f49ffff001d12fbe201","01000000fb0ceb7a5ae49195eadcf061e0d21c95479f3f51ae487d042cdda63300000000bc44c4555989fa978b00f931d9b145642895d9f44be23718d9621913da10b00744408f49ffff001def4b4002","010000002c256fcb7eec2b3923bf11779012cda5f6f863c803d9fa11a3e72039000000007305fc684691ebfac4ef8ad6554a02d4f12a55a18fe658025b2aab4aca588228e8428f49ffff001d02372698","01000000059003aed5f3706b08c6dfdea84d90a55ae489aa9369426c24d3777000000000e30253f906110d826b8ed6378a5ce77a55765bbfa5cbbcad1a4946d6ec75331563468f49ffff001dcc8d2c09","01000000881463b8817c22d36f6b50420456cfe1df314f4ded5a90b18fa60a3400000000d7a7c275cffa0cf43bf510227cefa95f9addc512937b0d056c6b90e1d286f830c9468f49ffff001d57a29900","010000009a11870580edb69912c0563d89d2318c7abcac662de18a851bc305bf00000000f09511f51a0a82b8e987e0a7f38343c9abcac32e41ab71f6522652d34b6cfa8f49488f49ffff001d22cbb565","010000007e50e29f470b6f07b99471e2de0909ec75118e2de45afc1958f9a3900000000065f2111789fa39c50b7dfe1f2fa3b338682d657994e3ba57aaf4f41b7ce1143c274a8f49ffff001d231142a9","01000000d6bca61ce10d55e1eceda6c77d2727e7b57be88d07b00fd8434437c50000000065833fbb9abf75203826e8e3fe4f53c2f28ce50bd490c5b5b03506eba9dcdfbd644b8f49ffff001d5dc4c605","010000008a1b477a7cc98534c49e14b956feb8cca6d6e3844c2b25884be5607300000000a0adb76f6d002a28d1f2984819fcc836ad5227ad2310f42fb941a10882381468014c8f49ffff001d2edca1c4","0100000001becd032d0f7167ffe99682f241bd5dadd031baf8aaa7a45643a7930000000050bd7660b509cccdcf704256a86b66aafb5f8443774c8c7f386011ee66cfade95a518f49ffff001d15fb299d","0100000097daad8ff26dc8ad7c255358b8362af82bcacd056f745c9f87f7442700000000479fecce38c228a7a6ff1a40aaea94fce9d840f1d8703640ad3119bf21b7d12835578f49ffff001d00389149","01000000ce80920b1461c7057f4a98bbe8aa31b61180ce7930b12b6c9bea64e5000000006f57d9a50071579452f2db890b9ee4de0eb2b049dc781e0257878318acc02b3ef5588f49ffff001d2f17ff45","010000004d4f5e553c32cddb79b76d77d622e31fa256bbde1d97bca710fdff040000000021893417e6884a32f65acbe34723796728838a45345efa874753b4cab3b3a98d385b8f49ffff001d0fdd1d06","01000000ff02f12595c52012faf8cdaeed43dc3b1756eeca31b7a1351bebf4b100000000707e9428158718f1e5dbc6aa3ecd731912407a206b4ff6c0528d56d6f15c5426b85c8f49ffff001d294c436e","010000009037b447011047c9fe25237e7d2c650cde446b02438e7c772339a1d80000000086a3290cd2708a34f564e8ced2f122acb231081a01a9e2a649f9941123cc1985bf5f8f49ffff001d7191ce0e","01000000f0aa527cd9853b43642856936c556233fd87db09f27272824969204000000000b4cb1795b359435a282dce80dba714c8429c8eb3bb323a0d1fb5b7bd4a0050636a638f49ffff001d15305f5d","0100000023d4a8889541d3ce5ed31aac5002cfae280944f8fc34e0c881c77f0e00000000bad36a777945fbd990dcd1962d59759ab4138736b469c8551b05a46de0898c1d0b698f49ffff001d17be184e","010000002ee3187f3019fdf8edd038b36ad8d3f000471f5bc6d808f51a25b2cd00000000a4f5dfb7827bd516b459ae247e4c0d5be0d495ff77977f28d0f4a318c61027d2926c8f49ffff001da29d8f09","01000000a48b27160968bb02d469e4f9d538ca605d24bc8b529e9d0344b4c730000000004915346a2529587cba142f502b8906494ee1a8b00fa6bbfcc3c72d7f184996bf986e8f49ffff001d35c020d8","01000000f8cd615108a51de46201c3fdbcc326238c3711a2634533cf886acecb0000000067df41fe4036b5faa75ec74f12e700641380308410152bf541701f7bc800e1260e718f49ffff001d88d0b707","010000009c27d91ff93f3be26e6ddbc8c94189fc5ceff2ad0d5b4714c713682b000000008950b5c141186f457400a78e861a8bb978f0deb7752f24e713d119d8dfee913d12738f49ffff001d3482d39c","0100000091e3940649251f69a133de4a49199408acb239a16d241b582976073600000000da0581872a52e8e833b59c8df7384d7a1678831f15612b0ea0edf99176c50fa9d5758f49ffff001d0112044f","0100000070317710d18389e35374d298e2ee41d7841a92fd4777ab3e0cac368a00000000aa9d5f439438b2577670c463dd7f3637a47268e8c5c44c7f77bab6c15fe392be2f7a8f49ffff001d3a846553","01000000eee30270b7fdb711423a466979068b54a9bb46c91e0322dc26eb8ec400000000ec547b6d281590c21520a6b494815fbb1742911ab13b6dce282cefa15513be91a07d8f49ffff001d2e8c3509","01000000648d52f362868c953d09de9c0be0c7e58640369647949b1a899289d700000000a16091332ab2bfca38b7b9c192135228d6fa05d7589d8f2e880fc472049ab798b37f8f49ffff001d153a1584","01000000f7073df5539a7900a0218eab0fea7a5d888ba6cd626bf594b2df9fce000000000c966ec6d5c53a49bacd78e6ad264cc4a82bb1c0fbc0c812966bc3636adbc11fed828f49ffff001d66a0af10","0100000089353b8f1798c67337507f4a5a0e375ce3fbe477e3f433b545c09ed000000000b69c3dea26d22d23f75b3c08b6246ed477ffdfe3642e80e3fd000b7670cc166d79848f49ffff001d2e465af6","01000000f804bc14bfc965e01fd49e65754ed81542594617a28b5ece3722436e0000000023ad2f52c9a80d7ae8307a5c430874655d02fed890db943273fe8d128e925227f9898f49ffff001d3468f61a","01000000cc96d4b99ea2f6fdf0bccada22a188f433ebf0095cc97ed4efd5ad7100000000ad74328f0476cdf55130210b06eabfca699904a55601a7ecfd3ce54cfd16f3664b8d8f49ffff001d2f58fd71","0100000070f2f684de0905b1072dcdbc4618aacdcca966297b956dea6085a272000000007977d2616aad6090d8d6055d5b469a0631e7dbce955b21f6045cfae6d3af331c75928f49ffff001da767001a","010000003c2e6fcfc52ede8b3922ec7d3c532223a99108e9086ac48b2f9b0d5c00000000a6c9f45574fa520d038036421dca99e0029ded20c380eb3da7bc473f0e825cf113938f49ffff001d3354c080","01000000b29f47c79e9331aa4a43b8e297f1a0fc52c7ee8f14c86e01649f0c9c00000000bb9486a6ec8884ccc8a6c2ce8c235869db8f7976e6605382b2fd1b99f6a6f33018948f49ffff001d50742203","010000007c479744186e2937abf0600a78c2f8171515c522157d0319cc819d7b000000006f9a0e600e70852545c06569e70022556f969d18b5ea30b1626ced83ff22e527b9948f49ffff001d01d00237","01000000e4bed68d34f7654a1f2f1789c659dd1dc84580991f1282bce86c527d0000000031ed8050b13d1cf2f701a78f84b8beee2af59cb2cbdc76559c98de6b1c9f07204c968f49ffff001d593ec703","010000002f2221d9fcf4d6f7643d3c5a72e54d260bdac109bae757515278ba8000000000c0d70a7881e0eca811c09d178b4f15d58ad5206156b18e75f6dfe5ce87c10dc112988f49ffff001d38aa421f","0100000046d2610919c23b27a3462cd21d52e7bbbd509d5e69e79676d67d95ec000000007d37bf68821e0fd75153ac84f0d40b0fe9f8fdd5dd572b08d10ab68fc5c34168109a8f49ffff001d0822a75a","0100000063aacc9e56b282d6732a5a68a11e24d4159e2263861d907500a35b5d0000000086cd813279b7b0d2a03126c2aa6c186bb2c990ea2b9727f148c1bcb8ca22686d379a8f49ffff001d90cc8f00","010000003a6d8df760b15d5adfe3df667c9a06d2f547bf9cbf3b1c96ac3c1927000000004aa3de5530260af75c2a5e483b0ef2c2e65075aa86e053b49ddc227038fe9d44479e8f49ffff001d039dd027","01000000a8302d8df57fbaf13fa397b4f34080a5537125c0f37950934b9a08ad00000000a83054a05cdddf9de0d1916b930e07e22540d4dc33983fd65a70551b2a7de7633ca38f49ffff001d30bbc41f","010000003d8dd95a6ffb7d8e5914a25b0e2555fb4810f48028f64be724c16ee300000000474304b5da660c378ddd0ace55f83ff429e604635a74bde3ec7d533d69b3d06899a68f49ffff001d338795fc","0100000090aea2963789473df5bb72b67feb81032e5a67aeb4c432f8311879c50000000049db33cb3ef3de0999397147fd3dcdcfca6f75ca1837d488157aec55e7dcec4ae2aa8f49ffff001d34abd5fd","01000000a56eb52a66d6d5a7b5dd04707982d47530a00edd0f4c318950e741c500000000989a69dfd74a53b12faf9efe68fc6027cb567e69c7fa1942a146150228fadbb6a2ab8f49ffff001da73e1b02","0100000040913966c16f3767fe2e2bbd94b70d03f155ab2a5bb394752bae7f5c000000000220a7f013859763fe5c1af16ff2af60250694799b1c06f324ecaced9295d81191b08f49ffff001d1f5e503c","01000000fce7692743fca6fe9cf9c57c804a5a64a0ecc71cf759fa4035b03d7400000000a04f0ab49c1824d531b440fbff624e53cc16e529bb3e8f7f0bbfa7c01b47d93c64b28f49ffff001d37dc73e3","0100000066f7a5b17b85b00559497643c94c40010f4bf4d9313936b5b1283d4e0000000073e60b70b52029a181aa1a70ee83b525e7be2880128f543ba5cd2549c7b2de88c3b78f49ffff001d2ae043f1","0100000006d6a14eb84a6f9bb674adc938e269f8ea341190e2ef97800fa0fab9000000003cf3e5b40cea9756819d73e59489085a947c01524f303fda0a5a7804a0dfbd4149ba8f49ffff001d18bf053e","010000002021cb507caebf70294e8b6f3ab4be45aac1c089b642902df759ef08000000000932022a1188e3228af26e3aa61a78640ba7a83a9097145a2205def0942b91a6a2bc8f49ffff001d2e69889b","01000000ef444754d9c4260946b345bdffd92e5827a501c7c029abbd8d926015000000007f5cd94d2fd39946a41ed73821225597f0f5a2fb4a42e6354c7ef1d93b4728f200c28f49ffff001d2e3e595f","01000000e6353b30e94b32cdd8481cf95c17345262075408c702e3febf11affc00000000779cbf322f41d8355a225ec65786d9e703ccd5750321ae52330a3821fb7268126dc48f49ffff001d2875b6c1","010000001722f0d81fdc0f7969a2fffc3398c4f6bcf663366e18d0b399e09caf000000008d58f8a1e2bc33a7c43dadc98dbbe0886887e5f9ee4db137a66047d0afc0665e6bc68f49ffff001db8036d08","01000000893bd0505e1e90269b0c81d963fb97e916411553c3e98d5f33013ceb000000002baba926d7d1c54c161be56434d3e6ce31fbe3a9fb19efb673df04904f03119fbac88f49ffff001d353013c5","0100000044a964f1abf5b25245476074afe6f69b24455848393ccfa6485515e8000000003a903aae4473feed976dd30c0f86175983683531586d37607e6a3961600058b61ccc8f49ffff001d06b24b30","0100000053ed8647f3b9e2f5fbbf12a876ffab91f8e543273a74d1668bc7353600000000de89c0afad545de25af77d5289a1895c6d88fb1968f49e5924334760850dcba0cfd08f49ffff001d35cbcad8","01000000c141ff659631734e784df47a8bf85ebe72b0dc6e118bc5ec16f1f60e0000000006b03f0de582e9fb1e1669c13d9bb1540146da5d32f666f1a007ffad500f171dfdd48f49ffff001d27fc1712","01000000899915fcfdca894525a22f3e2498f802e576702e3433fbe0b2abe6b200000000f705341a39f90e49ed98fe3f1f0627ffed42c211b0f1184475093968d511c4988ed68f49ffff001d1a6199d5","0100000092503bff6559b7f25bb42c9196d633197d2ea8520d4ed643dfe9b84c00000000bae990bbb390cf4f4a59d527450269a4b50321f639d741217b64d8d0b1e4c7ce7dd88f49ffff001d1e38daf8","01000000b577b404574190f3d98d76b2671fa109c2b764d3ee49004002c1247f0000000009d71ad94608e369bb7a32c5cd534851c239b0600f4bb031bd31e4acf9b481ca53dc8f49ffff001d201b3df5","010000004e64d3442b4d7815c6523bf1bbba9a24c8581f35f45b7d9442f10938000000000e74d12458d6d2e1af3e2ea2e51ea101f912e14e64c94fa38c82138ace1da64cdadf8f49ffff001d9e76c410","01000000398bedbb6765430db915dd517f680e87a2d592180dc544a56edf4b700000000002f97f0ef1c41348b7e99e5261adc5373e0fb57d324b91b29c3df5d0db8a451915e08f49ffff001d176055a4","0100000004b0cf8446c3ef810143bbb8fb3abbb5e7059d81c5200638e039c55000000000786fb0d6ca160884c62a15753043b443f3eb215c88c5822cc3093b731b738035b0e18f49ffff001d15b6b3cc","01000000ea3e612d2964c213274ba49c21276eaa6bd04242c020d2d38feccf5e00000000c2342a66b4c91daa9198c0afb5765c22b02ac5f628f8cd9c9014896024d7959f1ce78f49ffff001d041a542f","01000000f1a4472ca4dc6807ad7675bbcadc4cc064c5c7e689cc16ace424713a00000000b16969c64e4eb03a7df65a590223b978bba529bee8a9996382bc948ec2c0686237ea8f49ffff001d0708effa","01000000233096b6c8c70a24a7b44e2af7a9eef472d41566a614476c17634d63000000006e4a04b1b26abeed21a5702c2a60a222d45fdf99e6db9f0ec7c9075f6da1a7da6aec8f49ffff001d02759f60","01000000a84d5767f31d1a89f395919ecd56a8ecac8f244a752ca433817ab87900000000b63db5e8f05e5cbd6ef6879a9d123430e297e991658955555ebdac4a7810f90027f08f49ffff001d2ac023bc","01000000fef005dbfc91f2faf5bee32e1944415944c53c6a191121c44a89652d00000000362ab363c176bb9d1c2b0a34693fbe9350dd33026466b032d22c5d56a77576eb48f08f49ffff001d14d32700","01000000c88bcccfd361006c60c9baa6b6303eda50023da620abae1858a210bc00000000cd5314e3249162a154bf542552bd2c4b929edf593c81169a061351c7fe1c8e5779f38f49ffff001d02ee3e8a","01000000e4f5a427d809b21962c8ae6b58b8b2ca7ede4f270b792ae1460f34be00000000f53963b4d0f9bd461f290f69ca3b52ab7ca0819d1b5c331439b0da10d70b0ec3dbf48f49ffff001da6aa9e06","010000001d95e28b69bcc1ee738f7b172125d0de065a7e4a5a8937895c022e3f000000009bfe963109510d0977f8dd04621e49db8a9b41dbd5f16faafa3fb0d70e738dd045f58f49ffff001d06ab2972","010000003314b88638740c703ff5edd9ecd4c02dd473a287ab43223ebd393d2700000000e248aa0590ec044e0a01aa97c81d77f6eb933d1feb78fcc7baa9a00e7b6437c990fa8f49ffff001d251ec2cf","01000000de455fd536e6e40dd7ddc672c28b4d4838c512a778f84bd9685aa3bf000000005c3542212e9808c74c957f56ad02fa427cf77f464ece5f64ea82251ccba775ba99fd8f49ffff001d16b23a01","01000000a05a820b154e106b78a1ba9fb9ffdad99e66bb869b9a57c6eaf5f8ca000000006fe482ab72e23bfcafecf7897d023370541a0acb649c727769d9b34c6bf9d49025009049ffff001d86129303","01000000a948463162fb2b1a17e315e24aa78c64bf6c0d673764608ed00e300d00000000719d34a6d92c06456fd24e8c2a3abd7ea7f09c5a164222db7bf3e8b80246e7ad4e009049ffff001d31037c79","010000006fe3452540e0f0f21e9907772540076161700aa60fc5fbdfac2f54b500000000cbe37c27766854177439b65bf50d4c520dae5ae41ed64e21238ad9769f463ee921039049ffff001d9ac13a0d","01000000660ddc71dbf7f3efd19a63b615d49a701340eea5d5aa36c89a1c3e1800000000bbd73bf488eb4fddc5cf12574ef732a35a1c1c679782cbbf6826eb4336875329bf059049ffff001d25204438","01000000ac9e72d2d9325b4d2e7407c534b51ebd4ba14b9094767e2b0a8e708d000000003d47272008c7964d7b263a030a54d8400aaa3271e81043f037ccd8bc747884ed94099049ffff001d393dde25","01000000993b3c2112249f19c9ad8570b5d737edca5569287b0567d0f0285278000000001517c75c37f70975edf0b5b1544a2d0d6fd3756e08a74cda887fddd32cbd9b26da0a9049ffff001dcc4bc602","01000000412cbdad91e7f401a9eba4a2c80fa84fdaf14d5e5b225fa62ba310dd00000000f60c4b914954ab46bb3ea26d1da2cd07a1575092c73db4e8ac7e079dec0904c9680e9049ffff001d36653660","0100000097b66a75a1b1131a4435d242092065a553a5c783982268cd9c1c624100000000b13be961c7d51d7f9e2789cb13115da06c2a43c37d9ca73700f8aba0058cc449af119049ffff001d2ce9460d","010000000e78ece60291c1ed919566f073cebe35e7de9e27450128644502f51b00000000ff8320602ef293f453d4fa80984b99e6b3ddbf327f81e95e7e37b6d706a52cc984129049ffff001d3817e0dc","01000000fe160d825f22c061bde747a4fe57e837df4228bb86a21f03c48cc79a0000000019f3d40902d464bd68201f0af2504999c44db779523c2836b01d1d765d8f3fa963179049ffff001d1b45d175","01000000e04a3c61aa41851378fa3114a19962fc292f54ec4ac6eeba39067195000000009c3476326c8b28186d59e2f840dc4b49bcf30f84d6a9cd3b93dd8383a51b4ad8b0199049ffff001d90652606","01000000582f3eeb13204c6d436bf86a349091d5bf2136bf709deae88f46e7ac00000000fad1874266cbd40fba521b63823acf9a178fc9495c80b648e71002a275188763951b9049ffff001d2977cf57","0100000033e743c97e2d196861034142d8eebef8afba80a9bbe7f04c221fdd4e00000000825b5b144111c542bea32571dd21c9717ccbcd2a42409d9df56e6cec41baf8fc1e1c9049ffff001d0f0b2c01","010000009b0a44f9eaaa8d9bae9f259bb0ded80c869b2aa273252fc48c28999600000000fa77a5eddb0edc39e21feab914eb87177b631171f6084738f88038573751055f481e9049ffff001d01dbf3c3","0100000094ac4f15e91ebc4f73e30c38dcaf05a3ccbbd89b6e63d0ff69f61aff000000007508bdc2b10602af13a227d4dd5aaaba69f564dc068cfb79780b44964268d5da31249049ffff001d25984704","01000000ee74351c839bff3068a0478271d3490131185c2e780bc059661f1d0d00000000c35a1778accaf1fd4c88ebe0091942b5d4ed4d52d16dd917f7321d997da7b2d56a249049ffff001d06c19700","010000001135ecc386797dbe9c5dc214e5272a049941c7260b9a84ba036fe21a000000005543f8b8acc5a6d5f7f9b63fe9b5bdee973f3354d30f3dbd95e91ec312bf3755af269049ffff001d13ab7168","01000000eeeb8b777e2576a7dea51ec3470d79f7f11296e5d6c1441044623ec9000000001c4a2d432b03d8c4c12ddcd1c7fd7566a3ffd2d5893bb9744aa811a53aba2ad6e5269049ffff001db7efd000","01000000016d6875cb8db177caa289fef8c63a381b3344d7cf54eb5b9e2edda80000000047ad5a016d7c282023ab13077dc093031a6b250cf68f71bdaa1fe704f3e568eb74279049ffff001de70faf02","010000004a1704d48e8f9a2b940d163ac9ff1458ac39b740b0676cf150d248e700000000fce4ae8c1cdc453b84ff5bd6b791884cee69b743f3e7c224a51dc76b6c2b997d5e2c9049ffff001d365902b9","01000000be99ac7eadbccfb381d626582b7c919e8f2b9f3cea7de58f4dc140ba0000000009435b1668d90bca05f4d4c7bb628a312f41f89317d25d918ec3f8e171ff4c1cca309049ffff001d14b027f3","01000000004db49c06c8a1452b5ccbf83eac05b0b09d02245ab83af406ff88c1000000006096f2ec8f7145c23b271345b46da9dee9c4f327b95d16754e02b788595825efe1319049ffff001df17f1b03","010000005891f2cfd3abd311afc48e33615875d64a5be59cf21eb7ea7f800779000000004f3b23c9f97a1c50b74fca3a1de9ef2271bb1537c6d34df5e664194c7e2ca7988e359049ffff001d5294f10e","010000003a73f26c47f5c2e5057b984874cb3dd9e33da5c08aa007edb3bbd7cd000000007bd0f699e53ecc1ea51ea4b09aba8c58f6aad9c3b059cdd04c8d72d149438ef2f4369049ffff001d362bd4cf","0100000079463371926fb0eb9b37afa153d28e1cf8c79675184611a0dab889100000000012d85c2d4384cf85bfe9dcf85b7cdbb68cf520cf3efe41dfde58a5feb822936ab7399049ffff001d257340ec","010000002e3d15fa8778041f34ed971bf2adff80482e7722b0a09e4e35918a50000000003b5f98f9482dadbbe2ea39d3cd376c26c3715397d43f29501852fa35233b91cf573a9049ffff001dde7a6d01","01000000d68ddf3ab9278ed969f93378be4360427214ffbd40a9921c902b485400000000d13801e49615f9eb5ea5b4a4493e22dea339059cc1aa948c0fbd7b57f7514e3b4f3e9049ffff001d1fe4ee09","010000008f705ff231091aa74d1840fa627bd12fdb667cd39394e5fd3330bf1e0000000031494da0b7b3b723e767a1ec7d69dc19fd76449d1e79771a40b7c24a0c24c2dbf23e9049ffff001d493ee701","010000009a3046073dea95bd3347999ca5822748ad5eab993c80dd1e08a4e151000000007308c958df8d9af735f6e491558686f48452c91b0d4c625db472d06c5ac61ac3513f9049ffff001d05df437e","01000000f12ef811a1f01624ecc17a7da56ee31f30fe973b5a82a0e2a1939dc8000000009c39b056cd727ba2f12c97422fe9a09953beabbbf8196bc44be13309dad27b33fd449049ffff001d35597502","0100000040aaf9b46c69fca17fd65b1a114fad812d1c92f2b885baf5333f79d10000000017974ae4c48388bff2419407e0707df07c6410739da7137671f6de7c6e17eb79f1479049ffff001d8b702c09","01000000457a7128e58d2f17c670e514d4f8fe0b322657830c44329372279fd50000000055acb759f5be1af9b973752c7f1a547cb07740d7ba3fc32fe3303804ac04bfd46b499049ffff001df0235707","010000005bdf4e8590e4498b9f6092ec7c45fe83ca846fa3ac80d172cb20dafe0000000003a2a792e3a9cba7c116381191a8c02da35e5a73b82846ecdcb86a41391b3d3e80499049ffff001d18463c01","01000000f62f2e53d4d43bd60c8238267a05cad08084f599c11cbb7f0b1992b400000000d28fd20f55ed4ccb439d999aa6839a3c8094d1964bd849cc6aa0425225fe99d6424e9049ffff001d3469a6c8","0100000029f1955af3f55fef2864048cd104219f1d7ea49b6fac92421610916a00000000dc460acae083f5b7cc1c126ee6c6c9dd2bfbe5ca494ad3d9472b55ce0ba7c28298519049ffff001dfb152608","01000000c46490b5204a7d48f4364a7431f28a51cf4c57c327c867fd2ee6e0260000000056b6fda31000e5ddd237c4b8576e249b811ed0b415c7580ee94f7946e6a27ca379529049ffff001d2aca3ffa","01000000cdb16b16560c5dd0db30a41df65523c0f6f0d1365fc6955efb54317700000000c902ce32cf5b5ce12b5a9567e739e76f9981d801947d9b3ed1dd6af3e079311be3529049ffff001de23f7900","01000000ff652fe056ff4bfb69ffd34bcc85d552b5be3293b879717f9be3c583000000004f227b3f165a8a6ac54764d18b3aa0c039d057989581621641f1e676fb9bdd2901569049ffff001d335f13c4","01000000af1333d98b9817e3c3241bc43fb6581559d67e4b426b8b9ea660e1f30000000003b49e13f2bca87fce1b44ea04c3272dc3d30e5759d60215023087d2914d0baf92579049ffff001d160b394d","01000000d6c09f7eedf91495ae2b5575fa2413250aa3f433688612211585af02000000008da40ead16c05e2eddad98cba71ac3d08de32aae819a1e2145b48e945f3ddcf6205a9049ffff001d384e0c02","01000000f31abc245ac4bb521f6d1389a8e4fd108dda6b74dc3ea137b1f6ff25000000008bc44d914a8f76bb18bb9e0ca0f335781b1b1463d29014133ebdbc7961f89516ad5f9049ffff001d2094c6ca","0100000053db3e6f2b5ab997e2a16bc134b259981d77ac54b4167901501e66ae0000000004c80d5f68ed2f606fcc3407efbb2a4df701e31a7de9d7c006aa37e0992729bed2639049ffff001d2ce5df00","01000000b29016fdcedbb38b532a125e3d2e2a1f6c1b072a9af426d63a66f27f000000003e6600750739793d95b5a0900593390352545622e7336d41bb80e13d8d6e1685db649049ffff001db95db202","01000000354fd257ba26081097e863fd41ce455f419a6257b7ee7d4d37f214ac00000000a16e405b650686a7c1e5cf47ad72ff8962a66e6379e3a2f0df5e5b75aa11df223a689049ffff001d194c1a12","010000006de191410fdb2a2e65b57dc183a3e5668d709fa68f48fd86f71910c200000000d9e72b6146f5513c80a1890388a822eac81cfe532b11fbc13ea5c9be6a0fc006c0699049ffff001d34b8b8dd","01000000a39170be48a8d4f3780b30929d8acd811e19740162879358547468d8000000000cd1d74940a93c735718a27658e5e75d9ed5facada3a868354fe4c0a461c956cc56b9049ffff001d020728f0","01000000b7ba18bae9af522e930510d4f6ecf9ea4d0ce5362ed2f921cedebc7e0000000014a3c359177ff6e8db8f979d1665fcfd89c774cf66dcd4c001f727a3a058a7c4676d9049ffff001dd8c4d107","0100000087e35737887917c72a1e1fba94c7a745559b1543f4c3825368cd37fb00000000dc45f54580602a32178d6ad5087273bfb9531372bda5cda37b1f2ec704cd05ffe76f9049ffff001db9626504","0100000072967fa314efc5180c4f17e42bf0ce84de2dbec58a6de9d4146579930000000080e75a427006e604aa665f8153cd28e82e3eb17a70f940167fdfc8888675d1cf68719049ffff001d1d4d6211","01000000ef4b6328fc77becd48f5b4614952394e4584164fa641d785a4e949c70000000031601e2ed703768e7bb363c4fe9aadde040f0a949cb81549f4b239c72c5cd31655759049ffff001dfde23313","01000000ead698557989b6b534e239c2a490d73b4a205ce16d7ae2d4c05321ad00000000ec7882b026b31ef96d8e13be8e8c7d3f93b704a5398d340ba119cf5a1675620d0a779049ffff001dcaf15b08","01000000d67f7b2da7e691bc1327c33a219517112b49842d3762bf287f07c6f20000000018593b12aaffcf0761a68fa54693f8f2b0289df32701c00b9cc757cd3753fc4d71779049ffff001d2777e9c5","010000000600850c46994d8dd5483ac360821671412beb2af6f2604992f1bf290000000070dcc74758bc7803bcbf2bd648f1c9d0324ddb461fe85e80e90c073c046f8df3137c9049ffff001d21ce630d","0100000067cba64e39785d3342c0e5a8a3f15c95dd0676751073c605a4a40ba700000000263679eed5fb628d9e27a5568421c7dbbdb0f62389284d6717fa96562eb0d2c42a7d9049ffff001d02ef23e3","010000006001719970ef93130c46178568d9e0df10639208584544992ed8c5a900000000c446d3e005c7b52e430f613378dd255364be4210a6725728b7cc80dbaf82ce4cb87d9049ffff001d2c768802","010000005a24b7f7b31a279d5ac0ce1f0820be6b7355aa656247393973d815c200000000c8b0b4939ed78b7bdc67c61a0a4b51f90f31f29f93999ebea5dc53c1e3ddef2cd17e9049ffff001d30b93705","01000000a7f7845be0108c9d55bfa718af14344ea84e8e509d2bd7a100df375b0000000018ceec5e6ed4bfe3a4399d662f0330a1646e6d3146d2abac21f5b3f6504710c0a77f9049ffff001d2138740f","01000000a80808b156ab9c626795a4724fe0aa91831b25bed48729bac969e35b000000004eb78046cd16893f2bf22351cb3c180cc3cb0b208d85e9519655ab72436a34876f839049ffff001d01ba862f","01000000bf918de2fd26176d8b76f1c8a08c0dbb54166ef634c9bcb60356ebc800000000e6a67cb82191e9a6dc0f77d56933fd264056fae4b5587ae4b93a94ab08d342b7b7839049ffff001d90b22c01","010000001055b5936b81d204c0e7c0b45897f56c2fcf0232a9c9c46ef96b13c4000000001adcac801d9b484260d143fed62ea1f2151400c51245875cad79c95aee9a263150869049ffff001d365c26c9","01000000ed785df755334883f0e0531b5aef1174d6d560f293c90b6d41e68aa300000000b099d983149bea1253a6296a6786efb33bffff3296aacebe9c19a6423a0235d770889049ffff001d90424d06","0100000041ec4ec54c89c4d3940c88c7884d7df41ca380d60005ecb60642a26300000000fd7ef2360ba0f4e76c4f941a75d5a66c9f02f9a6e8ad1d6ab0a09bcb3e33615e9d8c9049ffff001d3291bc90","010000005e2c197d244611446ab27927dccb2276a3da8d206a83ed24059a404d000000002134ffd637edd746d7a1a747e0f151eb3a0dc5dc36a761c87d78de625a227571c38e9049ffff001d1ab869c4","0100000053f3d6f0f0428fcfd87366d871623992e413e3b4ae86662d0c9b6d76000000006eff04816bff9fa7630dbca74f5dffe19efeb58ae73f64ae5da7c0cabc8a8ce80f909049ffff001dcf847a03","01000000baf0fedcf5706b3c5efeb1c2838b9e64c9b7a838aa1fe12f8fc3493d00000000e71415a2e3e08ccc11df14aad3f359eb25322f7898e1f8551c74ce581e28806a00929049ffff001d2e0bc23a","010000009960f1d45996ce86d5004072fff2a67320b89948b8ba24534e320f8700000000fb8fef24182de84c52e2d2a969eb8f7b0b3d68e3d6242cda91fcefc5b3c17034b5959049ffff001d2ef611a9","01000000d8362373a89ce306e1ab7e35b75ec01e09988213890c1970d6f65a9900000000d4bddd216e0460e74a668f5310414eb1e29caa62d9f314cc88b39c5e1699d3c960999049ffff001d14818496","01000000d4fb8e61dc754660cab48645ee5370f01152d2dc592551a21cbc253100000000c6742c7fab512011f78fb8fd1fb8e02a48c9d87e17dc67be41f1747d19b50abc779a9049ffff001d1d040c03","010000002cd931019e2e50f59cbd91e39a72a9573dfc8b9453e91f547813db2b00000000245ba0cc062d34da678724c5e63a6459361ab8f765135334dad0cbfc90e9fb12b79b9049ffff001d9d161103","010000004ac8279783353fa6431f513906d40cd542c1f0e14b9341b082845c1d00000000ab1810828f16e17d174d40f7aefbab1825ad3652cb00b0c137323495f0ed6b66f69e9049ffff001d2805b76f","0100000038b727eceedf6ec0fa0aa52cb694caf51a05102dc8ea80fd24b2020800000000eadbef87552dfc1483a2e58bf75e6e42bf913e867213a4f9c1e7013c4c370cdc58a19049ffff001d13b0c407","0100000080ed94d44ab1d412fb04fab9bfc84f49f346142407960ce3c590a19900000000cee2a98acb0f5597871d40dad4a43780c5f87601a9696fa46bc619450c9f4e09f4a39049ffff001d289ff290","01000000f60fbf27dc8c4d280a259288cd0e848014a2612c88be66340d171e1d0000000065eeef9ab700ea06926ceadcafc927f0e68e00c20d32839a7c8534068461850838a89049ffff001d393bac31","01000000991540cf96811a2952192970847288f4a273b031cff228178a9e882300000000344943c58c5a2526209ade5425c78ad57009c0ec7f5b52b19dcabe393ae1f07dafac9049ffff001d3a6fc8a8","01000000f515897986b75616c44a24d65e434194675ea2220ae85245baed590700000000aa2c396d68dec9e65f2d9589b47bac447209bf2350c389fb2447c8ea461496139fb19049ffff001d17d95aaf","0100000072b71f4bdef4a294c19338b6b37e8fbd42586bcce6d5c8291e208e7400000000c6e055066cd239fa69db2b17332016bd0f3d17766748a6c46d7546551599fcab7eb39049ffff001d096650da","0100000033bf59609ace81f51598a30b192a47c2e410932d5cf891f61675cfe800000000a620dc6bd5f849b6a0cee21cbfa030be4d6be278dbe3000100098ed14cf93284d4b69049ffff001d330e9bea","01000000759ade6a11918efdf7f571c3a05e1dd44e827547c34a5f2766d93880000000003c4d2c175bc3bd6673c8667aedd56dff4ace1ec646cf6578d832eb2472e7548c78b79049ffff001dd2347c02","01000000fe86c2e8060b2140909552a407cd23240453c1e45c6e6e34cc80cd74000000001758d6b10f5aac6e35a08e3b059c51fda8d4c087dc019c3e04b049418109d1e585ba9049ffff001d2d3ad987","0100000009ab5c7068850f55794223f342b030bf6bb550f44e13d5f248bfc67b00000000231ea2cce28d2b8323509c44362194c51202d8c10a70908e2ce2f5301cce98f0eebc9049ffff001d29c442d2","010000006a94d30084cd64de53e226c8c69904d9c684f5a0abdb778493f24d7f000000004b05790504c7f4f5e7c5e4ec5ae69d79b30e634baf89d3eb3c0f94932b55d1c089bf9049ffff001d1f811108","0100000012fdc33e8824bd5f04e8f46ff60fa0c33c4fa99549433fd64d7ec79a00000000b41dcd7a7c1f690aa50a5c94e6b5e60306b4c79ea16ee1ee8ef54e0de430364217c19049ffff001d2bf98807","010000006f7ddede408869ea2a085a6a99783ddee327a8bb383dbdb8b075338b000000005bdd06aaab06af8778e2898560865be8826b6f96bf7bd37cde7cb693de51453c1ec29049ffff001d24eaf5f3","0100000082bea9d19a941af705770c42c8a911b5abc40754a1e61ea322118eb700000000a3112eb5cb16ea1575bc01f1c5a89433f933c893071a32f72e06fd044ec3a6c142c39049ffff001d1bc43605","0100000050e119108a5eb7677c980e39855cf02b4dadcdc89fe5c91f81bd3d500000000047dea766126a42ef49c5539a0c461f54205a184bfeada06c3e838aba716d4dbbb3c49049ffff001dd5f4a704","010000001738f0c5f830bf8beed294350cb916ba39fffcb4410a062e6e2d635400000000677e768f8cd4ff72d9178613ba1daf78e364390c60c12888808211793165a5c16cc59049ffff001d3441bce4","01000000013e59d5988f3f124164e1998c0bfb2d5c12f7bad9da7b13d5ab968a00000000d8ac2485f625770fbdeb0b884796261e8fe5ebf24442c22324be29a5c00f72cc78c69049ffff001d9a79d402","01000000e353ed911bfa11205fcd34db38f56d707ba87ca77b47f4c0981cbee700000000f4ee5c3f60b580cf74be3a3123cfe285af1b9d79799948b42a38fa6db6757cf4ddc89049ffff001d395aee2f","01000000f5b21f6de2e673590c035983778a034c2282e692bebd5d430a8dc8600000000067f59e74b4a82af5c8fef7c65624ddd6290579dd9566b0460b977f5ee17aa72765cc9049ffff001d1b874930","01000000c8a65acc46e51ee1dfa2d26f0f533874081b3e2d6236a0b0375321610000000029e42ff8f13c7ae0c11b2f52e7487f6aa8dd8de04598eddf16f14718c351e29c14d19049ffff001d26bba576","01000000f5273221b10a2f49e9ce6d4d6471852717ba6e9b9efc289ebfc9a5bc0000000023df166c9aa3acded777d036775f815fae1a44e07e92950095de68fd9058ed300ed49049ffff001d26da1d0e","010000008ae23d06a2ebd4ec2b5902671e26a0db7de316a882ff736bd938ae4a000000000629b6b31e5a20eb6510f8c57530b9597645c3a6e0980a4f504f452535bf6ee96bd59049ffff001d348b6c99","010000006e4c9f37ae46f9aac9ad3969429761e17262209632ed8757cbf33a4f00000000af1e28b1b1bd9a7f86adf940122481f52e5c361e6b458fb920e1a320f3b97cacb2d79049ffff001d1f7fc4ec","01000000312f8f7daa839044e441bc655920007d1dbbf0e47754412319351ded00000000992c4321986e8ae10ab5d9a695f9e49f63b5aaa2d4837ecc897fb148eaa94514eadb9049ffff001d540fb20b","0100000049f3a52796f9108e7e750bdb47820d6797630ff07b3ae7b528f6cf6100000000a1e63f4125331b8c5693c0fbf755a0aff43c3f7b24292919270ad32e989921171adc9049ffff001d2bb6e0b9","01000000758fec32ecbadd8c0b01a5f34a9e3019c5701d42b9015a874e8fbdb10000000049e788f6cf123f0ed9aea1a317ae2fac8d364f4ff7c7c653e8a1dc074e0173469bdd9049ffff001d306a0407","01000000ae33f475d254fde6c564ee68a9da00d9c4049f413609e627b16c749e0000000098e2fbc7db8810a3b026d12315f79e6894b07a2fa5ee1c5c4c59d3f3b0e98d60f7e19049ffff001d065efd19","010000005f2b83fc2dda8e8fc30bf7ecbade04cc97fa3b575a819223c21c16070000000037526cb187142874284ad1327f9ed6baffd5f706c9a5179421016c51fb04d6759fe59049ffff001d38bb231c","010000000a03d2224ce316afd5d327043f3ef0f5471b739310995d2bbe30008700000000b405e42c1f02842946754128a39f47930207ff54f0ffce7ac0fb827b992d1ebf80e69049ffff001d295e9504","01000000ba3d28a0e7f69deab2ecf61f1738c0eaa10130737da112298baaedd900000000dfbe898e8c1acf79223531b6eddefbb376569c0f159d5435fd399c04e62ff91a94e89049ffff001d34f22609","010000003db1221f853f4cac949502e3d84e0b660f5930a23d7d2e902f4bfe140000000070bf94e29199e08d7f1c2c93b58db606ef6700f55710b63601d5fe3395b4b37b31e99049ffff001d375afda9","010000002836f84881d5a2cafc4db5b1b0e14b0aa001363b1336e8efd375820200000000abcaed45a31b634755b930c764e172abbffd360b85379ed4d82356e7f0303804a8ea9049ffff001d06d280af","010000004f28b8e5f046df9b8851899edd4be9efc700ffebba0155f85e0c3eb100000000bf6ea267525cb982f47c9a3d68f4449673a9c3310c88f94d8e8c494b36a53c206cec9049ffff001d2c03d10b","01000000d75220ca3a410d916f09240d74b6176dfede73a044bed7cd6a369393000000009986fe2541f6669ff6c09c95a8e28a635790b57771aef6a810c7d243ddaa7672eef19049ffff001d3909b91d","01000000f1927940b2d9c9803a0396415185bd946ad4155b70b816d7e461322000000000e85d72c81822c54e4fcf5cea81f3656b13674e944ee6d5a498975967cd8849f539f39049ffff001d06f0486d","010000009b5ceccfb3ded5961853c9d5605f61380719f762a4be25c3697b2e7000000000e0eb22db5f0f29914fcf3c7531d79108b166a6bdc9d7948be55e1b119fd9fa106ff89049ffff001d2cdcb41a","010000004b05c891591bcbadac049bc6f6d46c1a125c71e00a41797cf7ff2e6900000000e41afc1a9673f992473f12c4b8506e1b558fa418d6c9c28b0eaead60adde45aa79fa9049ffff001d169cb30b","010000002071d99fd1f611d08bdef37189822268dde208498e34538a6783bc970000000085b570951460da1bea9fb165ce4034ddd9465c5c1f2c0f118c56a97d22e88f9a51ff9049ffff001d2db88b75","01000000d22d97dc0f14ab2f51239bdf83c26b3aa0b361120772cdd8283b07420000000045075be4eda7bc3d9f1e8420057bb6aa9e1aea86273becdf709da5e1a11a34ee1e019149ffff001d26b71fd8","0100000075738a2db0bd3b281e7cefbd15044731ae6a067ab644f7874770ceda00000000de2e6c59682e8a0675bce8f0d60204e37c8aef758547fb07dc70c3890f6ac7a55b039149ffff001d1a932f00","0100000014314895f2a4bd0acf4880bbf42213097f79048fb5dce9cf996bb9a5000000008b54bc3c00366402926359c4ae0cad290b49465ebcd78f06be9e4dcf392c65a945049149ffff001d6885eb04","01000000b59e9ca584ab6954ed71b8e69be8ae5d7a8bfc734383639832f81953000000000c2fa1d06229aebee84b0f60c7748cd3cbd86af7c78cc301c826588f67a7e15a2a099149ffff001d16d1917b","010000005f03298721007edf01dca312b37f769ade535d364a3f2fce79d4397a0000000026382adb7538ee61520c56202e5e08293fa5d64abe1dad39f40271834ced94b7c20a9149ffff001d186f9abc","010000002b821042aea3578516a2916f96af57e0e9a206180bb41986356f601b00000000ba84fb6208adcb1bd8919413d8ae5f4d6b5784506817a31dd1e69458b1270618630d9149ffff001d31831e20","0100000050da05963d0f1184aeaf655f2ae13d8018671afc2638ef570b23b92f00000000f8f01576b95fe074f2896d828bf832c5e437dc7e114fa32d00c4ff5431c95bfad50e9149ffff001d0dab2804","010000002a1cd03d2e2a5735a81d8b4937a7208062e200824ff6c197a08c90e7000000004efd07ced6c388773757f8f11a2f24bdb397faf77e39c6d4610b9c5274a1bd5573129149ffff001d1aad136c","01000000853038db13ea8f5499816c0452d9c8d75713858bc96cc59ffe88109a0000000048f74111196c8c9cfbe9a41792cd990609b171c9c3cb714be2f050503d0d7bd152169149ffff001d3081db25","0100000097d876579bc900cf64613e3e81af8905999b1d0219d7b1604efae19d000000005f02d49c3ab680409cdecef5de465a07cd2bb6642e95fbec193fc5f092ffbface51b9149ffff001d2c185344","0100000093649a05a2d7f90fde8f157a58689d0c179d7b083c43e124beedc49200000000a6c712a761d174f4cc2b5312a1fd78a53cb3e871ab99db90894884523ea3c7e1e21d9149ffff001d020ef77e","01000000cd7a997ba76b916c312ed8d4a1432d89d89f928b242a5893998c4eb60000000058f1be4f7b3882a4c664e59785deb03f2c5a70a674bae9fb28346790d92283eec3219149ffff001d7c58e40f","0100000025d23abffa24a8bbc63bd70f840e80f986c95a9a37d579c81fb3ad9000000000c27870c2d22ed667719998ce03bc31526edcc7dde295038c1eaea851ca6738dc10239149ffff001d2f4297c5","010000001153a5ff1b294ccd49b14a311d6503016a94ddd59a532d84072621b60000000016013b81d02a3f297658b5d1ab0e6abb25a552b2cbce67d57595298a168b84026a279149ffff001d05f2eac1","0100000072e43a6273a09d788e2dc1dd884100acb5831ac6a37bb8304f4d72c6000000002202c036f5481e50357dedaf786dee74e88dfd5ee6baf98a2ca80bbd5c7bcb3238299149ffff001d1907a493","01000000e14c588bf4ce8536d278941cd7b14c873cbfdfa63884be9bca4b943e00000000243f1efc120c0d6010806ccaca52307de0736bf9b0e62dc65bb3b62ae28797d15c2e9149ffff001d3745670b","0100000043fe23439a40a7bfdf7a7dad3d27f1b00c5068c1030f1ca24d7d9d2e00000000114f425a9ff68cddb01745c33b0cee96ce3c696369a3d3c5468035650b65f611d0309149ffff001d363d826e","0100000078f94d4684ae909e33c7bf0fcd8a1b99e23005bc7e1adb1e63e8833a00000000367836b35f1a734a72e03e6fe7773d3e2688a3830128aba698fb77240acbc6beb8329149ffff001d09418183","010000003fc6e2b6c1b841f1d6aed0e66e58e7dd408e646aeff02b3bc7a865ae00000000e9ef6465faf52b8d02ca28919d8c3eddd195e53b6fa8493124c75f66e397051e3e359149ffff001d2a4e09f6","0100000096a0878b057e3d630484aceba3857b33b856e6893c01dc67c68a082e000000000c9156101193a2c707fe72b9b735c8523e31e214e6520a656c997cac14ad450a22379149ffff001d070ffb12","0100000064b53219bd1c1b8889838ac4fa742ee7d6d94c461ed2e228e4424ad700000000987ce33dc4feb5b4c813440870f6e51241ab536899aff16f8eaa98f9c6f979fef4399149ffff001d1efa2590","01000000d3da675ae8a29b5bbfa51b33f7205d87e6a9577fe560d61592f22240000000007e1de853c1995007f83644b76f3d1b4d126110769cf0534e6f9428d52e768507ef3f9149ffff001d13d1f7ec","01000000edd0e3a21096124c1ee6b89de380812312c83b7b0e707217ab8f54c40000000023aa5af4f2f0815fe3853c30d02f0772ed3b32454621bfdc7214c474febfc9eeba419149ffff001d666a0104","010000009b3d861a29bf5f1cb66af14555ccc29047f20591e81106358154f8ce00000000ac36f7aab3ac8058902cad5acc1f8bea0c6e79ccb8977ead8c73651d4138d03bd4449149ffff001d1d5e1ad9","010000009a8f42e13e259345fdd124108e62865614854347d0911c50d73d23a8000000000cde9f3fbf6bd596ce6b500950a0742d49f8edf640fc70a4d8d2a55758de273ed3469149ffff001d3a328da8","010000007386716c73ad07e4d00ad959e853ce45abb3570003d83a5304d76f4100000000ab5cd3183b7782961a9260e04cee20ae41aa90316673cb3853cd95aac295b69f81489149ffff001d085f47cc","01000000598aa6fbce834f827f06597b7529ea94ff4a26044c5478320c345b50000000009ffdc597ec9324326a9a3a3694748232f1c92f681e5f807dc0cd23c98cf1bdf79a4d9149ffff001d421e960c","010000004948df68d3a408ad48163dd02b5a462aa34d4948765ff7a6b3e214590000000066242f9c5d8be2152f49afa24f30c439c649d8bb32ed9c398fb12b7804e2ee623e4e9149ffff001d2b5db66e","010000003e8941cb0eb8b11e5d81b59fb1805e3f630c95b132ec2f50dd25513b00000000bc47e78365b2eda7c58ea3e1a0e0f298507b4f9d6ed32b1f204031524f132ef408539149ffff001d00312f95","01000000fd45665a73e3c45d32e3652c377e8ebf15255e4962fab82dd568ccf00000000079fd64ca99ff446b479535fb448073b2a0e3f1b8d82b6b461ce686dd2a85d8dc72569149ffff001d60ad620b","01000000e57c6e5d17c30710cd842113e033ef866ab20b07f533cbecec95f79b00000000c669dab2e75ecf281f06b5244d52f6e8122016e0aab3fcf0fd1d57b78f041bd90e579149ffff001d3575df85","01000000b2bae628af22ce21d81e9f7846c72f3d7d1120a91f993ac8bee1d296000000007806c6a82a3a0312bcee4cdbd2facd6f7a29b775f0ded508ff3d24259c2d311f1c5b9149ffff001d2deafc65","0100000075ab17071c3b48a2857864f23d6d5d07318e84c417faf442739301df000000003c0b1689b10da80a8f3bd426c34762d5b549e1d1eb413bc658e4f2ae4435a290125d9149ffff001d000e7d28","01000000041a4a86728d13ce3018d9ea1433476eff275b1a07cf5a1c88e51914000000008f7ca8ceb0c26f35d52db10699e152139574eb40188351305e592507609c540e54619149ffff001d28e9240e","01000000293bf92bd15a0cd483034a6dca63ef887bddf1f7dc9e9eda3da1790a00000000a2385ac3ac47a5cea00950db810f7e9f15ea14379b60353e9e51b07da133604ce7629149ffff001d1d66110f","010000001ad3ff92ab24ad464e390f50269615971a233277507136f000341b4f000000008c73a5dc2acc1c3712d6ff65be8eb80cb2a3a25cc2ea5e5dbda359c11120380a65689149ffff001d3913b74e","01000000dc22476fc5f8eb0be12b3ad2d91131b2f33b1a5629f67da21eed60c6000000002fbf16a9b6330cffa36fda9ee099718361026808104cb65c1d4dfedc65fdb4b7f56a9149ffff001d3a585b2b","0100000035faf63b8b1181a4c177bb2c0e32a31ed97351091558fc10c29562bf00000000b2027322e9869d0a2e9f145aca6a72832139cb350678feee7cb8685f6d7a9bfe6c6f9149ffff001d26041972","0100000040e3551f49997cdc6fa849494b0dceb158ff92d2c12c1305b4d934af000000001e6023e9e58433bb84b2343059844db1bcf297b8987b5b521ac19ad985d3d66361739149ffff001d1bfe5b81","010000002d8026ad809223ae3cc8fadba742efad7a6b32d575bf0116a48eb71000000000fcc9cd06a57e2471fa0539f8f24882e498977117271c56007a5c36819c02f6cbe7789149ffff001d034c189d","01000000731c736c4e84a6f01595035ee0be4cb456804f4c6922b3112b51fcc500000000f35fafeed103a7b232266162e147ec76e6c4dbf735db87cb0b9f51768c65866efe7b9149ffff001d333b765f","0100000088750f7567d80db2ac56a4142b01c8415182d33d65b5d0ccfe94a7020000000083b3b2a5cc57504e7ce62459c6a235555f9cc28eaaae769aa35ded3c46b904905f7f9149ffff001d1c56001f","01000000e968480016b2c76a50b22d2d15e87f7e74b47e465640ceb9aad5294000000000635256c330d3b5ac542f4e9ea1711b4157797ef167c1b0f54a2a785bb7d4ff5843849149ffff001d1a48402e","010000002c56a35ff6139aaa2ec8f70d3a39a19eb97d576621fc8864c6a5dd3c00000000e65a5f4b1ec3475785c7e216830bcb755589844f8b329ae6a41236b8de7d5ac442869149ffff001de5bbd205","01000000b3de9808bd18db4e0fae05cb99c00086ad809f7c1a72e42103ec0de0000000001a9435b56f5e350e723f9b5086d7ebaa7d99f1bf2d68563e91d77685d50af4cac8879149ffff001d327fcad7","01000000de66839d7b0da877e1cb4a11de2a797c4b7a7126405850639d50d980000000003874b9048c4dadac273e8adac3c6ea63f498339b5fb6ad30d0d8b90b2fed6a874f8c9149ffff001d08385283","010000001dca3fb89746995c9347c41948af5b91b77000210f75af59c44249aa000000008a79fc55a0990cb57fca3b7e964d9eb495f0272eccb0542e5ec38e3ead0ef66e64919149ffff001d26ae7791","010000006f7a2c559cd4a30164ecb7483380d0b8617df663dcb82563fa7a030300000000f850d429357fe7e98e9488804901b2a1c9a565c325f69a6f38f9dcf90d564671b4929149ffff001d1e225511","01000000cf421eccbc142f40db66b06e5220dc99e4a5dceb7c79de4cc3d416ce00000000bfe2f7ee48d430a3d8132e94ee880213893d25e3052a923e288f07c813838b0fe4959149ffff001ded19810a","01000000cd0e8190c91597c0dcf74b66a56466fb65750032d704cc419df09e4200000000e594f8b1d199267217cd76254fa805d75f5090593a65fdc188f4c68213a717f87a969149ffff001d1496b902","010000001b49562ff74275356db7bc9e820f497e010c463cd7efd85e4b3d1d8b000000006c5d8ea9b5f0be680a69a2240f44dbad6fb31962606724499c66f98f627d36ff34979149ffff001d2da96fb4","01000000f2775eb15b3d3c040d7df069a84a3330395bb58d1d0ca657401ed05e000000007b2b7a430e2be90644962952567f1594c0b2e848811e194645b507bcef52ea35d9999149ffff001d24745db6","01000000c197f004b725ad245266b427fc6445cbb0f5b91015bbd16557ee04490000000073c86690fa90aa5849d34c4128068f15537f6e4ca8625044343f2ca3075c5f748a9b9149ffff001d5a1f4204","010000001e6e1da3db309308f9b0b27be10a82c6cb355b9204fc3c845beddb51000000000b16470c01dbc66a9f5484a3429e5f5b3acefe6ce0ffd27c6efd154181ef7a5d6d9e9149ffff001d1ca16271","01000000377f888d5d0fb28bf811e752c5122101f7950afa6840e53818618102000000003acb332e5b6612aea682ac3c3866e5578d688c7ac82b990307c45c30c8d2c986b0a39149ffff001d07ce8481","010000005dbe12e5ede65a8116cf131ecc075082516dcf3090986af54908b05e00000000d67e65f7a648034183e67d5bb563279d1b5af4af0a8feb1b1701ec4e7653aab536a69149ffff001d28951686","010000003a837a08216da469722f800b271c852cebba4777472a6ae3c2872cd70000000068c2c1c065f3e1a12a1b19e8ffd5ae924978ad060d971475cb5d0a413fb6c2d73da99149ffff001dfbcf2c0e","010000000163fea825e1a5e5a02eba71ae5e6ec2028815cf3a2694c26c37e420000000007238800fc69ee98a63af8697877a26946742132025882419f7a215fc7e49f1461eac9149ffff001d1fe5cf84","01000000b92a9fe796bcbbefe2f926bdad6146333f361a5763df068bf5e4b4fb0000000046daf5bc7392f714ebb6e3346e9d8b7a055727e1522f49a299d0cedb284665265fb19149ffff001d416d6619","01000000e5fecad855805ead23323ce87571e7ab338034a2731f291c6969950e00000000c16281e465423c289b7720b5fba18d632b926e4c8fee65050fae293a09d8c1c2b9b19149ffff001d0641e99f","01000000a5f992439bff4d0f07ca538d9f67dd358826c152b0883405bf2a7075000000006fa2e814c6126b78647c4990cc41443bc9498448e9c864a7c9f27c402e2fcb96feb69149ffff001d13becb37","010000008fe517a1084ea2a9cac644e15cd8953a6773416e47ef8d88560bee99000000001cd1305d212e62056ff7201e64e8248dda44db373a2dd3914bcd8044a1deb8ac42b99149ffff001d1d6dee6c","01000000891d7fefc96aca352ec971e7841ce5dbcbd385449b1df2ccd975de8300000000cd70c29f6b1179b18c1e22a3e4c944591bdf4d29827c9edf99f6ac3d8fe22c4f3fba9149ffff001d5a00e102","010000005316dcb58799ee9d87d2d7bdd607c4baa0cc9cdd86ae256a7e853bbe00000000532643b5d4b94b6b37ca4b9d7ea43e9bdebe5bbeb804e1eb0aaee7fce32df4e66cbb9149ffff001d69142102","01000000e60d5fe68980cb32ae9cf807e76666eb28ef46b19410fad1ff7fd66e00000000ad60b1b54345f6595d9ad4643b6690ea3dd26f07fd9a73ddb9a5f14346ae6f87febb9149ffff001dd2050f02","010000001adbf1283e333bcf42512abc176a64cac016d83f0b0233913b722cf000000000e2dceb54fd256cfeedb97b40107aae0c06a7a155fd71c41a5aad676a303a1512dbbe9149ffff001d3347ccf0","01000000d3a7519b72aae237b858f21ea9809378f0e0ef7bc39b1d23850372700000000045f4cb5737454ae0196d95684cb85b8df6653325e49282c86dd8b74f5871653151c19149ffff001d216e8d7f","01000000a688b8540b351fb649be1bfe1669d6f8b1c5d9ec4e97bc5f86d294c60000000034339ff3a4087dddcaf53967bcd6be8a5f15718a90e9b129fe003faed0390228f6c29149ffff001d25826575","01000000bbd79352b0816beb4562d4fe39f77b5ffb64e09984ca30fe5cfcdbef00000000258f5eb8f27c13a4dd8d831eea34a43dc4c6c183918633947157a2f9755e3ec6ccc89149ffff001d9943a70a","010000007e0fd3ff56d09a37f6bdc6f3cb82522484eac175e8886db878be8be000000000bc7afd87473b788b2d55fd94e846f51afb0cfcea776fa0cb4aa447ac0eaeff85ebc89149ffff001d06735d69","01000000b26cc759d86a88669110c0330e280400dbc3c7f5610cb8b14de169f1000000007337094225a11ccc51ec803a8cc4d259dfdb2ddd8748276872fa8f3ade59b36d2acc9149ffff001d20f6615d","01000000a82c1bfed6e7ea0768a689ab6133fd97cfd8d6700e44a973b8f442c700000000d8f397f4a245093b4092ead2729a43d9c8c8d3fd007914e2d0c66e082263cf0d0cd29149ffff001d068f5b7b","0100000076e8499865de521f6c77f9721481df1adce71d592ad9767ad9ed05710000000037a19abbaafefb41f087192939a22642952d406c005aa3684538d19c69b84a3136d59149ffff001d36cd2962","01000000601f0f3b4a525904bfd40f92fe5f10b79f785f8cadaad6cb74f0accf00000000949d38959f0be72cc72469c63b55515141eff0e7a76d12d87e0431178075b34a72d99149ffff001d289455ef","01000000892c651c18e21e19fe181a07de74c8e30c7a28d059a7c28ab16ebd66000000008a0a85b0ae34afd436fcfaf3252c0160b046d09b9715f44144b2bf95acb7a261a7d99149ffff001d2c979000","01000000ee98fab8cb6e71b9a1cc37496161c75249b14130ab31be01277a9a0100000000a4ec0d35d7ec2f6bb7f02e73d9f8e86bbb279bbcb5b1bfd4e8b6f6bad974ffebccda9149ffff001dc9098203","01000000d80b27dbf48c7cd6d0779ec0b1289841e3de497fdd9c3bed9d5221f90000000072ebb495d07ed7c919ce307ca200c2b660a616e2591fb87591cafe8bcd91fca66bdd9149ffff001d2eab5a12","0100000064c56692ab51e649dbdf9906675c69f82b51c35c586d6312c5dacd650000000020b073020d20e47093766628a413c297bb238fb913fffee50d95da92ba90917fd8df9149ffff001d38180e47","010000007de308985976b0ea0c19bb702ffffbadd3f5c3dcd4721d359bf5feaf0000000076b82db3399d2e75c2fecffc1aefb0e08d8e5d3364c8f96d46b5679a5dfd946b69e19149ffff001d71406806","01000000275e2cbae6f10c9a69db19fe7ab8cb09f043ba46bd4957a46ca2021600000000ad722df1517f771375fdbc48a645148365b4b544ba6b29718309bdc1235b756798e39149ffff001d1cef7238","01000000597a2a60ce7ae384ca3f11643b1cc32944fabd31ec0f3324cb3cd99d00000000b8fd856ae2147809b948dd9ea509fed1af5be9a0a399cd7e42b8d92610a2db2dd7e89149ffff001d0154a1bc","0100000004db6fedac54d727a7bd396f94ebc63e0690dd034f86db2c6ee140eb0000000079c0e1d49c12d24e8ca282bb9019af150c75c11521aa079ad4d4ae9212c7d6125aed9149ffff001d1949dbd5","010000002cf32a49870cbb2d7d281961af00a3eb34f1e9b110fa0f3a706d9b1f00000000f4a2686e7ce38f58b5dfc07afb257f8d1ab67e263be1c3ef87adcb0e88ba409e1ff39149ffff001d26a616d0","01000000378a79b458a513a555ef64a94550599b01c465d9a9432f962e96b857000000004c068b7e0f9f9df32444db173c4d09257e8083c2981e46ebc9bf88ebd6a23c60aff69149ffff001d204ecaa8","01000000846e5a8c29fec22227dbb5a6ff182b4fe85224227934303bac7a76fe00000000e551bfea5b1cdd0113c849ff6e889c12bce3e86a95881e44e2f5274d5dad7e2e3ff99149ffff001d06000412","01000000c5fd756a30612ad7c8234fad0d84090919c7ea03ec612a7f44a72e6700000000628f906fa7283af231d410b1f121218a0bb30fd8a3223e7d8798e892ce70ccd39efb9149ffff001d17ba6b60","01000000310d0e21f2256bbc5b913b407751c454392df5f3d65fcfc3cb1cde390000000041886f7ca73a29a08c1a098d084f7c3b7dd23793a439ceb30d364121489c3a8c5dff9149ffff001d30e018c9","01000000615164d1b1de0d5592d8104eea7f1df76b371c02af82d1a4511158ee00000000c894d85267d877b6e545225ec14bc001e72fae22a3b1a0cd723cbe170114bcf044009249ffff001dec881604","01000000a4d940885075a916fdcd73f3404cc1d984ea649100e111c13a2119b90000000094acbbe0dd76bf62f3f35d409d8fd0edfa8293fa262552bc1aea96f3ffc15b0dcd019249ffff001d045f6bb0","0100000085d82ac88e3b0217dd2f682ae29201ee58bab2dc4ffbf9699360f02d0000000058c3e06e5378572eb21efd637119a8b57b861ce4ec1ad318dd1136cd8de2576595079249ffff001da5936017","01000000b8b65c044c1e7c59c29f5f39509f876519fc749a23993156117e6ac9000000002119a7bd351265054437c142fe63996a73f2031171deb7bc30f1f5b1a45560c8c8079249ffff001d1ce702e6","01000000f25fcab5193ef316139532628fd0ccb6d84414e550ebaf44ffa590b5000000005e3148fd143d8f5ee9bb5a351f89241aa544294c9d5cfd39cae064f319a305a71a099249ffff001d270b9508","01000000250bda52d799b5336eacd8513d8a68be05db9adf81a81849bbab86a1000000003752d0028e9886a81c3ac9b2dfcfa682f542029d1c1123a555539e56f1a68834370e9249ffff001d1e8e2855","010000008b398f5bd9f82a52baf8cf4c9e842f159db4e50b12d8649f2188662900000000463fd62a81db021005c82e73b2d37e217538e6db084835e4ff2779f32cbee95871109249ffff001d25746719","01000000e52ad85001e97f7c11e8289ab3daa8619e524aab96312a90b5e1d217000000008ae7252685b95e964eb83381b3e427c6e478b4b88dcbfb18d4f9319e0907a70fb1119249ffff001d8d1b4105","01000000846da45ca9099e18c8fe2b3c4603325cb4ebb9fb63be95f05490cf7b000000002b0a5d68715da115c876d8ff7a22d414237512f8ba65d0705f8c825d78ac39e673139249ffff001dcfb6d404","01000000aec32d7cedd6f3def2f6f2cdc5facbfcd1c73bb02e05922c6b8cd85d00000000691fa842f708ad09c4c8cb4f4382c431ebbe0140a2b5faedbf49d6b960b29a9bc0159249ffff001d37409bfd","01000000c76604132be1f7a26fa122792bbce9c8750fb6cf5d0d84a4a8d0ff130000000031299784a42387d2a9b4f45e9723e9005924f3ebc9d98718ff52a44a4c08ec9682199249ffff001d01b93be2","01000000cc0fb7a181c498334b0987a5bc07836505b32969d070d77d8048866f000000003bf970831781189fdd331cdf7953acf49d97bf4b54979c4ed2a5be274557d7abfa1c9249ffff001d3350274b","01000000e368f0e434a634d2b1c009bd38761ee8fb4dd733bc307f850f8d77c20000000089a485f25efc7279495b7fb0f1564f8e2da897f7805fd888c6a6a309b83660ff4c1f9249ffff001d58bec709","01000000c635cb97b83a245a89dd33784ad1e5eb11831c020e5a9b477b2d596e00000000be3bc2240a0a2973a4b474f8e024d192e52f53b8ab16b119d075092b26136597a9209249ffff001d85632503","0100000018d4b5a065d4e3269b0dde0f2f2ebf5f8ea64442d4ada08a8a9672ab0000000068ef3577daff64a002378375001ceac2c17176cd8edfab9970cc48a5113259ebce209249ffff001d6f159d00","01000000654fcf7c022b2be109ef278299357e9217e45602b1059f3617b1ec0c000000005eb871735a9d82ac05e59a2adaaf65af1978ff43f4a697085c23cb08aba62c0598219249ffff001d01d4a0fa","01000000d6a3d17c690bb47312ba414594622e7edd68f02fcd9fc12d74942fc0000000008deeaec3aecd56e6e6b45c058d195428003c87b3ec0c107f56dfd6ee3c1d5b1733239249ffff001d9d7ecd04","01000000eff5ba276c1f748cce1ac184de8fcd7e0d3cf6ce98cff8f5dc846fcc00000000dda5f6e80fb0219801f12930151635ac4e359f9946f2c3e114cf3b3b14999e1fe9239249ffff001dbdcc4203","010000007557b0be28c43121b05d05696fbde9b039eedb0d128632003512c7fe0000000032da5cd216b83cdfffc58f8f01a8ef2c6eb88c09cd5e27a6f213f938e0591581fd239249ffff001d230b1477","01000000d76437a4a0e7dd7c65c16b4d41137c1335d1a4160677c7764380f48500000000e145098192ca485008e7e00f135e092b1eb8b444bb854846912ac9911c31648d7c269249ffff001d1c3ff26d","010000005c400d4bcf78a34aff89c5139cc16569dc3db0e0d83481665bffb09600000000a09e56a66d2b690e10b4e6bd91eb422570e9abc7b9bba45be142f882f9043895e5279249ffff001d1b277b04","010000003b299c3100ba05571ef35eb7d9a05b63b175e299cfcd483730f4c37b00000000da54e247b619546fce8463cbc415caa625c94466078165add50e9a9b4f783173832a9249ffff001d208a4cb0","01000000c953cd9a42bd653f9c0d770f2aad91f9bde092732b38acca022fdd0700000000d89905198ed8f6c3d7b6bd19253507532e4f67fa8cfa51c9b61ad14016f1c631652e9249ffff001d065b5983","01000000eaa8455198181b78c3a6024e135493524227b940220f4f22b86dcfd400000000aca1b047657642e6a7aa43c2a1191e626d410a209109b1aa0317c6505417dc945d309249ffff001d203f5996","0100000063c7ad6efcf61506e460c83f62c9bfd7614ac495c138e101d811f08e00000000c25423f372e8cb27706e3fd85ff69b6b26ad5ed869b69f5745ad09f98eba11756e319249ffff001db4ab0b04","010000002cc81bb67d33bcc89feb911c9d75240396f9fc7f1b72bfa87228ed3000000000d1da0af78248b4e1f42f11dd4e4384e014567a93e430cc49daa90acea1e7406c31329249ffff001d13458702","010000008242739efafd371fafaa40b853621063f61bd02a77570da0b97ff9f60000000092c7c8e7ce51b2d18d539ba57035ecc6904e6b6b070db031617a6f72b88ebf91c2349249ffff001d01828974","01000000f955bc34502f77db47970ca1cf57a703041771113169eac674ddcc3a000000007ee08733bc171fb3be69f82978e8b1a974ba39f64105c6d3c2cf227db12b85c267399249ffff001d1b3778a8","01000000c01c856b46fa816b07b0da271f85caf347a6ba539f5312b598af432100000000858a64c26b01242e4be20da714b0e0578f34b87875d7c006e59fe8dcbe6096bc753d9249ffff001daf4a7707","0100000035c42bae6d922451f3aac9b740c9b2fcbd6febbf1a9376e4fc5fa48500000000cad330b67c60197889c9225e0d28d6811146d5412a4a39a8732de50510af03d8173e9249ffff001d14dd0f0d","010000003532c1c2037adbcee984fc611b6dbd3809a9c11905772aeb1ac16653000000008dcdab5dad104e4bd8ea1a4719618bc6249848001025d91b6e7e379a200fe08941419249ffff001d04f21128","010000003515b590bd5fe0ab1f4ae34c02050094b37f5e05141461b19513ac4100000000a9bdc647552dadaf38d867a2064f0694b01767df2dd5d245573cd1817723a0416c429249ffff001d449ffa04","01000000a7228ae684a4601e4d3515b0b1ca7205e3a05ef211a6c8d47cbe8c5c0000000024e76524c82dc9cb218e3c6b5bb4a45d347bbe15fb1286bd7717fec33650d95aff439249ffff001d39e8dec7","010000000ef80df1069428648e6588a90411406806475f8462e178bb0340515200000000ad339ce22d0e94dca724ef18c9158b5a3947fe7581b8f0ea91d0987740aa6fce84459249ffff001d20e6293f","01000000e5d996e03cec8c80179b2d7b69d46feb7b45fae74d26746bd9e1433500000000442b3d4f9a0659fcd92eee4542e62c1f981bc2b484688b4b140dbfe323215914fa4a9249ffff001d2fcae497","010000009061a6f53ff4780687f099b1a92f252f7f28cf04f0bd38bcaeb8aba2000000001dc0744038c3520cd7aa83e2f0bc28e8bfd5be32fdc5da1eedc93eab9fd29005724e9249ffff001d05243698","01000000885555f21822ba4e0fab1bd792ef2b190d2ff0db3e6b946e9daace5000000000e19fc3f51c0d57a611ff2e6f3b0d8445cc0d5c4525f8007af5e1de8fbc2e22ca6e529249ffff001dd3ac8a05","010000009571eb39f5ccbf90d61dffef146c526fca5ea89196a02d263625e3b2000000006d35861785347a47d361a985fcd6bc56e67898e53283df6a32512999e0a398c0d8529249ffff001d312470f6","010000004ee7d41f481b6522e55af8cc4bffb13904af7c6aa9d29976edcf2f390000000029a16558d10eec54e4d50792d5f8fe0b77f2899ada093835505857c49f39316354559249ffff001d19f5a927","010000003446f065bebf72babb1bdb9a51abe5a47458ea7b39a49664692809ac00000000e70cd5f15d2fc9d76a938286e653153657d108fca6fdd425b6b5b878a4ac6e2eb8559249ffff001dce6a5f01","01000000ee43b10515b00dc4ce817c4afdf7e8544ab0f126695cdd5163786de2000000001b5b3dc271c7a0e039dd5a478c43246d3812052b4088c6a1de1bf9387cb0f7fcea569249ffff001d21ffd613","010000005c2a52f277854522366e23062111999917e2158e6895f0ae42b43dae00000000e49bd847cf031993095a47b17c85f04a54358673582aeedf614e555f1425b00d57589249ffff001d387e27c9","01000000b1665cd741b293686cc0f1224a2cfa32a9b62fce26132cecb7d3fe1b00000000069de6dfed0fae31e1fcb1678d96005bbc8b08660fc04305b76e0bd88fab66765b5a9249ffff001deba93f09","010000004d27a25bac49c0e4fb1f48738bbe16f4d371b2d148135dd7b1e9bfba00000000a7a6b19b514a3aa1bd2aea6ad9e04f55118d3526913bc98efc2b3c3948684acb695b9249ffff001d2f758bdf","01000000f3296a8412cdf8bc678b260625a8c67ddb5c693195f2138e56bbddd0000000007398eabb4cd1714f6d390aa2bebe5c33a1c5190b532f90c723f07ebf6576553a475f9249ffff001d39e04f4a","01000000698f68cdcc378fe0d3ceb22710d74c6b8f0ef3417d70f8d3f0a63ffb00000000688040d62f6a94778e7bb5870d566f724bac080597d51b256dbd231f7f8590b144619249ffff001d335cea8f","010000007d8955d5e1fab4c4177b4e68caa63d50fe93707b15ad876c5d06e50b00000000651142360a47bbc624871364bf002337a4b7b849ea80c4366da4a8b6d26f848e18649249ffff001d264958af","01000000cf10167e3a7aefd8a81395dfa6b5100cc39a7c5ff1333d4a283f97e300000000970335aab6e2ead1bdc61a12823017b5617a88d7ad3fa99b0603798fcaa6a462b3649249ffff001da3e59d01","01000000f90feb7d2b269921ed38eff16022f3dd7b49a6a08e7ac6e68d194f8600000000068d21853852fc74cc05ca767e01810c7389441953302828a3401a390869ff1d45669249ffff001dc2e62801","01000000d5f7c61efd2e08896ecd9793c0efd69704ec02ec47a611dea4e1846a00000000f00ac52151e815f6f34aaa468e9995a00c7019e922f3916c2a2c2916592a4ffeee699249ffff001d273e19d6","01000000a1421d30563e015ab91a0bd448a7996f7038fe54cf591518a61a028e0000000092e3120f503089f73d73031014ca3f876606c76c1685106ce96226d3999bfc76266c9249ffff001d06347063","01000000b2d023db7b85bfec001f3a74fd03a5cfa02661d8073a798198db0798000000001f6b7769cdaf3197a69ebe13913f20b3bd9119a52ec89ea1bdd48b77a5f391a92a6f9249ffff001d1a6e0867","010000002d1b4429b29dc68b3c8ecce1aac9b09e8cebdd16f29b8d98561b6de70000000011ad133b6985f53061ec71db773bc1b042c3bca079c7b60c706d79ffb43c2ccb34719249ffff001dcab4ec08","01000000879aaa1b413a1d11d2ff77fbab99439975fa30a87042d0806ea8bda00000000027dd4d0827b1a2ad128771a484461c875c5248967812b2df0430e0af7f3f3579d6719249ffff001d289fce05","010000006d852197297803e3b6dd48f6ea7daf4296bcb9099c66f608e38a96210000000033ad0a6ebee49fe2b216ee0adef390965921b6f2600adc81ac9cc47c4ad8bde68a739249ffff001d955dc907","0100000007bcf5c790c50a3eab050df44e278983e7a222e27b0023514aa4517b0000000066e51caba6d63f453e2431813278d93b62d6ce9770188a316d79636fbadb860d80749249ffff001d34a3ed26","010000000a962f63d1a01f8cd09b7f3d1b972481a63aab623224ca0c1bada79f000000003da704bf9ab332613c13fff1759f9b84eb0883121dad5b5f392a40dcc08d3acb12769249ffff001d2497eb20","01000000681d27b2f2f8dcdc0b05f7b85804edf2db012df31541ee043281f7e700000000bf5d7404cbb70e6d158be12c0366d3665c4f2a3504c74cb8e207b9ec4cafb90037789249ffff001d39b5ac8f","01000000cedcd47727d6144f99f09d7f826fd7852e33f0152ac9abbd1b2796c500000000541193c6d53a84e7dfb5a49ef16098704617dfdfe1cd07389b00a990e94e06bfa57a9249ffff001d273e82ee","01000000c72d359536481383e8fd0e5ed2ec5aeffae209d5e191337b33df0944000000007c2333b906beac9033a1dda5e162dc25e3eb1535a29bb1589ca3f6c11c107cda88809249ffff001d1e7512e1","010000001a4050318e8aa9ca944ce2e00b2996f29a2d8aabdb8b3c224fcd6bde000000008e922aec64201cac2b51e055feb6e33671d6e40f6596226b3a1f4d7eb86734ae6e829249ffff001d076191db","0100000016a2a3eb5f60e05cd52b8937daf155dcc158e416a9a624f45e7acb2a000000006748b247d345f2d78dd2ee21850b2f895e6b8de6e70292fe0c6634cb0e1314d8f9829249ffff001dd840f601","010000004c0940c93bd9f27cf9e38a25b7a83a27e3b28aff62fcc96451d0e9e6000000005765fbf32a363b2d31ab43fba07f1f0c282901974ff6be712b63686c83d772cdac859249ffff001d2b1b8228","0100000037efe6bfaf5167866e1aead5ae6253d7ba5b1766958baa5115d108ee0000000092e13604773abf53879604d17c510cefa953f77ea6dc4898eb6aef5095bdf2b73e879249ffff001dbfb14806","01000000f86c99db81b6ed19c3162df0a8a6e760080f0df59078795409f81e76000000007b7a0243f51c2fa9b947159545dbd34e194730165fecfd55aa94defafa559edac28a9249ffff001dfedf5b11","0100000014af216c6dc0d1fb508607f48765459bb40d77307206ba3f7c72bc42000000007e2008009ae2b74dc9135bc951df76eaf640272961ba2b541ce719f6d97d1d8aad8b9249ffff001d071c1486","0100000092a8df81b3187b3ed4eb2b9c7d5515cd1e7cd60cc3efb4f3198b1dff0000000062c03e6192ae85165f1611a34b5ff902c70a54f1b8c27ef4106468e92e286608308c9249ffff001d12be1a02","01000000c6f9dc6dadfc87284f85c7e7676aea6bd5ecfb8084f96781eb3ca1b80000000066fa8943427713a1f673e613067d2ec7da333549ed27c8563d798a0c503a734c598e9249ffff001d33b70b84","010000000b662aea6addc386f70a85ce6c459f809f9be8eb378571b888512978000000000143be0d5b40774c6a740994012959403e942e59aea32980d5909909dbbde01538949249ffff001d00780ddc","0100000015b950673d2477e89adc36af93123cfe58fb0239baa54592b7221c74000000008725cb1044c229cfa47a96b9c944429c0fe50df9a64e52f434ef573b886359af29969249ffff001d28975426","01000000fbd4949ad4eed9a1498279458ea4e331f7fcb253f0e2d75bddf02f2f000000004774aa7750c37ad8baa34b74d723cf76c2dc30994d8b5dc7e8cf714a59e2356f66989249ffff001d352d1a98","01000000dc33aee49b69263cd94a03ba8d0305dad930e68913e0dbc179e3e43200000000ee63d981403e56ac1f058b11ae571e310256bd58034a59ed4fa26565d084e84d799a9249ffff001d01ffbb0f","01000000f1d18abf5e4cd7cbb31bef8d57c1145bdb31b98be21a7e25eceab7b50000000013f1c9017297e6c9bd2d22426a3bcc15218d4af2976a5c762d43612f7efbb347259c9249ffff001dea1f0005","0100000051537ba278facf709481154669ae60c0e7a1a6af14beba227b2a4d44000000002b3bc8089814d569f488be810eb84a9feb649dc01cdb8a46a4086ce96ea7c8ac0ea09249ffff001d38420f6b","01000000106b9358a69e9255cf6d378e797befd9de41020102fd5f092b8e6f3c0000000056fa131c367a340b0f345ac9a7173fe10adcd4c6b919204b71c11f77501e736ddfa09249ffff001da47d1403","0100000076ed3bdc3e046a0a46370f3011b673d685a85454e555474549e7f12300000000cbd2ff70a457c20f0fe52f6eb7e34bde68311c9c6a3b873a0f4639d69e93d9d64da39249ffff001d3a2e1120","010000003843aa1f88daa2acf7e8a3c531bb4bc14d08f54a15b31556979931bc000000006b843fd862811dfb51ec3b05073bd7eeb6f0a8ff8c2b836e2a2aa528d3ade062e3a69249ffff001d324cea08","0100000000ba2bc54219b1fa26c4819f6a748153991027cd075e73268a2392ff00000000653bad716d7700aea971a8955f4eec0d5e7f51005b112e8c322e2947d8b7a9f1f5a99249ffff001d1ed2f6a6","0100000096f6c54c8e4ba397fd224d78f9576fac872bc8cd8a75778b218086d400000000efcbe8db92e69fefe9e6d3f41bba77c8e9a869dd2585fe3bc9d83d04d1e8bba271ad9249ffff001d024d1f2b","01000000c48fbc468cfd86dc9f8361bf6c1d5c51e941375ef598b8041e1bd24f00000000daec84f4f5f08e04be9e87c8511e74416ab729c86e47d12fbded7dca93d8329189b19249ffff001d1f970bc6","010000008cf2b538f6475eed8b40ba8ef86b1de0d42d5b7831eafaac9a080c1f0000000087e6912642158e7b414e97bb12f93d178f3035273451b1885a5760d1848f0f0d26b79249ffff001d03d2cddf","01000000ff89f3022e722e82165384d35bea382ad20abb0eccf9785b6faba14200000000920cb3075cab86239dd609462df8d887f0d009758e337832e66f1e5e5049febca9ba9249ffff001d28239ca5","01000000f6e15e5d7175965d26a32170c419baf99ea2f4e58ecd9ef09f8524c200000000cf603100a59fec9f93d9c9828522738f004dbfa79dbefe6b870ad29edb8be9d83cbb9249ffff001dc0c21501","01000000abc225aebd023eba52ec7e7934eb5ba46d2e5a019aea3ad3754cb7b000000000f91047a176950d2cfea337aaa85ae0185621b91798ef7fa56ccbc0a1891154b041c09249ffff001d387d3477","010000003186a3c21d66918d1f8c5d826dcf44a62d677458d3330b02e3f7c67c0000000040c09385254421ba0bd933f14bbad14d4b882c9028f17d7d711614a3b30870fe5dc29249ffff001d59e1130a","010000004e40dc5dbec5e1be15fcd090e4a6e2024c34a041bd465614fbfc23c70000000020d94351260b02ae509d7b363d39b1725514d432b6b57f3a1310739fcf80444645c49249ffff001d92e09e07","0100000076903fcd8f99520c1a0389cdcd56368a3951634a91a8cac76c7ca31900000000d9b6d11c6f33b700c3ed175c28b899df285707363b0c8581a3a82bbfa5c657cf72c49249ffff001d1a444479","0100000082240887ba32fe87682408e4706096503c310ce0d71cf485f0482bea00000000173f8ca22958801f5e94f8221e2d60552ab00b1301e687895b6e97e3aec6396739c99249ffff001d372db122","01000000aa48ce25749889fc19e0f382c1e268db6cd7c3ebbe8cd0f2a51d0b6c00000000e167b48fe0cea41fdf48cabb4c2d929bd47d57293e8ae2b12049b6dc95315476d6cb9249ffff001d6ceb300c","01000000fea4f349d48f883760fc858fff822969d8032e936a380b10f0166f490000000054be32277295aa428f67c69aacab55f29d1eb7f63ed984d65291d14aab18502601cd9249ffff001d314b2e93","0100000075a6ca72d35949652937c2821288424a5ead5488374327579e59fc860000000062493122c94c954766cb67dcee894e4ed71b5eb3807b529942f99dffa3b553680bd09249ffff001d256f0908","0100000080a3cd2ff1fbac65964c7739516266dd22f31a6be9ceb212363c215300000000e6420bfcc1c8de64c41a8a13220f926f658ab0a82a3bad466bb334ca74d657cbacd09249ffff001d399f7b4a","010000007264d7f99eaf2d52176765c1db5338af8987838acdbab38a868217f300000000d206ecd3d6c80fde530cf0b9fa15283728dede7727f65a6df18c99accd68933fbdd69249ffff001d074ad768","01000000a942df211b8ba63580dbed37b840f076c49aaa435dc89b4e6d17f60c00000000ce4e849141943fb833d1d6fba1bf64104e7a04935fd4443a8fd81b8aea42e93237da9249ffff001d1bf2d1cf","01000000bd7cf08c579131325bec3d4266878fa49df59ac4935d01f28b1cf9db0000000021a8d983c73d498b44ade64832bdd5074f4eefecd41c62d2eebddabd658b65263cdf9249ffff001d351174a0","010000000edd3ac8e774c0791689b2136a990029f03a2aad8f28c56ee899d20700000000edae20d6410834de1d93f478be1ab3c89d8ff4cb8240ebc5d724df1315f6db49b3e49249ffff001d36e3d89b","0100000086d359dbf7cb0d68a028d1bc1167d5a25052ada56b7c4d87a4753c35000000008960795725f6800a126fdb4560a65f6a61ac0c0cdba21a7332b271b46f89966da7e59249ffff001d61ae6304","01000000fbde4eb173af45c3e484e378b428f2afd5135d919f3548876fd6fd7900000000fde1416fb1be93ecb6142b8a747fb72f385a83ae9cde1bf061fb9b93206272f297e69249ffff001d2d80c949","01000000389b7fa6cd13cf30880852441b48f5118bbc757b137860483a1f129800000000cace8d14a4ae1fa993656b30a390fddc914de2b64004d0aba14f37964bdf1ca85eeb9249ffff001d3956c737","010000005274107c15e0f6e7286e779f054d712b5938ea815ef4902dc6b8591100000000720d3f44ddf903d96a97582a85655f62b8d1e1740b5474181cc46fed32551b0c5eef9249ffff001d176cb0af","0100000094805b4754f51160ca6f2918c0a5668152109f80b6668a6fdca939cb00000000518127fbadc6951b8598f757baac768c9f44b7de24214c4baa162900a3886c6179f39249ffff001d3a117f0d","01000000b14dfb2d4f4680196576c90bd0785903fe33f4608ae4cf1a39505b1a000000005b77a0462049b6cbb1aba55b30ba872810e8a954c562513cdba84e1c21e39c3e3df59249ffff001ddbcfa105","01000000f3c90b5a62c32e3e2e5bc0fc87e7ae5db29d62eb286eb3eec93d453400000000ff5a147583f20609b4904a867e93c0c73324472c85e4f11e0c52cfe7ec07e51718f69249ffff001d36ea29d7","010000009b7ec31025191ca5c50d653cb4557592395cfb576d4176708908486d00000000a48bb43153aa1300769ef0e62c93d94f435ec1be3b60824f0f6eb9a3751e14dd31fa9249ffff001d1cc5f19a","01000000bff223c1f1751793c501bd847ddec7a0c85631e7c068bb402c87022f00000000792ea5e8c01332c08989dd10d74df1945d06e1848c27ce8916b8545019f69fdabafb9249ffff001d2574508f","010000008be0ced7f6fab944357fecb2414e6af293804ac1593e803e353233ff00000000292241ff40910af905c0a1d8335f25daa1afe1052a59634bb493bceeead061b80f019349ffff001d2ce89021","0100000080b858a1ba4a4a49e42e3f69bf2a9561d19ae16bae24c97a8515696d000000008310ddc067b0f3775b3076027e6ddbc8007e288080244f9a2a5298174a23f87ed1039349ffff001d5819390d","01000000634d3585f40d585e1830046470c46f8e6146e1efeb57a3a87ebda07a000000003c482be4d1440f34c9bdfad7d39a966617b69a75ae314a079866d2d797ba1a1030069349ffff001da4bdd809","010000008c00e648b8884ed3ac1dc99a6564c33945ce28f904e25c9de39b6c750000000090a41d748898512e8c66704d3dcc6049dbbbc18120c96be8a5900bcc475a3b8bac069349ffff001d242b9e6c","01000000aab919ee6e6aa52dfee3585f0dfd836501cc0874b4686e624903733a00000000aeab80d563ce21eb3a86195ee9915beadaf77bedcf747e48f93c1456296bee85120c9349ffff001d344f42bd","01000000c0c50d5c5f54f5d4cc323f4840b627c02e4d30807c5b7166ad381b1700000000ca98d5e86d14211fe9def1015373d138e5b01b1de7bf2baacb707a66cce2156ed3129349ffff001d36a85885","010000000722d7c85ad479dea69d9933275d08982a35985ceb9550295b16c9ae00000000bb2aac297a5d5a7ccdc262258a1e2450baca2adc6251535dbb1de3360475fff04c159349ffff001d285ddb31","010000006c8e4a25223496b0b3c166a1ce38a1f0ea84e912f67f17a40589f20c00000000474962509d87b2456eeaab9fb1c74da3446ce2c22808921f95ba38c1cdf221f7b6179349ffff001d6d878306","01000000e199ce48ed56bdd2782cfe552ed470219752f5d9dda5e2c2be1299b500000000fbe7d67f0eafdbc012b2a190e1141d636b649be41e3af7ff8cc8070e2d3ba298511b9349ffff001d261b0dda","01000000080f2de25e2ece7f26073e3720280c91555b3dcba8cf7331da5be8bb000000000712133f8bcc483a2ac8954f03b807e1a060261a0c36b0ba2aa632e87d5e9994b81c9349ffff001d04888092","01000000b8f9b853a736705693743a6e29ee77abfc68ec52771df21b6a52dc190000000006a64ef73767aad9e7239a4929dbf39435b5193df608005749fd2531acc8ce3a0c1f9349ffff001d1c98dd22","01000000bf3ebfaf833fc6f464a6cdc78efba078b4dcb8cc144acf3f3405e78e0000000057a5651416d248963262235abb3eb7492cf3459a861f72651bf275cf9869289703259349ffff001d25dda550","01000000af19a9285ea362bdc917e0bf443170910336212c1db3a7bd5c3fc3d6000000005480f75e58aa6e256d1ed08c93f94108c71d96ad69555aaa4f8010e9b18ee2238d289349ffff001d020a9fa9","01000000899a1a8d2ea6766226955270b22bcc81d80f55f0122c438e1d0e86590000000052923772ed28623c4f41c7292df0cbc10f89d312e0c605543c41f7f81d63cd94a62e9349ffff001d30fcc61c","01000000e782aabcab99aa8b1363ef88e76d5e92a26291004dbbc9b65dc90e98000000007df6546faf65612a776a23459fd371a1cef153d9a628835a245003e34cb195e06b339349ffff001d07d927c8","01000000d0775e84915afe51649a660fb0730a28e11217e918a116f442c9ec1400000000c8a2c232061855bd9bb60aa029e8f8ef1c51cf4c49dde167702ad9b6edac9c8789359349ffff001d30a4480f","01000000aa52d4f4cbe43ae2a7da9718aeada58859f38c986aa9c2f7c7d0549d000000003b1f6484b239cbf45fe219ab204837935052dd870b8ccc8fcc6c04b6cda9f56039389349ffff001d10a5650c","0100000016403ef5dd74ecbb430d3b40eaf63263f5ebcec6f8ce61a719b10085000000000546d2d3b6dc9bbb50c34ae5dd8a6ade29a05a79f45a7aba4d339cc06392f1b4e73a9349ffff001d36bd783a","01000000a2bb24b5a8c3fc32e37cbd51772d990289aa8239d74dfdec26e67f2e00000000db3dad58d1d5ba7362b2cfdcae26df9db6867058cc020f0ed47dbbeaa4eaa6b5473d9349ffff001d2340e60c","01000000e855b63fcdd51c2a52eaa5b822ee30522197e801b38fd568d1e55a000000000055c419e75cf9cd9974aafa2cbc65d9d59153e40e8ddf0c9ef50497fee2814abcfe3e9349ffff001d2e6ad974","01000000e503c18bbc37eed6ed9bb4194527832abf72ed40019d4854cb0776b70000000060572352cf4408c5314c84954dc8285fa593b6246758e196b04e3b8c586b98caac429349ffff001d000e7338","01000000e65c8476e4ec3e3aa53e69c6aa855f42bcd616d239c047544dfc50db000000003a391c2336bd8ba0b4fd4ef6364d3e9d60283993f645a15fc414d1ed395e569dca449349ffff001d356d687d","01000000c69476b3064499a5d5cae0ef38a782cdccb49b075a9114c1966a4054000000009efe3e2a954487fc68c2b8176bcb46cffa8058f73dae493c301dbb1f87663fd729459349ffff001d0a134701","0100000002cef2d3e3f831d28c0eea99de2e27a61da8e24039fc15265da355c000000000ce7f430452d8864e02d54a82ab6c497d8adf412fb76ea1a9c36d15fa906b4fbc1e499349ffff001d3150c8c9","01000000f296737947496b71e6f94891bae66e716f8f0dcc886659dafbe02f6b00000000e84f9e7ab237bb437d5f5d416411b97dee08127fb590f9191331468b8823ae36934b9349ffff001d1cf75b18","01000000a6aadc6c87d597af28a96a5f84121743fe5541699fa8c08ee3459a7700000000a62bb07b6de7b941c4227bc1e41e9faf430f4a04166374d6ec8db71bfa3f9eed7c4f9349ffff001d1532f41c","0100000069a8e45b6ae7928fb8c5060b424f5681c5d515bd7c7c1fd38fbe3fc6000000003bcdaa87c73c7a7363f4d1c6d4cf030d03dfcab474a78e1c7516aa44a8a157d56d509349ffff001dad9ded03","010000008e1cca6183a9fc7e19cbdac6b49f543a48376d7978ea2ba4a8656997000000005fda8e0fb4cfd953411bf504980a9d9aed31bac6629cffff5c5de8ff6943855df4529349ffff001d069647c3","010000001cdc3337f3910befa75d924cce7cd3049edcc36da14fdff34a9dca4d00000000aa2af423507391c209126124d931daeb4b549febc492323f65bf839aac696c4b92549349ffff001d238dc904","01000000db7898684d80434c4748f0a43f3dc3b1ff6a418c3218f9d217f9c3a400000000add78d3ea374084485e3e5c230cc4f5f71e6247731b8980a4506d38568ef453de7589349ffff001d26c63388","01000000bfadce5c8015aa63e5748edd1f480b62c71a0e84ff92a99cf5fea66e00000000af3480c7073de154789f693718f6bafd05a199f2b4cef80073deb424860bf7d7ba5a9349ffff001d09afef74","010000004c8789fcbe4f1ed44cc08f0681c0a3d04e2032496f91fbde4d3b5565000000004c0fd2aa17b0a190f8b3dcb2f1ce92b69a2cbf472818c8700e3f402bf7798986ae5b9349ffff001d26cdd003","01000000500a4231a29f1d75a3942dc9dfab537d9ad8b0dde191183d81d6f7ec0000000050f00404a228fb6b8634f34e937968f5e29408cd3b4a2478045d159a0112fd06445e9349ffff001d810a7b0a","01000000b2552fdb6f91558d0226fc5c4a8743d4f2b9a21296e9ebacb04386c3000000004a9664174ca02674d542057630751b0c72c47dc9ef473158eb125020505af364a05f9349ffff001ded58ad06","0100000026578ed865408575db8fa4643bc9bd267e39fcdfc88c142b606760b9000000000e7e61b1e9f4d74f5e74bd1fcd115701494e43ea410e9cd2fe62501e256bab8620609349ffff001d381732f4","01000000f3016a9f627a9dfe1c78b3fdd3ed8b60bc69ab30fbfeeb974f14c64f00000000aa3d45c566cf61c73cad69012e6be3301097ff11683736ef0a066ba5dd0caaf9f9649349ffff001d1e0cef3c","01000000b10282d711ec0ed6f46d2c6a7ce86b26b96182c86f4c4a2883be280b00000000eb3d80891e75c479ffa8e83e9fda2046ddb263b580ba2e5deb8dce15a12c4bab29659349ffff001dc4917b00","0100000019253024153d9c6dbe1826dd0bb35b9510eea659699ea5227cf493d400000000a7d8a6097123a3f88f75b3d561c143d5c4c69ce7622e4e8693140779ed63dc1aed6a9349ffff001d1d982083","01000000fc4928562739bbc8609e2fd333738110ff0998982fb444ae01eb7f0c00000000b86142fb75e69e4277e7f86a2bae10060a262cc10695f240149faeeedd2355a4616e9349ffff001d1c4fbb97","010000001088c74f364f3a1abb6e75432a9e05c95b20062cf4f80ea4c117d23300000000adc3aba5b1d707cfc9f02e9692d260bb708a72028cca249007cf378a028eddf3fe739349ffff001d27b69d40","0100000034111d049adec37e9bcae1fa976f42ded6c455412293a74f7b48c8f60000000023e69df98113584e174dd04db96962a6efbbcfba98b87128d7246589591ce8bda0769349ffff001d430f6f0a","01000000f5ccb60521612d100a166175873b088d2077f8fb9baf5358f214821400000000b12d0ba86c752af9f782eee1a2c0a043a5c6d2910d10ca825204b72f2941ff042c779349ffff001d25d2e436","010000007c1c8128051c57bc96c572ea4e1ed0a3a0689850e39791b02fa2003700000000abfb555499c19eae49c23fc193115e3de52f4d5d8e31c05d73021338c48c2cac627c9349ffff001d04a80c66","010000005184c3b09a24a29b30e9d1ee16b0fa2a5d23ae940db54f44ebcfa19a000000004f392e7e61a5e0cd84f636c2ca7dfcd3b6a83e1ea370f09cfa85708dcf8652c26f7d9349ffff001da2e24e01","010000008d70898410c1eb5cbb01ba68285b16e8112804ab969951b72a60a05000000000281d174330b03ae0df5d572224bf84a339dbae1d4d729dfe75c1f4e464369329497e9349ffff001d1a9ec836","010000005e96c52917f060255c665fe0d309b484c3bb88d754236d4674c60b3800000000218bf546d32252f8d9a42b11043b4adf7bd8621b7753015fd61f4059621f35199b829349ffff001d200516fd","0100000064e0a21fc18d1428b6a16f340b2a2c5569727bac1a6aedcd2df4447e00000000396177637897bef93f84fa19b93d085edecbaaa339d5ae23de1008e3544cd4f39c849349ffff001d05610dc5","0100000062563e15dababa6752e7059df87b19716ed10ea9e80d81ef4f38787100000000401cce1a12a42aa6f97e32b75a9009e3f342c8d69a2c9819780f264649e48a8142859349ffff001de1091d03","010000002c6caafecf285b5dc41dcc6a837532aa37296721ff2fb10704fe0312000000009c7e262d939aa88fcba6096b0249da05c75422c5c636548b2ce9eb4576e1eb3061899349ffff001d1d45803e","01000000ce920a06bc6407881e09f452dd48f38a2d982e38b97af04d17bec76e000000008731eb34d160be97e1e0873ab5da9a63bb8ece9d84fba6ba51ed1c52db92e7e80d8c9349ffff001d3a2df8cb","0100000000cc1994e5bc6bab8db5fa12784dc29ddf6947f1a5e3ac540cd91a26000000007c0cf845bdd15742cdbf5c00140b22090d823afd13ffaa7271ce5a499b205970dc8f9349ffff001d06b973c5","01000000334d6d41db26d9afff39a5db2580519a3c5847fde08180d3681142da0000000042faba94e5de61297ed9d4f77b4a3e0f0a4d329084bcdad3d01e7668267e50900b919349ffff001de010cd04","010000009a180a905cbd1b135576ccd21ec3849ff32218bb6897a829e6ad7d91000000000b1918a6149368d80701ad9b43014ec1d316ce1f15ada11c38e48ba774dd75a1d7959349ffff001d0874a2b3","0100000013365824e57ced12a3c8e973e90f3e4d37098602f5f64529390db4a4000000004e12f548a80c02fafee1cb8a42233f1bc1c9bc1a6c7500cc18b47c884518579512989349ffff001defa5300a","0100000047f9c4e3c9185c3acb0d23874995d4b0f7a13bb51b38bd7a95451fe2000000009ccf81dae422b35eb2071cf7b741217fa9c63c0db78363a277515acae7b8784cbf9a9349ffff001d2c136072","010000001a06de1dd46f038ec4b4e2be69bdb22b7be0938e75debae77c2a690e00000000e0fa183b5b2718e356a83c498fcef0181e6da789c0fcf36350110e6adc9139910fa09349ffff001d098cbff9","010000009c8a4021d50b37791f5533223179f1a589fa24ccbffdd442673a1935000000001e88d1cef97c6ecc191e6db395c77a572eb77adef5220fa9577dd70c1549165199a09349ffff001d96a3bc00","01000000a321e6ba17265f18589a65dd1b8f1daa2fe8ae6286e8382b58e0b6db000000008b50f5ceccab2a991b3c6d128be60acb16aa1c3a31ad15bd1954e5d36df8114131a39349ffff001d06389b2a","01000000ce56e2f93d270b49aa35dac4e058b3d91170f32b3f6255b2b6c6a15100000000385a37717cbbc9053ca96978280c3dd5b2da0e672932a1c86bff2a069f6894f3eba59349ffff001d2f4951ad","010000008c76ca60b1b8b23f432be9eb4679d815495c099f603a9be91de418d2000000007ddea980a8d4409ff4e5d505bae80631a7c29ddd90863ac017ef24a34fe81227f3a79349ffff001d25b7ee07","01000000fd0908e757a12be8d9f145062c701085c90e5f8cb6d1126e271cb22100000000769c3b68a76215dd9044fed7fd37502efffb31d8f9f4babe6a919ebf7c18382e1ea99349ffff001d30f1cf51","01000000ea4398b3398f42de0f6b95e56e3fba1d2653e13fda4e7f82ec35aaf500000000ce2fb3f16112c5d66c0c6fd9ad8be7a1704f23266e0e4d66098477179ea62ccbbdae9349ffff001d03bc31cc","01000000df0c4729114d4c37eb20e668197bc16818b2770cd080289ad0af60f300000000685b8c62dadba57661fa5f8fc4452101d9d0827208e3d20cf720694d4ba1eb19abb29349ffff001d386accfb","0100000063ace9560b61119cc24e149bdd53aeafbf20d176dcf596a240cbf0f000000000a0681213fd00f10096416e2c28fbcf7be67e83963eaf03b85fae6ee3196dbaa010b49349ffff001d12dfc802","01000000da23f652c2b37e1d2a2a56513d85fb92453547e289569891faa0eebe00000000a786e1884e6c41f611e89e4b08a82a98d008f1218d07e90b31e195e24b9dd53b12b79349ffff001d34fa7724","01000000bc47b0e403c3395136b9820b231ee59b2c91a43ce30e45ca5b01f89e00000000460280c0dd52b488ff6d00440575585f9279a2ea9c0238a16ce966ee417bab00c0b89349ffff001d2937b27b","010000009e559bab324edc201046c72d82a62161b42406efeb916369be2f8ac800000000dc04b82cf4120a97de15ece6cbc0b63563e7876f7cf1463e66a6f350429beedd3cbc9349ffff001d20fd5488","010000006cec4c12a1c49df4fba8e92928aa2f8b96ac787572b8c45d1fbbcffc00000000a14a82b38e62b581da29a242d4768aad1808d0f89030172cff20d92c98e6f06367be9349ffff001d04583ef7","01000000d326e2e60ea6f42f2ad39a902a18ca56f3a53b9f9cacf5f83f8ddafe0000000078d9c8fb04ff3b4f905f6171b5642edb13ab6c025f86f17421fcf37ef6fc31b86ac29349ffff001d1f064c26","01000000868845b070a3563f87f47ce10a5f12e17dc31eee3fc9949859b28a6a00000000da839c38470094c072ce401d33255f390ee03134753de24f73683e8dfe5824fa87c29349ffff001d81853f00","0100000067a66ee95ea6f10b78bbbc482e6d3d515c140edbf5c067b26d0f3ef70000000074a70b92d0ffd49e641196f4d6619e005e70ef500051be5372332aae3b028e1710c79349ffff001d25d75a2a","010000008aa1237748e6c8d88fe9e996418deda6b0c301300e461683a7bfc74f00000000984eed5216ad106b60079f27fd85414cc4c9e2e4acb0cff14ce54909e59fe1a197c99349ffff001d8ab42b07","010000007cf69151e607de9dc8207a6d0010298049885d630ea278a7e5c13052000000004018192b9c608e59411814732496900eb04f0c4f1f938912a1e83d45f731e63af3cc9349ffff001d38236d4f","01000000ff165bea12f70c12956bf8b61a93c80990f18fbb019b35eaec7f568c0000000020392bf63fccaf9cd7d4479472bc600938b8bbe7303503eda1f03d7cf556b0ef4fce9349ffff001d3334fbad","0100000038ccb1a16201dc2337c784d934486c3e371819eda976a0ee5113d77d00000000feac22f59c8b3336e9fcf40853c734719d86bc5eabc5741ecf1a5e02a48fd4a57ad19349ffff001d2db8937a","01000000c923a675077b76e9db62d034c4980b59e20b7510600c33bb90bc81cd0000000007ac6250e8fbe5202ba762290dfa361778647ec0d8ddba13d72a6e66ad411b3d07d59349ffff001d2c52a373","010000009a70af1e9b0b2f7401eb2e6618bc7c35c3df08827145f0397fd6cd7200000000d4821890ecfd71f6db89dc2ec7cb79694d4808a22d636778b34a01b1103008b0a1da9349ffff001d1a165e83","010000003c5304b82a9ba9897269bd22fb0fe4f28a6098be4d57e4a6f1cebe0c00000000baa3b6c4235d2c927ac748104e3b4f8fd5d76fe13a04bb6b852548f10b0601d6c6dd9349ffff001d05388a91","010000007efc1d0feb83d3aaf08578ddb1df79b6c22339e1ffcd28c7e92afb3e000000003414d0b28572526d0f33d807f599c27656293a1b68dc8bd2f4998debd99d09c98bde9349ffff001db262d102","0100000087d980099f609cfe9c1bba9e36bd60e2470ade9cd7e5367322a5772000000000afcfcde1d555aee4db3ed02cc4d3b06c938db1f22ce22770bd2c26a15fb26357bfe19349ffff001d1f991600","010000001b4a8ff2499ff1031ea9e3facd372e132bf287bad68702eee677da52000000003b4e7080df4b9b6ab28e53335c64435d90c598c75737394aa7ded4bf0b956744eae39349ffff001d206da497","01000000bf4b48abe4b2b4da10042a4134b0b6de46ae9041674c8bf7dc5d568700000000411f9e2efc7d67b6dc60a9d6ffa7f64259284e52c303a38445733a317aaebef75ce89349ffff001d367360be","01000000d3408007f7d5dc5336297fe421f0d4d8474728552ff8da4cbaf83b7200000000c055dea31162a5a5f28f55289445cd5eff11892269c701aa3bfe7c769fd840cc6aea9349ffff001d35b14c64","01000000230ef09b0384d2512d0270b2082758680f897ed4bc260f83c13bba5300000000ed20d5ec8163ed08705eec80032255b2689e3f6106a6843fd8fd3e74227a999287ee9349ffff001d95204a13","01000000321e9082424243becd3a737bd5af36769b85cb8a3a0aa3c15c95ffcf00000000c9a7d1e3c837b49401017f9b84946403ee7ba2cf1ba5076f04e5e784d098fc031fef9349ffff001d0639bf88","01000000d6305a3271b48a3efc967e2653ecdf0910f20f499daec5c2dd7c3795000000009707cd0aedf17761e6a054e1b2507b367a34133b2f75ff13a45b4c9a351a1bd07cef9349ffff001d18499500","010000000c0ebf6c17be74848ceef085192dc2ab2525e836933e3aaa0b1ad8a800000000dcd4200cf019dec1aebde12c599bb7f696750c7e0864c8709cb182121ac08ae98ef09349ffff001d0821a13b","01000000be74a71ffdec6fbc911499530b1859c810e34280b8a30f54de66fa3b000000008ccc6fc8bc966a4e1774c71212c247e26bfbcdd94e0304bb95dcfac87663bef2fdf29349ffff001d1c802345","01000000bbf06e6e6960f7dfe4ccbf906c51d1d2b49fa51d5197643dbbaafcbc000000005deeab1b5330aa20bcc20641db803846130a978a681a688644ec0756fa732f8888f69349ffff001d30701e06","01000000f65e29759740dc71e5353e1d4839d986dcb7b825ce864563de34690700000000b388e606ded91c4ff597779382705efea9a984fb03076a379cb36381ee8eec8decf79349ffff001d2fa211d6","010000007102235f68aadd2a6c12c273c89db60194c6ca5465142facf4ea92d800000000972e4292ed5d97a71558cafeff674fb7a92bb8d49a9a1b1025038016dcc01fa8c8f89349ffff001dcd7e6f02","010000003911cb36f32d314af9da78fec2c1def95665da05acd8bdf2921818a7000000008e91b5d0b502c1d9b553683ed4f99fe0e965bda18e11e61e808c720f3c4c7f6437fa9349ffff001d32ec17ef","0100000041d42084028838ea241a4b0350746b9cd75af8b8fa43ed01bcf8919900000000f0952851778cb16b5f6dcb85841f84ed63fc1f23a40dd921aee478ccef08667a67fb9349ffff001d1cb79c04","010000000bbc1e79fdf47be72cca263ceda7d5780b78cc9e7d6ee6e932b4c844000000002923dc1724e269ed46ad7a53bec0966f525ba1591b77af7bae5961cdc81c2cab4efe9349ffff001d2eae1f9e","0100000022c934a83ecfb52c5afa3d60a5451ee961ed65c5c3aa7704747e8be1000000008c31f5c1332119d27e9854f1399681dc8b3641c074ffb1eb83e4e70444b7e0b823009449ffff001d286dfaaf","0100000002cc80feb13784d601d0f62ee1b17af767841032a1746a9717dc45f600000000e105eaaf45167a5139a4718fe41180c1e1d9e59da0d4694c7953011dab169e4220029449ffff001d0a94c008","0100000032840574546c217c873abbf6ddd24e5f75317f3412002e259dbdd10c00000000edfe9d5a60cc6eb8c7094a11926f8d414a18b60d611183851e2119ddc1a022181e039449ffff001d15a7e924","01000000dd45010ac7ba4c1b8301976135baeee3c380db70397ee91c07df795200000000082474ddd67c3d7e1f70f9975129cf4219024fa87c3786df164106b6fcf3f0caf3069449ffff001d14bff8ff","01000000076e930ffeae9197d76e8e64e4eb6ae318b03ca3ecb5cb76ab220d69000000007743bd2a7093a8a2812168f462ff065ae9d70044a5ec04c93a7ad186018419bd460a9449ffff001d1679b41c","0100000042a89266152f35a950df49fd6160f0495f55a35043474ae8a92a2e92000000000a04f7c8c7f912816ecb4f1b4a690f6b46a9d5cf5bfea4d2f40b1e1244ab3e4e4f0c9449ffff001d39338961","0100000006dc5816738cbeec48fa5196ad117a6bd1fd2366b4c606dee8686fa800000000432972f65eff1aac3d74e928290197abf7cf5a0123d453a618d8e70a1b2026a8ff109449ffff001d8a3bbe12","010000001ce5e0a3f3ec6471a97fb40571374ffc6a3e5ffb5355ca4b40fb6ea7000000004d18bb2c0a5b5459c584e704001a66da0504e2926191200da51e03681e35db1c0c129449ffff001d387f9858","01000000f9a037a7ae20a3c37c4760344f0e47d422e98f806e3a0bcdec1f884d00000000502a21e66b1e974454cbb33f60f44dedeb61c166e968e293853568b6d0a4a6121e139449ffff001d2dd78f02","01000000e3b8e47ed345cc245d9dad108e5b4826fe44ecba5a792d98d0840281000000007013aa110b9bc1d7faf128e76aa8e3448e604eaa15760ab8c7d1a8d06cd3091021179449ffff001d2839deb9","010000009645ccfab5f23f0289000e8db22d25d4301abe78c2c2b28f2fa8622e00000000aabff005b1a6926d08b343f76d5110133f31e1a4e26e7f4d1c606433b89b3eb3041a9449ffff001d28e1c533","0100000042637d921adccd961637f3225a936e0413a723dbf4cb9a8096da1a8100000000b2a3bf6f18806dde4e44bcb08dcf58459050da9709d82b19fdb29604b91014e81d1d9449ffff001d350d5fbb","01000000640f18e72416475d1cb125d62961d98e346d637ace10ef43964bfb4f00000000c1897e90d7b4b7ae58376eefc3c30259649dfa0220aadde977300d45841292ffa6219449ffff001d36e7ae48","01000000e6f2a1539b9481d19f0a4f256bb8c372e41f240d24527920caa5f7dc00000000e1324af7755fcdd13e504a831af2901daa08f9a40abc73f95ed79f9cd4f4beeba5249449ffff001d1959777b","01000000838b2097e2bf0f0ebeb0cf9963094033ff78c50f32d558d70c2710f40000000090b5267576e0406e859d84e2972dfa33d856171c1ea7eaad85ddd9649e4231d0422a9449ffff001d397cbc0e","01000000c2a714b41ec46f98c4ae1d17db9347c22b6460db8cf39bad06631c5b00000000b6f2d4b436cb8fc202a27d4309aa4a813d551b99ca936721c0fc7ad48d091a09702f9449ffff001d25f203b8","01000000f3081e87755f4edb89e6da72585c420ec9bacb59e6af2d351ca3e34200000000b2aaf3e9582afb7ac92d5336fd6e0349d38e9d040a8978c2c7c983067f74e6b377359449ffff001d1c800b7e","01000000e883aad0c73791784b965d700b9446bbeab46bb93b1299e73c790b31000000006fb8d272d0b626967b7f05cfc44d60324bda94b51484f33cf610748544cb84ea0f389449ffff001d25a2ebc9","010000006bfa4ed455598df3f9dee02a4e7d946e97428328858186d5e5a231b70000000032f7145c61694e06d0fe5e1a8e4ec1c64c657c5271ba7637b721c1d1827f122b223c9449ffff001d53eefd0a","01000000abe103a3e437d5cdd2dc25a13682921ac5ef201f57c9d61c568d063000000000366156d8f7e644e3f525ffc8dd27b5d1a609ef2a7e7b2447aad29611270f2fee613d9449ffff001d149bc453","01000000d8d92a5be11a6b0571ac1a51be71e297f45db8240c08b0ae7a0b182c000000008d761a94bbfc49f61ce5fc026fa3a3c3f552f7ef7f3b65c5a802a82fc158489028409449ffff001d184d24d8","0100000064c94fda99dd322dd670ced946d480ab21d6ae4bec8163f2de2ed54800000000201d63d014d5b74d05a2dc5f88b6cff1a9c32cba2e5b796c99f5063c187fd0f631449449ffff001d9b17940c","010000001f40bef347d2db2a9ce399f99ec0a30c6f4958d094c3ae06145b6ae8000000007aabc7c14e92e005fcbc40fd21dcc1899f40af3e8a977ef8cc8f314b36d47113f6459449ffff001d04cb3819","010000008e4d4a1c6d3aec8f631549478c5fcab3cee9b489015ce9c7938a75f30000000012465b5bd25d183124687f727158149ba9f8b6034bde8925baefc2d6c5b471a2cc489449ffff001d004ec3c4","01000000ce15510244b63874019e04da11574b6f038a8732cd9c77187699d26400000000fec42db45b2eb4de69a41f9431f435328c1a7787d4fac65e6643510d947d4d83c44b9449ffff001d3a26f721","010000001b3ee8ce87a623eeaa9ebd2c9bd05e7d74b96555aaef9c85a95149ee00000000de080ad79dfa8d5714adcc331202ea18f2a274bb93727e14f07621b21a64619c374e9449ffff001d2e89563a","01000000975188853115bb57855c14817ebe5b9308e25a3ce43bdf4d9fa592fa00000000090e670c7edf0a139b03738846b8974c60fca7bae10209cd9954ef0ba9c8ffbc53539449ffff001d3413244d","01000000a20267602a3404f010aa1825167ac819c77c0899e2a3e2a8b71c0ef700000000a714fb0a48cf91f8708b362861ecfb40074c36ffebbab8fb63ab751922e304350f5d9449ffff001d2f8d4800","0100000067bfd0ecda4f7f45a2caacea3d40d2884c5adac2d1600f5b345fda9300000000fce41fe892219e933cd8f47400dc24d15eea98c0e9ffb883902ea8919220a5a817639449ffff001d2fef266c","0100000021ebb78166f0aa1a96eb9ec662782995c1d965d4478dd2001b4e607800000000e9ae18bd7c53e202c198574fd931d4074f99fc2445dab2bc6384527b6dac749d48659449ffff001dde22df08","0100000088929c4ac58356470e374cfc85bb9894e38c3028d4b763017fe0d86900000000b22fa3f50a1f06ef4fa1489f96c0cc7d76679d1ec8d72358ff1aa3426e2db9b14c659449ffff001ddd873900","01000000780744e72fb9c636ba5de7f911253570ca6315717a327714399674a700000000bfece63313b1bba1310484beeb14769963d258cca8db55571287af57dd089bf352679449ffff001d35cbf950","01000000919574e4f5ca7658d494d61a7425223fadaef55f3aca33367972add300000000675818d0e035dda257945985031647f1515b39ea67eb0c75beb7cb7731f222db656d9449ffff001d32fce866","0100000064620663933515600c8f56823d01f81b0526e5f63eb1e84a705ee1ea00000000c1c433465a7df77b2b14b569e847ea0e1b14bbc260ab846fa514733c52d96ac24d6f9449ffff001d6df27907","01000000ad144c1c2500fa6afd7a474592a37a87300a60a2b9e08285b70c8cc4000000003ff68d5507102f5660d829ac4f1da2e6e2d4b1a06120a322cc06d3ccdb4b85bb0b719449ffff001dc3654d05","010000000d9c8c96715756b619116cc2160937fb26c655a2f8e28e3a0aff59c0000000007676252e8434de408ea31920d986aba297bd6f7c6f20756be08748713f7c135962719449ffff001df8c1cb01","01000000df3fcdd2c7c319f51b2b9d90afab3030a81d8c6be65eb0d009ad37f0000000002c0449a34a86f460cfa5ae13b505745935c70cdf458fce21d20e3f35f9c9a01d8e759449ffff001d06acdab9","01000000d0205d343bfd825e00d548864166537af9de2406b2d7035a04694bca000000008da5489f60e5f8fe99912820488b33feb9967135c9af59a23533e8789e208736bf7a9449ffff001dcfdb2518","01000000867cb9de87490fa864956f2888d01a9e3cc9fb0e0ac066dbf50b632700000000faea35fffc633da027ba1b0593cdfb493f525697de5035cc51156cf5aa24d38ff87a9449ffff001d1a54fc94","010000004096446945ab0810e90c282c2684ec105163bfa9c880109b0f4e9705000000001ae7bd036f0f6f65f1fc8ee8e3a58b30252543619b4002ed1e861c4bbdb22c2cab7f9449ffff001d2433023f","010000003e5d71825df4950604b40e2ced41acfe25780a16447e9c35493cf70100000000ed45f3e1f3b83bdecd6bbadcb686a7d8ad3d55c197d7e06e782b8903140df958a9839449ffff001d1e420ab6","010000008b344d48b3dc8ed562b273bb0ee35ee589e1159c2bbf92cd44f285e10000000093a7eb1d9c477f6c4e05d81b6fa64e4010838ac43c20d1fdd81ba06366d340f34b869449ffff001d99b9810c","01000000d2e7007f668dfce5cd059fcace8fc45b7bcafba978e7de49dc89c645000000003071ecf603a037e877559a4b3b40726356d5c9ac31ce198f410432c6c64680e7e6869449ffff001d326a5555","010000000eb9168540b2a15c5a7291db3b747bd467efe84c3219ff7c7f609cd400000000064550f67b58552a354e9d3c3caac5c19803b0f48c5c30075f75d70a867ef491d2879449ffff001dd2666003","0100000092184492c2bbd3d526772b92ce24fc0b0f784c240fe0cf201bcff8ba00000000704d56f4ef132e451e1cea84e90205eb718ae431ee9e57e51aa8c3fa44e32c7f42899449ffff001dae5d1206","010000008d4ba6442a5a428020390386e35a0fc94eaa8dd2587e0999e1a400c300000000320883ef042fb13f1f7bb870e990dea7f50af8f2431363a8bc37963ad786bfe86f8a9449ffff001d2ddc44a9","010000005e2bc8e5d4f52830dd572ce341c23ffe9f671c8a6fc5b920fa2a1c99000000007e34b0c653b8aa7086f447447080ef48fcaea2220ff7cf02c639542dba006bebe48d9449ffff001d0919099a","010000007ab5ddfecd0ba4716b33928309cece3e6eaf62359dd6f6d70677165d00000000b2f8a86c5735de17311749abd50ef5ce31c24d14d5a9f049195f645a401d97a1a88f9449ffff001d9064bc07","01000000b358ab90abc0e3ed9d7389e89615819449475050a321b910419bb2dd000000001411d284db17f8927a40ee1b5a2100b020e4b41ca900c5227d6fc3b8f5bf63f877919449ffff001d2dcd36dd","01000000420c16b13f249d0780b80bf4a3c8d2a305502e0e9d7f6d703674a22e00000000b6fdd97475c883f0bf5a679e7084c8769b5c7f6bf0169044cc9ff347afae94fb74959449ffff001d1e233e2d","010000000c6b5eaaca958ed2e12a2722c5e789ac41f0dc95c1bdab9224e44af500000000cf3ff95e4b7378c49a6ec919a1d9f454f5a0afd468df4515984cc6a18f03ee86cf969449ffff001de2852706","01000000f1bda2196e4cc70340352cae9e4f9cd1f7b2f8b6234d0cf661310d260000000030d84733fa13eb1b52f4c8a8a9b8d70feba52ca427609146123043a73f1732459c9a9449ffff001d04a8fb52","01000000172d93cf53d3b5eda82a3a1c24db05e96bbd33a5de72e760c3f73a3f000000006b097f158d9ed8606531834dca39549294cb16ae5d693d4ddeaa5ff4a57e904fef9a9449ffff001d6b8a3601","010000005c7f0baeedc9c3201254c32fbeb8d35638216ed38039268a6b81d71300000000f888a51a888eca223877f6360fbfbfd542bacd76d863ed095f013d060c25dc6b7a9f9449ffff001de4fd7015","0100000077976ee27e13b0690ae0a8d325c822f11a400162699b62bd1a9387910000000020d46b434661d8b5401b92ce63e7547f3b4fb9c93720528929d3fc9033ca7487c89f9449ffff001d0587aa98","01000000b09817b4c5dd41dbe3cbac236de4fe6e381c51e1caa1993f07f72155000000007f80b1849b8f21dbf9ddae5e2812b33ff336dd255aaffaec60661e445f8d1ebc80a49449ffff001d1528d3e4","01000000127e44dd0671be400a526a36541ffc9b42ac943b47670909bdbd598e0000000055464c110cbd82a34661a130619bf292353e2957859a122a8a2c29b1d1ad886f9da79449ffff001d09afd9ed","0100000043d2e221c9b1872d63a2a6ed38e9f405d6d5006b2730d119410297f80000000021ca5c4de1c8f2301cfe766473149cf278da1cce5e76adb2096f00a824c7ef87b6a99449ffff001d1c87a75e","010000000b2a5374aaca861b0aea51d7cf67e8418035452528ba5c9a1633fd1700000000366dd668d2129531477f27a498284099f20deefdd69aeb3451853a5c9bdd21662eaf9449ffff001d1b053f9d","01000000b4bd6c290214c3d01a2fece7f38da5736c65a0ff5752d49fd95033db000000008cb32fe52bd1fc9607c0d10733a8931ded5f228b3b9457e9a8eb6c3cd2a92e409eb09449ffff001dcf609005","01000000ed8b4a2e225de3259774b2cb26d118b1e73e4d6e56519475ce7f2d6f000000009c3d6ae1d6560df5ec1dbbc87203b2b8689e8594f5b03348a5a564c0df0e7928d7b29449ffff001d1e6388fb","01000000ee7877be8ed9e56a99874828768c99cfd8119dca816858de69d105b000000000f2ff5e4a8e03288b77709fd08a725fd0680cfd1ac0b0aab1b3db3511de4ce30690b49449ffff001d361aec79","010000001c156d758f4cb67695f7b08c81ddc9d8634d5fd2a38e617d200e2ad100000000af423a4fb90da0715d801f075b9cea435eb8c017e14d737119b90765e4fa987045b89449ffff001d2db34c3e","01000000fbbab9d2cbaecf051ca3a0317944b58322fdd8a6db8f2f84b59247eb0000000066883e116c99333848dd4d7b756b6f1c02a0523a60eeec2be84ac67701a7b55fa8b89449ffff001d3cb24701","01000000ca636a79ab80f192d665d7b57d8b858eb45a0762ae2ceb028c68403800000000080a3283b7bf9676d6a306c16851db3b814fb132562e24dfd0a32600e7a1d96778ba9449ffff001de8733508","01000000a0b24111a8ec697066e02e7b029ad506582178349f8a5b67ac832c0d00000000a4b6a59274cc97dce142d515321ae9291539af37b0992d98a7efd424e46c2e07aebc9449ffff001d1edc49f9","010000004b6b5289484ae55ced2095559401676453ccd79fd2f5d4023c3144ab000000003deac9d3ad878733e943b2c426f9cbd71a92469d51efcab00e5582b87790d8953bc29449ffff001d725cbc10","01000000c62c374c6102411c63a7aa3846d1076e8d6a95a4ac9b0614fb2eaf8200000000498901310b4d9a2bb32f03d6f3a2f11e543dbe6e3c5966b2bd9122282ab0af544fc89449ffff001d39e9d788","01000000302abe521d2b0c2e117e4722232f88e622cb317fd46235377e174162000000005b74ef8cf03674e6867203b667d93d40994de495a5188be8252858f24c256bbf83cb9449ffff001d01adbf59","010000001a6c2e097d3544e1e5d9b9ad9cff8176f3094993acbdcaf7dfbf41770000000021ea3422a346223140040f131e29ead11520c53c41f84ddcbee333fb3efb0f2c92ce9449ffff001d2d8d0d16","01000000b29fbb6d6e5de23d1d50a1b2659bf934f72187baa3c0303ffccc47c00000000036a8aac67af9cfaf58d7d7e63b7624813c731c4441c73ad3c8a49228c9c3d1c560d09449ffff001d8079f407","01000000fce1b1b9afe936813ce5bf8f554ed5305ee3677e080e11ac67c15d4600000000ff62cbb607b9f3442b08b215aee4fe019920fc728339d9c445bfe89bb93b3ddae6d29449ffff001d2d7e650b","010000008708d1f2c61cb75f4d0afd6dbbb6027e500cb5f8bd4d5a7619f6541900000000eecd2a445485b22a67f9307173763692d7f7aa640cec87314ac7cc5187aeae4634d39449ffff001d35592490","0100000003615070012d7613de42ff33e56f59e0e189bb5ba42c0165a5adce6600000000f8ffc0c22139d37bff8ffe118115c41c807030fb33021e29baea846539e5b84b70d69449ffff001d53652d08","01000000b97a648b06bc1d27dff8e78934becbd1055efcdc81c9262e1566dc3300000000f05a6c6d6b3b33d7dbdf0c133b0d359e66b91bb8f2f8890365a0c5463fce6600fad69449ffff001d31224159","010000006ae89cc478ec9c4791ef10213ba2bc44f7583cb4cd9f11e9a79dde4300000000e644bddc8f932bd80ef0c9dd5fd819d9c0cfe45257c01f855807f0442923825577d89449ffff001d24191c01","010000003eb67c4170b0f535ac2b7de456602cfb7b1dbb49ec0f8b48169cbfb30000000088625eaed76e4c84c633362a30419d65a46cff27ef5d5d5121c2534d684391268bdc9449ffff001d1fbe36bb","010000000f92465f22d53a9abd5c9882b1f4882b8ada30eff0c0080439023aa60000000046b85d7cd2ad3e676f635e5db3e6833854c374c3a92a2067d66ecb6867e679929ddd9449ffff001d17486604","01000000cb97f6fd4c8a723f51da10cfc5f1014c527f16efbcc14d053fe1171a000000000d305f4158eb9287136619aedf33c027e2ee30a7b9886d98ac6b47102cd655263fe19449ffff001d091ff30f","01000000b9a3bf8b86b800aef1d2102db5a70bb5fffd2e0ec49a157701027599000000005cadceacfe69b8a53d3f25921fc4bb8ac09e831a88a9de1a769e18e3549b7ac48fe19449ffff001de2af2101","01000000c639d8ad3ef436a663ab63344dbf1c02ce39efc86bb2a7352855b1e700000000649667f72c61a7798927ef6d0f66a235594c4cb79df1e0c8aba646fb0e3ab8a953e29449ffff001d2a99a2d5","0100000037b8b805f77917eb2842f539eb1b490ff367d360cd613aa4bec5e44b00000000db2670ec3a1e64f9de5b7c18fed1084407be1f42b77fb8f4bfb7fd12abcf73589fe49449ffff001de07c5c09","01000000b7546161227bc43df148157c2131adb87a8657c52892e0e2b0a9a90300000000b507c28f9b0cfec28bf0394d15ceb47483d0887d0fb7c8a88bb8dfbf9c184f6316e69449ffff001d23dcca3f","0100000045317ce73d93308502d1344eb912ed866235cd2ba692e31177cb4c4c000000008e95b631c4024158349470a803e6e31475e58623c43badefd373c63e14beecade6e99449ffff001d36fd3b60","010000007169deb3201c7a6a03f01c3db8a452e399e6c66adc2a869b0aca2b3400000000c7e22a38f7010ca6fc54455f2922b609302b0b73601cdd73961fba99d6aaaf83c1ec9449ffff001dbcf5260c","0100000004c8986e3a21452694edee94ed13038a07de5e2568d1377502118062000000006da1363224d5095c8ce1f42b86a802ede21d4f2e79908eaa4f0e020624ab794c0fee9449ffff001d230e7277","0100000084d682611f6b42518bc2c2afaf21b0c7110a8e3128652f390322666900000000c72d50ace7c04b1c13b8bd7593562fc5026b147d3d7006848219ed855b642faa90f49449ffff001d0896ffc8","010000009a1074b740b02debc812567d7cb709427cc85e3f40abeb7b070dba1b00000000e2f2c8e052287798c16159e58d684a48b2d40af278318658e60a9fb110eb5f85c5f69449ffff001d14c99802","01000000f6c72d40322ac1772eabb06d485a07c7a6b559034accbe57414961fa00000000a27c63f6669621f4e5cb56ef008eca96911ff399037776e773af11e9f5490c01aaf99449ffff001d174edd53","0100000072866df9ba6b8634aed204fabea8a1766779deee529d8c50ca0d92530000000060767a664115097e9be51ae30a55db7f138f8b5425927ea4524661db6fb0b40ce7fc9449ffff001d183faead","010000008cedde21bd90d0274bbc58658770c7673262b766269f2d9d7bc29d070000000026de56689de8d0c140da30b1d0f14d1e7eb51201e8e209250073bd759b5467f8f7029549ffff001d0493571f","0100000098abd96ce843a4207fa525aa7cccece9a41dacda93fb838df0d27f1500000000212182c37722058f847b5b4978f81c07e66c03bba2d6be00c606e11d42934985e1049549ffff001d4bdaca07","010000007cde89c3cb45df588449cf6eb8df65b0eede2bea9b0368546f20f00200000000d2307579d8c451e211484df3c50999084df522ce7f60b73bfa7196c4f659083428079549ffff001d230cbfff","0100000014e4bff877af3bbc758ae1849213205e26204f0e9f353cba55411e5300000000747bc35222fe9303197eb9cdef9edc9cbfc274d720e02146a89d95e09ded215ca80c9549ffff001d29bd8e72","010000007051e06b857ec6c19c8f05bdf9cf704c81e164977906a5a072f89dfd00000000ff055aebaa6938a7d6ff18257c8ab76a730101967cd4296bb3220605a6b0818296109549ffff001d22976d5f","01000000a6ac9e04626213c1dd125c85b202ff3f5315ac7cecfbc85d6c4b23b800000000ce711b94d83d81b11e93e2ccd631bd83cf38c2ebe43352517b69d759bacd6a206c169549ffff001d35ae0126","01000000e324595eb8f5c17e7ade7fd800ad4e880eb021f35aeadf0ae5f7f28a0000000021d2f40fc1e898ceec6ec4460e6068ada5ffcfb13fb2b0a5556cc106640cb5ac91179549ffff001d4c603e05","01000000ca39aed80aadc117c78b91754db21a5eaaffd61b91eaa0e1035babdd000000002bb270503567351218c61e0bebdb71eb583f3dfb56f5ee0e046137ada12d8e02a5189549ffff001d29d6cc02","0100000025d67df672bdf369110e0a4305056828cf2f72c2929acac6a77f00d60000000066180a5d81c26eef7027ad2fc24009b0a5f44d7c19c41644e0a2fb55cfff7b1da3189549ffff001d14d340ac","010000008334e07aab80e49b5bd5bae9e0954394b5fca5cad0b6d6b52800df0d00000000e3f60aeae7ea82453c4ae9350fbce5168b0e8f366bdd0ba3c26d22ef9f7c09c0081b9549ffff001d22de51f1","01000000d44f66824157ed82eba1e27bf9876f0e1effb7347bea8f386a06ca6600000000c4be7574054a3abcd851a2bb4232faba6f906ffe22ca85e714170aab17233dd911209549ffff001d266f3dd6","0100000017a7ea494c7c8d0d63db782d94c8e61ec916147b469cafbb0051e907000000008eacd79e5ce614a53a126520a59c48c50eb84818b50f540689e44462bd84fced06259549ffff001d2c9c93ad","010000006c68a54f611c70a2e821d0aa88a84da2efcebb18f809f05f6919088600000000199750fe10ea9ab1384d84b4b3eda0b927a867ebeae1cbfbcc66bd3597774194bc289549ffff001d1769b705","01000000348efe0ceb34598f3cdab801ad3ea018b1104006534cc02c169d840f000000006bd371ef1930fcc1d379f8b007781706b953a44cf288f84fff3189d4a6ea358ca12c9549ffff001d95731812","010000006abc273c2515ea7b222b3ecd421f81b94b6161c18cb1f04b5be22e01000000002c8b086d68cf9db07b996e356e41fbc8232b73855667e13b2ee401c5f51c3a8ff62d9549ffff001d23652bfe","01000000c4ce50556c522d8f5952ff43d5f14df3310590fa41281c31d17955d500000000f23b4730533b0bda57715433cdb5031a3eb40d886f63f3f5784e87822edbd5de5b339549ffff001d334cce46","0100000050eb9bd8325b7712f3b9481eaa573b43ea8375aacc6604c8c35175360000000002f90bc913eb5084a6e92d0e6d2a8ac592175ccb89c597f78c76b1bdf89c5f4f12379549ffff001d21e79a37","010000008226bf236abc9c4f8b569e43612aa18d2538e0a4273dae748b21bcbb00000000e62d45b9838bc6e442bcabc74937c1d5cefe6a9d7c629ee9df19f0c29a9bfe98e03a9549ffff001d2be10b44","010000003d7d97c99c3ea58ef7857c1ea5d37da868d65f9edde2202b0fa8dfd300000000173b1ddf18477f5ac6436e0981ef5c71eb8a4868433deee35da5ac9ee107e2ee123c9549ffff001d5002da02","010000001880a743a9312354d1898ed6569a60a3ed95e91ee286e25645b01b0f000000001397587eda0c8f167589f28b5985fda7529194decf8ce0b19997f275335081549d3d9549ffff001d18f8e335","01000000ca0e87e0839d2349d30d9d7ac9865ea64304c58f4dc647d8a42fe6fa00000000d08459d37893c25ded909f45ed2a9bc9483b5c6972065db328c9347f8848b454d73f9549ffff001d16f66bc2","0100000062d4c378f4ba66bf4f0684ee7b50c94fe678a22bd7de9b56ccf6238300000000077119d4813d7d1a27868063c02071f331809401484d8a0eab54df3456577d2ab8429549ffff001d195f572d","0100000050a8929d061f0762ea0fc05a59bda3b9f1d21d24ac09c9f949ff17540000000060c69d5b07987deb8007a342202a8848f69084557343a662396b52463db52f26f8469549ffff001d6bf5580b","01000000cb091ee621dcf56bd62587b0fefc9ed36b98b4b80402551f37c3ca3500000000ed642b40be08e6b9fc7b60d5f3a9ddccea5376b28addd16fd9361f8812a321f60a479549ffff001d3287de83","01000000d79d2b6c9ad576d4677cb8ddbe6710a3ebdb69eaaa66774ff1d809c30000000051723915dcd98ad9b33d04772a4b634a435dcc3469b87992e86e6f20539cfeb72e4a9549ffff001deb387d0e","010000003f9c921d39469ffde6a28214a46690b1b6c73001560358f3962135ae00000000c51f44fa8eab842fdb2f8d644d1393150e2cd37f4f4413e9a316f99feb364f39c54b9549ffff001d2c37f70e","01000000672fce93085e81f25b5e18322143ce83a66f1f6f347724920b9c617c00000000065289a1c6ad6abbee898a2cb9768ebaa2eb49a6072043dda0cf29bb54c14f7df3509549ffff001d0887fa31","01000000a7626c2ad61b7e57df0009a730478870037298ce6290ff79a68954360000000095e5493fbbb31f2a4879a8dfb6f75769683800741e85da532183211d467a64c5f8529549ffff001dc001f302","010000000e7a39002e1d1897387a298cd50aec0c9e2c154c94b1410689c3138700000000e7eeca1a0b13db59d3c58e93e5f166f67785f2b4600b2335894e07087f3b35fab9549549ffff001d1a91bf10","010000004193ba5babed12fdedc09e841f56e43e3d6efdc6ecb1d1179ccfb2b300000000a60121e3cc071afac9eb9a21ed64e0888ccd6a8d0c6ebd00cf6cbbe7326f4a949f559549ffff001dd7200802","0100000037d286f2f2c596793162977a5ccc93e41bf5d9d8ef49ca9ddaf700b50000000097fe15408431d1441c800578082e776697fc254bfc19431ce31cc44e8415904458599549ffff001d06c0d244","010000008d08a3308b486e0bd69acb4f24680ba24644ca13d9e6fb90eb21ced600000000ffec258151ffab6e49a66dad325043bf725fe1bc933ab5acada2b66d9f342145995c9549ffff001d7fa43508","01000000244c7f78d73e676ae69d2a2866724594e94e3104964a4bd3f91e848700000000d3293c1f73f4857e4e32b1df282139d7038988ce711ab683459d8c943a48341f545d9549ffff001d1415760c","01000000cac49f0b79f3ae838e463a9a144dcbe330fe0b821e400e455aa044a2000000000a064d373026ab06441bf2b704e7a92b228b4c6365c0f960f9dd1128f9f2a22e4c5f9549ffff001d04bc0508","0100000096d74e0819f54beabad992969ffa8aec29d566b64ac3f7837b12b58e000000009f7e488a167f30b196edb6d0b115d141ff6a8b94a3cbc638ffd004d62cc923cc72619549ffff001d1dcf1591","010000006eb139347f4cabac26a174647b1c6290a972f30dd46ae10812d13d4c0000000079477c1b4b8a480211bad7e31a9574cfe65ffbcb34034a3eb90a17a2628b834324679549ffff001d30555f23","010000003988f29776d498229cbb254a6765f5195f060fc7992792597ad5ac49000000007ae8ec8843b24081d66478388e4dccf7be6e88430fe5b11a3fa1636dc08e0d6281689549ffff001d2c495e04","01000000011ad980d88a2280ddca5a5d1fb1993f04bc76941293a1bcb68579d200000000fb587c9ce73eed3b886db1b9f18ddb4b791ab6c00a9195756da4d2fadb96f859a1699549ffff001d023dfbc3","0100000074243f1f31be36f0e721c514b95d1b8e69f8b475a019d65815cf878c000000009b538c2a8ee1c2ee52d05ba34a9de0dcf2e3a869f1d5f4afcce0319b2ca217a26b6d9549ffff001d30ddda19","01000000416c68044a4577ac40623b17d76fac4923a6879df7616ff645ea4aba00000000498a6dacd2b7642a8119724a812f42cf43c3ec4fa793ffa90b5f949d4ad01074c36e9549ffff001daea06405","01000000ecfa609bb93aa74fa879fd38203124f217c565e701b59391bf2bb95100000000ef870e0b50dddbff320997ed11b4a5b1cc1f905624e43a2e5d5721a4939df6bfb36f9549ffff001d10369104","01000000e21b14fb487770fa186a2f8c2d24b86a2368a440af4c08d66cb1294d0000000015b4d59851d4da85b765eb3605bbfbd3dfbd084bccd2fd8a727eb4e12947e3d508709549ffff001d31437026","010000005f2d723aff3be4bfaaec91c8fa6de33bf020608acae1fa312db2255a00000000385881934f1aba77a15a22564bb63964d728fef533e761b680741a5281fcff64d8739549ffff001d19ae7eb3","010000001e778b746127469eefa6f3b95b473c66c3c6b4595b3f8d34f77c7de7000000003f2acfa8e582f14461db81ab8ff19d48dad0f184e7f435ef419139cb725375309a789549ffff001d01392503","010000009366621a1f7a3e79e23b49e684afbdbc6a6a078fec08b8c4691d91c300000000a15fd65c72c74ed6cbb8ce608d0ece56fbf54ff16cc570e7bfd27b1cca619bc22f7e9549ffff001d0190e38d","0100000035d87409aca5487018aa1040c41459b3cf5582e7021ac94ba6dcc1520000000006feca5c1d283a595bbda5901274073072ee99ddbe2109e90b034fe937683c0f14829549ffff001d14beb9f0","01000000be71f5ed0c8a45051159d5254bcb4ad74c03086839104adcac8fca9e00000000d226338f3dbe6fb9911f7878de9936940786f50b41a67ded0ed0b3a93886b21028849549ffff001d1d5528de","01000000b721ba4a7d8564f9f7483f92034a084d7c24e59c664c9c35806958000000000031ad09b4c536183004ebb602b472ad75b2373dfdbb14a60f14196675f310ec6f48899549ffff001d356ee7e2","01000000b3686cd578ba8f1d919e9c4dad8e37efe85d7882ce67feaa7baeba84000000000d6accd52dce88b9d6b1896b588be3968848d7900203bfd237e58bfd92d8dea41a8b9549ffff001dce9f8b04","01000000ca349f8475da3c90bd51ab200b34e4be581f9598ba5237dadd0d9dd70000000076fa72079a18d465eb710bf9234afedbaff7b8ceee0931c1f4723c194da0b7e5278c9549ffff001d161b4e46","010000007acc9085912db4f1ae5387199759a1108dac677d7e5d627f4c6609e500000000b9453e73f51a7c7a2fb484a53540419776dd1b163ee9028470d1e3111d4fc8f66b909549ffff001d174f03a8","0100000079912383e30ebeb6390c9841ae03a78daf9124509e3b8ce23c2eea6300000000ad7cabe377e928b4993cb87ffe48e37f1c0ba2c14c41ea079b81583960694b3fd9929549ffff001d261771a4","01000000beff4d0a109222d4e94579a53db6fa1fd676535cd9ba216f225975090000000010521c2491bd1f261a6bbccd36684295f02e6e825d321956d82ac17881d23e3e3b949549ffff001d2cd3c825","01000000fe42b441f9ad752f901fd51a2698696f68e24e72c69ba072893ea581000000003e02d9bf54e48390b7487ef1ea7e8e2137fcfc498ee5956068aefa4320438ca179999549ffff001d721b8018","01000000f403dd5d14c719dbd9dd4e8410047b6604a436fcd53766e2a3a4795200000000f4aea2c1931ab1ac66eb59ab2dccd2ce7c6360307adb9ae41c409eff3220d9874e9a9549ffff001d38736273","010000003d2390227c414d038fe7544af544c8814b332784e5afd3d6df3adc4e00000000b8abd0e3a76080ecfbc18158131ac46fcedbe44827618a19ce49b234aab4e2cffc9f9549ffff001d2548b2c3","01000000129a1533b1bd4ece320b81b52d8c88e71c767e7d16dc34825bfae5680000000039fde5a0165900df645c876627c49a3d2c6fafb58d1ec196d9fb575ebf26ba7c59a59549ffff001d186411ce","01000000615f00e0015fadc80de108303cde8fca603d024f3c5cde0ea89bdd39000000003f68623f377af8a8d71456ae68e6b6fe45c598c676ea3b547ee861ca5be0bb1484aa9549ffff001de9036d13","01000000246ba653c0ceb5c62663607f5dbf0d58799ea5256f708cdef60649c2000000000673a8aa75c01e5f15c340c1db24888f77b0ee5fa87ebc3fe9179de70ff67408c5aa9549ffff001d31dd1921","01000000a6cd1d377a8da5111fbbefde05af186f5feb09a7f37959735dca2fa800000000548d77dbd624bf1b08b0ee523c5a9911f07d0fb34568d6e8e67d2f4ca320ee89e4aa9549ffff001d50a84f00","01000000a32e3c8a89016c562c6e56a3eaf2e477ac5c938a0096024f4df10c37000000002040728910908f684b6a4fdc9c98ad613662f332c1eb4e762f8f7f3bfaf5611a9daf9549ffff001d08b10b98","010000003b47aad47847cc15b2a485eb6c7345043208da86e5d49c737cffd72f00000000aaed9cde752d9ca1a5415c8da49d6be4243998da45f356babe047fabebf0a71206b39549ffff001d1ea196d6","01000000dba5bcf079c4b1e6e581ff0e28831850c0a00bccf0b519e17b5c6818000000006ad73e06351d99287505e9cbfaf9667c14a4f51f4c55816db4476ad54edefe41eab49549ffff001d043ebb20","010000008c36394d337da6d34cd7f041f49de36572555049acb5d1fe2a2cb14e000000005cc8f9eae8ee4ef084090cec164614487fbfb508f0b6eec388a091a8e0b65d935eb79549ffff001d1c36c21a","010000009861fee98d921ee03757e74052e7437e7977321679cfc16c36c95c8700000000558fe9bbdf9e6d0277c6b40b412567a28ab9826b7a133cb8cc10c25b76cf859ccbb79549ffff001dfb90ad01","01000000ad10cdb139f952ba65b9642b62117ec7e399dad70bc566d40633bf8700000000cb66f174f5f964bf815f2eb6f238549293184fe97d925000d5a21723e85f92a038bb9549ffff001d18562ec3","01000000988b3cfee83e4a796d07fb9f4de189a640765bc5ad2f64ae8c11c8360000000019d4b40271bfdb9efbad5f4eac572df50204bb5ed220d637cc1e6983ce552cfd13c09549ffff001d26a597c7","0100000044376b905e8e659ec41f96272a98a782deb4f23fe00bcd70861de22800000000bbfe0f3324cd42d8bc0e8d3f785617efb07b297dae6c85b649738d2a59cb95704bc29549ffff001d306428de","01000000fc74319841889ac2226a8fa54028d97720fd850c28652844c0513b1a000000001945f63eb5298f690e5b3bb68a584b6ff8a307c2f31ca69156d1c10b300461f6b9c39549ffff001d2a9615c3","01000000e13ee04e004bd1e89f32a7b1a5295cffb946a61c228cb7b4e0841a880000000079e1d0daeaf031eb955b85bf1d90026deb9a160fbb0790dbb8826897284da088f6c39549ffff001df854b800","01000000046438258c1d428269a6a5ca6a41c36a4a2efea89b3f65c83e396f38000000008eb3360f5f814679c7ef8d50ab1caefe08ed2c9bc5b890529a73b95d35e1338712c59549ffff001d3b6bde04","010000009ed28993e7f55c1523a986f321581ee2837c58c65a42f205e0d3390700000000602689aaa511eacae729df16cd65bf30b3125829e49c3e5e3c9346eef38f42d632c69549ffff001d36db18ca","01000000ff11622907d1a72485492c00a45c943db94e6a376f71a0919f3bf96f000000002adf06cffd54c781f6a3832d29181d46f3302f61dfe8e22cb74ec22bd13352e2b6cb9549ffff001d249a4871","01000000869578eb1ab2e1ca8953c9c331a64b3b70296201aba6306a868e095600000000210d0d6fe6aad72b3355c482275039df15810de4e606755c677430f411133d0cabcc9549ffff001dca88af04","0100000045b90dd29da856d985b13d1415bc507eb73758ff10e6ed33c64652880000000054d296ec1187c2460d72daecb8f29dd2299e516098cf26e3773564804502cfbc39cd9549ffff001d06aa1702","01000000af34b20deaf6e23401b796a1b261dfa56a96ef39b6b50d522fb42e6300000000eabb74cda45eb526822c7df486031eaa3ce8f2fe12309b445d46a5b9f3bb233304ce9549ffff001d36ff3eb1","01000000e7853d301dcbff3149bc922173adbd3cd1fcac104a422c1134894a8500000000e248007deec2a794f4bed0dbc660deb577f131d5c9a42856a249d0bd45fb2d530bd39549ffff001d2dab23b1","0100000091d98f8b07002178ba1fcf8a0e898f9d3c3663aea1eba6a0979129b400000000677bea4d9c63ff377557be6d66b893d4d8eca6a4c30e1a961cae09419c9d16bc7bd79549ffff001d20a315c7","01000000d55096da2ad71a0a5e888cccd8a94c2a693546c8992f4bcc9ae3b6c000000000a3a4c6e5a7ffc7be9cb3b47b284df32dc91ee552ee5a2986de8c236cc7519a34b1d79549ffff001dfa326200","01000000993f0b845837ae4912eca34c875b35ae319fed6375d74aa88fea84c20000000061337311a0e5ef628ba201a8fe9624256ac99d07ddcda46914bd27f9592d5ad7c7d99549ffff001d34448224","010000007e95139be125f7bf94f805c90d80ed16b09020ae5ee30cf4b3566c4c00000000a68b00e60dce220f04024aeb99b362e516d68a63434488a62ef9d2e30a6387d41edb9549ffff001de702cc05","0100000027c56e32a09751da96c07f51dd62bd7e80ea87312b84f3c248000e3c000000003210485c3017f592e42b84986c956b5c64f20b191035f841030a5125048a901984df9549ffff001d18add1d9","010000009102b2145c572dfeae9af22d98ac2cb572b83ab90a94fdc7a1ea533a00000000c37199cdefc0f5d985ee18558b27726ca7e13a299a17ad186435d68330bc562625e29549ffff001d2c1fdd25","01000000d77293a4b4a5267ee47557aac9c6f69045ebf52df634eca629922fa400000000feadd39083e2a9eda5752e7c374210db206c7db7f7a20f15059e913a9610f84b1de59549ffff001d06286706","01000000b491bcd1b39ce09ded68e17b23198d5fd811c0e0dda33d571ba8cd9000000000fba45bccbb6a9447eb40ba298f6536e728e320faa79bf4a6c74a477198e8d0d8cee59549ffff001d26e81bf6","010000000e0b05f7475340cb3438d7fd8f539bc749bacd25a3478a7f43f2cf45000000002c16655fa905cce9c65bd9419180920cf10cb7aaaa88863c9667fad49328ee0362e99549ffff001d1077d705","0100000047870a5baa9d27364b0c93fe720b5229e8a6270b09bdc708e025dc350000000050c0c7b19d495f098fff16bb1513227f0f17019398ee8457c53dc77bb8b9ab2339eb9549ffff001d39ddf679","0100000020b80cbca1026d15099a7069a97c49c9f00050d365c3112874ab7d0e000000003e0458687311e55474ef987a6de07b57d18267d773ee45fda6e806273eeda26bd7ee9549ffff001d31bedebd","01000000e535c4ee7f164a3a375b3c964fdb785953bfc72fcb923d2254219717000000003edc451bfeef497db4d624e56faff98243a843761c82076a5bad50471e80d3632af19549ffff001d19ee9d38","01000000fba5b35fe7ee17b8159cfa8beaab3b1ec8e1ecacfc6c77dfd56b22a400000000963d585dab9272617af97cd379ecddb8fed49549f98fc197e47287298e9b5e510bf39549ffff001d1c76bd80","010000006925c00edc346d032ec801f4e37d10265efab7a4a5fd92d4c59d57dc000000006f27fd92d32cd98323f5296dda19b6e1c06112b584b3029cd2414ae113a63cadf9f89549ffff001d2d3ef967","010000006b11982e6bdd7ca6c6c85c0f1c51ba12e2bde48521b44f1ad8342e5d000000000a11253a2c2a233c03a7ae3584a9cac1657ccc20ec42f75dc8deb8b81a3262ddacfd9549ffff001d06574099","01000000892d45ebacf01718de1a321a8f70f6bde16b81cb3cb84bc8de260c37000000001ed7c7787b03a9468abb3ea4f5c9df753615977326ee7c797a22d780c9c1033e05019649ffff001d16cd18f7","01000000b9c8b60c597d8d98c0bfa8407140b6b3a256fdc28f393f013d94dfa80000000026a8bb19aa3e6b0af91abdd5a67d2aa01c09b8b063153909bfb00e73986a34f3d5059649ffff001d1ffc113b","01000000cd2d5ecb202bb48023b84b5eaf1e2a51ca67b4834e515f29bf4bd70200000000e69f94ce8766607a36538834352e30619f742310e53bb01f14ced12926f591b85c089649ffff001d1936bce7","0100000081ac46a58c6763803f6f10f4d4eb90afd31209ad9f9651f7356994d3000000005024a4bdfeece88c7499076025ad845612511fda2f77487adcfa59991893cf6871099649ffff001d5d9b5c04","010000006e951917db89e26b96a8bc0da1f5a86f709edb154e79734fef1973d7000000009429d8125b924c46892f5d133297acac66b3889382599dcb35b95a4ad492d0c02e0b9649ffff001d50d51307","01000000760362b954a6ccfe8a7bf90968295e85b3e9c0d3fef9dc63cd050c2600000000d9c8a60bd4dbb0f0925ca50d046eb8058a7be246a550a506b68c5cd9fdd46a70660c9649ffff001d02797191","01000000506f107179b1289814b8c54d2f0c9decbaf8e635471f2eb49936ee690000000069e66be1e80d45ea4469b762956fe789a3517fc68a894d942bd1ca6cb7c0232f140d9649ffff001d76c71903","010000000a8e1978d110c0d1b1cf7e3bab152e9fabb26aaa2dbdddbdfd88735a000000009c9f31f7441a24aadf2b24d1cec728cdf8f5e8751b5da8cdd0bc2c63b80df1e90a0e9649ffff001dfc7cba04","01000000fadb6ba4431fab56590c8cde56c750b6c9b3c697413c8eaf01db85a000000000b7b04815aede4f4e13e2a4615192b935c0c5fa1d7d5f70039b493f9ffaf10a012d0f9649ffff001d74b4ca02","01000000ed08fec3da8873f78b69ce69bac140b2a132354ffc4c29039a2e9b7200000000b55625d96b204675df5cb887f26559f595a6a05a8107e74c97266cb5d76d59143f109649ffff001d15e098ce","0100000097c20e18c571ec05d5f2cf8ab9776b84c1b4529eda3387e6f7aae98900000000e4d49d96cbd36cd270974478dff9c22eeb7ad34098713253061b57dc8f39400989129649ffff001d0794e628","01000000c7256694f8e39e3acf44e806914c0dfe25bc16b2831dab08038c39e300000000e70318879c7d0c60bfb8129a1ab7e5d6de3a2fe40ec9f6dbe5bf35cd29af46359b159649ffff001dd715be0b","01000000317119db9fc8d67eabc45b6f994d597f8170f8805e34473553261c6900000000cbf616d750aabb6594105d0df653be6acf297a616676beddca6cfe50b92f8455ea169649ffff001d81ea5406","01000000105652ab7ec12e04504603d489ccdaebbf32f7e471857f81d370326f0000000028f29af694b521d97c0c0a144ab6763102d8b75b7a96210d4fd5469e0c7cf6bb26179649ffff001d33d3b89f","0100000045042bb29c8e00d767e97869f4df4e33a9016052a822738219729bdc000000007449c7d5f02b217288d2104837f2eee5f00fc33990bfcc9466eeb72cb3889bbf971a9649ffff001d2583ed0a","010000008ae5ff9f79b7058b489934d59fdc0518af45abb397dc8b13f227f9c700000000d0adfb3de8c2dee3b41d0fb85368c3029f939dcd6520ad6351000a25dcba569df81a9649ffff001de43a9801","01000000bedaf3bca80dee1fe978c8e423fb355395ad74223df245f601557f0400000000f7798d527e7f0fe973184e69c1a96f845a49ab167198b29e0cc7c663a3b980f6ba1c9649ffff001d275287ba","010000006d7ab8d03bfcf9e22ca22d4a87abc195a264004c567eda502f0a777b000000005b95d2318c9ca9de1fe93246017fb1f540f24e53f99bfa59e112d899f6f7ff314e229649ffff001d921be415","01000000ebc25badda1f1f41cb5d16c8295855381b6e9db95e73782a57034e52000000002771e8ee8919f8eb2d0e2d50bcf81812542ac4c7ffb6bb94aaf418e448b551de75229649ffff001d33be3513","01000000a8d5a58879fc828c983c5fe36b639d7128b06c11e6e3c4c7b5452778000000001c2ee887933d29580dacf8631635919eb586301d11df5fd26a822431e6a5a64d4e269649ffff001d1a2f5be7","01000000f4016151d7e3a0bee92f5a5ee4ea0376142273e10ab536ee7c4553b100000000ad9a0daa759c36c149b830b3cece493493d52d75f34694e11f0777c794fa138a13289649ffff001d3b0d3e07","010000003f5da826c976164bf235c9cfacbaab795fcab3bd0fc98dac4aa90ac9000000005058c65540f43067fc90453cfd33febcbf4a1d0114100e034ceb8e7d0b46a650b62b9649ffff001d2bd679f5","01000000aa497470be37335f43f7bdbe5bdc01997dd812f5f07016c16305824f00000000b069ede28208f32d5d94b28c158a9324c472060154ed79fa1a6533458929253d572d9649ffff001d19134233","01000000b5d4dadd1c14dda87d1cdb5373dbe6650a12403de7b749098131644500000000a43dc9437fadf1abada234e4d524772c7c592d2ceb37ac80f801cc464a9c3b0966309649ffff001d2a7ddccd","010000004b332ee29f9973eb4d90657f2686ac156c843d5d427f9ef82991092f000000001a4d0d67b23983aa41fbb929336d05522e94247f048e5e8fcf8509ed9cb11bd6cc359649ffff001d385f1eee","01000000cfac7835894309a416a17898ff93fd6406c4a28c95ce92f1d635e956000000009ad17332d7a24563ff223b23ae6bf54132b006e209ad46026d9dfa4babbe46cf403a9649ffff001d09513f0d","010000006b33efa4bc8b3877ea91952db64499f5e1ed21bbe31a2a13c885a6be00000000aacc4420744f0b5006f92459b848daf127d49c50a73fae87e7198fd1faaa5a76cb3b9649ffff001df2733e05","01000000927f63a1a77b48103ffca035cb8ab39e9468fa839707e53901733b9300000000a91bcba7f20a54b0f88841e1c2ca894f71aa1f65a5fe859a534ce962dec18054823c9649ffff001d2cc213ea","0100000091027d76f7bfc05bad1ba8785addb6838e6ae014498b2fdcb09dd86b0000000035f88942a2d475624bfe0df870886955dc04c67e0bb0e0685cb1fa5d8a312abe583d9649ffff001d7f0d6303","010000003da75b21198a0b58d9b52ae3eeff1a07f6ffcac128b422781929623d000000003a4a6896b04c025780e8c7ba41049eaae956e56ffe4d61fce3ca0ebf68b9471ced3e9649ffff001d346402ce","01000000b146a80a14c8492f526c0c4ae7b62a6b18fd5eaaf5146bd81ddf500c000000004b0f7ec3edaa3b1d125ac1f0b03736115a073ab6be6b38a709f4655c1d3480296d449649ffff001d07649bf3","01000000370026fcb79889a1bc91ef5bb05d0f63aa8f53a39223acb541ef19f60000000030abbfb07eab65c52ac68e853cd0b017453692605548f42425e3a76b665036a42c479649ffff001d08d03229","01000000457fcfce068a96c8642009657e18f55561ada51a512e835d36bbf81000000000180d8a2acad21f7143525f1e785003eacaf205e35dd6b5194e16b134b5fb762af4489649ffff001d298692b4","01000000b00a913ec3a4d65ca599b28b20f31ecad17e110894f127265e77dbfd000000001a2ac515d5e3187a1444518d3b677f55568946aa171ff144ac6e370de637217b9c4a9649ffff001d00b8762a","01000000a707c400f5a237d1c27ca28dceb540f7b3b4e8dd5f3a4b21831c2c5900000000a4de48a7c70675aba27bc6bfb456b42deb2ba552662ff7319afa98a49d98e0a31e4d9649ffff001d3a6cb158","0100000031f4ed2ebeca6f0409e324619554ad8b858111c41d35ff5bb138ceeb00000000fb0a6e706df0b9657209e14c58e010df4051655207a14c71bc4c429e16439892574f9649ffff001d2b58ca18","01000000aa9d31ac4c2133a06cb8af41cb659b70d052030b23b8e1030584d4e0000000001fb7cc9e9b0fc2c78ab03d5e897a0d656976a16e44e400f612ab4d4aab7707bef2519649ffff001d02eb1fbe","010000003e7014be552899aaf171deb1e7a691bd9711f5bf71c424e87128555c00000000991c496b8474b869485d8c362e63d6f8c7fb75a3cc15258ae79ed11713017e0302529649ffff001de7d01b00","010000009fa6edc98ffb7af6542bd083e6bb68690d38f92df05c671e6e1a9d6900000000390aac7664de84cd7a922a22cc296b94574ff8951c2dfad08d532a2b8cdb9d869f579649ffff001d00c02abe","010000006570afc14e9f8bdf5d776402deabcdfb141255890d3542a15e008c9200000000aa28ad14f2959b29777996a96d4c10bd05a7c9bbd6cfb47229d847b5c6f2c364e6589649ffff001d7df6eb04","01000000f1d40d64f01efdce6e8d6ba6e6721da850213040c9332abfca9e9a3f00000000435cb7a0ea88d6452c20f7e406bde1ff3fb4cd83b4ab8d42552fa5649c4d6dd48a5d9649ffff001d2d0c4942","01000000daed094efbaf4d92d8be89602c7f73c08d38e5d2f2ad2f42fb49035700000000f95879d901dcac3c3a7ae0d67255f639137796f2a482bfb3a1b86ad5b667411dec629649ffff001d216575a4","01000000f34d7787c214ba20b3edae0032986804cb7966dae7cb0115ee8a5f5200000000d7299cd04a515368859de262b57c8a5579de2996328124d69e5ff957dd8aa33fe9669649ffff001d1e456a6f","01000000e9acfa7b01b258e1aba4f3f2fa0ac3a6f91b2bbf9390af485f97ea1c000000006adfeae97413106e27d50b4b4ab12bbf895f92e7ab1bbf1c9a22d09c4800dad8a1679649ffff001d89b0c702","010000009174188decdd02160265cc8794201b770bd7711bef1bc1148bbca50c00000000d4af791b64ffc4caaa05480c745e864e8ff4a9a418db3940a856255bc3b9528ce2689649ffff001d26a884e7","010000000d118baec4472ac869aa6a1afe906c53bb1e65027deb3956e3b384c6000000003528fa7a0679ab7be8a17fe89696ef1a41b1bcdf258ea7da034ddb3f1034a2b3396a9649ffff001dd2ea5b06","01000000523e92c91e05ff2b4cf443daad1a89d4547ece987c13f293837ce0df00000000bff54f915a4434575a22d1c1924dd7f61ca878a468e05bfbaa6379ef7df5d53bfe6a9649ffff001d266aa366","01000000a3ab3428a05e9f9d109520ca8d70bfece34559e992f2c4ea1779b4fd00000000b114bdf9e7600e757b24579eeb19afa00256b64551589eed3148a74c36acaeaa9d6c9649ffff001d286e2a76","010000008e39beecb5fa981650167a1ff310fe0acbb342d3229170fb0c1356bc00000000702166ef292f13a108d4956aab8c31c74debbc0dd13c94ca4c8b5efa1f50e8feb86e9649ffff001daf02aa08","010000000555657ce6e9b72d10ac1424b350e1fe2c6003a084c72b6e6020e18400000000e7c669c35a110f5b9e62ff79a1d0427b5af279316f34b0334647d4921b61bd4f93709649ffff001d043aa6be","010000006bb666a1462327a3b50da834d5c24c1630925e377c62f42b4f4f7f2e00000000ab17222e0fc0fa8f3786dc9aa3cdd3a6938ce7a55cc8a3bd37deb2265aead81a68749649ffff001df29bd509","010000009a9422dd5aa842aa77e59bd752376a64e429f63f40ae787fbaef9be800000000ad63c2897a7a2db66cb33df51a792cbdad5ec1f486c69c1860e5670a29bacb0c9d749649ffff001d1901e179","0100000025da9d36e718aa5e030e863493c2629e28ec096e4c31f6b8a9362d8100000000fc55a108281b9f8495379ceda4acc16e110155efed415830df4f10fd9fa904f961789649ffff001d092257d2","01000000cbe6669ae0c614010ce9ffdddb0b6d4eb0c87d2b42cf98adfc9710290000000039aa948f1adc7060c46a517172845ccee2bfd04c6abde167b2b1f1000e8cd098dd7c9649ffff001d1fcecff2","01000000ba4180cb3dfa36dddb22846fae69c2ebe237aaa00edf7426fe3e4f15000000003b0406d9eca93eaccd4e9e56743559d6786e42e5afd02abb3fc7913033b1519e407e9649ffff001d245d539b","01000000eafb5f42eca03231f6cdddf127cc02127c6c773402c356906ad100f300000000ae6e0ccaa0682d7fde93ac0e5524bf097fe668b6168491dd11eb6793ac408be84d839649ffff001d1c2adee2","01000000c7ab7b54ec0702d656bb260d1f86ab5e004a0b75a70645a4f488f99300000000f994573765c537d8ca21149eddc1427d73758346090860418bba6fff4873d33bb7859649ffff001d04a13062","01000000bdd8bad9e357eda076eed17b2e5364b1ce1056fd849d7ed4a070247f000000008fe6648aac5b559bf33db92d5eafe15b6ecc2d9924dd6a0e67e6556d166d7c9027879649ffff001d086c891b","01000000dddd80550fdc4c16c26bb51ffe255f780310ec34bb4471e57cc553c4000000002eac9285316ba7c79ac2c636d5b8e1462bdf52d5978444f70e9b1766c8dda9494a899649ffff001db416a508","01000000b583f63afd947b18ddecfd8e987a6d32513f90093d15f82f9329c72c00000000f6a6db96031d482f1dc13690769d733c44960ef963316687f1d5c047b97b35b4308c9649ffff001d1cdc3356","0100000068891531570faf1b83ce850cad274d01ff35b815285f203163bbe40b000000001a907d0688fc1bd3ff1e7141368f1c1d5a92abdc16844d3466cd77c2a3f7c5f79a919649ffff001d698f6f0d","01000000e79409d4391b20dad1ec98b62997622ccf8177f908c907f572e9dee80000000083d68b5418e1d30278ccedcdc9f2a9d4ee23dd37c7ac1403b6602e1af2814426c0919649ffff001d335e8988","010000001396fc0b1cbec2188da7a7ea6e719135ca3a7df50ae283ba53b6ed4000000000d645ec63fd7e30594d6f89ca4d73727e5a99d95de8ef2bbe2fc4615fba7aaf845a969649ffff001d18bc6016","010000003b060ccd330ab4a48339ae21609fa86a63a37be34c912e04b109a9520000000005b820cf25468758e436a7a71ca7fa9662d8273734759b8d28394893e97a892880969649ffff001d2650b639","01000000c5c2661f138c5756d1321f038817b08646017363a077eab45b88650d00000000b7adefb3b4f301f0654d3e86af52e3b29d330a5570c372e6bb86bfef9ad8dc3de89a9649ffff001d19f45dd3","01000000aa8e3d489fcd268386dd71bd0339d95e1392489fd65646a0ec6abfe600000000c57b5ed6bc082d3bb821c74d10e4bb6edd35c2550e852ae0194afdca9826f49f25a09649ffff001d0d327b14","01000000ec3f73a396c8660a6f03bc3e3a7b0243c3a60fd9e39a31bc93f7d6cb0000000065bbd8c9fcabd85d3e5a215b666ccc95c432483daf5b65e2eb9f44ed36e5787d6ca09649ffff001d2cbe96e9","010000009cb2969f3a6d7e188cd41bb55c8d04c3da4d2ee2ac28f6ae46f0d1ec00000000208a51413bb00ed146f7e40ed12cda7b79c8c4adb7376cf8b6cf6440d3ac45b91fa29649ffff001d1ca405ad","010000007932f9883f03e7fb2b704e1d83cb9822daa5b5c0943707768800bf55000000000b6cb56fcd07a96c7884d753fdbd512d8c0e767bc3e9fc7e5813694c442b52d78ba59649ffff001d3677fb11","01000000ce3e1d06076bdb79a87d3adf73d08c1b286b989e5209e86996e6e9070000000072fd073fc2e1e44fb5d80f04eb2bbc14aa11ac6d29fe1dd3c689109c1d33aa3b13a89649ffff001d74c18e0b","01000000f41925f586d0a561b76e9fe93508594af85dcd72f3477d95db915e580000000082028634b7c7bc5d0726ebf98edf7760a2bc8e33151d7764f3e0ee2ad370cccd8ca89649ffff001d3a39d7d8","01000000cf7807f7b8532609a7768fef93529540487c3c8ee30dd483fcc9932d0000000001c25702bce6058c929560a7b34484a5615efc7af01bc3240bdab1fb33045b82f1a99649ffff001d39f400b2","01000000fa4f214f206d6a9424a10e9670ba4cfee26d0a466a7905290cbb9bf500000000cc9ab64bb2f448a91058f810e53457d7284f9a3b3019ba982a50e7a2a29fe6641aaa9649ffff001df6047300","010000005c8d930ebd33fea0bb59d83300e5de83a7d044347c338d8d4d40881000000000d8c17be7c30657c5c30870ff9ec5d46b79042da51a0d599ca757653f3680f2ac88ac9649ffff001d0887430a","01000000cf59953f9543e8d5531cf5268976b0131b3d919963ca2c0d6eb2c90200000000a07ad54cce58d07e6d419dc680df3131713896d9c6c1caa5d3959814c1b5ecd404ae9649ffff001d67a7cc03","0100000006e42ea7f98ad957ebf7358986f4eea0d25ae4bef642d16b5d162f9a00000000f6ca654106e49d9fa3eb4ccca16bf2a8612e7592cdfdd383f44a99c69c94c4ed3aaf9649ffff001d20989516","010000002d1d1479b48588ca88f76fd815ddad0da90d730bc8527ff2d612035000000000a967348d8a80edf328fdc577df4b1cdd69a67a32a65f69cc45162113f2d813a7fab09649ffff001d3a71555a","0100000047d718d2c80ede0e4d0c483d7332ded19d098c6ff20e507e009e36db00000000230db0877c32f99633225955614055ae6944ca72a8b8e2249172eafc65da0a46d4b29649ffff001dc865db08","0100000035441411fb5fe6f98c73147a58aec6bfc4bb289b496745931d81c51a00000000d8262e7a125155fde99e284d1d0908a59c1c9a3e003c4197b96a2758762752010cb49649ffff001d2a076b13","01000000dc5a9428a03722910a6da4ca18298eb9fc4ab623446282b3c221dd84000000001aa8dc0236de165b9449bb2bc587a583a656bab9c49f3fdc271caada3631801be6b79649ffff001d39e9ddfc","01000000816aaacd18a37b8da145e79fdbc55b0ec0113225eed9460a857bb2df00000000b9399bbb1bfaad93c7161a45f89c9a3e8e1d753f41f5b4546cf50b7a07cf1e22abba9649ffff001d1c3b8036","01000000b7dd4c03e125350c49a346e91d86193f20666237e204787d6137307d000000003f6384214dd9ab1aea5f593b16a137857ab31e23b6447b40932d247b29c658369cbd9649ffff001d1d0b2045","010000001bdbd17054998207b33fa514618ad03adaf822bc3008d8bb4fb7563100000000c6b87421fb0446134eda15cddb5e26145bbcc12ebb1e6abf36f603edc6aa614ee7be9649ffff001d441a7902","010000004d914d29b0ec122c42288f0a9937550fd8665ea5b0a0ca06e3545e1100000000df46ff875b75e46609b1ef89130408288b22645708f41187cdf481ee3498150af0c19649ffff001d24c6126c","0100000050e9ee50550e9e1cf44a4e7378ca8e53af186a7b8bbc9a6fd0114a080000000053ac9f64c5280b8713f4fb29050e23855deb119112f2bfca1ead1887d50206f09cc49649ffff001d176c9ab1","0100000043f52b5c7dac0fe6c6bd2624cbdeed6d9899ad7097b147fa60b7160a000000005288d9c38b125665c216adc3818f37d1d7b6719df8eda749c47e5b55f0de2c95e8c79649ffff001d31d4d134","0100000020fe24e3cfdfd1c005353a9e6641a86e55b5e06e59b1f1c3cf2d77d500000000a8dea76975bd360becc71c86cf3bc76518a5880dc157301fb3983243e1da16f5e1ca9649ffff001d299165e7","01000000663cc2fcb104753c67ad3d0ff0992739c8490bdc0311e49fd0927d4e00000000328b1e5829991afecf1928ec5cdd6f687c7c12880f88bc1174a418d646d4c5554ecb9649ffff001daaab9601","010000008f1f3dcee0f6e0152dabbbfed2394d048b72231bae40530d1cda55c6000000008456eee6761122b22da5ef2d21eef8ff8755cbdd77d9d8464588cb892184be3b46cc9649ffff001de6db1a04","0100000099b1a1e09603285877d3bcedc5b5c1696118b477a7746623b6dee377000000006398cf244b5bc2c6a5799f8c947e3c2d44ab2a0711da7cc0489a2a37c44de44508cd9649ffff001db22e9a03","01000000e0c98248aa68f1a743c1e43846c5f75c505e1afd34d50b7056c1960c00000000ee7201d80ceecdf6cdc2c2305192420d003484bc9421dff1ae481fe4de0072b356d09649ffff001d1750a8b3","01000000512619cdf45ab218aabe1f8c698197a5e438d8d6c09b361c9e8d9ec90000000056a967cd63347fa794e2fa861e80071b551fe2d29be495c066ed91f674fc79f007d69649ffff001d246fd2cf","0100000003f307fe19efd770d073893726ad2328cdfde187ca452cf2cdd2c81e00000000f3a272bd8301f507a9ccde7b13636578cdd825134bce1e2dd12adeeda3e912ac2bd69649ffff001d6e3d3300","0100000021822eeb4eedb74c86d9c64510536d2ad4cdb78023eb684d7c1b10e100000000a5e24c413fb5b22394ea5452d595b76d769397efeb6f3cf00b43215ddd906d1ea4d89649ffff001d1597ea68","01000000d36d5c01b888f131643f38178d8ab15773cae27be93fbbe0b0dec04200000000c8d95d2ea78b5b9887f34f8fd9bd8ae71f3c2b67f38c5a2c0d58bf2d25522ba83cdb9649ffff001dee8be20b","010000001ee92dde7d2af147c40e2dc32b8c94624cb42df789660786af14db070000000052c32653f310ce3486e16a9f1e08e0eeb1746e3290bb53e59a358bdcd31d7bfaa3dc9649ffff001d359befd7","01000000d9586eae57a3338778776b9a60ab615061739d282ab137263299e728000000000893839ec1669da9b38c79f0257271f96a4a413e619eb4492355b02ef36b543f37e09649ffff001d2aa1aad6","010000006cc3879c1f855efa8d9767ba1d6cfa6f54a361d9740a8c57642ca7dd00000000afb94c6abe3ad051b1a2f68bc13675e7b994d0ffc16fd8fd222787da6184403198e59649ffff001d2ecf6ffd","01000000b42aae1eb08f15b391d073ef3682f942f6c0fe91df93b1a5c5fca410000000004c1f398fc85468c55ad7eff6fba99933d5bfd4eee8767e444fbc2cf887bd4f93d5ea9649ffff001dc53f9e19","0100000029654dfce7a19c9f1afc504ca8f8a9d1834af0b802a5c8a5740e2ce500000000132e4ef011c35b47a628fc4c7a958f17d11ff7dbe09a7a5de1ca320b654ae87b16eb9649ffff001d01ee5e3f","010000002794b4a39bae52eb55f11e8bd5e60ea604d826093fc933d93b29e3f100000000c4e45d3a06cf720e36b876b9639267fe2582432409fce68846cbc5d636b8fcc460ed9649ffff001da6767809","0100000058f55defe13bac6b79cc8acc792f8d8ea0e531140f7998ed08991a6500000000666b78e83472fe8a3f7d2f42528689a4db489e84eccb5ee03a316651c1f5dcdd3cee9649ffff001d0861bb03","0100000062a8a2c20133fdf7cd65de990677774946fc74d6490d46d841295d2d0000000023c1de57818875205cc9ab9e7dc6708138d3df781418de3af1e998d0955052dbdaee9649ffff001d2d15b899","010000000891b83fd2b98b1d0bc5fa6cd3d1844b5cbe866797157501cf3916c200000000c7da44b97113ad0e6c2c66a38e2ed0a427196d51c0433c26074e919e2f88232782f39649ffff001d1f1e407a","01000000862e5b74f50be782d120d5b3899fad1320404692170fa5326ba73ef500000000a93e0ad750eedfa022fc57819c55d57be34dad13e5d59bfb39c0ed49d0166aac0df59649ffff001d939d2802","0100000028ea203bc0fed1d5fbfe095beab077829050a15f7f5c6d84987cbd0600000000382b9c4a62281ddaca38115cb8a3fbea73f07e5eac66aa338b16d66f83e2fc6fb8f69649ffff001d13052504","01000000dd27d1939c0495d1599fd4f166354010d626289d25d7c673f810b1e4000000009979dbc50c9b0f91382fbbcb782adf5d660a48aeaa737943c0c3d2a6e511a644d9f69649ffff001dafac7d00","010000006dcdcf1f966d72fba155873cc647ee4a6410299fa311b48cd573197e000000006d256fc8dbb214e842f066a857c9d7c2f170297a4dacca5ba24dd67ba8b6471d0df79649ffff001d1609d84d","01000000ad6734fa92ee743993b18507dd4e76a343beb2b8c85bfed87c68fb690000000091f7ec500c199edd7d5c228ac03317e4dca4e17c3b7784139d500ad6c408ba62ecfc9649ffff001d282c9422","010000006a745e8e74b6f46b367e6b934aa4c8c099c0c109c410328f5e8cabe70000000001b0ccaeb9b43538ddb6500f98a4d1f1421ccb0b283d8b36351eacb34338920e36019749ffff001d1f7f8f53","01000000a72a8743e6ee365b7948043075ca25f1752e1acfcc4550bff3965452000000006ccead24cf508bd8855a0cd658438817ac9591f8b48d7fe542e9e5bc6fdba8430d039749ffff001d2499e8a3","01000000b5bba42dfe81fc0b7ab61f718b0068530bbde15924413be0ea2d5e6d00000000cd51962d15c82856e556e6dfefd3c267e73b113c6f227f558a200a511c596005aa049749ffff001dbf5b2607","01000000434ace667527c2538e769f83ee075faef17a1401c6c04fc1d39979ff0000000084d702bbc55988b24af956d6f4270beda8f21288de8292315134091cda84c350a1059749ffff001d46f3a604","01000000cd46ab774acb3b6084ca07d024dcfa3c966bee784adc8c6ae37cf9d40000000003e3e6a9fa259e18e635d21117a7a2bb359a51c80012266e44e78d8ead0d511883069749ffff001d0069c59f","01000000f6b657522dbcb0cc228f4586ac9685e86bbc9c290e78caab24b1a90000000000f12a14978ac3c1517d41bd92a3a53e3eb0854e9bcda8d58df5cefe69f30722a62d0a9749ffff001d31d1ba41","0100000069a7a65014c4d5515a768805a2c0e3993cc17295ded399c5884de9ee00000000dcb0cf1b6db3e218fedcaef26aacff5c2bb7eb682b8e1bfc24c9e41f3ca3ca790b0c9749ffff001dfe664607","0100000028ec372168ff74cbc6b688be1bcaa4934174eb642303ea63857985a5000000000ab26d6ab0f0e672a05a37c1fb79b17fd728ac95d9e4d52557b3f552b68f4e5d490e9749ffff001d1638a1c4","01000000ffc9dc1259d7cdd106dcaf1d29aae9071388a7ba3986b69f8fc3cf0d00000000c601c43fd76e3c58047cbbfae424302a60b58dd56562f5001536e21e5435c6c416109749ffff001d022e3c65","010000005daeba4bf98594e2ef337962ad7b8090f284c1e8d7b3872c8f16fd7500000000e7a4bf51041cbc06440851ab7406b731d953c667ad9bf957009225cffef727e37e139749ffff001d04d4b9b7","01000000a185e698700d8bb6efd27b36715c92e2772b1c92397e58e6cce5c66100000000bd55c4fd66595969ad91940a838681ba7b0ffb1a3723455f67dc34df2d4c6a4877189749ffff001d3583ca97","01000000bb7c310767b85abe8e50062241af3c74a983333add8a89280b38ae8f00000000ec8331d4d9c47d5d78b21281997f0d7a7002320fc51a757f377ada2521e2226b4b1e9749ffff001d2a98b972","010000008cc322a18cacde5dff37a02db16934e0f117814bdd4931624628903700000000a8267051c91721a9c09d63e188a8bf3fb8ea8b9e6206a1047cd4ab88171082b417239749ffff001d071a20be","01000000027045b8591b3b09cbb0ebcccef7c2a2a3a2d133fca404652bd8426400000000ff1f83e4b31b150d6ba539556ba91b01f012ba9dfbbceb90f7f9b416948dde0699269749ffff001d29bbe668","01000000b43e0e0633f08eedc7f6ce2c1b5208d6ce314cad87f2fb10554bb50000000000d3961cb09db9e39614bca671dd9a93e18adafa03df88613dcc15c172442aebe9c82b9749ffff001d321a4275","010000001401c33d28573686676808e3de6a72e7ba03b0b201e621174363aa8b00000000b4b4495de3880505d8db940ac32aa1ddc08f46b24aebebe39b019ee36f9f72da542d9749ffff001d0cbe9a03","01000000f097d6224225ecbf6cb4e05639ddd7faf23c7f1ac617a937370cd89400000000389afe728b88bdd46856b0e0d67e7248cbb110e2d11460c3ca8c2258df4da36141309749ffff001d21beb20d","010000001222049e726301b5bd6cab8a0d0b8c081f90a441020d6768cbef49ac000000001cd2dcc33dda5e5e62e31f064abb7760d82f7017c6d13ed6d45fd60fac20ce262f329749ffff001d23aaf8bb","010000006aabbdfeff1a3735cf9eb3365924bd790c094a9ea95067f5442f3664000000009130bbaa75d4f80daf6756bfcf4baac1c4f971785151030c85c898c003ff722c7d349749ffff001d2a7ada0a","01000000d9aeaea8397cb2615ec7cda875d2f4adf2fba8fb85436b300334bc3d000000004bf5b873d79664700d3aae50e04e7e023cad25e0f1daf6f5b91a8264aa0d483e41359749ffff001d25e43baf","010000004fb326eee9207c3b7b8498c0dbca3c1ead3f07c79abfbf6a6c182fc30000000004ab08725f236354dcf5efaaa11de0fc54fe45fe6d4eb48e908adf49a593f866ed369749ffff001d07ac8af7","01000000dd163e638d56a8ca4bdadd876e83a32610396a572b881eef9b33435800000000010626c2ab4a63494d7129d17433242dcf8ddf9745056f4cecd704394e2a8638e5399749ffff001d1ac3a4c6","0100000035d61048662189fbad118473309a9cda83f72f16f78a095d2c7eaaee000000007ea6e5e7dfcc3ec8c6a618671c7f5f4901dd6d46b8e0dc1ae144049742a11891973c9749ffff001d19e243b8","010000007cc020fad82a51b963afff96275ffa172b51c7a41fc66b9bbf701135000000009f9f462b812540b1ded8af7fd2b627ea23961465f8c28a6d4072e6455dc75f4104409749ffff001d2d32104c","010000000dbdb83fb0f56c1a09d6e9363b6564c60bb42e6410ff469c1fff0142000000006e153325f9e7c449aab128037cbd2e92ce9c902815d46f04d53d09624c185caf17449749ffff001d36782eba","01000000f62011226ea2aa48ed5b85240d6af5de07d4d595c17519a9b89bdfc400000000d2733efcd9949b38189bff95b9e41928c78dd510b2aab146f799d5c34d2c5b858c469749ffff001d37b5ca96","010000006378fcab29d5fa77430da6e63433ce53b16183d722e6dc275763daa90000000053a5da8ef0ffb4a8f9b39b8d128e01251e76345823f3f0e57b77413ce9d561059e4b9749ffff001d1a458482","01000000aec1355c8150846f507636d3983e0358ba2cc71b9df6ca344e22ce1100000000014b9b6c88163d7b574387ea1e6c25c50dfc0c95bc78c20c8bf22a6d3d1806d95a519749ffff001d035bcc74","0100000059e0a0df5143687c71eab3f0d0fe91c9483d09d00a284a24fcfedd3c0000000034a741834b81c03d42ae2f90047d41824006548bfa180c822d3fb23b8f66c272f5519749ffff001dc5d14902","0100000030e2eb4c933035a05306498cd97f5a1d1d611d45bbb799862bebe536000000006dd432406f251aab59a89874a41dda064c5f2255d1dd89d86f2c9e5288422ea582569749ffff001d218d9b75","01000000d821202e008d82e3af9aa48d447e74582ff7a9a9c76616021063cc2800000000c26a4d014eeed6b7ee35d556ff109c0fdd40cd89281b24120ce744674da40c9afa599749ffff001d07a06632","01000000b53e9b1d71a3ffcd5690867e3ec35213ecc9f2ae2635ebf34cf97e5c0000000083fd6c92c8dd485d43f78f0d0ffc0ebe5ca21d76efca171883cbd4508c6f83c9a35c9749ffff001d356ed0f2","010000007162e543ffa264d3a67a740f2ac62b454aac39e8fcd11891b583007400000000fc8389ad16ef9c7713b900cf529c5ae4310832f5dd71cb4b0b5db5264a8bad42025f9749ffff001d9b3eb404","010000006de2523dbd121a42133c463a155ca78153c94aee7e454a5be875f44a00000000b72e64f325bd83ba23531fbbf42b7a604e40e689252225daebf735015867cb1bc8619749ffff001d165f7550","01000000d2adbcfa30cf96bc07b11ec543da3bfa256ba7666ff3190013b1be78000000003dcdeda1cc6d4f116b0029deac08667472bf9297fcaa785b73962716d331a7e5ec649749ffff001d1e2ae2a7","010000009a5ed7b99fcbb475c4dd84463743c92e8885166586eddd8750db7734000000006d627a2b72b744121af21aaf4831fb367a99a0c0dd70eab96ac7463a6259838efc699749ffff001d1f7dea36","01000000b50d907285f5b7f144602182a0ac81353aaad7730cd6e55362d32352000000002521f1f3cb6c8b0cde60434042697b767bf9ad5491b174a5b7c75c0a878a8556dd6e9749ffff001d2797f297","010000006b26eb41351e838c11c943d89be894751f2b5a51fba27c9af145171900000000b8d7cfe872f2fc9ee534b8c5a7fd44f857d28f7524dcf586af240dc09f476bc66b749749ffff001d1543d735","01000000575c2a37271ac27c3c3e63cc6934313883561899a83fc62f6669213700000000284515270190fddfe05679cbc8bf3bde4b270e4e6979e0d39a5aefcf24aaa58fbb749749ffff001d44cd0701","01000000e1e7f97cd147c9241c5a411c5dc4978288a3441e9b7670d33649ed850000000055e65645b5cf3efddfa7a7a5e221ded701110771b59993f49f228af63e91180f5e789749ffff001d1a1a81d1","010000006213858c359510db12d51765a56d194453c3cbbc467fd23096f9f29500000000c9d3141603067e325bd7b225de8ce238620b667e11ec3701249433410b890f9aa27a9749ffff001d08c91f0a","01000000bed3877840f53ec14573d3fb47d596e6ffda359de57918bc1c2c17a5000000008ac8964486837f9ebac86cb540c8cb6b07ecb1221194f5602d65b85b9d9d1792857b9749ffff001decfb8c03","01000000aeeebb8055209cc0cfe01e0252c0e6fd228f5195e5ffda4f8f4773a200000000f409892945c1e54ff0bbff781253c2ee240cb683b067b7466b7eb0f22221a89b3a7f9749ffff001d58eeb512","010000000bcc606d2e31797ecbcc17064c5ea9a1cf9bc72d0582ae69d29e74b20000000007277c933e028b481428cef807d371ec9b11f0719ea5491fc21719aa6a6d0cc34d7f9749ffff001d24c9b6ff","010000003fb3172f94f9dd1e0668f7c2febf236fa490407962ca3a5a7cfac70600000000e627f54c66fe92c84122cf588ad69ce0071670841063cbf137590aeeb178319b3d839749ffff001d1948b3cc","010000003412a3d5a7f8758193aff5919a473551d317cd17741e11dc24452480000000009dc2e0d63a3c6786f20d0703a5c203153e2b649492606fba29fb4754026aa1629c869749ffff001d2d62f90a","010000001060b7d31b9c19053039a787bb189d75037a772d87f364255c44415b00000000c9b60bdddac652c3b4a6c4a40ecf8b222519e5ba54a493fe3334e5366bf4b0cdb4879749ffff001d18e8afae","010000005a0aeca67f7e43582c2b0138b2daa0c8dc1bedbb2477cfba2d3f96bf0000000065dabdbdb83e9820e4f666f3634d88308909789f7ae29e730812784a96485e3cd5899749ffff001dc2544c01","01000000c76df87d943c950e7ffa10a88c6c4a2529532688bcc9f95dc5d3da9c00000000b7647d64c5d61f43f0ac2ae3755f783a4739dd8d5266b09a1b7f5d59278d7519e28a9749ffff001d1d78d904","0100000046621290e1527c10f40bddb5321f45b29cbb734fa20d5db952b4c31a0000000095c7594ad5464789226ba4a8819d4db068c5f86ad6cea1e81f1860feb0d58f95558f9749ffff001d08c73c59","01000000049d73b7e6303a92fb3bd7e2f704b0e95f3ab85cadbb64f87811d6290000000088fd8ca9dcea980adb082f1f7b7980f628b1fcbf46d4f04f25b199087f790d2a9e939749ffff001d7b53e60a","010000009bbc6f5de0e604d08f1a1e19f1010f26e87fbf7231a19972ace30f29000000002b2f75a409462c99e575a2388d3af3d151aeb43b29a6605539974b35a6c10745c0939749ffff001d41645800","01000000245a0906bd66e873d9dc886eb266384a5594ea669aa4927812fa44bb00000000670fde08cedd2093545db4ad8922e771ad1c0854f278e962a187b22e0874f8953f949749ffff001d1d72bfda","01000000229480b855349009aa514706f776788e754dc800242eca58edeb448d000000001a3e6d20419487e960c85fd86aa40b3104d61920f0aecbb6308ae3a0fff26fe134959749ffff001df558f503","010000002d1e4706cfacc278230a3f6114b4316e8f8bae8982c0b51ca1e61cc900000000e734fde6a526e91f0109150c96d2a443e0b407d547e85a01d7da1853330180be449a9749ffff001dc9576d18","0100000076136191f42e014e7b13fde3c429339a9ae10ddf7d04b8d0a38383a6000000009cb72202aabdd4952a82d8d4828aed7cedd5034380ad9c659a727c94a0d1f1d78d9a9749ffff001d22869730","01000000eedad068e22dbcfbb7c7aafd26e594a51131b48d119c964e4aa1a7f20000000048dd8b75d62d7cdb7764996e3e0c8f85d4c49d75c812c19b32a56c7a21eaca77a59d9749ffff001d2c8aaa28","01000000a3ac06e408c0fa6b77d165ed90b2ee25598422f39e7cb379a339d00e0000000019d835de6b3349c8a886f9773b153582bb8f63e2e35fd8139aa3abf2510cd4e92fa19749ffff001d0447b67d","010000003d602338549e1c6e214bf399cc4b87cd8fe8cd907e097f5a3f2d1a6700000000be3086d204262db969542976bfe2b03458e4ecbb14e5f26bb38d6e6d86bd1e7ac1a29749ffff001dc1d8da06","010000001ae10484a73ec0c9ffe741f8f75c96c00ae834e96c9b342a4fefbdff0000000093b74f8d6d778b6c64da4ab15f0bcb53e1598304de034e964da1bf82f0e181b090a69749ffff001d36d8c331","010000006c81573bc36a9be8b50cba18daf9bb0f441bbd7c9fe87f8f6c043888000000000797aa25f6e7a7ba416292e54d452772c28377c95be094c83a2f1f15aad4b83a19a79749ffff001dbfb62601","01000000be278df1af6ac9bfd7669b3e31da6055db21f579a8aec766431848d2000000002e4e9728a4260ef15ca183a8f2baa6900c0d538b049c77ee7658d343cbbf2ce93bab9749ffff001d1610989b","01000000dae685668f8c8ecc58a768a38e86ec1511cbbf4e04b53c19a761d3040000000028c9259edee81c860a1b5d7193066f4cef52baad43560797c555d440107b2c68a6ac9749ffff001d050db5ac","0100000035e7a972c2e645cc1cd6d7811909991863d17c035d7c073b7b4ad7c400000000d615c17c49ce14aa0288c8c42e68789cfdab1b56fcd3b93537af7c044bb0d1c586ad9749ffff001db3d54403","010000003268f183d5a2e38272fe6b38fcf3a79e415aca74f1bee2ce308857fb00000000f5455055f51dece4d755345a8bdf26d6cc783964e4fb0cfa603525f2faee090609b19749ffff001d2519e7d3","010000009436511230bf37b74a807e5d7e8ef9050f644649d1e3bd28fd4e5e2c000000007948c9368f0f08bc64a75c332a51dc46997b548aef7f90df03dd0a3b633b1266ceb29749ffff001d2b8e7fd4","010000003aae0977b5ad4c851dfaaff28259e8b6eba5c81e650513e11c9c96ef000000003b08e80fbd5852e4633deb9ee14a45bc2d851feceb58775335994037d9c50711e9b69749ffff001d2eed1b54","01000000361143b789210262c29c456e94952fdd3b557936fbcc4096edc8c7de00000000fae855335a828bd6abe7be248cf3ccae227b65065baca2701ebf7b1a727653a26aba9749ffff001d2d06de1a","010000004ed88fa683922719779d3b8b21903bfa3fc690fa2b08603fcb081fcd00000000a4c4ccacc7a6494187c9cc01dcfb4b794a97d2e10fd54b6e910ba548052f219304bb9749ffff001d42adc401","01000000a0ada90516a5e537f3d4de729a0ff03764f41382022d5fb72e3702840000000066c37a59444e133f082cd8382b3e2c42b1dab6aeeb9cedb5c2aaaa87cba38653febc9749ffff001d2f96b91a","0100000092bde493e69971a18cab7e7f66bfc4255293caab6d9ffcb8e0f3fd0100000000526c7d717ba10d1fe5f38eeaf9aa8c65cb1622c3afa44fbb3ca98456569fedbd37bf9749ffff001d28c47281","01000000b5aa83489fb2e73fbe1c41dd5a21d4981921ff16f8c27a73d39ffe9600000000fce2bf053d32f3d088addff2c35603262875d52738c1de0ae60fc0b2d093c7fc6dc09749ffff001d730ec004","01000000c36339f0461a6acb0b2a9b60877434b3837f7d730787ea5a10cf51c000000000624bf00d5cd2b6a6b26f83600c244ee0e979ef6cab25536e3e9318955d6ac32395c09749ffff001d25308189","01000000dedf73a73210502b007ee1788990ec6d18e0b27838c7a95f978bc48600000000e8834447002e21e8550688afcc427a28178f33c8434311ea004184cd641b884513c49749ffff001d1f8851ed","01000000635800e3932588ba7189f5c0e8310153e143ed95dc1501ad0726874f000000007c03d6e820e2cd92a1cbd8648e3d0806b69c3b59efe0c00fa614e6b5c65404d4b4c79749ffff001d2888310c","01000000179293d3edfb3194052cbf0200061914407925a61d9965337df6afbb00000000f3784dcb7e3c8f0af7b1b93bcc7957563c188d4896f9f08c80674f699ac2ef9704c89749ffff001d41d63f01","01000000b62f4a1fcdcbb9504ba75ba9bb238406cde221b70c0f16f915218f8e0000000029bac09b0e5a663aad7c0b0500080719274d2a6c505f5c9c24854e9b6c139321f2c89749ffff001d1ca6f0f1","01000000fc34b978af76eae9dbff92e9d80d0f788a48b518032b64aed36445d8000000001ec9ce1639ae661c44838fcef0c6ed33f17eb73428926d90cd1ec15e3b6f1967d6c99749ffff001d97651b04","01000000be8afb78130dac39ed9cc58daf5d88ab61f0ce0464f0edb7d8b27ab0000000008d9029ca0221550b3fa6cb3bac2904ba745e4748d758e642ea362304c6da086444cd9749ffff001d1f96fd40","01000000d499e3da44727bbac5b3af403f95d564b8dc09df5fc6016371bf8d7b0000000011eb496f09254753d8352862ee806492294a639af27aca2ef72bb8dcb22cf1172dd19749ffff001d2b970b8c","0100000071d90a663c2e38ba72cac38dbd29587a0140b85fb4994a0de19949c7000000005cb6af39bb87b38f6d19df909b27fccdd2bd688e26d7e4a51110d8a5698e1e665fd39749ffff001d14af86af","010000002af9a7501ed1dfa4baa054f82fb9b76c83d5d2fb4edbaea2df2e3220000000008e4bda0df87967c07a9ec334c30249bf96d9a8d99a59291a3f966ec9e58e9eafbed69749ffff001d1f476298","01000000c5bdc2abfffbe65106d2f537b729e133b46c814a9d70e5565db1821d00000000f446fb50dee9138138664e2525735c88a57b495bcbf8e2be473c1809711796465dd89749ffff001d2cac2107","010000004863974e2eb3a2f72eaefbed4fa29fd7eabdde4432b2eb467079c8010000000004b00348bde668fa05a9008ea3b6758209fdf89588223f7423e7b071a73a4fcf58da9749ffff001d2c626cc7","01000000e980fd00e906dec8d5df4fa05b6ca862a173263610804bf2a826e20b0000000001401274adddede73bdd24fb08ad307c96b95fcc4dc942440f70db3b8f5a0688d5df9749ffff001d31401396","010000001b33a16e9640bcd1a3e75de836b4424f5e396e9c87a49d1fec44c3bd00000000d22ef52eb7bc63093034b2c09f1c3bae51a647a43e6f641e7d6cdca9f0763a59e5e39749ffff001d265dffb0","01000000b41434093d440f7395e848747d8eebfa4aa0821d404793b830a31e340000000024b7252bd50a1e39a6acf6faee8b4fbd1f37572a11622317b233046ca56b9092cde89749ffff001d064e1f36","01000000ebefdd97bc7c0fc4218137ba9d4296c620daa2e892dac0b2ed31f30100000000e4adc80772b0eaed6eb0cb97434b06f0312ec1bd9b23d7b0c5bc440520e777ecbbec9749ffff001d1ea8164c","01000000d4d3b6441c86f349959fcf9b71789daaec8b6a412d80af57b96fb09e000000003b0f489acc5fc10bd8625219b8835d30a50286ff9173a78f767673f98f3744116aef9749ffff001d04a369c0","01000000cc526863a8ac888b9ea2d8274c87713565c66a7efa8ae477f3930b530000000087456f7ad123616433186e7464855d557bf8ef090da7768913830dfb647d327983f29749ffff001d195355ca","01000000bbaaf124fbccd5c3da170fda1e74cdf334a43a540450ccc07cd9cd1c000000001c415dbf2706f387d78b6e8ac467e107a8427a341900f89a7bd010db3ad081af79f59749ffff001d16edec86","0100000080bf386c0bb7e1184cbf4b95629b8307910e7e5fc1215c9da2f26ab40000000001435ffc45e7eb268b51a6e876e33ad8a8a7fd6858d483823298216b221164730cf69749ffff001d73be2801","01000000fd17b8a72bed87002d425afedb49640202943961b0eb3342a3f81e7200000000c1946acca5961cdd9335457207330dda3428dc71f0bafb84fa2d03cb32d56caa41f79749ffff001d1a91320b","01000000532b98b09ee4ca8bdb67d23e08757ea4e2e891b55513a8f8dc248db300000000db722be1b01c05e05cf324c68d76d952c1fd859e8bfcd591343efc6a4727cd1972fd9749ffff001d24b8d2b7","01000000b8be3c9347ad17ca66eff6587c73c87c71d5589966c891fed537b58d0000000073f64e44408b296a1541ee579bb554d24be679568b378c87f85af194b12289a31e029849ffff001d26e25f0e","010000001212817302c7538e81b6123d1a3b91b9fbe47ce5dd5c85fd868ee39200000000f509d031c46aeb566ec492a63089c06c381fd9debfc5520f4e6355e330a80244fe039849ffff001d7e845807","01000000866e598aac72e49ba580a0dabbcd42a34eadf0e47582aab2fc444fed000000001cf03a0823e3451c4d2561f6367b0b231cf2c82e4c0d29c11582b32f877267a2ea059849ffff001d19ac4e7b","01000000c0f34caae49cdae1cc0699f98143037c1669cfbf8e07f1d63a1accc20000000022a4e9988e84d41d842c783b1e8e1a9dbfd385057042ddcd9ff5e452e941bdd3c1079849ffff001dc8299802","01000000987b57188a9ba399e7c38d7182af8ba9175d0fbd81d6a13847c8fb60000000001beb2c5c3ec802330197d614619caa91611763491c51966313685a75ad658d9df6099849ffff001d299932e0","01000000cdfb93a76b6973a953af5e5f58329da5320f644c3bdd18636aac35b800000000ba56f95746f8d0d981d33d89ea85d92ccf4e8536281cb6f9b4b8d926a60172e0a90e9849ffff001d35841372","010000000088b515655e84ee4edf5199484e04a8916246eeaed3329739df12d600000000c92f41dc0004c0b3557569c9599a2212675ef33193bf8ff5292cf6751879e5ea20119849ffff001d33b40370","010000002ecd7d0e838ef7af2311fa969a657e7ba81039c0c819fc4b3390979c000000005bd0868418a126620d1b222635f0c87d8d985fcba7591d6bb8f8b8f8e7324d2bea149849ffff001d201a934f","0100000073fd76cd343a73cc39c0f386212b2ecd31c9524febb777994dd494710000000080a00dcba0a0e37af0244fb8eea648fe976c8088d0ce2a97616ad13f673e2b862f189849ffff001d09363f7b","0100000096329248c74d4c2d6eb26b7762d053d11b61cc535f408c5b057081f0000000002121d7b546f50b7ce6aee5ddec993c68d7995710e4be6809322dd0b4c37624cdf3199849ffff001d1412f3c6","01000000ee5e3d8962368e7151c7a1fbbc97b0df5b3f2e73c2d5166ef663b530000000004429741fd4842f2e8871f04ba0b0762b5703d352af12120164f3dfbc19aa0bdfee1c9849ffff001d02aeb80d","010000005febbe2c27b72b12783d18f2d1aa4b23ff09c82556cd065dffdb7fa900000000074d27f4ce2b315dca8be750b046dbc487ef5e47d661f2f0478882ce676a67924e1d9849ffff001d190cb0b6","01000000c072e8aac027158abefb518a7084d31f0806788c0e40e5056c4802a000000000fbf90f607e8d314c89ece9ecce86cab8b212bdd53b9d513200ec6eb9ed02dfd31f209849ffff001d8ee63d07","010000006b25db5c955fb1e1acee84474d3348b0745f642032379f99a296dd350000000010371bd98ead05c754272fe595cfd6d5e14e370c903fb989685bb3ccb1ff74c77d209849ffff001d2c214a46","010000002092948493fa237994cd20967f7a75a994520fb2707f27fdd4d4949f000000004e29df39a631ebacb75ec54d7f8f5485e70182f6961048fc497777fdcc46644bdb259849ffff001d1e4c06a8","0100000026389ccdadf212185ced16c7d2e4af1dbb6545e6d6578a70e627e45100000000faef241ceef3527997f0b0944a0444bdff3baffc5ddac629ae3a5714803e9b9367299849ffff001d057a3435","01000000642f18ca9c0bf5536907ec1da0e1f156580227e8dc952a09a1a66a8500000000c7e2ec14a6e0cced2620d4e6fb1383bbfc6a44d1678c4c8ab5882f372a0c1293212e9849ffff001d339376d0","010000006f37c4b4a192df16a4c40e90fed43eb11d0727d188077dcb3872ef0e000000002ec5ff344fbb1e33d40ff71a148e023dbfdcc9d6045c20f43637e9ec67e7c63c2d329849ffff001d2daa2aa9","01000000f49c2ea78a60c06cef9e6dd81d79068e93a96328246e9e09b95c3bfd00000000c5ed22a09b9f3ce870fdf4cdd03beec856323f353db6a951ef2fa23e32bb4f2066379849ffff001d3a87f2a7","010000003ec7ccbdcafbe254dabf1805aeaab257da591f658cf4003afb49f58900000000daddb673d8f8de63317e4648d60d1453c4ba54e9ffeb66ed4c5a0bba7976c326fc379849ffff001dea202402","010000003c6a200f6b1c822ba53197966656f527ff427e1f43a8f79ae6810a4000000000cd51d43cb10bb7336ea084021aa44ce9ec072b38197dd1583393395842bf5b87c93b9849ffff001d2adafed9","010000007c6aa87483eee731db292945c9e1439e3ce22b16ffd2c29183035006000000001deac03558e87147dee9bce2e02729004b71fac544db4ab4425d4b43b2b8c269a23e9849ffff001d261ae641","01000000ef49b411379aef48f604d74df53c5fc106b3e20fa532a30324f9488e0000000096f0bfa29b930e883a9fc5b166be5337abedd4fd30f0de39d9bfd5f3e8214fb167449849ffff001d235e0d50","0100000089a1532b8b877f9aa2a9797ff9034683b47f2589e891e277ff26d8cc00000000873436573ad916613caf781073d61df92b8e3646859e55f778bbdcb1b8ffc11f67459849ffff001d2d3acf03","01000000a94c45431ae7ad4888020ee14606738299c2c7cab4d2189fca4cf329000000004055edbfc5a3c85b25fca2170a012ed7776f8edd453eb787a90635d90da0930805469849ffff001db027a301","010000003c60eae96e11842bdcaf6a70254c84fed9226891d5d7737833890e3100000000976677d403fefe4e784e360dd0bf05b9732178f8f510fdf04319a4957cc14bb18c489849ffff001de9c51304","010000005aa4b02b43b4f3c9512e72842ad7ff75407fdca6fdbeace47618acac000000006d683ffbb9f4900634377df4356beff0262d68776fcb3b92121c48b8715edabaca499849ffff001d256bf2b1","010000004c17fa49de1914ef6060f310e18bb4d8fc6371b6bbe6630c39e13e6b00000000e666c2f3076bfc53878fe442fd3aa7bb551ef11990e39517fe5ad294c8813e98d24b9849ffff001d25a81e13","01000000ffa7fc37ab8c2c5a5f03c9417a7be9c06edcc663df1c63ca25f1257800000000933d730585e664fc1c036be97610c072248bdc18a6e7a0834d3da0f827346ce779509849ffff001d270301cd","01000000a63e1b3f3d0f747426c4d832adf03f30fbf422b6a83fd7c2a0eff15000000000890a11d64884ea1256a34f119de9815428a325809fc744473832e30a9fb00b2e01519849ffff001d1a28b300","010000007c0ffe0c159277c3fd08881f4b4d0521f26364618357fdb490689cef000000002098feec9c0b9858b0c4c1ac4b6f9dfd385276f7d58848f2fbf0980db93e014253529849ffff001d332780df","010000005ab3fcc8e38ff0616a3cb2595f693fafc6ec0e847eee722040937c9800000000ea113520aabb4ded1cca838dd2ccadf278a83229ae3a00a0badf7bae87a9d16b3c579849ffff001d03becaeb","01000000de32699c428caa569dfc381db29751ab822446daca9b569d8935ece60000000042f60327105fcd0d7f868dc904a5f9e6b405d9e4989dc88ef9630417de4aa089a65b9849ffff001d1d664d09","01000000b143e27866c616a87ba9f43e0e3e0d66b0540036eb720dd98c078079000000008c3dd378ce61cba43b5134488ca15de8f02b00f4d116dae662060654dd6ac428e6609849ffff001d230e7e0e","010000002623c711c1159a2b218bc9f734a6c7d2478eefdfec0228e008dae682000000006359a77934df18d9d43f3780314b200665ff5b2c5ca335bd5d516dedab3a7d5880629849ffff001df4e46a06","01000000a13a000f3de10e43ffc97028e7819fda5be1a6f8b120c1faca037a5900000000ae61b14ec31b4dcc0e991df745321ba966ed23efd95fa4a100c1d4ce3d36e160d5649849ffff001d39798fae","01000000c686bc0cca205bea4448d2478974eedd606aed8733c0f63a7db2163c000000009c5344215833c024a11f29fe53cccfc40db2d0d894cec1ce3cb8246d74762ee17c679849ffff001d31191148","01000000fab164770c24e8cbbbc24a927b35029cb5e8c59b62c8c4a87c8951a8000000008a9068dab9493091a7901f08d20592a250f82b624e666860f5f5e256f47d8179266a9849ffff001d18fcfaff","01000000fcb12a983da411f957b2b46d7c18339d9ee8c057d143bd384d02295b00000000f338de873b49cd67f662d232f3e701f612f49016f35301adc826e5436d8a274afc6d9849ffff001d1aae0fdd","01000000b19184bcabf052a9d2cd7009ab899fb1ad66583fd5c540a3df31530c0000000000b2b68c989652a58bb8ee56e45691a42db753e2e020dba86c88b000c0e31e2af1729849ffff001d74735404","01000000bd0afe6536cd9aa16694e2e60e7c4fd2c7d1820cf83964f9b23c71fc000000009164dc64434b0f98b4b494f0640c0e5fcf0842ccd3dc3ca7540f922bb853057603739849ffff001d1b189c86","01000000d26daa3a442da31ec5e1af1c7f85c5fc9db9eacd11874f2a886edcbb0000000018d6b691222fbd804e54917ee9d540085f6f230f98905e4ec478b31fee51c34f6e789849ffff001d28f44ffc","0100000016100457fe073dcef576372d0b0b77674678d9b40870966675059be000000000ce5041f5510b81772f9b33f4ae2584d900bc6c585b1d9ff38ba40ef133990de00f7e9849ffff001d021806d0","0100000054ae3c84f250a090bbaa21c38c256f11217b47214068e162fab42dd8000000004d93ae78a9d3d0208f8d196080fb28a786f6bbec205a2d215d6e2aadb75f9423ac7f9849ffff001d016f4b79","010000009e0a3c0a2200002f41891e593efcd3b7ef8168cac1cc2c38c2cd29d10000000089a79f978655ca3c62ee89b4779eb0db3a347a51a70a46f459bbd941d96ab3d215839849ffff001d1ce31391","010000005708c7e882e1f0ff8e0cdb5d69bafbcd88ee75c9fc2cd6d0c2f414e7000000004f5bd484579d07b324709bbec56be3dffb77e34f04d8930d069be3c786d872bfd9869849ffff001d91967511","01000000292a55447baebd74d6059557f7ab448f2b5385554114b4eb7de2440f00000000bc3d3079bba39e202fcf4f752a053aca195050ae2d327593122af26176546d7a25899849ffff001d2987d6f7","01000000a068a9f8a51b94d6e7e84b976bf88d46655fb717a2303a3801f1400d000000000f667f557a4e0308ed80fc386cc7a7e71ca71a470ca576d115d4897f97acf80d1a8c9849ffff001d684c4908","01000000aab604ae7dbae24808b6374a19adb8508ca83d02c4403083a0a7f5330000000053a55f7daf06cb9bd2a8fc2cffe9f6483eafef16bed2749501e27a0bec5b18cedb8c9849ffff001d211a1df1","01000000e57d94943c4b800ce570206ec3adea213a7f8afd32b7078af1f7e58c00000000e8905c08fbb5273c9cf233f21e57a2ca638ec477f2df0985a536174e0190b558838f9849ffff001d26bc3e03","01000000ebdb0f5333a6022ee3aea6e41bd9d517bdc76c852516d4adec677e5b00000000ab587ce8b2d8caf71f33fab74e9983f068d7d91244ba547fa120fca3b0c199194b949849ffff001df99ed50b","010000001a9b6a9c945d6886e91e74e8ae24ce23ee9cc642fd1b6e736cb759da00000000f3ad3dd43f6cfa0cbf07bff94f5b6a16d5bd97b20f52198aac0d174136aa7ea88f959849ffff001d04eddf37","0100000059235500a36c3974224056eeda041cc534a2c38b06906e3ca53b49ba000000000d1b0405d034a53e7f07e8ba063b22e4e3d515bc7abd75bd61f846d3e7f883e6c5999849ffff001d14eb3aca","010000006523e06da0415a0da8362475e5c253a60485195efae076b83a80bcd500000000adba409d0070d55ba2eb4f69a2ee040ca0008106230c7cf3a2e92a31e1e912c22d9b9849ffff001d0ae86703","01000000c367cf758e8f2b3148803d9c581ad61bdfb4a58f7a3c7a7950065b2900000000adfe2895ee7a6037c5503ee24db5423b2c1aa723feec40dbb1fd40945f2b850b3f9c9849ffff001d96c39a03","01000000df073c4c48fdc65f5723c181d483ada089171a0381e40f85704775ca00000000807bccd3b9bfc71977cc6ee00a98cc35f3aac5e75b4ac3ae77ecf9e66669c7eb059e9849ffff001d39d4fccf","01000000b2e5caa9c513652a476251a63d8342f6d6b4cb77368d318e791de00000000000bb2bfb0fc2ccf74517611f018857d03f7d58c770c361c4054fcf3664ce398022559f9849ffff001d086d5597","010000009c54fe86faf5611a78724074fc20688cef8c10849e9a25924c7eeed60000000095a6609dbd768e9f5387f1e6e9a9c9a0bed143c93a22ae28c37a2d344c45b8381da09849ffff001d33eac402","01000000c951282a94dc20d203a370777a5242bd96003f5590317df521e008ad000000007b1dc5614f1f76e1731b1fc276a4066aed1943e46dd4d74f290a0d0abeb345e64aa09849ffff001d62145000","01000000b3dca583042bbab0f0ef14529825958c1e4ed2d371b62bde900e124800000000f6d6c2142f8680fc00eecf88345f9c7a41846722fc16392f57f229270622582899a19849ffff001d36412fe4","01000000f5dd675dc73d3f2c9a054a3cccbf651eeb59b08fdec9f448775dccbe00000000b03078705ead5977863e33ff260ce68f25af62401574b656b3a537ee861e1bfa2ca29849ffff001deb9d1602","010000008c125e4c1a846c7ec110de896328d9298a941d7a67d894001a722bb700000000e5f338d812c6b5473a91642dead1e2bfeb257c47bcaee768f70f6cbe30d3888752a39849ffff001d4e054702","0100000061b68fc915d2b95a8aca79ce4035e1338ef029218e69d3cc8cc062e400000000845c73ef38a4ea105fc741b238fc008272b06fc3fc3fbdfa7fc209504fc227ba50a49849ffff001d1e945d03","0100000047de48ec316967fa02846584905feac04274ff5f6b479d283b016f190000000020df5bc0edd6b379c5d028ecb83d65e046a94f904ec4639034a6d04b196688f665a69849ffff001d35bed612","01000000c581d856abcc582a471086b80d8a71da68f761176c57456eb40b4b9200000000fc6a8e689bcc48ce0d0951b2343ceaba4b754d54013136e00394b0d491355febc5ab9849ffff001d29640b42","01000000d13511f679f4577eab00529c1af83da8bf5842a7932c7ec5b6c80a470000000041832af695ad72f80344984382f06e4335d17077bc551943b243dd4e3aa61d098cae9849ffff001d6f20f006","01000000a96ab402d1cdde3111c39ffdf20f9cfb44f11f5784a316e32912c1210000000064968902cfe30c4424d48a2ff0e62de313742c73c9c7911495e88d879b9ff8ddd4b09849ffff001d1fc71c74","0100000089a30619680c95cebadba6178980266c0fa39f337ff62557d23f1db0000000006881199c74f19e76e1ed17eb6f9cbff224c34c0062ff64361320769bf43bd4f38ab49849ffff001d27eed35a","0100000030b05129f92a01076243c0b59df958e345742d1b62ab38b6325125aa00000000a94aed7f815ff4007e5838a977196bea108fae3048b768f724b7263054b268db49b59849ffff001da645ec02","01000000101cec551094b8156f7ff27e7679606a27cba9231332b2f5977e94e800000000452d4afc4a06e9d38dd46a8ac852b83c4635b53a7c7ef3b17d2b774c710274527db89849ffff001d03586e13","010000009fb7c147ec72774098d918673c053949a4cba0cdea211051f7f406ad000000004b5cfc30142ea2f160c36aab43302eadee17c26dede55ee62756ea0dcda4586861ba9849ffff001d2320c5ee","010000000764ca21c3bb87eef80b02fb787294459c8677a2c95a2939e2f13be30000000022c818cb49e707a5c5bc3f5c70ef35db48522c6009c0d5005966b2ddadf405a7c5c09849ffff001d278283e0","01000000c712296a7e37699912778c6a8731f753149f048311326704ddb37a50000000008c7244188ae5c265c4d053db6aa62a23df6b416a3f405007ef2c860fe85f99751cc29849ffff001d2da7fe2c","01000000a7e58a625bf5c06c486385bfe9aa0d7eee737b15ae148f817e1dc4dc00000000480268760173dc4e2b071a03f5748908ee839bd9504773638a7bf0ec8797d444edc49849ffff001d163cc66d","010000006482149e241680b3115e58368d45bf79e3332b70cbddaa064dff731500000000eb71f5faa7cf8367d7040a0e380151b88ace23ac58a9ee7f131890ed6465dcb601c79849ffff001d306ee1b0","0100000089b2135dbaeb7defdb6a5ee43d21375de8f3d805e3a14ae6773578b6000000008dedf7e7b7a95058bab0b2fed51044f649072ce2cc66e1a145b2adef2a4bdefa34cc9849ffff001d138cfd00","0100000032d1294fe5548e3446b43c6eb3fe70bdb2e9e183daa63019d6e3bcb6000000007bdcebde69e9ca12732d865d725f05a00d9a3b3dbaf8edc95e7ce8bcea16a56fafd09849ffff001d327c403c","01000000eef21fb2ae463f6691048db86db77385f6705c6d0695fafaa340916b000000009cf441bc4103bb5919bb999943ca0d1c07b5998f20f101df02433c1282d513dd73d59849ffff001d213826c2","01000000b10d7023c95fbf17344f10f1bd4ca6f6a1986dba852a4af2cc60fc8800000000f924e68fb9f5271c5e72359b9b2bda932a080b2516dd3917a0a57fef9695f65b58d99849ffff001df2058e10","010000004630a14395605a43811015c0dab5efcfa836fbae10e56d30e4544a0a00000000d4c02392694f2278976170e7190245f71c1316847e3d1161750afdda85c8561f8dd99849ffff001d1bc1078c","01000000adff2b8cf3d862eb45526aa6f066873d3ea99158db7f3b5c76ea18ff00000000870b16cdbe174e01033bed50cacb1e43c8bac6178d5fad62575ba7e507c7aa6241dc9849ffff001d077c4165","01000000ff8e762658255d2e8b3448a2eef964ee469db8c1c39876b4d0cf4c1000000000a8205070e9201a6a3df516985149bc0f11ea4ff716bf4e9d1f6f64769b5180c882de9849ffff001d14d26e73","010000006d74bc8f7161ecc82b81bdcef70b63386e84b5f85b572b64c35daa6f00000000e81ba5dc1fce6723721019363ff009651ba97841ce239ca43213981bde6320ad44e09849ffff001d1b864bab","010000002c3a6d7778d509d408e0529a425710ffec5e31d67440c75795d20cba000000002797f7b98f0e7a4fa193af83720daf06f41a82aa6bdb8b9dd4c661de302e8fc93de39849ffff001d3073fe58","010000000495e7178ad741138d7640adeb727e68b5086ddb52e144805c26822d0000000021acd34e1899c9caf9034c2f4af4dede8e69b746effd0ab5be43e2c7afba5c27d5e69849ffff001d1934a7f1","0100000096e2a25652c93d4e70bcb8ee1493f68846c6ca2ce5818749f38d9c51000000007ae4511a37e126f45f758d5a40850b096abda5893b115b3820fa29e83d10c1859ae99849ffff001d266dc20a","010000002ab565ca25bd9466e20c913616a0de49167b8f6baeb03aa91f6fe08b00000000104e7a813c5b61c59bbb6e2c1710bd455abb76bc281de84456fc86c5c9c4cfef7eeb9849ffff001d18c18dd0","010000001a8124c7c18f4addf54ff5c9ca48787412e1914ac3691e21fa08c2dd00000000c21b73449852a0bb001ee0473fdb168ece586b34cec5cfcf328322369d769a09b5ee9849ffff001d18bbf404","0100000056975d1c228f302820eef58bc0b29d34324f285ece8d188c52b81099000000001ef50e44fc46769f967d667ca16143d11f437dcf8dbaac232861c480bc397f2c19ef9849ffff001d6bffc800","01000000ebf7c537a322e798576ce15fa4771286293fea5bb2d08b7f901875cc0000000015bda5d50041bf5adc7a5142320bd06609bccdd8ee0295bcf86db63722d9566960f09849ffff001d91595706","0100000038d4a0a7b697da7f3a36fd52032c12fc1508be0464730fd74f1be956000000002c31ffe8587457a6fa22ef56321289835fb0258579b6c705f1a5b4549f49aafdc6f09849ffff001d33478301","0100000054a2bcbbe498f30f39df301ed7f2276d4cab32b31dabfb0fd007c8e50000000050aff1d8d78b6f5ab71239c7125e035b1bcacd34fd4e80c92f9758b97ff1d8f4bff19849ffff001d09584171","010000004b8a983ebcde85502f21ecbbcf903ad8ef967887d8aaaf68d5dd09b300000000d6b56711179ee6f5007ebaf48763fbf3174d4a03160079fe5305fe5d7898c8fe3ff79849ffff001dd6d4ba1a","010000007fb038615200a95ee0a64b63bdfe3a8a560536947cf08ff31b977a3f00000000400176c25b78ce4ecb6ba25e60746a030a6de17a98488256da1daa3e770c8cc08ff79849ffff001d05e4913b","01000000fb914ee7531c977f109da26d1f3091fde2fee5bffafb325d4cbfebad00000000452281b97a649d34372e4e7db7127fccbb3635935c9856c7ef6b5f499cc0aa7854f99849ffff001d1eb0ee07","010000005aa512b9b1cf2b8ee883ce2da9afe2e7b6cf4b79a7df82fa580cf7650000000045e1c1668520cc09a6cd22ae026b4981f0ad7f883e4722c98f15f754aa681dc9b8fa9849ffff001d245ddf50","01000000cdc775f5723d4b5844f54274285da90ac4296866e47d64b3a58546ce000000008338ad6db81aba4902c7de47bee2dec2276272d33ed7c8bc3f002e28f5675adc29fd9849ffff001d1a01f55f","010000002c64c019687eeed8083335b00fd54b88982db946ee398f9ae8624f6e0000000065257928bab42721da14f7a63a950eb33ec3334de7d8f98a4542214ef39b52ce56019949ffff001d02298d53","010000007aafdf5d17f12511b934e1451a27ea68310e44384c30df815541a003000000007084675b4bb00754aa64088311e57ed26ee3da37e8866d17d248c1a4374c805302069949ffff001d2990d453","010000000db06a212d9d3d6364c14939fc2dd44cb3dfdd5804950797e1304b7800000000638a0eb57ed0d4451707a96e10098cbcae1065a9f7948a03618d3e0f803b9f50f60a9949ffff001d39ae9aee","0100000024de86ffcefba26d0b9f443d461d63eca21581c651ca5ba0c609ed4f0000000000ad9e8c220330c29d0896f52111ee4a60a9fa9b95c6e6bf9b8225e58577572b740d9949ffff001d1b2124b0","010000000eb10c8a15fd09c9b0bd186994b3de13c4115f53c07e61fad637cb61000000006c15040ba93e9232297ce6b19ac1111ca2d1399e17ae24fbbe8b78938623c686d50d9949ffff001dcb3bb500","010000003a9c6d62c66b8c70a91b7eee69898b32ad14a7a66f95b7ea36d94c2d00000000133f764165c14beb5b285c53d18fb5e2ba81ec3962a3b39f976ea207fb8d59fcab109949ffff001d3db25f0b","010000004471c0544539c6c245b36a7527b2b41cb97cf58180555b12ab60d9af00000000dc70968d3131bf541790e556656a8786c9bb011496d00bcfc6492d5f7aa0b1a587139949ffff001d34e32cf6","0100000082d1de3ad475d1e2f3fcf6dc66b443a2a9bf18745b92cd747888d509000000001965ad96b0c28b9527b11eac740068d8901f00eada7e813ae93904ca2edfab62d8179949ffff001d91802014","01000000e92ed5ad589c1c6fec82e4dda540cf6d718b94b7bca1f6997119901500000000af7ad523e85922f727dde750aac52982ac8314ff3752e03e00131378edabcbd6da189949ffff001d18689c93","01000000449d89f0d0291f7670ad26ccc8714ce9edaefd2d233c7dc289a2c54a00000000a1a056d9ef36bc049e3e37ae2381c0ccf2c56fd86c9aafdda82939a808a006539e1a9949ffff001d395c092f","010000004aa21b26c0a764e54055a01844de984118f47b10ebb66f4d9540ceb9000000005409bf777ef497177a5783f688fb0568bc2b18502ffc8c1b2082f47d5e7d0322061d9949ffff001d21915c61","01000000c9d9c579f382b68d0555f105604ca0b5c18ba0e474ad21670d5bed5c0000000092d6c8dbb2620d08cd90aac9a5e2a39b59c113ff33baf9045e2362a1baab5901f6209949ffff001d2951ac2b","010000005e5d26d6d072637e1f3d3a16cf2e7b6a16841b60c104012cd199e38900000000f1a2ba3422291afecc6688ebfdcf4627e3f6da7b93cdcfd43da1273a27023c61ef269949ffff001d0179d83b","01000000bed1db116427d3b3f3f81d56b0390d4fbae34de78480420543e53c2d0000000045113e576d3173a77bca6b60847f8f3ac2ec42f53efd6f281a74ad9246237e7873299949ffff001d27c1a328","010000007d80fc06d5bd2a8d38c728f728a9fa19a4e61b9e98e0ea1bd96434a6000000000b26537a951a21042c53a7ed2c352a6514eeea9dd7c036be326a056ccd3c39d72f2b9949ffff001d253016ff","01000000f07a17e7f827acb751bcc2d2a538dd7ec5aaa122a63a14dfb0fe405a00000000c749a406fc8ca4f517af3bb90c11948316d93a4412413077efb5168c937f9c9eff2e9949ffff001d15843d68","01000000408d408cd8e0b880940c9d2ee6d322c99b29e223ea8c98fdf275dd1f0000000034ad6b7157161069d11ac9d02b88826d6146db30c858ef9bd6fb8be5f6e5da28b8339949ffff001d2029fa42","01000000423c8bafe5e533d80030ce7ba1281196472002f2ca12f659f03ca2d900000000f1c7e300de62cea57b2b352341be96b5b66234e4cb2bb40b5b53fed32eec859b93349949ffff001d25f52703","010000003a4a9a2dd536f5552605c5cac63491dbb7e2f157267e535143f5c954000000006cf91d52e95b58d391379f09403a7302676fbcea78f061bf5d76d0b6c9642e2e1a359949ffff001d17ce7d02","01000000b6406acd23528234ffbde4c32f69741122de8e29c87c243bca9295cf0000000053629ee138e2ae11c40d5ff10c9609a61d3f4a59c4868f39ac890df8752bfe5f01369949ffff001d260d9283","010000008ca21f0b9f0234e9ae262dd94f19408382bfce46339b005884434ec9000000006b90ff9c070aecb537fc55db105575ba105634a640b7340a4c2ca65936ece235f93b9949ffff001d38218540","01000000760127ec113ab7e551f3d2191e9fb036a5d36876edfdde3bd4b2357c0000000068886318e7edc2b3bb06c0a9d14c691f855f006e5021e6586a52d5ef18e268624e3d9949ffff001d4697b805","0100000066df5e4dbbebf7978bd2c6f2f189e395e549ba84cf28d133486dc450000000005fc211ccf9f426d906021b96af1b40a615d304ee26a76e2d5a148cea764b9d1723409949ffff001d31f33573","0100000018f7dc213d60bae2ea107b747adc54970e4fae8bf048428e94645a01000000001d54fb3cadc1bf975e037c6989f7778af8e2cf290ba4a540c465f12483d966ae0d429949ffff001daf2e1308","01000000b497fba78cd0ec06bee8cb754660c7cfb76739db426d36a1c413aedb000000000660a8e8f032a8cdcdbaefe14b3521799d12da6cd8a2cd3bc4fb09e966cbfb8285429949ffff001d03a18a9b","0100000035c91d4c11d4f2e4b7bedb91444d0ed7cf965b6087d8eff3cbbc6cd100000000596ae347597d0496d51255d8cdf11211cec3b8c5fd5fdf4b124d506256febbf88b489949ffff001d097a0a30","010000005076b87b50b04bfef4054f425641eb58a969accf1c006f2101ee53d200000000f90106a553933f7a010124c36076a65104969b00ce3041ab627a6cb5d8fe0e2fc74c9949ffff001d3558998b","0100000098753ae4ce73a121c967224b6fcddd474fbdea42453db27d407eca3800000000d34d87e4aa2603cc98c94ee0650201e5ec715113f93d9c2f6868819fb6a3d8877a529949ffff001d27c89290","010000009258ac8a7eb329b89887b8c8b2eaadc01450810c3d3a9c2c653d1a89000000002442fcb2d00e08dc48e0297cbc8f72983d11c202e49653272156016e86baaaa5a7559949ffff001d04e560ba","01000000c7a8821052f107de29626475d5894778d7e36db81a194bfaa1bff21a0000000046096972e133fde97dd0d210b3441df6270fcf6b7ce05937cfcf0594ec8ead1637579949ffff001d26bf1b74","01000000028e9ad3c96e209896e57d88b7d3b566ea876293dc6018825d15c11a00000000ce929cda5cb83563750464e8ec47f3d256f013cac6b38c447a1f134b8e7ac4a81d589949ffff001d37722b04","010000000a70e5d7639a0ed71eafe25dc3c071b25a2314c362ce42c4af60454400000000925876378f5d7f175ced9f73fc75efad09cfa8e98c3dc0953de456c3d9aaac67805b9949ffff001d3963a446","0100000033b16df8e6d90409a7fd7a96f485a74002ef0eb4e056b17356efbaa2000000002bd5853f866254edf676021789951f85da019b187b9e1d2ccf31221ba4bd5fb01b5f9949ffff001d284ec8d9","01000000a6f159dfb20784e31b9f4c6ad125a2a972a359f26fcbe189e34733020000000017192fa57074535e9b0cf1424a2c593a2664dc06dfde21c275392f6857506e0ab6649949ffff001d3168c545","010000005f352c59ad1a779b59ab8d314ac8e51259ca00ead3c11f2b625ef42c000000002d1225132b7cf061b11d16e4b3a04cddcf8548031305a884fdf36a056bdefa5311669949ffff001d02720fe6","01000000ee3e9342d4f13ac016a00a6f0cec0481c6bd414fc848a13b72917d0b00000000d6371163d4779c42682a7cf5a8614a8eaaca36f293a7fed3b98a621a6b909561b2689949ffff001d6c82730c","010000001114bc72db589d96f0039b8a0a768cae8e65ad4552d5789ad3a6764a00000000f7aaa3b20d54f2ad2908bee9218f7e767c9c2528acee1a99f9e8bc5f301e2d9ddd689949ffff001d7984cd00","010000002af071953f680d9a31dd5f9c7757c68a0b4a86bba230b0644290360900000000e8f08477849a30c4727f7ed1c37a9a094e362698e9cddc862495f2589a45b1949f6b9949ffff001d16560835","01000000aecd7363b8957d5fc4e8ac0e7fda264127d194d351f11c79ea10da6b000000001965caaba6cd974493da1caf61a762a65b414125a5ae828601fa0231bf60f937fb6e9949ffff001d075281e8","01000000e5f04313f0fad2f48a114a599bf5290372ee25b2b4245a55d13d97e50000000054dc40ac33b244a9ddac03b02dbcddcb815970ea31991bf5ba018ba8d61a115f1a749949ffff001d15991570","01000000c1383bf9046868dca336a60d63d4e3d604023ba962b03a56688adce4000000002b26978eac5bde474223e831e9ee3a057d2e79ebea2fae37a3b2329c1d7c64cc09769949ffff001d1edd5bff","010000000c058040f93e12519e8306a84461324ea417aee635a3d283d605bbd300000000d79fca123a89fca83bfb9c84f7d49a94f5d8f43ccddcf2295d14dfa3af469757a8789949ffff001d33a2c42e","010000007b2170d2d8627201da9dce8d2cbad3f66b81d5fca4fdf8dd9c92573a000000003b766f04c8c22ed141878355d50d71ae53e477e1506acb05681a58367c9779ae887b9949ffff001d2c5d4131","01000000ed64e81736779a8527b781c72387081ebe53f28c9b9fc58bf3227b3f00000000019500b110485f3443bbe95e80dd47c1d6e3378ba4ad64fcbdf2d540c0fae538767e9949ffff001df96d3c07","01000000404cea97980bc6f99dcd06b03b1e5f4a655e392760b3f684d9f708ac0000000055e525c7ba854abca78ff0cadd59ba06685010cfc9fe6c8d109581105c9c09a9e17e9949ffff001d274bacbd","01000000ab5fc6824295bfbe5ef8992d70191759820d8dec4c3a4229c20da1a3000000001240e78c7df068cdb3d1e147d03a5aafede484e1a2570c00777e74368b61c6ab187f9949ffff001d52e17600","01000000e753d6ea4082b1cd6aa39cc635810d8405f16b1453d97c4f784a2f2c0000000063cca1180e21aaf205e13351ad9bfd920b30a6b0a1771e00e972ff70b3c77fc906819949ffff001d27fe3ac0","0100000048c60c5eaea1526c627b7df56be10682e2520a90bb4112678d4f6c230000000072cfb1fffac4cc1852b69990279ef5607fd89189e7b05e1fd1a4cb3a2315ec7a48869949ffff001d1a6c3ab1","010000005da48fd8009e1b639a8540053cc6f365e17d2ec9415ffe5a5393302600000000448f47c53556ec1628dff81656377e84e6d1d8ab32da668ed8b80d6bc173f2fa148a9949ffff001d3753c665","010000000d4b38ea80b01e40dfc0536f0a6207b8546d63bf55c922def88eb45700000000c492006a665f19daedebaba27751125801cf2720942d71621d0c83a2471c0c8ab78f9949ffff001d089c4a1c","01000000568b916af731c3147084fd93882d0c2c28aa985beb3826466fb70f5c000000008d48c16eb54034cfe2c816a14cffe6568d0f2e249d7efc652b663c7bfcfa458285919949ffff001d36e5e9d1","010000003d4c9d8c890a91af4551d6ebe1e36b7790eac0e8f6ade0d283564746000000000ebf0aa7ec281215a698d71419f4a95778ad1f4dc07433332e0e70c3f6dd605a60959949ffff001d239da3a2","0100000063c3e7ef4df6b6e09f1d78e50c49f996430c3d5a217b48a8d1836911000000002d52fa7813eb8e78053f80aa419e1167793169893c5780c5e33a84fa9cd544a2019a9949ffff001d2aaad79b","01000000e7819632bb1bc8a6e0945c13bae81853c5ae5491fb040671416f625e000000005e39d4a7152307f7be9312cded6c8511e8c45a5244a37c7d45f8cd9252ab626c849d9949ffff001d05d140db","0100000011fa651d9433353895e30ec3845948e04eb98562e24c2265926dffcc00000000f00c4af80b52cad75982bc35d5ef7c71502e1908e1a6e9454be21309e8a44a8c37a39949ffff001d30d84535","0100000059d56301a78d04b339811208bd3e5fb2f78cb3fcd6b27fb89d23b27a00000000ff4b2d65cb44636235de6e231e0a125539440666a9ad27744dfb1d31a83145ae6da89949ffff001d52b87e19","01000000b6d3fda0178385dc542d934135c37cd958903c7f2624b72982a56512000000007e886dcefeb96e0b3157842f02004d57d20e5bbe8911832b817b1a7bfb8838afeca89949ffff001d2b6a8116","010000006da71a25119f261af41461b47545763cc2900c82c550c7790797872500000000b987002a558f4b563fd48ce858fa3abde4ddaacd4b8624c5486824e2d9b088e37aaa9949ffff001dd2494d07","01000000520a8801b33db00f979c530eb5d2977c611bc043d705d64ddae38c6c000000007945ef5a3b29905b3b877b057775ec215c60e8449687e2cb83fa09f5dc99a28799aa9949ffff001d19ceafa2","01000000b9965b8352ec3c50f8889f5b294fd31374767c6cac9b94e3e5361e380000000075a0a006b1249e7dca4bbee5049904929f950f036bd4573a0341cb858c18193d5ead9949ffff001d28aa994d","0100000049107c37b13e5078dae6a3870d1b553004e22fe8559fc44bb8df71a200000000f7a3f9e4ed1eab68d1011a0a285fbe99290c7bd220cbd13c1c47f3a403e61d26f4af9949ffff001d2b817417","010000005889714042b7d27b4001ebcc53476584d680d66ecf4063c0016d7a5300000000b6bf7c570033cb54337fa6ab246b103c962f477fed1513887db2934a215c6ddbf6b39949ffff001d16ba9fc0","01000000c553b8d6dba6ccf94cd6e12beae5e42a479abb524e1858107e0598aa000000008bc2ccb1f5b0004f91a7ed41a4cd38870926e318f982895d2e2bffc79e8dfbaf1eb79949ffff001d2e28c0fe","010000001416cd1e5b049d3e4b3ec4e9c53ec91efacbc643d4626b019bc557280000000092251d7a733a2abdae53ac2df94e7e763a81f6c0c9ddd876e2e13b651027e86339bc9949ffff001d20f5a8e6","01000000381fbbfb4a09909ad97106a5f0185996f304b16376eaa8d32af4f6ba000000007b47894cabb2e2a2a82bd11712cefd8502fcfdb78ca259611a4e8683760b906928be9949ffff001d08565b46","01000000cb8d31a966c52126a0b2e557fbc5e0512bd0618735ebf31f8275cab700000000821973b3d1c8f07d8175f1a49de1ba5de5b4e6c5ef37fefb4c2830071d0c0ce9dac09949ffff001da4fb160d","01000000fc33ee9c05b22d1a2880f4d60290aaeb7a9f10080cd97435cb1bf7ec0000000070b2a411bd565a51fb7ee7619314f917853e225a77eede2b31135c85ad0fa0c1acc19949ffff001d1072bd01","01000000007ae90ef47191da5f22a8054de22fd4ee97a3120f33250a3d2df148000000004676bb5ae9c1da27ced011be48ca4884568eda76a5419959c8d9621d0b92328ed4c29949ffff001d019b587f","010000009b030e6d788a09ec292bc0914f178f2852d3606d332d7908a6733eba0000000072e966e5d138135d53de61b4d9a61f32c10ed695d205bf27084f33fb1d1f169bacc59949ffff001d094d8f9d","01000000753c9ca75fdb2ea92f1f6eac98fe44f55a78519c67927a337ff2c0b100000000a01850b96dd2a6d1a11007fa6165baefed6d7165942e983ef2eabe4b73666f7728ce9949ffff001da2415a12","010000009418fbe87c30e0ab871a51278ebb4316da58d55a69048fbe88fa4be20000000076082f1b7df1be02a952a036bfe8370bf1f07ba1e4a05b2429410cab76e5dd308bcf9949ffff001d29ece841","010000007847cb4deb243354c16314bedd82cf45d22cd8ecc8ff136b40ee47bc00000000a160ab9da52fb5a41c75f6426db4c887ca7c21f6f26cc6b8e810d03d7cfd032991d19949ffff001d15eedf3b","0100000078c5a7711917b8a0996fb5aeff872db17a353bb40f994f54e4e86f1800000000cd23a7f5c24f3d0663769e24caa858e6efbaf3cf18a7e62d63c902e044ccb80830d59949ffff001d17c0b814","010000000e79b0ca6bc8552babc562ace61997f000c225312ba28d66eadd590d0000000099c8811ea3d8af2cefbaccc981f19c7479b725d617e5d13bb00fcd980b427365cfd69949ffff001d21230e52","01000000144c438ed0d5b4e613b31c65423feb8c48dc093b773691e040c95585000000009d8ebbf0acb177ecdda7371e0fb20bc311d966c4f8497b9415f8046cd906ea6658d89949ffff001d297107d1","01000000051a39c434f299531ff5128bb590369a60180d5e13fc5aea4eefd5fc000000008d44fc0697864496b99a8987e8fdfcde77b0190d8ccaabab99d99f076dd664bad1d99949ffff001d16b6cd30","0100000025fdc63226a0645303b4b2aa172ad2e59fbb635de3b4a2d38e69300e0000000025980f9fb99e0bf5fe4c627dba003a5a7206c1d4c1c531ab283f3a3a03f638c842dc9949ffff001d335bec23","01000000904951fef8c273f7b594171a084d51dc0dd20dc5346c92ece2c172ed0000000005ea02235c79633f91c53ef9f84019d16932298ab2ef5270c390cfd304f6322b67de9949ffff001d1755fec5","0100000021a06106f13b4f0112a63e77fae3a48ffe10716ff3cdfb35371032990000000015327dc99375fc1fdc02e15394369daa6e23ad4dc27e7c1c4af21606add5b068dadf9949ffff001dda844400","01000000c4f58ebbc902596cf39bb3276fa0a1e54cda314ecdb3eab071f1d454000000004f7b2cc6301d13ed9070b7a06975ba645ac3b23701819e24cb755d4ef38c15219be39949ffff001d17610cce","01000000ca92310ea5763bfd15fb5a438a88ec68d20baead58288f658203196700000000524c8831fd608fbad088623d446f4ebfbe1e706ca5b1d67ca537980839c4ad5248e99949ffff001d03d08d50","01000000628dce63d1d312f2ab5a2815a1b0106e65c457a28c2eb1df15da433c000000000656ad016612787937336273d9a2f649601def7b1178e6eb561d4a79a77e158e6cee9949ffff001dbf711913","01000000fbb669fa5b5bd88307b842568617908e81dc2ee4c914e7607a3dcdfd00000000313402d9028cae4e81ce1f9ee7f97fe2a1595485977974caa242c5d38c2d1f9bf4ee9949ffff001d171d764e","0100000052df1ff74876f2de37db341e12f932768f2a18dcc09dd024a1e676aa00000000cc07817ab589551d698ba7eb2a6efd6670d6951792ad52e2bd5832bf2f4930ecb5f19949ffff001d4045c601","01000000235246c075854c708bda643683e129bae766705f51a132d737f2ab89000000004c0b151a83df1ad1bdf65ccd251396cf83eac77dd67a14dd76f5d5abb78a98be46f59949ffff001d325075be","01000000eae9f131aa98ca0fb5fd4b35396eb97e4c6dcb9906b6118fe9b3701b000000006eab9803db76e30125b7e12e23c7bbcdce4a7adc3586804bcdd402f23e65863201f79949ffff001d2cbfe8be","0100000035c7d4ad4108b45c17ec0147591aa88d9949ef98ba02f256f181298e00000000191020d2e1d45876a8e534ed05150650e2a77b03291ba4fd93c4f9d7dcaf0c958cf79949ffff001d013f8001","01000000522c78b84a4872cbf232db2bccf63d0e624093c7b015ea5a8dc62447000000006110beef030dbce10f5b524833da1e37340bb511fe7184e367e5c2049e0de70b6df99949ffff001d16c372a0","0100000068a055c50b17fe4f2bb6b48501f405aafcd76154900200e7c0f2b89000000000c46eb01e28a026cee14b05a18aec5e29164cb6e3c4cf7b9574195993e2cd3e4e5efb9949ffff001d22803d04","01000000cfdcf012411c14634abcc9e1e6cbb235e81f6962d358a55453b4adf5000000005c20f0d363cb0ff2bfbda8695f6cf81d691e7d693fd940b0ad95be7457383dd658fd9949ffff001d23632f68","01000000a0ffe355f2404df3f5cef54879b9f17f9a74dce8defcd902a0ec112a000000007d17d3d57feb9b7348f59e0a1b1f3a43a03156e485e6a7b138bb24019c360d9abbfe9949ffff001dd5ec3a05","01000000cd562438188f44c16bc4dcfb577b7fb41b1b39043e76a298f5c88e7700000000f1eb9899d8f3d1e7c24f0579047a5ec3ba07e0bcf2a7de34bb3f53e04ac3feb1fb029a49ffff001d30ad728c","010000008b8046934fb418eb002aa1edfbb9eac3adabfa47b978e59eeea416f700000000908646f56d99bbb38dd27c1e35cab7f67746ef466b5390ebd790b73df166db4cac039a49ffff001dd6fddc03","0100000068a91d4d328e5b1d31660bc724e257d2975b2b15b202beb5893a874c00000000c64674efff5adc0a45d23a1ca61349bcce18639e37c0c6fbb376a37344c914054d089a49ffff001d3315c88a","0100000030cd0c1d1a60245976bad4ab1cafbfd3298145e442c78f15477819ee0000000095f11369c10492512a1e3a9b3e69b293b77202d4caef0bd42f5e73dff045e619b40c9a49ffff001d240eebbd","01000000467b0268a012746a95a6603e97897ec0ac888618bc3c929c1b36bd5100000000df537219779054a6c3b160972fd8f0924a3b053ff20423a50786e4a12592433a2e119a49ffff001d38f67b1b","01000000ca411a14f1ae01f5585f412fbe45a3547a851f909fe9fa6728836f8d00000000120a5e409a63b8c22abe60e418e2bbc7b8935b37a730391982bd319cf7764f00ff119a49ffff001ddbbc1e01","010000005e6983e5487ba3f2bcb7a8fc3f5010f585800f9d7114be5799000525000000001831b8c23b22c8da4ef6c319f84302e8af7c735cda2c0b473b080ea3dd26bf7e9e149a49ffff001d32faa960","010000009bb46b4cf16f8250e55716c7947c5de57ae2ecd0586a6b38e8ae5f7a00000000432c8a8869bd03df7c21316a9314261b71124b6e0256adcdc91a6f08e5790251d2169a49ffff001d3886f0ea","01000000a5814e4a432330f099a7174043eb7861ab03d648a3ef90c1e822f7a000000000d8b67aeeb1e91ba6595570c73f7ff663b94e34e645323bccee18df87c27a2b8f7b1c9a49ffff001d099cbd44","010000003836f6a70bc0fa63915fb1236386e2c7b40d880e64dadd4ed594c4a000000000129ff26ad4bcf65f099126f05c8d89fd96698dfb5498cd98563d36b3ff87554569219a49ffff001d2ddf2398","010000001c1c3accb25df5653ca55f051225351060f54c070bedeaa1a336340d0000000011581a5ad581f799bf5cf6e4cecb6d47edf96b3936351b549a3f26922b29b9819d269a49ffff001d31deac33","0100000077f6b98d1b44c2f43a7c636c1bf7159e674563ffecccb102bec3b1d2000000006e108a8337ddcada9891ba9ebc8efc6ac073e37dd2c1b10409b6e03809ba5c3b712c9a49ffff001d3a5d56a9","01000000c4d732091b0f9aa9f007741108e7cb2124681ee5d9a44a33b5b388d30000000061876661a712c2d22e8d217414122e08cb006ccd618798e81d06e70a273304d255319a49ffff001d13b4e7f5","01000000bafa3dc8a2d0a2ffb5c3a882b6db1f05b34ebae9684dbd6cf5183b5b0000000091eed339af22d3a5d0eac94350adb2fd340b2144f40a63d598807c43a9dcfd7b89369a49ffff001d297e469e","0100000007dcc948250bc914e7e0334942a953df347efef8efa57b94a315118100000000a47c31bc8803db5fe5afe43cb5fac062d7c198a8357e15a1dcf5e509170e47b18f389a49ffff001d2a8d5c1a","010000009d423b07513f79099ec56f0b4805a686d2cac9e8f43d7df7e317ae0200000000d91d284e416521112ebfac94ddb5ae0393ea50e2e1a94ce4a3e248effc2bf609763b9a49ffff001dfdbed705","010000007ca5f58fc4c8711670ef32302bd95266be8c8f598b02be7f9ee60185000000007980bec0f664fcdd10a64c0b24b55e980e83c20a0de3f556a49ec98251fdb1842b3c9a49ffff001d3826081e","01000000511b109899df58b60e1f7ed7dcf329a70872123806a9041f94e8746e00000000ad7c1732f67a374a6a76d4766b4a5d43d7a411a7661a9db47cef79a46b3e1d9f88409a49ffff001d17c3b10c","01000000277816e78a549431255c432dadb669421a51062daa408cdff11f2157000000008ac52299229527e557f10cb968a0fca44cf6ee9b06bf0c2be5829d3b5abeb8cc68429a49ffff001d36b38507","01000000dc90b67870c7fe96da4619d2eca1fd810d91f5bdf982c4ae26de87b0000000000fe1590b6c1a32eecdd52e25b47d3cd5e146e06e610b58d6cd7e62133355059c98429a49ffff001dc4856100","01000000dc8b41e9a8a30bf78b02407ee4ba0828dbce7a228e1dd7273dac5b4f00000000b74f46b7f5f4f674f110cc1a386204c519b34f86e9e36b686f8e6631ade25eaa85449a49ffff001d2574e87f","0100000009ad1ed7829d384b33f203c45a496fc4f5a5d71823184ba279dd8fcb00000000e96ca6ca6b70b84b401398a3046ac4c5a15f775c376c0bab7ef22271ac94284311489a49ffff001d28b19f91","01000000c6bb1e44c47423b6c6d8a1a09e0f024fb1826bafd1ce675e70a5098a00000000816223eb60c6ca40088405a56140d71bc8a38d4b896b3f092b23c00607ebd758a04a9a49ffff001d207a7b76","01000000ad24bebf24775bc5ddc612817a2e520b36588a202699089fbf5b16c500000000517db161dfd2db9e5a686f5fc4856ec951341e19aa71a3d7b65567c7f0c2b725264d9a49ffff001de7004e08","010000008945d26475f95a01d9f6bca062ce528c2884355133ec00a9ef8e5c650000000092cebc5367f7c714d9bfa014234a63f267aa730696e4a7b763f4fd23093a711bb34e9a49ffff001d65e2a007","01000000f0b228f0705afd029acdc9c7134b1b135cbc3e074e1050dd7454bfc000000000eecc3213d2de908d1439685945cdb1cf1e87c52f39380a5e58b1633abcf136e7c84f9a49ffff001d1c12a8cc","010000009357fbb442ddeee9a7a6031ecc7648d25496381601ff0533fb71fbf400000000bc608071dbba3f4acfeae15c0398143740d0228b05ce01f5bbf9af122e7ed82d51549a49ffff001d185e0580","0100000015380bc999caf55f8a2f6fcaf84f019786ee44175b1171b591785efe000000009326a529e5d97f0d2227d2fceba27932394b9b7a7b484a3802ca7b40e50b6ae7b4559a49ffff001d3e785f05","01000000f60f59a67bd2e56d4bb170171c6f5b264f610bcc51c59a6521ec58b100000000e702e53e00a82919ed7f0bc4b076aafcea186d0d48cf34c558c26f218203a71657589a49ffff001d170ea4ee","010000006611c2029e34524729306b4528212d10bb1d71b231107e3a05e25bcf0000000075a6e8005f9da648811ce38f5117a2e3db2b70b26d8fc21633a90872826e0c3fbe5a9a49ffff001d2d89277f","01000000669b270b7bb13822e18181494f1bd8ab96fb0f076ed855bbe08a5fd200000000572ee0a4f4ba0b6cf483466a73304bbd3f695413910b13a59c5ad729462d5d84155c9a49ffff001d24a5c005","01000000e8125ff0bf24bdc3fcc58d307724f46880ebfce9767211feceec7fa800000000925607bb4639bc16469776c1ee2bae70711581003841f315d52331f8956111d784609a49ffff001d1db35b0b","0100000036d61093e2cf36b5ee02d630349977ca6776b0bca964b07005503f01000000007b7462ccdc8b3da7472d2e60b284fdfd38bf18c68aebf5135f796417af10e360d2619a49ffff001d2712e928","01000000b6895107cdee87dc1423779ef3819e286840862fd6034f2f125156c800000000bae0b4f6649dd17b0094ef4bef5f94dc8563503dcdfb38eb67b7606b686968db8a669a49ffff001d2bca2341","01000000cffc6e0b6d618b501b818d8909fdb4646a8633af5e5d20626fbc52c6000000004f31c525392a8ceade0e39dbcea00ea1c2629db7ae6b567799d3eca9336fa1ca34679a49ffff001d15415702","010000009a68376e190e75643335f325548feb01db817d0aec36a4e27bd54d94000000001b69012be5d51b0891f21d19410b570515ce4cbd14a670bbba0fdcdb4828f0132a6b9a49ffff001d15069e08","010000008194ad260d2a186b51309c3dd905e9b9ab6fec0a14048080cf5c4f58000000004124ed11d17057abd11edd7fe7536b2d77af0957d62ee3f1815856ffc274c921c2719a49ffff001d007838e2","010000004ef173b18be388d0eb210b964954c6308605099aab4b76b6b6865acb00000000f7f3cc259ab91131de53f7ca4690c918c99d1b7ebb3806c02af7b93275667f1a7c739a49ffff001d15a625d9","010000006a5e5c2f37465d1d35106b189f2560af2f840602582df889f9c009c2000000008646235eeff4e3e396857442d42b29484c48048294e544719f8d256318b41a3b1a749a49ffff001d3eafda01","01000000b56c7b45790ed39b3ca2501dc9b6cf62db3118b07538b3ef92e15770000000000f9bf5567a0a33893b9ec94ae9c7e1b7225b7d0d452f3c60626997df2c0b6cb4fb749a49ffff001d088aa3dd","010000009efa7cc27ce453ae74b12ffcbf22d85d0c0058d86cefd229c40ccdd7000000003d23e69606c0dadeaa4f650563528998c9c5259b820fd9f000f36a40f2671e087b779a49ffff001d1dbb9da8","01000000118a0ee65eb41abd1fd27e8134fec1e5769de75c98a863094830471200000000f2ee0e192ba55cb62b8e14e53fd88336548f6ad43cc9f9e7919bc7700468b33806789a49ffff001d9b890c02","010000002c21b25cb4988527fc53f16a6955189e9bb09e724740621b973334060000000018a404435ededf4f9e82ab1a84b95951c763113d22a66ffdacd2aad01ef9b97af17c9a49ffff001d05c6d0ef","010000009320d953aa7f266eee39b13f33e0c3d291b3acfd0edc79a91bc16388000000008839c8324c9e30274a5a8a8d94daf4a0bcfb5058306dc02935d79cb85950d02685809a49ffff001d5c24d306","01000000bc469c3d7dfbb9a0be9b1d74d6d3e8befc736cf25cd22f67ff16873b00000000d6975d4cd7b390ff46f6ae3a7c4e147817f7c15919cfd9f4ac71fa50d08ef969e1819a49ffff001d22654c52","01000000efcf852b4a3e9ccf2c5f88ef55cf0dabc1bb8e2af9f272fb9874d4240000000010a286afabb1aaf7fc9a5ddab2c0f071505e548e1e9cd19ca53254af6b4aa303a0869a49ffff001d33df340e","01000000d9fb8a4e7fcb92178254c39602180d5318a29d90fa56530f11989efa00000000deae4694e9749984ed58d1dba387ef6ea29a2feec123b4e41c496abbe78ab8aa2c8c9a49ffff001d14c4ba9f","0100000010d5aeee7d0865e42e7a5ed56d9cf14a2e030afdd7d157a633d11884000000004d01ec8aa9eab70f2cec1c621b292aa3b44e73cd3c39719fc65bbae0d491b80dda919a49ffff001d186bc11d","01000000f67bc7436c54088c5c665b6bd43a0bbbb72f3804842b576d333809ef00000000572deaed6197459941eb4438c1aae2a983ea9282db899df0a42e5d0c609319ccf3959a49ffff001d724c8a13","01000000c3cfe70de5c0a3123baf677901a7dda8149ca8075867109d8b0232ae00000000761101d912508ac093c3d157e6646a318419b789e7df8a0389b48aa9e8fe197e12999a49ffff001d2f8ffecc","01000000b859109280d1b594342d165c0cb3bee2e874b361f5dc776e2e2bebd000000000bb2207d788a5e7f1e74fea443cd350c7ba8cd6e220743385f4f72d7172ea818be09c9a49ffff001d279bd4a6","01000000e93a4e30186af6baaf0d5587904634207b6e75df0d49cbea4e9e576200000000a813bbb78bed7fc66ff81a9b11e4e40e963c5e6d8702d0c03ae5e7630aed7b415c9f9a49ffff001d269504bd","010000009b6db3d9036a21219ce7fe7ae3b10942fc1857881ac21bcf26bb65380000000041612cf64b5e8af0324b0762831585c32f8189d302bc8b07458f94580de74038e2a19a49ffff001d32f483ba","010000002c9d8f23c0bb9051fd74daf3b6c9b30bdf2c2457582502e3347448c5000000000605f861ef222f3bfac96d14a532e8951a9bbf39fb847411da24b8fc87705a6f48a59a49ffff001d3700ae01","010000001feb8a04f240639c3a913d75008a30ab2450cbb407c5541598ba1bfe00000000eb9980094624869bb0beaf67f0d8e9b0814b1af6d74ca96ce0b4a4dc77bf5109bda99a49ffff001d2114e5e1","010000005328f443ab4ced6aa1f69cb9030cab322c675169e5c349cb758fd59700000000a619a2ec3a093e82a689e29c0de89e19ca34517d11adc1442d1c585c2e90191691aa9a49ffff001d5727df03","01000000612784d3df90a11eefa7bdd364830a950abf7c99653f52eabe6a15550000000072ce71c4fd4d95e5ead634da9d41791184137f4bd4cba7f4b1011e1089201c08d3ae9a49ffff001dc61f2506","01000000ad8231934d70c52cc5a1422ec65e9b34919c7c6066a1af47d8bf2b550000000045137836be955371321ce9e389fe4eb3f751f1f96a0c4a7614a96ec0f62823acf9ae9a49ffff001d23218100","01000000245163d6b09020df504b48d0bdd1fd5ae3b19e950f2cfa32e3ab286e000000008b5c6ece54fcb8786385e1ca5a340ba59c34d3a9806483d6152443418fe58b7079b09a49ffff001d3a0ddf66","01000000cdbfd83d877b38df56f01e81f680b229ea3ce79d18e8ad010f7402c000000000178f323cfa183faff7965aa1d0eb5b9668db495ce70aa53623116f65681074bc2eb49a49ffff001d2af2fc10","010000005014daef1cbf6abb362d770028ebff5c10a4a21cec6a54180b8645db00000000e5f02a1611fbdeced4da0e47280e86776f7579c3982df625341b8464b2654df708b69a49ffff001d2e963acb","010000009c53b11e0e1f0d38906a6e8463862dd9941221035c6f4fdd2aba22cb0000000095b047be4c36e8b1a837967ab97839d6def76bc1948895c860a24f85ee3c754e48ba9a49ffff001da648cc11","01000000cb7482a001c4e0eb5befb98ea1e7024d517b07d8108c547eb572a7ba000000003ffba3445f539cc6b8988fcfe31676d4510e59b1f30cf7c886bead531978f84259bb9a49ffff001d03ba4703","0100000063ddadf64661fbd94412230ed133aaaff0143aa016e94d57e6635ab500000000227bf532e2098b8a29679d672fe216f849f0dc8a80d0a12933aedaaae951b701d5bc9a49ffff001df9c40706","010000005adc29a6a9624ef3c1c92f59d6611345ea7b0853ab573a582fb000280000000002e5b78f325f642632ad5cc06b9754bb28e00ed0687619b4e26c5e3948302d14f0bf9a49ffff001d37151336","01000000ba7221cde910f936240c34434aee758fc3aa3951ed308e935e9c6512000000002f401c4e41af2a80a9a06620876b214b46f66915774210b852110ffd373fab4861c39a49ffff001d08261302","01000000067aec3e8291d610ca6e053a5cc0591cddf153d58eb4b9464657f941000000004b253baf0d914750fd93a41b5e8314ff13f80fd32e927a9175d7300fd404a6d1c3c49a49ffff001d173c1551","01000000608f41312025141eacf9f7b860e5d3f95a9cdd816e7586942d1499e7000000000b632294ac0a395b9a71bd8dbe74aea9cde9f72f794120721627ff89e540878621c99a49ffff001d2de18f4b","01000000894cd50e740738e06b0277bb2f94b9ed1a9dd8bdcf614e8a5ff60f94000000009195a7c56f6cccd4418cc77db64279bbea8a6b650ece8d4476c58600366c7ac326cb9a49ffff001d07c1b609","01000000630a1b02656f9c5181c3ac1a25c84438bdc4559890e2dd95eefbff690000000009674c19990fb3845e15ea1e69eaa274ed3122d4631b0f0e314b177c0b470dc324cf9a49ffff001d1c7ddfdd","010000006d3deef909ea2dbe6444d59ca1449c57fd2c9893c3d7d18f08d84742000000007bb79458fbc2a1b94cff6aed1c333a19ea90d14797ce17e51a096a7f9b20f74b53d29a49ffff001d29685755","010000008f9b68fe9436a4cc27083f9f370b9aa1b89c880b6fb180bd136a9e1900000000fa0d21d9db9ecc33ab3cc5300ece168786ef512097c38c02c963404486d5e37b5ad69a49ffff001d234f626d","0100000093c285e600dae2694678ad599abf92ee341ea0e5269033a55304df6600000000c584ccd90c8722290fbc8dd18b95e7a5334953afb8f264b4e4d21a9a839c59f712d89a49ffff001d2dd66963","01000000cd3d60867f08dc94cc4300f283094a90a6f7fed1458511d64f32e033000000004f02e39856aeb2548fd5617b7b220c376504cf9f04f3a46484585e533aadc82b91da9a49ffff001d01783d14","01000000e3f7d2717573a304f7396d19b3b1ad83cf849214e108f62f74c3f70d000000001ee01f1c6abc3093194f28e55acbb78ee69235f79a3cecd1c777c4fb8de484c614dd9a49ffff001d19d38df6","01000000f5353520a16ac52a27744d32be3822491e9254a0534a70ac7c94e33100000000e5a4376618e86ef206ec00de8d6f7d56ba278ff4b1ff42d1f35e1bf299c445799ce19a49ffff001d2d53b92e","010000002ea7ef940a3f297b1eae49801afca0ad6ecf2b0714b639364384a8b500000000a492f60efcd78ad4abda295f6359bce8a0b8b185e8721f09249207a14ef38a304be49a49ffff001d2c043e99","010000004047474265c67258712871b131543154e93b95725059185843320f42000000000bd541e9f73b8fd78739883388eb8182f5f3d881dc30bb9b2407a00047b77c1bfde69a49ffff001d1da8304a","010000003dd60847207a6b5f1ca40f38a4d5277aa62553afe398c89b9568f58800000000798feae942f45ba89ddc78f912007502fe0b3a6a6c6742848fbd99156012f97ab3ea9a49ffff001d14795da2","01000000ddfe51caf98c03c2d14e85754b73d945a19ba95f9b3cc4728f59f965000000005b74e182447d16461ad86dabdc7495c82bf72d95dd9ed3664d040e01e1b651557bed9a49ffff001d2fd928f8","01000000a19750c25ac4276eb2b419b486ef2e72e613a7f0ba82ec0847a7a7bf00000000fb837ac2b879f10c8e876e0c750e2310b5c88ea3a3322bc6931c7563384d88b9c3f19a49ffff001d2f0b22a9","01000000562dcdcbb883c63af205ae146ada1f9b51ba6624f4167451d48f516500000000a37c6517b4f67a401fadbb46f0c981fe3973b7a60cb859179cc212a9e69b0ba161f29a49ffff001d9347fc00","010000003e02f907c557746bb4abfbb17357eee6efdd44545cf442e3a0e4b4c300000000b72c0af2d14b7651a2573ef2ec66f40e729ae644b5f72d6541d4d7722cb67228a8f39a49ffff001d19e9ef57","01000000d81b5e0092172b37fd98f7b3b0e547158d77fdb66128545231c9ff320000000038d8e0424d448ed75443d5e306710f611a066f0689e146e19e542616068ffadf07f89a49ffff001d33bce690","01000000b310fe789f02bda7012ccfd8a4054ab970050120ae0e070c20a72efe0000000045aa59f5ab59d89b19d1e851bf8c2060f772bb79f9b145aad715a4b2c39c305bccfb9a49ffff001d34a26ac8","010000002558dcb8354af304a672a01cbd40a1e3e2b79ad233b2a275c1ae5ad900000000574be18ab4e64daf676b9660d3b015bedec89cd46745ccd885f8393a0015ea765cfd9a49ffff001d1a50660d","01000000bdec1ad26ccf333643b87b10d1e8e08f8719fdebf818a0500c10737a000000008803b2e040e1520d262ec74952bed464c7553e0cb84ebc5c478778b51845a5cde3ff9a49ffff001d385e607f","0100000096bc824291a1406cb8924905737498dde3e0a20bef66b40d47fe7135000000000b76778d332d04940f03b2294ce5fea62d8cd4c0146d50b844f9b7f210b6b6107a019b49ffff001d26507469","010000002d3d125d7eb43b0fb46b82694c1a4927aca33d0a1529f044962bdc8c0000000047a4f71c920448abceb621202d8fe6bdbee93e8d97b21e58b3c0aa98d8b9ddcffc039b49ffff001d2c3741b5","010000000ec11dd51621e9ed51084d1bc1bdae11a5887d03c07e956d523cde010000000069de7f195e3fd9d801cefc9b3b319d96f859d8fdb227df25b7d3604ebdcfca1bdc059b49ffff001dd9b3a603","01000000718f7c251129837b1341f4b7c1e02c690c79f704ccd451bd3dd03394000000001158090ff44a7f44ed5d0370f10688bfdd75b2caf2b7b55acd8fd9726b691f2a16069b49ffff001d4ac9f000","010000007f651e7dc6696d65b749221cf98c7cad979b90ab8d9226109160a60300000000c0421df61f0a7b779480e61952088dd0d0afc3d88631313f4d66a05e7d48b99e0a089b49ffff001d21ec2fe3","01000000074806f0f901aeb8acbd425fb6977085bf5f10e5f47ae70109046e84000000008ae7bdc16f341b786878f4560e308260b2e63f49b72700a501f21a760ae65df76f0c9b49ffff001d405e8b14","01000000cda9fd83e6999f64171391366c8279fe4b01d61671a1697de73eacaa00000000dc5e10850670e2fac014ec63beb2bc45771d6fc2444ddf3c9640843b1b85c549c90c9b49ffff001d36465bbc","0100000091861e66efa445b99f58374008898a300ff0cafb5c6fe15d0954036b00000000711e65fb785bb4b30351bc7102f847c327bfc8d843b80a2e6db522604ffbe3af1e0f9b49ffff001d1cc4cc44","010000001dcb062f39d3328b481f9dd6673c3f22d812924988f7d4765973ae570000000047cf831de1377c387fe60f86f73a37555e9ded6fec53e1ac7bcde995a7b74a4fa9149b49ffff001d253407c6","0100000096cb2a9f32daaceb4dc21a0531eb5119a45ffb5b1a75c6488cb956bb000000006399682527b52dcaede70120cfc33b1c0aac250b5ce733882a17c1c8064bf2f33a199b49ffff001d28172260","01000000964704409b205e1ae742356bca913e29b5145104877de7fb97784ff90000000076d8368349f1e301583f7232ee57a1802217376577ac93487751e9dfa9677777f11a9b49ffff001d2e964403","01000000420d1b6dc703d421a1a7094bd27477e9e2d698a8ef4420d960efe63f00000000ab292f4fa71d272ed5718498e37b071fc861d13d5a49d14db58ab271e1176454b41e9b49ffff001d2721d8a6","01000000a484ff5f0ea8cf1a16240c07c7b9bddf007c61ddbb37d1d58d62d25500000000896c32a6d4f2d5f40dd097739138b28b1bd1fcb4299dc001be44786a51110acfaa249b49ffff001d04662e37","01000000c169069c233831734a6a47b1191cf26dcf46393ebeb05474172ed28e0000000023426520552514bb65089146ca72d4bb808e931138661f52836b193d2d7dcedb81259b49ffff001db73d7003","010000002dda182671764383f133823ac855ad26be4438573e78c1085298e3a70000000086397d4414de9f1f1da5e9710382b7de6106bb984911d726393a40bc0d244c103a289b49ffff001d183bd3a6","01000000f87703c9c881545189e660f7f54d71ed415ffa04c45b20586d24ef7f000000004cecae3cbc78d1df91c97080abb4eae9948bab652df6b9454bc423491b99dba3142c9b49ffff001d146735d9","010000005974dcbfad6be42e574a635a49a43ea0ee293a3a343a4ea843122d1200000000d3a8be6950cbc99b4680b4ae0fa37a7c672f9e8da5d7a9e648fa6b7b473e5d723a2e9b49ffff001d413d6605","01000000babde90d19449cdc03175b46a5934a78f9a681f96ab523bbaa83eabd00000000f58b4340153103a694cecb845ac083149edaab41fbf50c375d15bd31ad1ff01eea309b49ffff001d1a1293f1","01000000bad61c3bd1408fea89d7d81f3b8a639c83e2342b26300f1ee632d16d00000000d5ab644595f78038774e154a21e6bd7264678f93020644ab32e4117e2c9938f4dd369b49ffff001d23abad83","0100000032f48cce3d8c3491ddbbfd69a5cae48c6accb014e333c8efc07199640000000047fff37f9ee5a3b7523047b6e659be90629637bc5b1dd5763f4f4f3ded7f25b9393c9b49ffff001d20399a04","0100000031858b60bd5567357e2be9d31fc72fd6b634b628ebfc6f5f18e636bc00000000ddbcf9e9dc3549d1deba3aeb1447b22d8e652d4807dfe33984a3ae9539fe922af73e9b49ffff001d061c80a5","010000006310e9662701de10a0233de9888e0ca0ef6ae1fc4f117c59c773c8b700000000325e05b2e53c8e90a2200f8fb113fcdba07f5c7a0e2471b1d2acdc571994aabdcc429b49ffff001d06fb36c5","010000005345935d4a6bd4d8e5a6da080d2275b9866ef47484e37279fe44bf86000000006f3fb80d0f67531fccb8c2bd7b2be0b001bdc0aeb48359ac8c58530ed92d59db63439b49ffff001d8cb23102","01000000b61ddbb15458bd38b22b054bb68d68e0d3c87385a35f043a9c5860f40000000081aa9b58a3b39ec39ae6d622c67abb6c947061de2bb0dbebdba7ac96156603d379449b49ffff001d1517d204","010000001beef518bea9d88c7a006c5cfa9181dbca019ccff8fdfa2bb8da546f00000000a57ac0aa0212887cbd69af7e33008bbd1a7ad2ce45e67f2afc2ea47d308f0f07c9449b49ffff001d0857b1d1","01000000ed0c480662d521173c42ccd9041e5cd13e09d5a4fdf46554570017b50000000081e27791a4d9b004a9b1e4afafe73c1b060255926978db8ad4ca524cff251fdfc3469b49ffff001d368203f8","01000000a964496db6de7f1aff7aff07ad9dcd6960c70c652e1350d447f4f4e40000000074fb5b582434b241e0342fb45f6f6e335128e65e4c6b350ec1fdd6df6408e216164c9b49ffff001d1dcd9986","0100000075f66645a2709da2c64990d3bf86c4e1d085fb58f86a0ba23ca0ca6400000000643f972034d12cde18ab4315a7f86a9c78d8456e4a8849201706ad38e20e89c5574c9b49ffff001d8e7c8300","0100000094d74ce4194b85d492013497b0b7afdc4441d9811bbcfc03a9a4b866000000000706b81c29be3c1e86cf140e0db322f6f8969e7ea14fa542caa41ca043a093be684f9b49ffff001d75ae3e0f","01000000f6b03df50e2bf67059ed6c46ac26539d7d1e284a98605ee3cf3acd9200000000732c328fcb4a493d511d7bf5a03d812ee709f7e153b9a7f1d26fae6aa82f76c267509b49ffff001d1f673912","010000000debff7da400e78a0b612d053ca64f3bd7bd6ee5498f91c6521f4d0900000000c8a0c824ec709b4ea513a818090d65e28d05645aadf187f390a0958f56a1be6c0b529b49ffff001d30c3db90","01000000df498cebc23ce7789a590b0f4de54ba6fe24841f393b91c618f741ae00000000c2fa3370614f536941fa46167d82186af7d0a3e06b5ea632bac134b1c367aa23dc569b49ffff001d03542900","010000001f4ca169085a14ca4ea6b95d700a796eea0dcc4bbc4eb89fbb9acbf4000000007df1a413064950eb307b6e6fb5a44e274933639997c20cb69554d94d9efc16ba095c9b49ffff001d32963028","0100000038e4362e96a94681f91915010ab80913ce3573d12b803435fd24ea6500000000e3ef456926a5219c706a29a4899718416b1bf4ad15ec33a753d8213f36eb548073619b49ffff001d221f9192","01000000d8479b0a9a12c7349719fa9dfc8736c686dbdbe256b812338d959ffd00000000f6382bf01cea231743c206cb87ac8ba983c2fbd147dbfadf1604f1ed19254e95c0629b49ffff001d864ba505","0100000025e6ad3aa6a2b3c7e270578c61452f4616461d68c09968d7183844fa00000000f37748b353076169f7d1f70ac4a28ab7e92d41a34a10eac6a06af063100f9eb29d659b49ffff001d2e2ca8ce","01000000e8af8792163af76d32f1406bee088bc948959537b443c53900cf1e2b00000000ea79a99b54f3b1b8c0bc538a24eed7a0b1bdd88e77b4b1ceb2e79298359eeaa11c6a9b49ffff001d11143512","010000000c31d04047d8304da5d706e34a271e7f35087f0cf8936d2fe93a499400000000c9c4f3c6f36911b7b24347eaae8583df86825310da67554c4741ab92227ade682f6b9b49ffff001d35625d82","010000000d98c3e45a9ca546dd5beb78d2d2e1901dc2b5445ccf10f61b0b3afc000000002f72fbc01844584b40ecbb7eba79272bee26d26a3a19bb6b7ae5e89b23738a7cf26d9b49ffff001d28cbe8dd","010000002adc83ee8e563a4e567647d499ec7b0edf2c1e15f301bf81966b2b6b00000000d7f1aae08f1b421a01c32196a6202ab0bc45869918c206f45427904c7fc1a82f2b739b49ffff001d1cc743d4","01000000bff4a1afb47e5e26185c4df65f511bf299aa773e615bad944d4d31b8000000002570c5a51dac7f3e561228ba1e5aa36e6ad94837f83c6861f6d5cfc73915a9ca80769b49ffff001d19cb7aee","0100000070f60ebafa5c490b199f903040d4745410890fd106a55779bc168a8300000000ba1563d45121fab606c623a6c5ad4925092a75d7e46f31592ae535e057bc7383507b9b49ffff001d35d889b4","010000006ee2a224eddada47f7ae281c317384d94c93c1caa31bdb4069eb09210000000060fb5fc3409d2d4df504d107f0c401c7bfa48bb1b470503566e01f843a5f56f6207e9b49ffff001d2ec0f51a","01000000a21b814b79442c14c92ffd7b7d6498f59d5cf8c66d2cd22e2d3a44580000000052eed151e2f296f12c164d68ee84b1dbbad6d8b11b44eecd761e6a52cdb23cfd05819b49ffff001d17cf8f34","01000000992e301c6503888b8b635e4b4ada9c11b8818eda9d425abc113ab36200000000c4821ab214be8ac1206843c639be67c29eb86624f41f17c8f853e6f375380a417a839b49ffff001d2bc4293d","01000000efc1586d62f151fa7bea2d6a4a119551897b7704fdaf9144bbf0cb5000000000eefd30031c72869588596519e6b05f993456349f2d7ad1f101058636cb43cb7a5b889b49ffff001d2af475e4","0100000057ac7806755cd154251f13f42f67a0119ba6a3f3eda297215890bed60000000044e37b6e8e189bce5947470ad9bb0a5eab217c8205ce7dfd92d02046d07b7ec2138a9b49ffff001d3800c996","01000000f008d9ecce27fbbb16f80dd0941975d2ee626d2a8d1b6b251f0a4a1f000000009ebaec7a97555b36ee2a0cbf3eb68e15c03b6737f0a75ebf4d52ea4eefe9c985bb8d9b49ffff001d188a491e","01000000fa1ac109868f8c325f09bfc47800290291b80da90e663e1770a53e5200000000fb9e2be7eb6965e1596a6c70be0cdd996531cb76e25c39ce16b494a06ada22abea919b49ffff001d01dacc66","010000000a8f117fc30bdb2258f918aeaf9b399fca1f223f481c5c8b7e966a460000000075bbd6a8f59f7c7de157d39b7516def83b371451a43aa1fd54f915ef3814df532d939b49ffff001d6aaa8205","010000007205c19ad4453fb2240eb0b23261694da603a8c89b6aa63444ee6548000000008019380842f2d095fcb2dca86e923c123a0e67bb6e6388e90b6e0f31770b6a56ff939b49ffff001d76fff703","0100000096796d7e1f164f5d8e65f04157c8fd4852325e3bfd76759c6f4b6f63000000006da0111be4cc9876708660e00bfd99d2fdb6a820f520873852b3ee57af3ec7ba97949b49ffff001d274746cd","010000009718c6dff8e31edad3f048986a46cf9fc7f3e4e6cb89b5ff7a9597f00000000020b0ebb60fd1a87e4dbce69ecb37e04c6711452c2754141ff94c3643183f5a2d86969b49ffff001d2d83cfc3","010000009144c22f55e664b044cc013c37e1ad781b6b5a5bbf1b2de11d12b34400000000eefa86b5dd93cb82935e5380f6bfc08de06f2da2c6ee4f48c1281ebd3e68af5fcf979b49ffff001d15052f27","01000000ff8374539c4ea19ff4e0cf3e2cbb0c6f9138383b6ca568f5f9b1c640000000008f0061914f999d5902f312d4f0ecf3998b3204a463fe4fe24fe5e9aa76ed6ae5249c9b49ffff001d248e3ea7","01000000f8b1bd1a354f61d4d53ac8105e6ad6a82f591e5edb1af503fd5f6df20000000042a0a4c5fc819fb37c0679f9e193da75c0ac932b917424a138d17969d65c3cb9059e9b49ffff001daa49d107","010000006e52cedeedd081370ce311ba6c1d613f9f09aaf0e7eeb950d8036eb100000000ea318e0cb8a1064f33ffb679749593dc9e923f8ef4df2031d7ab64eb9ee894ae26a29b49ffff001d29e63dce","010000000ab8ecae8c41ec8820ca424e8a6145e782a933cc4f7aa9251d6939540000000015a6e1e208578afbfb31df267e411144c5961f76d6157fd54020df1a18d0965ff9a29b49ffff001dd4ab8203","010000004df2e1bcf05d6ce6816c81041514adbd627820f816da760e91917e9900000000411513cf43467700c69a3030521f44bb061a853e84beaff6add73cf6d6426111caa39b49ffff001d03820316","01000000c3c1ba55aab2df87d6a9169f4c07dff17c1193fd7b87e2256c9783a3000000007b09c45778487000c4404146a72f0f7719557960fba00d5a4e8b2f66725b3cbb9ea79b49ffff001d01d44b28","01000000733405f831539ebb5e34c3f3d6ff4eb0c39b67622d666dab76ba052a00000000d32609e2f61fa31d84e72d88a27cde061e89b6a2ffc2ba45812b837f77396dba14a99b49ffff001d21c944cb","0100000085078bdb702d41a2de389a1e743eedc9c04055141eec8a0fc6a80c8600000000012a9b05ba6389e7a726344f3de8fc17631af3f93b925bdd0f3a3e9b8a2a84977fab9b49ffff001d25a63bee","010000002b8a351f4ec4ccea3c82910d62a72465426e7ae78e7afee18da240db0000000079002c12bab8abde64ee413e1fc9f7d76e850efb52fc9dfd4478fba04f53c70946af9b49ffff001d1425494b","01000000c69823f742c396a33d57506256aa2f4100d54eef074a4c752b128b34000000001d87bd26823924cd13f8a9a266c9b3775e7cb9f9eafe42b12dfa0654ce1993bcb9b19b49ffff001d2004f31c","010000009ef9918da6d647f8b8c1ef2e22caab356881ae9fae844018952a8d86000000001a1d0f0d0bdb673c9a9dbf8281e0de603917e49fe5424c1477a4a5171ff87e75fab39b49ffff001d1ac3b101","0100000053e9b4f87458d200c38ee5eb33fa98b4e314174550910fb8bf2e299c00000000a8155de5fef2931839dd5cf7a2cfe9b93becceb222fe7e3bfe9dcb800de553c7d0b79b49ffff001d25812fcf","01000000573e96e0550ed20e103514a04ea50eb03116209a1fb5a4ea0f291a43000000000cd7d7328c5095dd42e3dd7dbe0b155e855cec0138f2dd994042c6e5d4b3308134b99b49ffff001d39739398","010000001f97f08d4dabb14fbbfca7b0c4690660d809a40d5c4eadbbe558d7ea00000000fcbacd0410830bda56f3b9231014eda90ad232f5f311ebb72d26700232c2e8ff62bd9b49ffff001d224c7f9c","01000000699f68402e046a1403b109207249d097fc11ed38df705e51339327fc0000000022bd9ebb83beaf1d647671b162b1345cb0d02a34fb549006298595b9866c93e5b6c29b49ffff001d17ec7322","010000006eee16f4dcd51404945bb1e8848f90dd45f19233d041cec3e8e1ca9500000000e9098f0888bd3520eed8a99574436f4488ff1bbb18219a6642f39490bac75b6977c89b49ffff001d311e9e73","01000000f0cc360ab6e50a7b70b41f25fbb860a7dc4c6da1e1c20d52f76b517f00000000a9ef732225980c90c0bb24f55f34f40394be3d5da077cb7cb25a0ea2ca937e94bcc99b49ffff001dd43a8e05","01000000173584dc0544081da1f415eac69bc504045ae667b474e0b37f395b710000000005c83d61abaea2de83558e0c3af5e094fa31f340e032c0e5e4aff9e89f41348235cc9b49ffff001d3877184b","010000006803c7269881c4f53c60899c57a0688107eaa8c44497e46341d43c6d0000000029d451c703bfedf98ae00628df8b6581409307dffd46f4a83597df0eb4c4313d84cd9b49ffff001d1a309550","01000000f7542288b54c2fe1e2a56b175a2656211102afb34f04de0c1035e5c60000000089e3daa2cb60959cb93851f8dda78d384f4499c220a98282127ada92a0abe5268fcf9b49ffff001d1a692b08","01000000f19e3e4d82db93292a07cdbb76a4d084cc008b257e9f0d98080bb4c50000000090df7a111f42077185f45543a3086d81a81c038c1b88e78a7e41892e60e4a0fd9ed29b49ffff001d0402820c","010000001c6ec8536e11950c485640ba67d42897e9493963c13595d189996174000000008258082a2ba577ca2e7421760e606ad9119640f47705b7219a1aa250412f1a07a1d39b49ffff001d29229da2","01000000bb63c609008b7a859eba0653485c9ac1d95f40bcbf3e40346273c5fb000000005c46c3e5c3b783e60f42a56c3b3f908acd9506dd6ae3d5320c8c57776f9dd4630fd79b49ffff001d1cd3de23","010000000880e001a3047967ad3813c53865a59ad60b9919a60cf4d01b9a078600000000ad5b92c61c2e836258d49171bcbbba376767856cbdbeef48ad2cd03ee5999e4373da9b49ffff001d1d52cdf1","0100000098223b628a905e3749f680f3651cc9d7dfb23caba6f9049d8bb0e1580000000087e79099a77b079b18c85f2f8943b0eb8941dabc1976769e42e1e651a268625a39dd9b49ffff001d36dd06bf","0100000028a331b35876ec25d5e71accae64c3659c1895ed6b8242194946123c000000009cda7f9c8add2523d4a5e4c7b413de9eccc9a41519f1512faa79649ddf50e55c80e29b49ffff001d2fd0fa2f","010000008681494c615e7c16e0d8b66b2bdb4bb7546d516994a5585652b53e9f000000006395576c42679f5cb918091881af098ff13054f115449900c4565f43d76182111fe69b49ffff001d1682cd97","01000000dfcbf10c56d641a1bea8b65e5b5860abed4e369e311ace2020440a1f00000000317e44cb38936b14ecab25dd99e35962dbb0f44763bc0dc380b830e79d6098150ae89b49ffff001d2aefa2d8","01000000e4c6885fff1a8b6d6491902f3c31b428a10c7b840da4b69d53d55845000000008dcaf638b592156863072539f7bd1dc558b16ed9d3d0538211c4482b452656a1b6ea9b49ffff001d1629b9d6","01000000c09ebe8db8d96c4a810ecf8e8f66b2e30c23e3b1f3d7dc643ffa1d9e00000000408edc277466ad097e7171b627823c44d8b074ae24c7bd27976c5cd1a9ff930fcfec9b49ffff001d2e04ac12","010000002127262f0ab6fce79e26171ffd70e1b81e9391bdc19ee0515b1f3d4a0000000099ea6989d45cc900ebd605f96e3e14836f0791770917360eb3ba5c7a83dc52248ced9b49ffff001dfb177d03","01000000b5cb00475c5bfa8e22d4649b2cf11efa5a446844ad6268c5697f9ea100000000bc0e2b81875af510e51e812aa5510f3379e6ed15a01b86db7e7c21e7c71a3f6e91f09b49ffff001d31c4337b","01000000b97844529796fabcd05dbe470e0a91912c2c756f30576362c1b81ed7000000005defd7f160e3449ee9d477803a535365d678871d75b9a6399af76718517ebc4fc8f59b49ffff001d19805249","01000000553c8d8abb14e4b1a9d9063faf159cb2004b5f12a402d786b2347a8d00000000d36571c5230b7434b000723540c138fb683cee08d0e2dba6f4d5f4eb373081213cf99b49ffff001d2a437624","010000003275f71d64bf643db729acb6f312caa1778de0a42a6317d05cd45ae6000000000385cac867144f19d23683b31de88d9ddbbe57de1f2a0d4982ed15bfbe05762c18fd9b49ffff001d00e8b2e6","01000000131c2d6d853eccb7341bebcb1c951c70228470e61b35e376a4d9b7010000000032ff82c2fd09f3bbb6ad56c9384493f1f3016314bbcd5f2167dbbf28d5d55ee0cdfe9b49ffff001d0966d72c","01000000b784231b7bb6f2a8b8410ce2d3046157a78c432151b43ba3df51b45a000000005fedad47acdcea1a3b7affa178bb3696dedff4f4224b9da0863e43e0fd71ca50bb029c49ffff001d30175a52","0100000066da2635b604ffb559dc4b4c5eab40e173fdfe0944dd631f39927fbe00000000b9971047bbeb640e4b8e153a09c56eacb5cf81faeb9ec89005d5da54b071105561039c49ffff001d4dc0e902","01000000925ad6f4a36104e612d095a629466e605e383ec89d56610bd35f2ec9000000005f94b2297c3d85de8dcc7d89ef0aaec8c2df06608857a35d129b0a9bd21fc9b737059c49ffff001d295e5488","010000006360388f9add99c78a33461547ba418c54b10354d68e3560f910c62f000000004fc90f91efd02ed832798aee6113bef7bfb067355ecd2d01788759e9e158403b390a9c49ffff001d00ff7c28","010000004a9452fdaa1e56c693ff05ca992a499a12d7398c93c22ee738190ae50000000060f60d8a1eb3fd72fd0957ce020561cbbcb3e2e3affdd9cfe216c82b15e5261c2d0c9c49ffff001d00f2bdf3","01000000c28b659519f56f6c70ab8f0e4bba732005f2372ddf8e096006d81e840000000088607b7c2cc59d7c2c9663502df361c611695e24a40136d6f8adb734f93516e8ea0d9c49ffff001de5248f06","0100000070f833e6ac164057a86c439b48a0f1cd1cb9b263f1f62a20091d811800000000f832a5ace0436ff7c519b904ec8b87ff535dccd09b52b84f4e75e8411d75223464129c49ffff001d3345e867","0100000069dc1e077d2f47a8cf0114f882343eb7d6c600d1e220561559113b3c000000005a079f348f48730ea12dc592c8bed7f6be653524f84f4b8bb046dc9205fffb9b1b159c49ffff001d09236f14","01000000091b69304227e82124e8b55ada1758d7f241fe37332e8c9d4cf1445b000000001abd1622c7571622234390f61b98758ff6312fff6dc757e40990d1020206929a51199c49ffff001d138dfa10","010000005b8a5cf03f3fa1ddc490a4296c3fec1eb184508617d83d6b687437170000000018ea183ca7632bc7e3ad988aeccd9abdec8720460b7f934d0546b9d9c43395b499199c49ffff001d23f103b6","010000003232fde2dd92bc84ecc69f84e313ff9d353f60be25f78faa538fa6cf000000006b85d82eff12dc480bab741b89b7e31cd0f6563db0b3235e4f87a878d1dfdaa5b01a9c49ffff001dd55e1f05","01000000acf09b90288a0c172ffaa4b2cb62c420beed200671ece00dc5ead6f70000000036f8343b90480c1301bda381ccf5f1c2d15369a43c38007d6d2da5297c9c0d80ce1b9c49ffff001d04d90016","010000005689b0780ff08ec687465febaf6f5cad8ce72d155716b0c968ddc4e4000000005c45da03236a98a701cb960cbfc053206fc54cd14c2742b8140ec636d535b682dd219c49ffff001d371aee2d","01000000f1ee2eb422c383e61a07b05707d0d227ffa0c59fa7600cbb399ac1e4000000005052f93543d37f7dd54c6a4fa36b0306a4a7988f1494c78093b48c2caff1d70a18249c49ffff001d1c01fed5","010000004ca1773f243d5d673ec1c20792b26fcc162b7acf7d5d7d22e0c4fc9800000000dbc0019081802d47f8538d6f167a8711864d291f5244d5176e8e3c4ebe1783dfca269c49ffff001d130f150b","010000004365cb17d20c0c4e3d08840074e797d61f670a13225644f0ecd93eaf000000009a147dcb9604906b7181c3f1d599cb1336abc4a73f7b8cf7aa152d63873ee74d9a279c49ffff001d3977f0ea","010000006dc3b3ba2536b326e71f81641d38661b538e0871eba824c210c5f6a10000000047e3ab86ef1d2e16cf752e70651f7ee0da8adda42aa039fdcfe84584edfbe69b42299c49ffff001d3014e34f","01000000e87e4d84b87ccd61d109da67a80284fc4b542bcf43eba50c33c500f9000000005ecc99d76e967b5fa34c8b0aca7435a50bd0d77cfc2c6f30f07727d02897b5c3b22b9c49ffff001d20f9fdcf","010000009bf1cc7d1a970160650233901a4eb21c3ae67043f45d6b2f46cb53230000000090811c72cd5d671a715deec281c7c36e62aa3c98367072c4adfd7ec9c73e9999b72f9c49ffff001d3688ad73","01000000426bf80a8342c1168460521ab933ee7b58f0e89c5f002979178d3fa9000000006abd98e9d1ce23b3499c86e107c822c5129667f453cbdf19cca86f846deaabb86a339c49ffff001d32de009f","01000000f969823676756aa44752bb35ea5aab37bb670ef4fa258bfe72081b940000000091a46b5e32de2acfd9992dcfe5f08be03071834493e84eb310872e9f519f2f6320359c49ffff001d374abc4f","01000000014f2f106d074b6406c4884a32e5b5d8da292ed922db0cbdf727a9f200000000ac24a97922a588fc412be63327a4ea18684882b3823547218de7ff0bc864c75956359c49ffff001d25be6a00","01000000c2a4ef9d50796e93fc7c04f8d69709069eb5790d09b71aa4728dc8a9000000007228d8d7fcb3715f028115a7b0697a56abf570d87d95ba44137f5350b806b37710389c49ffff001d46b1c20c","01000000094e94e9a1619ab8084f981276fb7b78f6b9c842de3ea6f8abfcd7cd00000000cdfdf51e74907f9f62da73f501188bd9d18fe42ff392e701e3868fc2f2c08f0ab43a9c49ffff001d058b3772","01000000e58bcdf72a6aeaf6673d60b936e92004e82f06a8520eefb054dccc05000000005d03434a0fdd878d27002d9366f2c12cbfd1fce65563b28984fb758c55c2ec783b3c9c49ffff001db00ffb04","0100000080fad78fdb09258bbd85adb9df6bf9f845b35b33da7813f7b55d5bb0000000004089dfff6844bb27b1539cbbfb5f541b3771d306a397d3d9aaa06f23786428cfa23c9c49ffff001d37c7c5eb","0100000019125ba1b97b320df3f1d2a05f55193329f651f1b7bc35a5f69c74c300000000d644bf9ef2302e0b924428f65c684f22a26fb41445d3b914362e6275acf7567c6d409c49ffff001d1d75ba8b","01000000601bd9d7c0f86119901df4e3d5ea047f05900571b4fe96797e4a77d300000000185f5158b40f67f9b6d988e22cd88dbb69be8f4aa634e0dbb921429db92c23d352429c49ffff001db3b62709","01000000767b3e109f0790790bf9fb96f1a4bd585fe98f996cf3a4d3564799ce0000000004b9dd9ab7b55427f39f9296c075d7898d7317f08968732214e2dc092691cadef8449c49ffff001d2a8ddd99","01000000104909c2be40d1e0d4654b9e365a8c58ff4875b39a0bb17ddee4caf100000000a3935e3de6aa47920d264dc1ed6270c7dab1e280214414e17623492f62db2c5911479c49ffff001d3574522b","01000000b3c272246bff5878dbd83406d681905afe02e352761c9fdc6f4559e800000000df1c09fd0ec0a44fa5355cf3c33bdc7d588f4864aeed4fb892edfc8a3f7af119a1479c49ffff001d76e01e02","0100000015b1cc185cd4d340ce40e5d4d37ca6866f26ffd5f91eb3189331fd9f00000000da4dac090e604d500dcf0a90837e9450cd0a4e58cb8afb5e363a1e221832c1cbbf4a9c49ffff001d039a8e7f","01000000f35c5f88a7c4d5942e7e88e74d668c29cb5992f4cba2492ef45d9b9e00000000e672d1b75239b891280606ffa79e4a7e030e29530b4b80af6f3d6fa609e05418464d9c49ffff001d1df930c2","01000000f41a13bff0cec852a776a41969f5fcc0bdd7c6136cadfdd7fd8c758c000000005a8901bd72af24e72ad21b75fe2fda640b6bf3d4843ffbb952345b62d09925cb99509c49ffff001d2641ecfb","01000000a9c98e967edb345e46b82c5139ddab65526c0dec8a418a89552e298300000000289af2f8d69ff0a1b8e038d8e8bdc843af7c2af0b19b95fe8cc514747b797f9e9c559c49ffff001d3a068764","010000003b6cb94471d31095152eff30ac8e3e53af35b0189071098fe15343d400000000e98bf25093e0d99a12c78dc2cce661d3c6b88fabff669a8bd8aa50454df2c3631e5a9c49ffff001d1890da9d","0100000006f1383b55dbcdc1a4b403e07d38806aa0b74bedc7bed8e8e749fd2100000000dc386339a951fa897a98b7b0e2567832f6d70edb60cc59623a3f5ef8a95eb97a515a9c49ffff001d5e03a200","01000000a46f289089a0079e192aeeb20c97a0f62b6f06ceee5e56cc8beb179200000000e327c39720e69bb7e652bfbf9e9651cf8fca38c288074955d66e94bb0e4f6a523e5f9c49ffff001d3603f0ab","01000000c76669fd1c723eafbb13b56ca9cde093969be5eabd86a492070a71810000000046c60b118de2d08c1bc8fb63d9e149db528369b0c2251a10427dc62cb635d02ca4619c49ffff001d2cbf9531","010000008d7893cf7947397cbc02eca5b6e07443d1ce36cd0dc9b9c0dbdbfb0f0000000090351fa94e1769dd572522336babd6536aa47e0baf0f7c5182da55e0c50c265622689c49ffff001d07bd54c0","0100000097d8065203e0e6876fdaa3b5b8bdfe625f653c574c81ac6bbd83fb62000000002f6a50ee1317ccc24d769d8c627c6702239b755363e24601c71b873bd803bc6d516a9c49ffff001d37d2dbe6","010000007905c4485b405686d4d7c7502f5f4ba062a189ac2a78acaad805a78300000000cf262001a3b96ef4401543c965a72863996c829a33e612fcf2c0e49c63adb8c2d16f9c49ffff001d056ddee0","010000007957767041d530552d71057cd58b7cb8ea7c72994f1c4523b8a4af8800000000eb9d0a527b38dd9715c91deb67c37564fe849a7fc741189afc4c34d9f1de48394b759c49ffff001d366c44ca","01000000cd9c9bbcd9de5003eb011dfeca521d9451314ec565b986b16547f78c00000000f46d005a607175506be684d08308abdcdc0ff056a5cbe6bc1a3716282b3b99e67d789c49ffff001d1d59a8ab","01000000558f81535bd33bfe835609a83399029f70d7fb15da9439e8c1bff84d00000000ad85bcc63634c75cf1551a2c07546344ba077443bb986a06d793a6a371878eae2c7e9c49ffff001d1d77028a","01000000b58e52f592830401bdacbd727c470b27bdd8d22f6a527ed6d41e37130000000091b7a0a4b79f460b3f24ac8af4938fd2e498ff39e11fdbc6575d63cdca6d69201b849c49ffff001d31bf080a","01000000b55e287ff00f070447f8ee253299453f8aed1328d7b143bcada6cda200000000259b10938c42a0c8aa4db18cd4eac1674998a7438be3381024331adc937596201e869c49ffff001d0291fe0f","01000000d8508fe25d992b096e3207b5937cf242afcedf27d64d94480fdfe6ee00000000817d8a5f0c2b496caaf3b21af6da695aaf34108ccf605e458e93041c56ea9e94b2879c49ffff001d2f516f06","01000000bf6393072bd490fa488bd13658a29e261515f2342972ff01224fac460000000035b4dd07a4d28a6339e83644858354e591ef4f70a87ab7e8e79a7489acbfd50566899c49ffff001d4b4a6607","01000000d7479e5a458849113b6bc0eb06fe4a2c74a536bacec6cedcd2b7cfe2000000008fbd9e02bfb359c640f95c5c3df8e8dd6ba0f78c24f21c3c233a45886d2543073e8b9c49ffff001dab737709","0100000051a8b87192272d899450613807d309d9a83c93cf1cf1abb05a24dec8000000003f75cdb7e8fee9fb4c25e3d5b581f418f72f62992a8e92d793e0245a0469c1e6898b9c49ffff001d1b36d524","010000008b3e67408bfb73d7dd0adf3aefa33dfdd615014b5cc70446c45bffdd00000000d613b900d92e4c9e9bfe541e2afb51875e6ae1f459ee1fa0a592dfa0311090791f8e9c49ffff001d145b7023","010000000cdf13ae9908d9dc744903a3b997325fb4c4a406b00b5b284b3be0c500000000ad4f73a94ccccb9bfad416f257e63c1f7c4492caa7e151d252aa6b10825ceec0eb929c49ffff001d2f3b1f0c","01000000abae246943c57c6d275ed8b600dffc0d0cf137bc5054db75042499ec00000000aa226c1f606ef58e37832c3ac7977d99ded8b1b3350a266bea19d3f80cc582f6f6949c49ffff001d02bd0380","01000000c7e03826c73cfd272940795e7afa47fb6882c1b3e4822c72b0ecb2ab000000000ff8d1bac59a48b115b2c75aacdbc59667be1917a2d42f7441ed2494b687cdf2ac9a9c49ffff001d3294c130","01000000cf71682f72d412a761c3133f6af8ff98f8c2040ef9a6bc82bc6aff970000000008cde413d9937788b6680895a3907c28b05fc0c8b5063928992429b92d38edd4939c9c49ffff001dd39e6208","01000000e57b2d8e063b6092112cc190a05455c340c96a21c0d2e48b44249b5f00000000f8d04d5e490df481e11fa3a850922bf6e90d951cd678712e7244d95c506e77c74f9f9c49ffff001d077962ba","01000000fd7426a82d6d01b1f78ac5049d77f0947a37ac2a1c9fdb5300d725b500000000516fe408deef221b7d57733032612028c3e3380e9f0c427874c243ca34dad74355a19c49ffff001d008da9e1","01000000694142fd26c048ec95e6be750ffed4de1ea903abf718368f8299b71400000000ddf397c2329b7c0e11abb493e05f37888a152de3f5c3479471a4158deea824d927a69c49ffff001d59e39616","010000000596e801fb44b9438e9867f0605e8f89cb771fb1410e3e458498e7de00000000aef0b0bfb77348f5f78977d95574d8f651431566610f84c480bb880f7eee6896b0a69c49ffff001d2ccbb439","010000007a7b1cb6000c3a2a832907d3d25e8b23ac268ae7c340682ee66957ed00000000fe6c5b09b03059e1dd076c1932173a0005aa21d0ea929ed4675ebfa8747d74cae9aa9c49ffff001d01b903b3","010000008ed641415c1ee0256d63beb588f8790cc12d83ec331d024faca48ba100000000a58c0bea0f1daeaeb0a486fadb3846ca73f667a937eabc97b303084eeafd5916caad9c49ffff001d394b29a8","010000009d184e08b947c93d8504d56a2095a65b7c1d3700c901f336c3a79d6300000000137f89690b77e32ddfdeee33f8b0fcde78768bb3a869e8c1b6e3d6b54e07f111a8ae9c49ffff001d59e92c04","01000000f120637fd4a5805b2ad78ff7b2c2791c859e0a09f2ecca429062c3090000000047305e2d37dd72d455d0b2851c17ac0e385d93f9877142a699c3082d398154011cb09c49ffff001d02cfe17b","010000005755240b7e88474822e46eb9085d6283aa96fd37726f807c0a80c3c300000000041ea2ec8fab3ba12b6b277c3a38d970ce2f9744b477f0f4f6998ae39224344fa9b19c49ffff001d2b6e6db1","010000008599f22bac0b91fd0ad6c7bbeed82ceb7660a448126eda4af4db7b590000000063938e3b314cfbfa860de181a463fd919c3b75c8c328f4dff4aed88fd770b841dcb49c49ffff001d2dececfa","010000007a406ce11b4900eedd7523b4026b67caf88a3be0cf54b2d76a0b23d5000000009f2c39da75a179c610441db6d59d431d5ae41d3e133d18609815dd217e8e0fe4c7b79c49ffff001d262beddf","010000000cb8e0799b49514d9c28827c58e951835e3a500940daba1421292fff000000004a416696e19e9965a5fb59a9ecb0ad2627e4a2dd0adde0b4c9b5d3f11fe0bea3acb99c49ffff001d39c8645b","01000000ff0fb601552ee69c0ff18933a11981d6c225e13cf6b1aaccd5a4c05400000000faf7c6bd5eb029dc2ae00ba4d7bb3f7742c3bc6e9ffd14a97c98d8be3366fe5fccbe9c49ffff001d37adfbc6","01000000ff25b374d8c81452ae964611441da7a240eff2f27c4cc68c6d1bd0dd00000000c1da8171fdd8253247137a8b9ec613238e4de34672de70c70125fab38bbcd43de6c09c49ffff001d115a5e08","01000000a787377175bfc8c266c58dd7b4f8204ec0fe1751f1216e7e990ee61a00000000a00632b40da7ef43ba021ad3fcf3871cee8a97bb04ae4f71e208eda6773bf6fabdc29c49ffff001d1b17c381","01000000ef26e3f5237fe0a6ce69ffd639086e87efec6480ab5b303743dd140c000000000a9b40921185b312ec06f13712a5ed4e448e7be16b6db01507123cc6b046330ceac49c49ffff001d19c1e531","010000003220e7f7ea900f81e57d17306e1438af26639a52f3d3ce001c3bbf4100000000cd161a5372f505aed801f95598a7d3aec87a9b3903539c4b37472c0b721828ea07c99c49ffff001d7925580a","010000006d88538bdb91e6c2b86fadfba36d80a5dcea3d8f3ab0882d83a01d09000000001728a3128e6a6c163cebebed0503b51b777526691502b0eebe16cf1d7cb18c0987ca9c49ffff001d1db4a239","010000007fbfbc4f95a3e1d5927781eb92aba1e610a4e5ba30d4660dd7a397c0000000005532551041ae43391987453f695730d155ea4866c47294cd48df514b21a464b9cdcf9c49ffff001d03e86443","01000000932f7f63eaca14e4e47a6871b0063d33e06bf28e8a00d3d3232fddf2000000009fb01c821d3efcba90d98fc107d6933a86401ed65e7bc6b510cabe0ace7552f97fd19c49ffff001d1d82f324","01000000fe5b80998d4137b108599e905d2e075e7690f216c2ee8ded1a8cbee000000000d42cb10aceb723b9500db51ccc6c64dc908410ec799e8fd4efadd6b387a93f61b0d59c49ffff001d8b51ae14","0100000027262b7efaa311414fd02f02d4d2d4b6a96b029419c345f4ae25d96700000000c36aaa4561fe4c48fd2e96749563b46ce16246076f455279b382d717dafe2f9fead59c49ffff001d215d5263","01000000847888f3aae78488a3ec062dc65d497923711b26bf41c7d79fe7f979000000006c9f101338b436bf18309a525e2fce33fc2fb31816a889f6b88a5ac9e555cb8191d99c49ffff001d040a0ba9","0100000029584b6c1f44a252b5e3cd3d6752b23a18276901c5f8bd3c50bf498a00000000dd7005a1c4f86bb9f9622963d1f203f7040b88cb16feafc62378cd3f35445c8df3d99c49ffff001d2f12e000","01000000f28468e4b73258e8335e4e188fa95e90b00659d3c019d84888f672a500000000114a16fc8f93052b8f67e81f38f99c330970ae37ddd1baba50ff40238451c2c28cdc9c49ffff001d20c08541","010000000f6fcedaf73d4354989bf7ce0572294cbf71ac78cffd92af17b5e0ac00000000c4885e9a5600ea82f9eff478b7053ac6f2f71e43ffc62d6bb6a08788ae7453e933df9c49ffff001d260ac250","01000000095aa4e68baf35aa9a7c93203b4a6bf88407b49067e600dc498a894a00000000609a4ba3dccbfd3ccaaf9e3d9067fc8521812ede0369f25de3677c7da18b1635afe19c49ffff001d02d6049d","0100000088fe918d52d17136e99726493bcf91f3248be3ce1139769edf8cf4a000000000d14f02de51cfa2878fad1fb12520cbb26f2382c4e2674fdbecb76f0413d381b09be59c49ffff001d160c349d","010000007a4c1f09d9525717f2fef38022f94401f886918825b4f062eb3cea200000000091176796e6a2a1ed9dfb077b1554bc4091cd5699126514596f24b5fc54895d15e3e79c49ffff001db9a2b909","0100000014da2b30c83eb0fc30708976106077cfb0030cba1db3843182512947000000005aae7c07fabcc4b0c094360656d52c53bda16307021f02dc6d7921ebc2bbd31000e89c49ffff001de9797e00","0100000035bbb86acafe3ed235d9d337df6e29aa8ef85d8d60bbb33fd3cc0ba30000000043eb52843299a4826b90830c7e35203847cf447e3086a368d3257d602c443b869ee99c49ffff001d016ab493","010000000556e24c0fa5518271ed6c190eca218f3aac9d730178f82d0d6ff61600000000412e675b87870ad3e4a469d01e9ecb413ac1ad3634b7771f80b34324ceba13f990ec9c49ffff001d199eb6fc","01000000c57212432be2f50a46edbe11bd66e010479ecad3c38f744af19364c10000000099acb0629c275678d4f22fc71627d15a869823e1d45b49671e23673d14d4c44fe6f19c49ffff001d051775f5","010000003fd818928ce7dd034f34c19380cf5fa51e11933659d67d4d79ef61b100000000355fd6a715832f510066e34f6cbdfe67dc99790d9665a17c0ccde117db92d55561f89c49ffff001d30831c07","010000005f0f2dcc42e0bdcbe3de2ee0daf9d890b7e4c4aa678e5245ef2b322c00000000fb0e97de4cd219774ae2eeeb9422389fd99e5c5df0185475a5f38d9bb6d6fcaf8afe9c49ffff001d01832dff","0100000078e7fb61d077487143aceb5409e14db5e263a518fcf96e76caa31f6d00000000765956d5d2f6679878f4ceb36762472cdef40fd081eeb33c251e222e50c2d850be039d49ffff001d055a4869","010000001ed8341cc3048a0832d7bacf9ba7ed9a94be6a68726a5aa16613745900000000c24eff98a3ec01418b3fe1958fb1035934d2a5ba9ce2f5847074089c1d31c88939089d49ffff001d08f86874","01000000276c25c0a20d655ebfd03d4574f61664bb70ebbd4b26a160f610191e00000000c754d33ec7f0b8824dcdb450bc031b7f4815dadd9038cdb0bff57e71d71b6bef6a0b9d49ffff001d1f47dabe","010000006754ae8d93f21db76a3feeb3f71afcc4b1abab9308c09239849e188200000000236b212bb77dbf1f7036671bc6445fbadbdd738e2ca5aa519dde7aae1ed26e93260c9d49ffff001dae271703","010000003ec75d06651ab6a2aa76e8a9d2080af74be87feadbec506674d0432e00000000401a2a817c76482a19585f2e15ae99ff9d4fc9eb87684f7acf46cfd78077f6705a119d49ffff001d1726ce01","010000007730238fd3dbdc653dfe99f4e06104aece1e86750c256ac88f71e1af00000000a5a60a91cdbc712c053ef2c8dca6c19310a131913a65e122bf5b3b562ef1e28e10179d49ffff001d38ed9797","010000006e7610975b6953dfd7ead614eca6a4f0bbdcfbb4819de871f800b022000000009cfd9579044d3a82cf40aa77fa6d0f65b5013435add9640164672b5faaea973d73189d49ffff001d5ff67303","010000006c8e34583030413dc59ecf6b16f417c3a55c99e6717779162fbf316800000000cf9cb1830f1e33194f15c13ee13d066ab186d32bd78d566029657931630b8fe10e1a9d49ffff001d34297a65","01000000e317d38cca4fa2f0a6e8d19bfddaf0a6ec6206b06cd9a6a06d1ba94d0000000051678710f83344120c10c61205bd9851b703f13872680cd7ff9514c7cb029a95571f9d49ffff001d03aec766","01000000006a657aef3d367672ea5cf82d7bb15d05d0dbf06480f675181bf6fa000000002cc41773165978567376dbcb2e371351a8ee077c71356be373411faa6b65461e8e249d49ffff001d1eb6eac3","01000000bcab7afa2ae3b42fcf0a9981c6320b51565098973f31a2f3c050c323000000003586ac81dc9638cdb38535381b95b1148adb4f39bbcf5e0241d9506163c375c51b289d49ffff001d283156aa","0100000045ad81a6f39efb497ac980d65faecf882cd237f72fa87ee5bae8d32b00000000ad3be531e0654799907d8649bef2f817a8a5a9cef000ee1c957e71ebe03dac984c2a9d49ffff001da9778805","010000002a583017bcf4ec0f8160df8ff01a4d24ae04cba8f6735a49d3d63ea000000000fac42d0e5e31356a3583301ad09199486277c79c0caca4f82ba9db9a2d7e9eeb2f2c9d49ffff001d1d47d804","010000001848c798144b4665945c0fa1f9f3d9ca6c4a4715af315b6620072345000000002787d967b11f337fcb55d456ab4d755168c2f0b83e5e6d78630c6916a0f1f324f82d9d49ffff001d1da07cc6","0100000037f82ee4efc520894703cdb64738612f4c821af83e7959ed55830d83000000005820f2b32d0d167117a6c14b06fd50b1d948c3c4c6d4b09a2a25112e7d74f328d0319d49ffff001d787c880f","010000003358f5b8b8b91ee9137b908384461e517253ebc7635e4e6ed3e3f53000000000bd9fc6da778b8acce67a08163a5385e97b9af30c55e9caa6751c49d4a0e6222dfc329d49ffff001d53444805","01000000db9c3f314e60fcbd0c31513828b4c5e784c28e1d3f653d9e4005cc5200000000ec5733589bceb81afba2954ee156a47a274dea38fa9cb190403c3479aa7d82402a339d49ffff001d2b1d0967","01000000b280326a166276d6e9e0863ba7ed816f72f6e39c26b16a00e7f833e2000000006b6a51e8ce9e01ef4634b1729a6ee69372a5753e6e23ab624470898e78f791f672379d49ffff001d28202614","010000007f056feaea4cdaea6e573d4f2f3766d92cb183d601c9572954b252170000000003dfea085e92ed0a3e8babc5ebf9816559ace2b253b85d54a13aeccdb77b181bf8389d49ffff001d30558b42","0100000014e935ef4791b29a9f7c01f0c74ae977e657a2909e9f88ba4c1d6707000000009f9b8a19359c77fa9e9a465b5d7ecd65a93adc0e1de4241b42a60a4a66aee38f5e3d9d49ffff001db8a7ae14","01000000ef3541ead4ca632939ed7573ce9433650a369ddcb4c13fae28b0a1d300000000a560925c741069620038004d08f77d49798303dfb0c0855425661fd10d4326de703e9d49ffff001d36a1f4cc","01000000baa6b50c1905f511acefa0f5c81702fbd3dadad2c70354efe484c5990000000046d0608dfb34f5051b4c73254234a0a26dac4a760b94678ea4d0158ef047493aad439d49ffff001d2cf70caf","01000000752b5e91f391eabc6e79ad5e6270a3c5599dc4426fb9dcd5efb6a0b100000000288f82a8e2f442f80b1f679adf67a9fec56716a8277a72c665ec6207a7e0b4d143449d49ffff001d6fd43d02","0100000092fb98d25b016ffca83b1113480414e4c5bffa93bb66ea972a4c720600000000f89fedc65fa7a36fa8929549243a5d2af3b5ac3b3293c2b40731bb57c9e9ca4845469d49ffff001d188153a6","01000000c957a25ac7a4bd1ea07dc5690806b1f5ff81ee73046c0d90951616520000000037d5906bf389582832886cb72105c42b5242adac8cfb7e215cfe1fbfbd88c2b8d44b9d49ffff001d1db543a5","01000000db47b4dee5275ff3206a8394f1a5502e293093b7c72f9fe47e497027000000001046adbf00c1001f3cf68f42d0d5fa246129f4b4f01e0489e6a1d8af466d05e3a24f9d49ffff001d1d9a15bf","01000000d436e8b84b726c1e8a4d963c78ec4958e9eb44055d6ffa8e91087730000000007394ef921f87122d83d84fcf35da040308e7a6ee7f77f570522c4dc327a033a849529d49ffff001d21ba326f","01000000ff3c2e903cba8613337fb80f2fa555112f3870d84d1b001da5b14e3200000000e2319a2e2c5eb5e3467068b50edbae385f760c0143fcda2f40c68d942f0eb9b1c3529d49ffff001dd5ecbd01","01000000e0d2b06eeaa91f421763ebde805457bb2cd395c4684d274a68a4178500000000431a16254bf9de79d71d6e88079c425594a6082e778c1fa890ee8c95fde4b40d29539d49ffff001d66e30702","0100000056fa1bb0a4b5fb533b2beb5f6fe484ca44485a451ff949525c27492a00000000e606aaedfd898097e595756e82bde45178fd72a829e2f66e9f90cd424a24fb01c0569d49ffff001d2d661600","01000000ff9a4a80902d57cede9f0317ff5af29e17ca0ea85025e0d60e26783000000000432f2a5c9813f43d7a04eeea458b71269e3c1aba0cba738a6e2589bf9b3e89ebd8599d49ffff001d270fd30d","01000000ea0d71406a138fae26aa9210edb8566b4c8428463483ca308a8171c500000000707f424b6975620222e82de15332d9120cdebc68bf646e23883768d941fb4aadd45e9d49ffff001d02ecd05d","0100000001cb216e93e2754c89496ed29bc349649095a15a3ca21f7089f32aa600000000bfbed95c39f912d915b78ae7132964edc4d547b007556d59774bd8bf1a897b0b96609d49ffff001d0ef48707","010000006fd570ac1f2d0d7d02c24a3c6cef42758ca8895db2e2236fd5f0a4a8000000002e180b8650d6f909ee04ed7d26642ad90660985d3f038630f0f3a209052a4f6d59629d49ffff001d25b912fd","01000000f7472a7e7e85d93aff046e15590e1be6af2063f7ed5cda03cc062f150000000098995e62a8bf6f744792a1de6054eb74ecf782539dd744a2ddfa6d93a2441d1de7649d49ffff001d318f400a","01000000bca259b9f74eddbb9f7c52b1f2f3e1fab89db761ce23c26c27b42cf1000000005cdcb15af727e2231c3b4f6ff4e77e447b912ba812c79620062269a34c5459162d689d49ffff001d217a5033","0100000077b36dea246e3bf1d36a4f970298704651e034bcf3c001b807ec96a9000000003a0503fda942beb6cbcda087cd1efcfcb1928527a8e352dab2d8efaff6853f30be6c9d49ffff001d33776fc8","01000000bce3c0d929b12740642dac690ddf51fc0c10f8e8935a50d66598d75f00000000828c2f5a3bcefc777ab47450970f1609b0acc2e86537b49d591ec6b73fc9dae69a6f9d49ffff001d2e0b830b","01000000808c7c525ab48376027790f392067ed6e20c5675681f4cad304065c2000000007a33c450b29b44bb6442ea7b0ad98771ea4acdd6a9d59427edfd49ceade633c145719d49ffff001d38c82c80","0100000025879e4f4ea7ef3b51a3ea919a7f9c99c3cbb329cc06cabfa3fc6be300000000d49eda484749016cddc2947fd83ffd7e334f7bc111ff945c011c08b233d50187f2749d49ffff001d07e47da1","010000000e2d0657ec207c2e9d69782514c0ec2f7aefede2dc1ecc54c09499810000000090e0583519131b63c5bd1e56496a61e6ce70d0f9db5bdeb2b2f2b8227e75985757779d49ffff001d08615f57","01000000855851831fd636b87db2efb4253a11377b0c488d93fc8b1cbb606de2000000009d36f55db51396d7c304870f1457112268740089c4b6906bc56425293e6a39ee01799d49ffff001d2f8b5725","010000004db59a3b869ddfd150742ad226be1bd3e259035cdc3fa71a150b7d2f0000000086ba07346a07147491488e511910bd4efe26020939a7da563487d7504fae22f0557b9d49ffff001d043ba90a","01000000a61bc0ad2bf54ecb972471e8e275a3e9e4acdc74b718bf5bb1b6ee1700000000730b35258957ccb68f51ce49ef57767246abb6c4a4cb4c08410c1046791ab6c62c7c9d49ffff001d30ac21db","010000006b8e1d228aa4d4df01072ad44e7b39c503c33e29cd8d84983359b9d200000000fdaf16790546a90b3c40a04fd89e4d28a0ccdb437f1dd44e8c1f3aa3ee67d9a8747e9d49ffff001d2ef6d6d3","01000000e63d45c3b2fdeaa38fc363f6cb94c7907893db33e838ad5effe77c260000000040d5de98d906089f86d409f323ce5fda3f2e106034aab75ba2b84c6d45c5e7a06d829d49ffff001d2802ebb5","01000000a4af2dcdaa31761ffda181ab3f8d4b038c748f3bdf22f29126d088f1000000004b6b777894401d7ef26b0e1719458eacf0c770b57a6bd187d84d0b43927dc7491b869d49ffff001d87475609","01000000a4b8f99b060bd6b011517cd9f8b2375c425c57199c0baa4978d522f8000000008d82176f18336a97429eb8473e5e2ad54b3cdfd1dfd393f867a662d79d851cd1ed869d49ffff001d09450f85","0100000032f05b9449139610baa3120954bf54972d9e895a2b9fead4025674ed00000000046273faa8b8f6bd16817e6d654f30bb52bd8c4e9f70f33137a1631a2cb877350f8a9d49ffff001d33900d79","01000000fa6300204ccdaf8a486d56c71c26630e3bf6a94e7cabdbcec836d8920000000025032ebde3ec3b0f72d792d03647ad9704179d2aa9b26ef4f477c55fedc7e1fe238a9d49ffff001dbd783200","01000000c354e32115349912d3dfb0296fe7fcb97a47840a74743b26c65ab93100000000f1c61db8db75efdb488a123d28afc5a635fc93b8f355b7eed516f0a2247bc278b58d9d49ffff001d19a3512d","01000000a02c65db0b2e0497131fb97711434c4ce089bf8a03f112901d37624800000000b5764519f9edacf2ae30d1a05d278689e42e7e031e3bf1bc26fac115f5162a6a088f9d49ffff001d67406b05","0100000096ca6f12aa5cefb4e8be50d2dec5363ef5f82adea894b2712580321400000000931780c7698b8458bc0685d0776a3f7657b33544777313ef113a2dc04844e379d1939d49ffff001d33e6d151","01000000ff169366e040f1906fcbd3bc6d6d57fb67d8f7b740044bdaebdb45390000000088f32fba4e46d7c99e7e989144b2c4b92c672e099812e1e10c751cc7eb370dde09949d49ffff001d8a5d7400","0100000058166e21ac169b561e0a466a417d7f162c5d0d3eb12db2d60800850d000000006465e5924e1673733e5d5643108226e6cadadfc1933369966dcb76d22406a15167969d49ffff001d2fcf308f","0100000060bbe035d90b739c64877fd57889e95955c076a976b982fe71fa313100000000bcf4822961fab2c016985f775d1892efd5f2e38b50678c6f4aa390e90fb3918614999d49ffff001ddac1a40a","010000009697e5dcfadb463ae4e494e41620cb9cb5338b56c5a15b831949901100000000771e2b8f74954f7970900788caa158cfe4c41834f959c7e423b81fc27be0dff6ed999d49ffff001d0ee6a103","010000008d0fe86a0a9555b43e9dbbfe4599684d65a96911ebe21c9945e5fe6f00000000a7355e4c07edeaf215ec9f3533ac45522f0b796c85b0d8c5363172ee92f3e8923b9c9d49ffff001d26661a4f","01000000c7116713d734973d210893b1bdbe0e47aa4fe54667e87b3a6650014600000000b24082fc646a223b9baa732f593be036e4297687d724246ce0fc531e99e90fb1a4a19d49ffff001d37ec4fe6","0100000099473f248e43a19f6ecefe17c6d13df1a34655366eea26d2221ba718000000001e611566c15a0c3721de124068515df52adad85565815f87bafffe04e5b4ccb5a9a69d49ffff001d2cb2a030","010000008a30fe7fef6d26c60fe173a26e95f806c47c2d6c3fd0e23cf425e00d00000000ba08175d26af3abafdcc888e10c5d1377a6030dc74bcd2aab822d6c2244a6f3945a79d49ffff001d0ef57c01","010000009596608dae4518f25202c18084c824bb996a77e60124d2caa774dfae000000003ea4075a788e61b9523d991c6f3090530d226420a6d3d5ce201342d703660557e7a79d49ffff001d411aa802","010000009c0d3960240b1fe20dd1b6f2243c7246eea3af16ae5f5ae9e7fc70cf00000000159cc66dd261545195b15a58fe04ef270a50e2bbf5bdee6be9167a46076746d182a99d49ffff001d2e095735","01000000dbdceba053bb5f06ce5a0b2fcf9e514e594f7a83a2bf0019b9dd7e6c00000000e8259af05d4ef8fd4474fb7e9bdda6acc0fee82099aaa16e7537d3a8f6f0e03befab9d49ffff001d04652c92","01000000ac360d38ad2c49a2f767ff6bb55c7299f7699253318c03991ef41b0b000000006a2798b8cf526c7e6d6ca079cee1d8f52583af3f655aae16c8bad82c5dc5cf1ab1af9d49ffff001d2962ece3","0100000033512d974cd9933461f7184c13d25550946ad712fc81f5854a3c30c6000000005bdadcf382bff8693d11883484487f99633747a13246930576b7bbcbbc82161c59b19d49ffff001d30b7ba76","0100000023564a7248dd27240cae82403737c5649f0a0ca561b4a5d898d91cc100000000b82a0cc220f04f278adb3ae1a4f9bc35b95e8dd5c15f1c8f8c8c29ede1fc9328f8b49d49ffff001d0296a480","01000000a0ae980857aa321e1b6228ea3724eeced553b500e1172836aeee82be00000000eca54530c7a93909d5826246b1d23daf35591b46574f51a9375a4459eebcaa7e21b99d49ffff001d6ee37b13","01000000da8ea4c94b90b8eb4f1f7ed5949096ff81ba425ae7580bef387cff7200000000746e8f21c0624307abf5471cd11b9dceaeb299083e0e9c7ce29ffa52260e7abf9bba9d49ffff001d2031f2f6","01000000460a95a3960dd460e37537a3e44538cfaa55400f5636e0262e758d6300000000fda3f716f63ff02a13284b03f493c85d1455a784c0ec5bdddc5c485443d4245fa9c09d49ffff001d2924df50","010000001d72ffab5758708de2d3333fe6420c58ac910c4e16c6c474c088a4cc00000000987a98a197471fe5b9256c7882201f280ca0a6b55f9c2f3261a2675dd3cdc25534c59d49ffff001d38ee5462","0100000095e973bfae9fc353a372397a2bd2da1699740f70c8f0ecc72376a13300000000c1d6cd221adaef6941a2575649cebb31899d19bfa333cc865d2442366d2094a561c59d49ffff001d53664b00","01000000ca9bf79122450ad8b975af57ceda4925bcddca3bcc6f33e6aebeeec800000000730de1a9755af7c373776bdd15b2e9bd13c784b4f6553fa744dca78d3425c62bbac69d49ffff001deac31b07","0100000064a11b3489bbb488be248e84e57bc2d4f8cf33dd4ddb017ba30f239c00000000ca603f9063f217a5cc567222a4a4c3bc187a7f1d7ea2b02046195b8b565d134e99ca9d49ffff001d30b271ca","010000005d12bdd477fba8977f283c4045acc5c83d6e9788b05a0b6c79506b16000000005ea95ad0b4936b9334c243ac3e91104fb17bcc441b866d6e9095c9d912104e5fb7cc9d49ffff001d04bcf472","01000000c1369426c224f33f3a9385e9288d6c994bc6817d83de903dcd42a9a500000000a10c69aaf01e97b8f9cae61604f19d8b6020716227c7fc1fec2b8bb923611aedf4cf9d49ffff001d4f2e950e","010000003b3c98425394aa91be3b625cb96df5686667dc6ec67b32887b738d8b0000000039097e05dd6c5ec0c3520efd8de7b3e4eee439e93e118eef6de0e97b6a81576982d29d49ffff001d2c639349","010000008afed99065977929913399cabf301361ed380501315d12c16c872ceb000000003686995c4c14025560a08603f2d46abb67838a09200a91c01eb9a63d04e279da29d59d49ffff001d0725c8c9","0100000018e3dc049d96ca3f9a2174dea756c103ddb3883aedc95032dfa8f263000000001c98c30e8b66752d886d99c8a61fc7139bce28c2e232ebf3398108731db9c11e77d89d49ffff001d32cac50d","0100000014f710d3e51432c86dff89d67ce08f260b7e10e3f56a9b83ab81c36700000000baa23b0f8a525decd5a504ceade0d8edb90ca2651a2e4554fa2f8de12ac9adbd12db9d49ffff001d1a0e0254","010000009b7f7077f17703f843072d7ca9e438b9ab74daca8b2d164e057d832e00000000132ed481cdcfc31659d26264b425203dc600b19d6c32e077943afb93a8b18d14a3dc9d49ffff001d1b1809fb","010000004fe283e8d31706574868de38a2505798581323128ab4a9b5486d8cf9000000009d7e6fa05d2be510909a24e92f3acf3c9a9747e563264a6d2695468fe944f859e1dd9d49ffff001dd8ef2e05","01000000fa41fc10917c2e903c32ad7f77181741ec9e223ac1315f399003170800000000163effeebb6aba958537d9f546ac30ff9a1af025aa76a4df90a0b4f5cbe3212035e09d49ffff001d2150602f","01000000696b052a7fa851166ad0162b851fd784b78e62b88d09fea259aa281000000000d1824eace394b4b246454cf591be53672be3c5c255f52f648c19f8639b9e657a65e29d49ffff001d0323fa32","010000009d282a1eec9b465056effa2cc022cbb4da6ffe4fd085bd127f7fde8a00000000a9ee4fa1ddd0183d333a05de33ab74c406c5b8a291235c242707a70da070e55b5ce69d49ffff001d96471a12","01000000d3c8722169216d52e963364701eb60ac40f287953ed5c0dedb468fbd00000000a6d4cf4293d27b6dea295c0f3c3b0dc1de8fcf8dd2d081c7ebec2b37f2f41ed4d3e69d49ffff001d1541f8c3","01000000b4e208db358b22dd9d4cf1b409a99a8457491e6d120d47671d192199000000001f9ad392360a88510e3e0c65031d3a73cd440b5bd5723c83c8ae680d2581ef42cde89d49ffff001d24de459b","010000003a01ca4f58ff6f725dc86ffd938037f7dbff1e45069fc9cc4a87179400000000db141e92e89bbfdc60d58a7d04637906d47ad8664ca71ab465240e6ad04f886bc6ea9d49ffff001d21c3e507","01000000bdfab5e5a5e8be78f810e052664445d221fcfab1460a04a554a7445800000000c86ff24aae82d80366930756c864d161b88a7d91ea5a93390028cfca1d5653fe0aec9d49ffff001d0049462d","0100000082a1774c718543fb65c95dab9e70ab077e95825ebd865d13573ddcf80000000094da7468fe64540e58ea62f4b8cd03e8ec24d97ec0938f4f47db183fe906f5924bf09d49ffff001d331c781d","01000000de5d5080aa77a07d3f8529fe2fc6afc97ed6da39651c14ad073f60c200000000843882bdc89697f0815b07739a1afd07035b36452f1d84be57d29f63fc402bf422f39d49ffff001d0043b386","01000000b3836b53fb4bba125dd550f07d1799f70e1527035ef7c288ee179a0c000000002a7166545d0fefb34f6762679274141e955e6a08b7a6cc389f0a8872f129578a34f79d49ffff001d15ae7d60","010000000a8768703dadfe777066bceebca4b5893f64fa8ecf8e4ca72a850a7800000000101e972dc955ddb4768bff11991796332af3d2b2fa83c7c9c85d7dee278f09d4d2fc9d49ffff001d2efdc963","0100000090fce0591f105348338bd21796e1b1ca1a565bbf049b735bda43faa0000000000cab34519f5e3c6d37a1d02abec34573239064d19f50d7b82e181bb35b0de1f0a4fd9d49ffff001d8aaa0502","010000007ac7865f56a821c4846ae19cb9eb94ca59c001e95e5963ca250f6b69000000002101c0fec4d36e6a5b481d107c61d5b0057b04aaea65c23c3c62c66226eb94b771ff9d49ffff001d19c90ac6","0100000064e5ee5437f791404c3d7d8caeb0709d2a3ec89003c8308652791e6400000000d76c5a9cb67aab80d535147d42175a71ea1fc5cd34b19e722f5ea2df9f5f8df54e039e49ffff001d34edb60f","01000000dc74b3a75749ccbd0052def523a2a7d7e5413907685c33f9bd4d356c00000000af79ad37eddec07c9e06606de771e5b25f39cb9332ec60d6fe079b08fa90aad5cc039e49ffff001d226965ea","01000000a08777b51f553c5a4423375900537f25ed8e182cd1c26f6716f6e9e30000000046e19865ea1b2b6d33103831005734755a89e7b1e13b0f9b0947df65978b84bc86089e49ffff001d2ed31f61","0100000086dc7e126b925729ab1f426c58fc99ace510a0049c1cf8be532fefb600000000770a54fad862cd4b46ee9362f3fe0b31398f71c779285dd251296cd565727ac4b4099e49ffff001de41fde02","01000000228d702c6d052cc105326d9a6f55289f748533b798b81c63ab951ee7000000007a634236f7f87d34d62cf98479ccb53be0e035885b366298a416f4afabe1517ace0b9e49ffff001d1abb39ae","01000000679d50d3a0897b1fe72c4c6dc2747fb9fce783327e4249a52d4e2ce6000000007960d75ebfedd44616e65c17698001eceb2482fc99782b822d17ef606d013fbc2e0e9e49ffff001d240ae8ce","01000000c3f553107180c5b7829951b170a5979c9fb41e1a6e52dafb8e4839ff000000001d73d34d59cd5de04eea2049c40c53012c5671718490624108e5c3a1c36829a19e0f9e49ffff001d234a062e","010000006cd76a4852a93892950a811f81eac01aecbc0c202d7529db54edc934000000009aa9cc549ccffa17131edaaa8c8f8b8cadd902905e28f20919447781a1928b3559149e49ffff001d049779d9","01000000ca51ad9149027cf8b6118d964a1596860a5442ad47f9d6874fa7c6aa0000000083338b458cf64e7169d77f951cc3b4de30896ada27e29482d8c050dc552840c548179e49ffff001d2a5bef1e","010000009b84035cc471dd55428fa0427601a3d1c72bc8b9a7ba368011b936af00000000e2c9a851184d3da84f637f6abf2d074540fe26ca06031d2ef4b54861c9e4fc7ec6189e49ffff001d3aa3bd03","01000000a90d234619b825d369c467d8f3dc8d1bb80897a5c49769bc0a14bfeb000000005bdeef46ed20839f9c49fd3c9b45318683588e12b7085b33e7899194ff950c88831a9e49ffff001d34cd655d","01000000b7fbca87766addf9ba3cf6ea63e2a18dd5017032d4e4325cefec783000000000bfe50b29633881a3d7e350547b41149e41215b3694c7602027cf1124093625f3f81d9e49ffff001d26aa14b9","01000000e436ed3c67a73ff04a214b355f6549ed7ba7fb9c63c9b97c20255d1f000000009ba37d0ee6f4b879fab9f625a966343cea5d021126af2d5f4b93cfc87a381753eb219e49ffff001d2bddf1ca","010000002ee2312663feebdfc0875f2eacfd45da5128aa3be71d1a764224b6ca000000004ecf5e8672359e73d3b019eb77ca8530ed3d37d56eb43559f0178fa7c1733ddf48229e49ffff001d41035901","01000000a9ae993f0a0a53aa8d22886512583d97e0eb1bd625bbb6a793222a9f00000000cc02857b04bf83a236cda948ede962c681e4f2700e4adda52324035b2ba507d174269e49ffff001d32f6320a","01000000923a8ce63c03eaf3e64f81fb19c5182aa01a88356e1baba5e0dcac4300000000672647346f52f49e815ac78b88680924c8269fae3ffcbfbc0609ce4146642fa5062b9e49ffff001d1c38b219","01000000dc5b60a78bad7e78ba0a6246b5e3a9bdd1cde3a0ec73a8b2559ac8c900000000d45dd0dcf3db865e5872219dbf3d891706b62e7e4af66a2fdc2d7fd63a95cfb1782f9e49ffff001d366b0cac","01000000357668e37123090f3ec608e964f52c80e2afc935fef6ff57611dda7300000000714f3e780c0171925e2c5102de2a7b21140033e4281809f0cc9c3cc10315925d1b329e49ffff001d07623b47","01000000a8b61c42a07a0f4c3e1bc781e11d0a6d86b54d8809265ff1f3babea500000000ac6bd507e308e8d16a038124e46cd03887aeba9f61260f36872c5018a13a88d8a6329e49ffff001d56b80902","010000009f0327c5e507df6243d7bab977f16f7a9367e63d23899c1e4aeec6f90000000096c664eedcca7daa04f8d239c17ae37bcd1e6a21d2ed067aca91c20e0c847919fc339e49ffff001d2ce8ec90","01000000c387af919afac0a38c7821b2362b2710d4a100e57dadeb4d2226521d000000009d95167da2a5666163a1908188d67d6e88c52ea575b0d4a35ec0cc35e312ef6886399e49ffff001d6b250e0e","01000000f8092ca21f76f42b33dc4ba9ee394037266939de96c0d28e89a1c76c00000000fdf2a13a08d78fed8d04f7ded7c3737b2ad9e111db53fc0c094ce9de0557f68b023a9e49ffff001d276b305e","01000000c306ff8fd84d28ee50f750de9b1cd0251ff4bf73f0380f659ec73273000000007e6454a9382d0367f7cf4b3c59b941c07119ea965be94e260e72d63aae2e37350d3e9e49ffff001d331d8cca","01000000e7067bdcf78984bad96be1035a28684ea3a60b8d456911c6bf4194b900000000948c842e2fbddc49d2ede50b4142140c271e6447bf8b98ba4316941f30345f0ca8409e49ffff001d90d4090c","01000000921ed2e841b9229675fe3ec0092db5521944e5404f44e622876ca25800000000c0ea30c4b3baf3bc0bc40cb0596389271e08cc690bcb9ae41cd92e079205b7a607429e49ffff001d36fca2ea","010000005ae44393cac6635546925141f9482f4bfef2a7234a464693410aa97e000000004a9d46197a38c589800c956707323ad23c7d051048fce2fbfbea8b37268b6d9537489e49ffff001d2ec7661a","01000000e636b40a8f114796f4f676e45c907ada4da69fbd44016e8f8bd302c300000000876e7433b45e37ae832ba24941c6e85511c1149e691d14a3cf64977ccfcb4a28be4c9e49ffff001d34eabe1c","010000002fa811a6cae1ea64a69ab0437e2679c6a5a8ccc54c2111d69bc5d8ab00000000cce30b83e8613d86952abac58ecd824533f4decdf74b2a1f5e5c0c3339d2ea2f824e9e49ffff001d49788808","010000007a4738313f8af1884af8a74daa738578527f7eeb5773d1d78fad334300000000ebcb2aa8d8b40269747fe35bfa095a12fda809cef7e5c97a67d3fe0bab82f0999a4f9e49ffff001d04c3fa15","010000004672cf9526c2ce15432b6044e48e3ada0bd1194269fa96995e18bf2a00000000a87a6fd33bc7d630c72a208313ea796720bbd79a1b8e53985f52771d7548f9e621519e49ffff001d08795507","01000000c8953632f24c7e2b4b0d35fa31412f14a970565935ab719285b78b7300000000183359f87a56bd37f182f3c792ccd3ccefe17141ead01c68f2deaaac8d24e34d16539e49ffff001d1af5e9b2","0100000061bd0142b5e0fdd8972b150529e2409c35a9f18cf467881e999bcf050000000068d52c6cd799c65013cb764aa6896dd11d3358c2f18fccb910346277abe6fac115589e49ffff001d13fa9e17","0100000070acc839d29667a3fe7223438a695024bc6445a523d6e3a8d7a74cd500000000728d8c0dcd3ba2eb797eaaacdb686c6e22e2933bd15ae7989a01e482c1dfe405ed589e49ffff001d0822564e","010000006b684acc4fcc5747cdfcc3c7d7c730364a3801607bc69e9f0fc9671800000000904153bf7f50d25c5c37e2dd37d0a12b92f9b4bcb5a85368fa2497b89b0d6f85c45b9e49ffff001d2910843e","010000002cba11cca7170e1da742fcfb83d15c091bac17a79c089e944dda904a00000000b7404d6a9c451a9f527a7fbeb54839c2bca2eac7b138cdd700be19d733efa0fc82609e49ffff001df6633903","010000006109a97ed3f56ea9baef763fd47c58466b3e9fc8d6d2a5950a446a4f00000000401a8516efae3ed86edfc733a1c151d0430891b0fcef63646f69ae1170e6b91ce3609e49ffff001d37442d99","01000000ddc66d63545ba54fc9e31254decf222ab0f6c37dd1103da144d6c6d600000000f200c560b70cb6b2777abb7c36bee28aa9e9893780e8066455f962783fbbc17a08649e49ffff001d02d074ea","010000005b3fcb9898e98ff2e726b7c2218dba492de96730de26af4176ba24740000000023a90da5ea4e8bf3c5d9508d07bb6c361e4352474639095be037a4a3acb19317e3689e49ffff001d2d5de426","0100000052839feb23f5b6566458870df8a0ad084bbbfe767d784bf2dab99995000000007e4c64a8ff37dbdc9af6b6281971ff4bfe68e1ce8158d2fdcde2cb85a5d2c1a2606d9e49ffff001d640b2215","01000000bdc853af79d3210a72ac79c3d87b46e3363e6589d8642a136a8ad7f000000000daaabd7874ce4365700c285465b59743ff68924aadba0cdfad047e0bbcee641c666d9e49ffff001d1a19e152","01000000c59a9ef255980e59d19f5322ff6f8cfa1bfa2cb829e8b7fc630b2b26000000007a36df3c86b5b53f7bc5144aec37ba5743953d99a4b82884655c8ce81c1523c3e06f9e49ffff001d1a36a7c2","010000004cb50e7f916fb7a9b3c1316664200706be2ab9ce96b40a04a1206a330000000039fb352f246ad36249cdda242c9ee329486e02547b81f1f5fd904d94265d69624f759e49ffff001d1b8d97d6","0100000073cc68d97d862b5aa08da6f2734ddd7344cd65f0f72a986e4bb229910000000034bf84d3505bf1da38c64796ef8a7eafd1c1edab05fd9fd367ff3a7456e886b368789e49ffff001d05fbe62f","01000000eb5d3ca42a4618e87df776c71ac9a45c4bce0cef5224d4932ce0e3b800000000c375a2118e941895cb3cdfe96bbf4b19ecbadd74d9911e0d21ac746a792927522b7a9e49ffff001d601c7f08","01000000288bf85f04f6e0757ccb6126c50a70dc415ce38bdab366e1529a89a400000000042c4a310707c1ea98588c9e6a0c628d4d22bf5a8afeece0125abdaa747de703fd7d9e49ffff001d0529ded9","010000008f210df96b2a65c38de397fe15e6fec03d5151a0bc9cd419f793dbd900000000f56603400e3535dbb1b2523d3569b311b165e0ccdd760417470177d62ec3c6aa717e9e49ffff001d4075cc01","010000002c3f91fe479a887d3b78d50f8c9095fb7a2421c70360b19b19fce2d300000000de8993291497c312cb0fd23dfe01bcec9cc20b27769a3c5908d9a83de78225b6d1839e49ffff001d088a74c8","0100000086dc031a847dc79c36b9426a42816685edf4878d4f38d2519a8b3a0c00000000486086f51230e44be8edcb47d665bc4b70305fb47e990ceca7eeed6d618ee1c8e3869e49ffff001d41bf500e","010000007c75b9bc487af29eae21b0f4bbced3924b86df8c2dd485072dbda3b9000000004020c7b56d46af42240da096f3728c00fd8724dfb69104bdd92bd84c39011fadac889e49ffff001d2d71face","010000000a7ff87b6b76b3cc639690ae4dd4efa1f79534cd60e2e0089b071245000000004ef29fbf7039f3bdc37a9792eba4a093af36d0005d59e1d37c3c824fe286b2de2b8b9e49ffff001d027786ef","010000002324be987f4bd6a827d73dfd87d47a78bb00fddd3ac652ce087d8b4a00000000adc326959de7ee931f87b2522618f17ae0dbc209609a568343cf118e658a1e8a3e909e49ffff001d1d0e7110","010000009e07e838102e3be1c52df465a83415257eee19846dff47d00b93b52100000000699865d1004e0895b9f41e2ae2bed463f054acc0294bbcbe150d112bac7233754f949e49ffff001d3923c855","0100000073d9c1a2671201ea6a2c3d3fd97e11fba62a527f0cc8a93e52d0612b00000000d9af14500f6b32977d169652f4d43edbed8e636398d54468eb59fb4df1ecad9360969e49ffff001d34d56a09","01000000cb891532a3e9a0fd7792f5c9786c3a31e537151a7b367e565f01c96e000000005187d19129b2a55a2bd7e7c2b1ad75cee2d49b45eb19cf65636b1c922e671b268e979e49ffff001d2888cd92","010000009a836454b6c903b97440b6e50e7f5c1a5b2101204b0d04d433122f8400000000a4dbdbd586c18690f569f5067a47632c455ce6083eff51af5a8c586d09ec33d772989e49ffff001db8487e03","01000000cf533f7da468dc84b01fb3640e5301a323b60e3767e52da0d7fc2b9b000000001f489b62232de80aaf03bc049eb614e8d0952829acbc51056be9b3183180393a42999e49ffff001d23b43326","01000000d09ebcc16f8dd15e63baa57416ea89785961798eafdebd3f78043da9000000000c0255d0919b87dbe4281df947d092c4c65afb1bee8c58d2a50c37f8a516cbe5279b9e49ffff001d007e6d36","010000004b3774458f76f632a9b6b196416b7ba59224fdccf1e5114877e0a87c00000000e38c0adc91f1bbbe6fc2ac0666186ba7e31cf90ef51f7507edab53da8374b30c399b9e49ffff001d112f1e00","0100000020809e53fb40bfc309060b65a61915438213a7f6923a0bfc938a7b5e00000000486a8ad671710d23962edc7a567b19981fbcc4bf9441fe0e0dce471689bf4246c09d9e49ffff001d2ecc7f41","0100000040eb019191a99f1f3ef5e04606314d80a635e214ca3347388259ad4000000000f61fefef8ee758b273ee64e1bf5c07485dd74cd065a5ce0d59827e0700cad0d98c9f9e49ffff001d20a92f01","010000009d5982561738a5426ee83d0e810c3328b539f287f60fd3e1533241fa00000000c32a5502456399448c1f2499ad7841844c12012305d67b505f6ae5b2113d02f885a09e49ffff001dc589de03","01000000a0a46c97eed74ca5e78d9a7bef15d4fdf75a84d2eb3f931c38d2da6d0000000004709671ff81e6bb2fef8e6fdfd7ddcdbffc49c51e1249b85916344c3bb881f225a19e49ffff001d36736ca1","0100000018a888a7b66f363d693dc327389b1f1e44ceda5d93da220d329aec390000000063f7e34fc65cf0991004554401ca4ea21467736000e994b765af6139974bceaed9a19e49ffff001d83729401","010000004d9eb019f352e41f606bb459175190067ca8b31ebd74718ef3131a0d00000000555ec907c2b036ae9cca6b3fdd6c7770fb9820907735c43e62398b8ec2e464e1d1a29e49ffff001deb301504","01000000d23abd57f2a40428f0872bd4ff6d7667be445c9641ba5820460ace7d000000009e2e7c446da23e010910c5bcc3cdcbdb088517c7360167db83dbde4b31aa128f8ca69e49ffff001d3813cae9","0100000077d01c575b0b6712a1d2964f78d5cb34cc507e3a330399784f8c086700000000dc41b625e6e688683d9ae203c96de8cf15aa9e18525cbef5bec9bd882ff5a68600a89e49ffff001d2cb2b54e","01000000cd8a23702e87cc6747160f2a45d40b2d30e9ca3c4f3a32e770cea27600000000aa581d691d0facdac6018821f3dd013b77fbb5666e5464f564308649fb310c6a7ea89e49ffff001d23614602","01000000b198fa0de65d7ef10962bd3e08e7376bed88726c312ec6e7c47baf9700000000a536e81a92fe2b5a1dc953967ac0eb99d0af24d380d36fd0a47191c6e95ca1a2cba99e49ffff001d915f5202","010000005806beab9baf405f978d03deb3eae6553303103eb006bf8fa11ea6c9000000006a4b133ed2b4513e52036dafd2ecf85e61f7a92b7a15d87bd037177e9285e5b097ad9e49ffff001d354a95d6","01000000f9ee26e2577d65807e1fb5d2eb0b696812724da2201d3aa9a8d2784d00000000bdb1651f4946d5dcd06685334b1280a214f0ab3af8d0dca56b9a2a29a9bb75096bb09e49ffff001d3a509f98","01000000ecc3f0ba7a3d7ffd051a34512259186f52ee885a6fa7d78f65cd4b280000000032d1d8946549bbaabdfe4b5e14584d6de3836df9d5bf259d0b9fbd78a4f9aea089b59e49ffff001d1e539e4e","010000008c0cac6b6ad3ec27232c91fddcdbc0183a59129fa9e18d90073bc95800000000e5fc7f400b1f7d3b9b36141b7fb2912264b665399f237009f435754a5afb0817cfb89e49ffff001d34c0e51e","010000003245920c6e06fae1d30295d1af409c6e3300b55d61439e2de15a364a0000000072867c7a7d8b03d371d04c11aa0e1c224a5f570e61497f569c9b03ffddd65b8720bd9e49ffff001d3018ccb4","01000000016f478797fdf16336a6e19d322fca1c542e6a3758d71bbb57182e420000000031fd287b90a403e77061132b24193f5d673acc36820fdc182ffdc5ab483fcd23b2c09e49ffff001d9bad700e","01000000b7cb8522b5c678984fa1d137941cd694937f036ac8dc3b7570ffe1d800000000aa45c4d9be55c6b4911cad270bef04a01f053f625368a9e7e9ddf7d515176f116ac29e49ffff001d015665d6","0100000038740801d5a3b28a37649b4fc565facdb026da1518b862569e624594000000009d62f20cfec994f0813af29a0a16d4c23b2d1cd9ecbd57bcd77cc62b6df015f288c29e49ffff001d9e351b00","0100000023e8c8a1ae14b1d0342dc81f459431e04c67b5347ed2ca4d742c2e2d00000000c68e6fb9646af058d22ba4cc0399719aa1adf9cd7838917431a0c23861915d258cc39e49ffff001d930d2704","010000009fac5e5c59a857a714c3009823cecadca56e149482aa44a387dbd4b3000000002b4561f8ef4e11b909190b3ed238b3219c8e3946d98d9451798c3f5f3b56f9e108c59e49ffff001d169767fe","01000000a9b1c6d1770d63ee83ca3a585d0ce8abf7ae7a9f0db808a1d1b502db000000005b3f40be48c3a62f8fc2bf6ed4330701cfc31fa3ded5fefd46625a13efaae767d2c69e49ffff001d2490ea15","01000000902ce4a10b83ed342a97781ffa68de53fd00dc3563b3d2d6f1278970000000009c5971dfe405196464ac1a8965ce51a9158c21649e419932d69284f1806a832c72c99e49ffff001d38f4d007","01000000bb3ff6ec75233000e1c2e3dbd9dd37bb8ab29a842213378ef2e035c500000000c30aae184bc2cf9731c6e31f867de66f49e6a65dcd4b270b8f526862ddb071f72fce9e49ffff001d33cfeccb","0100000050220c8edc4eab25446b7f692fd2b8fa9f103972dc772b64756b68cc000000004ad2a57c75b5eb5161b141c8b92bfdb49ba69eaa6fc3466395afb6e55f93fc0025d09e49ffff001de6fb6d09","01000000c30693f5a31a928453e8128bfa26b4329f1bdfe1c9dec3f4d427b48200000000abeb85308c74fe94f1c754ed40c4118bdf510f478c26e815914dc5a550388814bed29e49ffff001d357a6b75","01000000dc9baedcd34f024e492ee5ae51ac02fd0f2a64b24584b41d29ed9d290000000084cc3062354bdbaafea8a0dfebad0790d37eedef8272d4c4765917dd23c4f32e79d69e49ffff001df4f03006","01000000febc1105b24e084036faba38d23ffdbdac46aad6f808bfd6ad232f33000000005755e505bd1cc41bd7b3d84c4bfb6406d802a66d78f16949294bbc7f45df44371ad89e49ffff001d17989223","01000000c369f32a97ed6a29d751df9992dc664e0ab9b2cba9924a69d708efdc00000000b6b30cabcf5ebfde9efa6d44d32f09d715c01d55d2c7aaccff192ddf0ca6883b4ddd9e49ffff001d1df9303b","0100000002428535c2a644ca09f2d45e27b763242155f924f7225c7b1dc26e90000000006b06389179f68b875e2c2bc075ae92a13417c587cbe25ad677dc962df94aa0d11ae09e49ffff001d2b2a2ce1","010000004ed7f74558c81f02d03b58439bf5be4f1f64cfcb69f0e4b4cc1746f8000000002523ccab90c4258849d492ceb9f7a6cdbe16a7135f440352ac0d49ed43e968c76ce19e49ffff001dd5c02406","010000006669da59bfc40b3ff5ec52c1ff248ab6ea6649c51cb246275cddc6d1000000002281699a4d8c23579a1f3162a7cc7bc6fcab4148d0ab53c3b3bf61d8f1eef10934e69e49ffff001d33c996d4","0100000076dd6f4ea0094c0f438937b0c0b82b01315e3d6e7f5d673e0d41ddc800000000fabf6b6b041bb9e2285d5ce831595ee70deb0e59569f16bcb886c08120d7fc2bd9e89e49ffff001d2b62cf74","01000000b359e75571f17150be6dfc1b972860d2b9bd8d50576fa18ef307dc020000000031773f773865567d5f17a2d4691f38a8b38c9c5f02dd9c0716792dd4bc64163702ec9e49ffff001d24dd2362","0100000023f6efdbc7ef87641606fddafc716463af66cdca10dc25098d5cec78000000000369082618bf0cc9e4b9dc180800a0e5055f568b5a25d71ecfb25084a7ee52f8ecef9e49ffff001d2d261b78","010000008f0a0be2ca4f1f45bb6d73798fb5b9547f0c8c292f0452d0973df2bd000000007b17083bf4d430b84bab56efb9301ab090cae0fe96beb632e628e3b9623b54f35bf49e49ffff001d1fa62700","01000000bd34e621f4378ee2edcc4d0711e3f370c246dd6fc9b9b422a1109dbf00000000302407291afa921116bf93cc9447b4d279dcd5e9115f4b11facb73c82b9f7f885df79e49ffff001d05cfc91d","01000000f145ca7c674a1a5ce4f290fd281e3d4f4e41d2755a1bdfbffcb112f3000000000c8ee53466804b8a3aa0259c221dacb75413b73e8ea6bb80fe91d146d2100b27a2fb9e49ffff001d32fc4bb6","010000008491f71366fd784bb4c56afcf781496210999b1c67c0694a442a51c400000000b73af3203d00cf97dc7e6b4db39f6d1d457e246d82c4641a618893095a7fe356fc009f49ffff001d380af1b4","01000000dd1c24da5d780a655eff8b1392542b839a46a6aa41d378b642294ecd0000000023e5607f821da56809176366ee42969a24e134f468aa23ec43a1287548ac0b02a6069f49ffff001d19d505e3","010000007c90194670d75d5d141a91e94d56aff01d5b90f7490786e9266cdc1a000000001a2971c79fd24f8b00ad92524761d3ede78b37b447e635ff48b2038eb3e40ffcce089f49ffff001d2ea8e421","010000002727d81a0841b59b959a7965e1dea7b031f1a51971b1a468c29a73f3000000005a0e36ae5f873ec02be3ade6260d65fa4c469749e7268175268e7d2052d6dfbf55099f49ffff001d23712502","0100000017c36d25590011653f3609a024728176e901fac21ded6ed6a133b1d300000000c4c8189599d7201496d5bad9903b0bacbc21155932965e7fbb204659cb885f9c8b0b9f49ffff001d3407598a","010000003173adfb17bf7f091996f23892cd834d52e44fc20b2c7babc60f512000000000811fb1d45a97c524f8dda852f74f8caa4cd72c696a35971a398dda7f04a4c3c50a119f49ffff001d06c42b65","01000000d0eb15ea9633e35c6d9aa90b97eec5974de75fc19cf660ea6b17f95f000000006a311fc622d1b16979beceb0c7cd920778d4575b86031989d650dafb95c16ed00f149f49ffff001d08ee9d5f","01000000ea9e193c2073a67bbce40eff7412c288eb89cb39e863b89252d0f515000000009e3b503634ae44740f2d1476fc3f0fd2dc61e53fff3c11db8a7d21093dd89a75e3179f49ffff001d0013d311","010000004259269cf129ff4a82eaf5e9abc06a7bf5e4f9fada8f2e658e13851100000000241f2033317e6f2f80c6d3fe83fa88d14d1f43e224bfcf08fa72cc49002480ae61189f49ffff001db6f25b02","0100000019fba70f325d0de3a274e17fc7f2bca1518a8d972cc831fbc64daa6000000000a4143c33c5d7842e545418d44f0c83368ce965ee368bef6748372c2bebbec808ca189f49ffff001d36361bf6","0100000086998da91c9a6c44d57853309e38b6890df06fee71c737f798e0ac1200000000519cc43a7366359dadfb789ddfee65c8727e6d0d749dccceaf3bf0d251389e87741c9f49ffff001d1d010f0f","01000000ea4c4b5e589191c2d81e0fa3412b463f18b6a1b9f0ae4ad694710b0400000000cfdd03d7b7cea6574dc5de3555e912f022b8e05f56624275c7b6e759994fe84198219f49ffff001d37f89946","010000004fb0dda2f86a7d908a4b86a1e0f783ea48b2de03420d344e7afc99000000000054075b849180fdbc394e7f068410feff03ad2fc4a08e815774bf3a6ef6b1451318269f49ffff001d2826c164","01000000069084d82daaa3c14ff3c9d74309338f53085d769f5772e4a300dcb000000000de730d9859188d61aa70d3293530fb440ad2bbe13e2e2ac548f2d72b258204f683279f49ffff001d30655b6e","0100000051bc9fee90e2b88178571b3ec514ae209b7bbfa9cdd11567c315a139000000001851d68ceb1b2d0ed4341e4dcccc9e1910fce3d59372f3b1a08e6ed837183cb6f0299f49ffff001d02794997","01000000e0d043fd05de2d286a2563ad38adfb3e2b38b1a963c803b354038770000000001234e37acafb9fdfc504e41c064cd0c8642ef3e7b75a10c0163b353261a54f0be22e9f49ffff001d1eed449b","0100000004de1142df6b901e60f14879d1d0fc9118b2ba3c977e646be58e7661000000004037358d8f25ca4ce032d2441a3fa5bf3720e8c906eb608bcf53769ebd271bd130349f49ffff001d040a1c2b","01000000d88d1123c3064bca8776a80005d946ba740123815673439bc53a08a70000000081a0a885b3090a2fcd2247015f98b9c11e6fad1392d9fd9ebdbbab7c063f6f5ead359f49ffff001d1f54ac3a","010000007dfc1fa556def00747ce981a70bd9b858eab18fa502d8f824cabe8230000000085751f9418a9118cfeadd1ffded494c0ad53acf9bc2900e9a808811ba0b43c04cf3a9f49ffff001d37f5a9c6","0100000084b21e43a424ea53f02192bb5b390819ad98f8f998d64c5dff5e005200000000566a238ba22968b14c04be38e89efbe02ac0e2ee5e4d5f9186095e6bb32dd7eed53c9f49ffff001d086aae09","01000000d6d2c539ecab30056339244897540810cd50d41fec76567f2ad2655200000000a7e5355152cd9c66dce50f1a450c376090910bacdabd6df6a1b1238d0a6afd5152419f49ffff001d38980146","01000000897e21ed8d2216a9a29ce185253556f7b91de9e7afd6e8db7f8436bb0000000079690fe3404e09ff65085332a6226000b24c04bcb8d2b5f27c7d60178ceb3c21f9429f49ffff001d2c99d073","01000000b6ca10ad93d2bb017d0f8bde3e29df9ec5073148a2762ba7cc37869e0000000033b1029a8e3b05e9c51a803d2526098f1df71ff314667a071e9bd277181182d6db459f49ffff001d1f15eacb","010000007ce3a976d756b02d2efab85aa4c0a94384932abc0ffe5c8aedf1e5ce00000000c3171dd8201f249b0b4d84c783b81291642a00a444bb6f727b56ea2f5651480a47479f49ffff001d1c262287","01000000251c9a81779e89de2623fc50c09f54d7264f36c7a685e809fe309b0500000000bc7b74da7b049014687f5a06c5c9cbebe9348b7e10e2b81ad3b63d149d148310714c9f49ffff001d15e8a017","01000000520d3ffb34821048ee57f1df7d4732281d99ddaf5a099090a0bab0a20000000088d59c15d11709c9a4dd47f792caa9c8f18189e505ae5e319e8f68a62889a6c439519f49ffff001d06fb2d21","01000000aec6b6dd6b47b9ba5b14b24d652239562a4b78c4507627e9ad2497f300000000f6e02f4bd3ec68dc1ab981fb319845ad64a3b5593a16179def2063a668701da84a579f49ffff001d3474fb1f","01000000491622e364781fdbd03a1a8b54a3378fa9ffa5353664cae750693958000000005a6b87ec9c1063df29e2cfe8f98ad9f162a2a1d4e9e79ab762cff675e54f40ac71599f49ffff001d2065f4bb","010000004d0e07ad3341634d95e38724797c395ae377a2852800f933c6a7443c000000003739e0f0e766cf24376d81659344efc8e40f2c1227f233c85faad3d7644598e3d95c9f49ffff001d27006e55","010000003ff8011099b2581bd2d0510b228424348601ad176ec4b4ed42b42d29000000009947588bb44df13c7b05a017dbfaa7618e2c4756adfa913cdea2dfc9681f2d1c87619f49ffff001d36996d29","01000000a2ae3e6483ccdc1cca2b8e57b8268dbd0e0574361cceb304ff2f664e000000001bdc19753767a4ffe2cd495c7a223c0c4bdd9f2bd333a42bfcd2292d4b26d09d5e649f49ffff001d2c516442","01000000c66ca9ff262bef5fce64dc7dcbe366536544e481d7edd29d4e6093fe00000000d8c06c9816f0085b1c40300dd7264168710f2fdac1201e9d2c971edfe6946e7d48679f49ffff001d49d97307","01000000aea8996fe769bd5b01990645d6a88ae04721c450a3cf2b402e51a1b300000000dfc49ace39afb4008bbacba30e6d41f4200a1de9e888e567c8b79b93454ee69ac0679f49ffff001d21f42759","01000000babf23e6998272b5e96819cc16a98680fedd9b5d84c8bd000bcafd0400000000c5021d9c08b4ac3a169b76675513beca201916cfa14897747f039eb4224f3dcbd6699f49ffff001d192c8501","01000000c08687e9d990e92d03b6e34e8b7f1962e79b324a438e722a8c4cbf7a000000004a0d2c96755dc1ccc7cbd78735e0352cb973cd03a7077377594f2f458e723c764b6b9f49ffff001d33fdb8d4","010000002dbe68a619206a134a59644a79b3cde1f0d231cf6f7c29b248102b39000000007e09d5b72286682cadfa9ab568bd0f6686a09952da1b030bf547c2bb2c49c06aa76f9f49ffff001d04b69dc1","0100000017701a60b0f828b6fa2e645e726b8ce97b54cb48174c6dc0e874e5980000000072db98fe359b48eea530eb504b2a935c938474433fd237c2578e7b3118a5b42bc9759f49ffff001d1c7a07f6","01000000f6e304b045733f5c4d354c1e703565f7441db0fcfb422c8738d9c09600000000daf6de2fd8ed63a0f4e061c9915907c46b8c0197956cb546171cdb9ebbd19660ff799f49ffff001d1a99d319","010000008a3fcb78757d8601fe5fbfa201e3d3d2d5234dad28734e7ae989726e0000000063c37c7c53b61aa435f7863b5b7cea51405ee31cdf4232806929313f261dc10f657d9f49ffff001dbc0f6b08","010000005d87bfa1a5c1c5cf1b1adb9b4eb1468834a8a1dacb6c648661b63be7000000002cbab8504218df27ca1aa09900b6e5605e744ee921596c870388563b5b33de96ef7e9f49ffff001d2e426d1a","01000000cdcc430b9b9ac9d2b6e2ae81359c2b4cd6b2dc9372a584fc944c62db00000000b3a08a53dd64cd3c8cbb29dac5cf8aeb5f778c5d78ca1f5917ed17ba58b4d4b62a849f49ffff001d26319f0b","0100000081b2da837777e6ce6f83969d86ecbf9807a68f8be2c93ae10ec87a8f0000000090ee5d332a3ce8b82448ee1eeb0fb6cedbc628d5585fc89030e36479cfb1532567859f49ffff001d157bc080","01000000161b615c04b44939e5408968b262379b912870c32815fba81825e98b00000000cec4d98ac21f347d95f269b6cbadb63c21270a53099e108227291d32afe3af590d8a9f49ffff001d171a5bc7","01000000d26fc1a0e5521babf09f610808d28da225311079e57ca859aa454c70000000002a9e5b92378f8eaed2ab6930581a2deb4bd265cf552f7a899acc5cdc0c5418dfa68e9f49ffff001d20bb09b6","01000000d96afb3f1d2d3fd278b1e48fa25d95dec3999575a6e96cb8476cb1fa00000000966fecf211c6f7dac1b59b55508723419fc19c1cbeb1bed75dcb546033419816ac909f49ffff001d2623e15b","01000000835a567d27c1d7bb876214ddfcdcbb8e47b02db4541ed85a3dffef6200000000c00a7427c67be8e0ab63a60116a99ae3b399a5283043583f51cdce4913d8046ab6949f49ffff001dd9e30309","010000001e1c9f70b6c3c6f6d841d85612e3a3de33e54ed92f6ac163b1bb15e100000000cfa172102b38a148099d731a21774e13eb7b7d7ed8b407789c6b738287bae32edf949f49ffff001d398f0d7a","0100000000625bed338d9856217d9327edeb6ab10252fa803bdc25c38d0ad09400000000a0775b4c990911b477a5be84db5fbf086f8a020ff19f3fecc2633d27c48ccdd35f989f49ffff001d2da46e85","0100000034cc332bc9f1f591b019fd8fa853b483fadad09dabf691d1e7b637210000000002e3336bb712eb01f4bd3d56d19994b1dd54c790b509ae109d4ccff15e031c2eff9e9f49ffff001d90f78020","01000000960044872ae8babe2627621306b3d82b4d1799df3963559169fefd8000000000a497099c70f49b8a7686e295e9461f9508aacf9999f16a200554f2be4303b906a7a09f49ffff001d2804bc60","0100000042e1adf6d4c5dd5e865badbcdb8490ef88fdbb6f3fe9ab94d809d04f00000000d676f381c1b18045d8e2623db92594360893b9f68d1f4f9dab63212dc36116f79ea59f49ffff001d99e23c17","010000009d73a5c1fdae4251a5c6ac00f777d9140f290929d91825386838a893000000004ae71719a17746e94bdbb68bdc06ef3c1093209596277ec1ea8d5789379e67ed56a69f49ffff001d1490ca2c","01000000784b01897e83812f3f4760e30adf767c2d96e75b0d5cadb5fd12821300000000dbb10af084ab79da7794acfeef591ba613b595172f245f7ec2b4ebf00006ded440ab9f49ffff001d25bf2c84","01000000cac9a0796b58eb31791372840a47eea03c22544ef21804151fb24a7300000000bb4f1eb47bd24a4c57af6286e12419eba5861e4683a8bd567ee6743fb34e357448ad9f49ffff001d04704b83","010000007e94e7c967ebbc3a84de57ca9a2827c9ac067d3eeae41b67fba9a8b2000000001d95c595129f3852f0d74ebb73513004bc9abea5a799a0f7dabebfdf46c9fa5d43b29f49ffff001d305c1d6e","010000004d175cf2f2a4a83b327d11fc739d9d7ce7feea563efecd4df5d90e29000000000f046873b42047a512d815c4873ec2fec1c1b2e3abfed6fc6c312dbdf968ac52ecb69f49ffff001d21a28a8a","01000000aca2840759d1fa3cce9ae4d788cf7e864e4b637354b70c6238f59df40000000003deceb9699a5e3ddfd2a60c9d07a1229c8e1a9f13d084359f5207f57eca858cdab89f49ffff001d04e694a2","01000000ec889f0f658588b84eecd35b6a3480ae1a6736c8861f1924164a88db00000000674e44b992a0ccf2e6d0cdece63f7abe8def7564690b1403a808fe9620c89f26c4b99f49ffff001d64664004","01000000d1fe6181ed98745f5af63cd500b5df2be539e1f4133a23f1cc5329dc0000000002fb7fbdeaf8b26a2970eb4d594997c37e68b8d12ba86a2ff755825c6717b35a9ebe9f49ffff001d38c6782f","01000000523225bab9eb49c6fa4aa73b0c2874db4d719dc547abbf88827c0e1400000000aab5d4d2f0fffb469c7c0a43ad667b11d892e94ea40b526ee32bade0f17b676cfdbf9f49ffff001d256a951b","01000000830b2b8482b22a18a3a14561e715dda2dceebd2e96d51ce25c497966000000003098cf08bb177d5c1953a238df3987562d2fab0c483ea1813ce02281f96a647e3ac29f49ffff001d24e1645e","010000006f271650e44d4ddfb8dd381655a39360cf9656e3e1bf0b74360f473a00000000c64fda0c1ad3bc838feccceb4644a38281d936efcd4fe53ebcac04923206260328c79f49ffff001d23949358","01000000d293a61551448a3ecbd2b6a84f6e89e3f8606138a52962aecdec060b0000000054700d30924f6afad73dd5bb130c69c9de1125397f9c08bed2ccf36580af3b3c7fc99f49ffff001d3209e2b1","0100000080fb4fc5c2b2182937805083051c9f8febdbdb6ed4d029c13e47a86a00000000488adcb80684d5dabe3251981b5879eb253473888ea4a4bc60688a9fda4646de98cb9f49ffff001d165fd181","0100000062a3f959f71bf8bd6d50df3f9912e943ced7923b611cc7d74eb325ed000000008ed0a21ce9f5ca62168ea4415bce99f13367ccd70a37ab7a279d20b9cfb51201c9ce9f49ffff001dd3a6b30e","01000000acd8d0fb07b077c2bbf53127de1ef74602d975bf1adf24fa1eadc1e80000000029d9810d8acd98082d21d2b3a2045fd5b3d8fc63232c23001ba41eb490666c1d7dcf9f49ffff001d2c0fc1d3","01000000d795efdd97b5c776aec56a478afe0ee3cede48dcafd21815bfd4131d0000000023273fdd3c23a1f4a6b2f4457f61ba932fce950afd15edc4e23a2f8e3ab09c26d0d19f49ffff001d30a841a2","01000000406355ff77c4e64fe6e25192223f09dd43d62abd1028173bd471318200000000628dcb3ed5ac33196e105d9101b8cfad568ea523a12e805c9bee53b98a3c6d1a8ad59f49ffff001d23c665e0","0100000066f8bbdb4073681a1ffc4f969494541893d0389f61d8d5f82971900b00000000462c331e1fd122c5879738591c77f5c22b3bb172004d1b5d123a9060cfeb6cc498da9f49ffff001d1bd047cd","01000000e8da522fa288ed7df2ee25796f6d76f3d6aa04a41311643f575537c500000000e5a675cfe2aef91e1fdb57e259dbcba9cd9a736f2699bbedf07af89e05d57e2f4bde9f49ffff001d47410412","0100000059da22bd1a0bfcae573efecfc8ebd4d7235bac3989de42a9b352dc8c0000000065e5177c803c2eaaca150c5220c20b856a3048f44fc9eea2111f18d74315d5c906df9f49ffff001d2918d356","0100000040e8097a14c9adcbb52f46652ab727b85e34cf79f43fbba3e38217a300000000b4b4ee7854fc86f79a60392597a8961a558d9f47a92a9e0d809be528811bc4086ee39f49ffff001d1af17e98","01000000be8c2ff503f41468714a5160a20d8dc662d560309e2623935be776bf000000004a4150af06bc4b2408fc320e4aa02fed6a11a39c7fc48b2b5cac874b9559f91035e49f49ffff001d2b683203","010000000acf9e4113cbcd6de113e48412fa7e5700fd1604a155d4534b517cff000000006bd7974de1f889b9faf7056881569103d2b9ee160003be605004061d35e32d28f1e79f49ffff001d334163dc","01000000b4bb21edb6bc34e18ee77ad4e473a7f6b1e0eef06d77c1a2abc0806200000000383b7021a7d4d44853f136472a669ae7b0a85910efe4509ff4341cb0bc1d62bd3eec9f49ffff001d171ff107","010000003125a32bf5ccbde66e1e010f6c0f99e325e9b1dd183dbe819be3bdaa0000000063bd7c461c43836774ae6b0cbccc61594c708a205b80cd9b39274c1a6cf8c6296def9f49ffff001d1941dff7","010000006acac8fe52c044233426df406774564acab59b9bd37c774f662118ce00000000dea44756d70ae1ee0500b2680ecfe94395208371e50c4f606392b7defc438c206af59f49ffff001d24c036f3","010000001ee38e4f5a32526fecfe27b768f110d54d0ae6a04b9652f318ed04d60000000077801786537ab6acf178e548b2557c937a14b67c07cca4271fcdcfee43436d1ddef79f49ffff001d07372853","010000007ea193007ba31fe0d8a28188248aedf26a4aeaa6b148bbab03bb09ce000000002af9f0507a077e08b774f4190fdcbd7c98ec8edebc62a2713d473b07f8a0dd177afa9f49ffff001d0ad10800","01000000515e518a391417476b00eb1d90ecba7c5214b44d29e781e87ce97d7000000000f0ab5d36b68993d9ac918f9cfcfd7653eb13d89efbfde6b554733e6713078c3b26fd9f49ffff001d166369eb","010000002d295a816030ade21a1314d30bc46940a29014d9bb3784fec8aae00a00000000606f824271ad49bac4fc625555989efd593e5f076c9987a65dc832ab94085c3e8102a049ffff001d379b0900","010000002606970788218a3b18cb2384ddd9006a1ff1a3d6b30a12cab7bbbb1e00000000bcc2ee8ffbe63eaa4b8542575181c2f8b7f50543050f4543d5043c10728295c46a04a049ffff001df9050f09","010000007971bc489b720c464ef0f8be8ad7bf6980e6c69bd2e34c80f42357790000000086126c839b65000ba3aed0396cf609fb8657429bd4730fccab29b22293c65279bc04a049ffff001d1c2974a5","0100000044e2161f10761296404883ae7093b4982f7aa35162f73de1457d510c000000007f9a16a13596da73f8232fa20040387ca6e1e97b3b226e14fa36c58a28ab7ef2f505a049ffff001d2a672382","01000000cfd6c1bc95dd4e86d3eee3c5ebcc5337925fed37405dda20d906e1a5000000001bd142f835c45c78bc05086745aa4853d279555fea497eaf1d1b089468a6caf33409a049ffff001d35e121fb","01000000c4662dff1632aa926cadefeac58e13146fdcc15b1850efc6103e261500000000abf099c2cee2e4f3973a4ee7eac361f0ce4cf625ff82e805d42445af891f9069250da049ffff001ddd9c2613","01000000dcab4273bbc0701ce5bd738770a185bf4aea1feff809577f9402056400000000d622c9a9b4fbe7f72460c0f7e81d2d46f6aa47d11450e01fbf9ce36a3710be42810ea049ffff001d3634fa44","0100000010693320b4b4692c22d67b56197f8b043fab114db6edb62e52c8eba4000000006720e76f3fbda5c7c45bde29aacf48109736883c4a7e2f2e1b9342f973df4e0ce910a049ffff001d2a650e30","0100000087ae7af13903a20aaea3924263473cfe24b786ba4e0094cf02aaeec40000000070be83327fe41d5b1a0393c47b0c086433e6fd76361896ef274061dd53a17524df12a049ffff001d30e52864","01000000cd1ba463dd903953e249221750f4d34e85a1feaf378c2cda95de2c8b000000008c30bccc39b3c2ee7ef145212b7355995fa8902f2fe27f25cfa62e3e01949999bb18a049ffff001d2ab73b50","010000002e849b2aa87681a764dc0eed4de79e2696db5ddb4aeac71d9f3e6fbb00000000d16c415b9b36fcf748611ae0a4525275102438e4c1f16b4b24deaa4394c2c402371ca049ffff001d037c8637","01000000bb87b66c0ce37e13c90e8cd8294288ee00f2e7433bcb1d68c0b3ab3b00000000a6640147e9d155efdf3388174c0ced94bccc19be6321e4ffc23fc36c1aef476a3e1fa049ffff001d2d6f93a3","010000006861cb79b3915e33505545a1e20e44d95ccc90a5dd8b5153d580378000000000fcf3d93f5396c0353cd42fe853db43fc625f785bcefc73e0be2f05bc239d7899e521a049ffff001d3868000a","01000000a9ba654293ec414f533a9d52ee39dff7d5de9216c324f81efa819243000000005a06aea1d48eafd53f6c91e7e51813f63b2740233a13e2e039893ad6f622e9128925a049ffff001dde319102","01000000013e52e4dec9a771b2a2fedb06d3d7596478da274e9d0837705e6aea000000005ca086929f7311fd908dfd1381a7dfd2704eaab704284756ab9dea9701dd33ac5226a049ffff001d50b95903","010000002578f553066b45ec82ccc3fb8a35b03d9f5d149646019aa36ca2065f000000001fcff5c159eba463ed4ce7f633869b9f821266afdd3e3cb1fe1809eac8cb99ba9327a049ffff001d2d4537b3","0100000080812e4e0a0711b1347fd3840313f683181ea5ef567d103e14398834000000008528c4160e479e13680dedb28a19eb4cde9b8d58a7d14b75b3c8147096a1267be528a049ffff001d35b0008e","01000000e85221f81c39670aa70b68fea3618b04dc6c4543f52f04cd6734f97400000000184011ba3fa610b9bc7c9f1bd4df19d6abf5e33b8848b5b7b044519492ed306d1b2ba049ffff001d2ba7a0fd","010000004f2c401f9e50bd5b975db5b368ebb5b849aaa23be34792c019bb76420000000008824353bb8ba03e27af02fa7b6f19fbd3fe3bb1a9733b51f9b5669876bb20f6e92ca049ffff001d1995c73a","01000000a35bf6b9df44f2bd14e0d2ddc84c25ae513feb3cebb78356e6f3439000000000c40569d41adf85c2db6a0cfa7571fbf8ffbf2759880628d31a190c975783775dbb31a049ffff001d257745a8","010000002c8c47afdae82b2eebe0e4558190dc835ada8bf7305c32711a82d3e800000000a4b3c120fd11629cf318ae670a073a9a51ade857eb8531a06134fb985cf35b325e37a049ffff001d57cc0e18","01000000a877fadcf7609c98397547983e09bad6349cd63e3e5fea17d0175468000000008e329caa4a26140e79b9998202fc42a982c75b5f8fe86e636ab37ce52e788b807c37a049ffff001d0648f2ee","0100000056cd4d5ac3f11ef908c56d19bc0b16dfb7a92d61b857604195c5283c000000007cffbb99a7e4e75fce4ca3097d7f8fbc5f943dd8cd1a9dd7cc180ae399995bae583aa049ffff001d055f8689","01000000a57c13c192a13e550c167d794cc8151c91f45c584481ef6b6a8ae85700000000054d5788ffcd698e0362be90adc52acd20ed7f87ff84b3a22908155cc614e0ae703ba049ffff001d16a0b804","0100000094b8bc83fd9f9cd533835c3a95f29bcca4a7c3eaa72fa35d2646e6d0000000009d7cd2530d1e35530504b2ab03e558e7c6d8ba2afae4d2472cbab68ed8f70d7bf33ba049ffff001da2570e02","01000000c0905f08238bd7997b4854b32d5e35e452b12f8f6cb350dca9767d1c00000000ca76e834131330a51401ff5925fd54847442170b8f725c008048e946d500f17afc3ba049ffff001d24c20ad4","010000000aa5beb4996fb0e34244fa2af371a239faabe1776a6e7e592fc427320000000008683efbb444c3df72db688884744ae67a769c3f222dbaacfe00148e909fb4161140a049ffff001d1560b7ac","010000002aa860b001a3554b1e583d6c5154e63afc06a417cf542bd6f70654140000000046a1a8eb4e4058aabebdc0d545dc7218e76601bc5f19befc2c0d7e47e7593123f045a049ffff001d2f102964","010000006261ff6a75ccb5af13df6addac7db478ed1f508860bcaa64f7214fc700000000c1823688212535cca8e4889902f9983485af2bf932d06a843fdce4fe52478d1c5947a049ffff001d0f3c4306","0100000079084d9123f66aea111c152f7c79998a838ef09c609784f212e0eafb000000003ad1146d3aaf17d26279fa7ae3e824888d99162f56c5642bf18b7304f8f2133cdb4aa049ffff001d224255a7","010000009cf76be3e690dd8bb117e4b686322a94950b557f2a01a1cd5f0b45ec0000000006adc3a83b2c6a31e288b8a3d2d138d849a6670d69a0489cea020ca74d9b6dc6814da049ffff001d212bac45","01000000573fac305575f7ae413e377f8e65b92692e32337da75973a53d52f9d0000000004d36acb8976cce67cb4c030a85ca5eb36f88b26fc97e503866a1207e7996d756a52a049ffff001d1b2cfda7","01000000a36d738c236f6225dcebd2eebdb5552dde2c300a675782345c73d15e0000000020b60faeba9684671a73460bdf49a1cc04757b3069613ae01538735a6cf675a71454a049ffff001d28131604","0100000009de1f2b1c35460bb9476ddb5c4ea5b8be97d70ef331b39c786cf268000000007b39ecbc068cb8d9d917814350fae4e9c8f6e286fe661dc2562d56d11567794d1c58a049ffff001d1aa925ea","0100000053b53974f8d091a2bad306b4e9a26affbcbad7637a8904c899bb61af0000000045775181ebefcff4ed00d5c1d5f462166403778e8dea6013ab74738d3c909d6ec659a049ffff001d37dae738","01000000f8d5c467224751df6650b644b2f51bac26b19ad00ebf418c5bac623500000000b5219a2fc26fb0b82965daf1e95f5df8deff7aaee3bee6fae3a212b6b94f6c63775ba049ffff001d356ec34e","01000000c9a0d7dd86ff4312053712d8553bae326df93972fbd1a91bf705f42700000000161f1f273da903b297d1155ab61988cf3a5f59361359c5b7efb283400a47c8889260a049ffff001d1d2caa23","01000000ecfc1e3be90d75de4a0ef0285803b6433f056056c7e447bdc316622100000000a9137e82fe209868462f2508871ab47a66b80ba21da28620fb8b5d4908bb079dd264a049ffff001d1dd9b3ff","010000002e2c0f9ff94f299f61bd68560a984f0e7cf817cbd67fd20182e0d20a00000000d3be58aaf2d7f9fecf40de432527b3bec91540282641eca26a66642873b772508c69a049ffff001d181ff7b5","010000002a2a99c33c7f28dd38b4965f4fe4e2c8f3c83415a14d5758356030cc000000004330fcbed00ffd6642843a41bce9ca9836ce1315e6621abf9a21988d57f7be6a8f6aa049ffff001d858d2b04","0100000008ec1bd3727e4423cd1a6d36291d141676c75d8e7838d1386bf13c0800000000ad1e2b52b44a74c6c2eecea81a2f491b5986e26221a37836ef0e54f86bca1124c96ea049ffff001d35f6fe1b","0100000011c383007e418d15a971783612474b7deaa9e6359fbe56f499aabce800000000da2d2fd035f99ad6da6a21a780c5140e25d9a43c2c4bc69427055ac45a08d0e22172a049ffff001d291ef805","01000000e834390d1a1289164dcd34a59baebae9b0dc4fa48be8b1b0d4cd139700000000db3a3fb08837c8f1463dbc50bff90a0f589bc01603c6856bb92a7bd0f929ea949975a049ffff001df51b2910","01000000dcd8c8acea03e9bd2ed07a227a9d0b86045d94fd4e4a86685bab0d6d00000000676c97e41731495472825c9b57b07bb37d902ee318a863a966d553b3202fc2fc9378a049ffff001d00751945","0100000041bf02215961640e0ad7040bc6c63edb55be2a244688b18032dd59d3000000003bd89ba18267b6c5773e732807d94aa1e9c6ec04a3d6e821cd1ec7c7fd5e4e22ca7ba049ffff001d1518b658","01000000ed911a042945fb72f9159e1f5648b3d4a1c5dfb2406091b92f8f98c400000000bafa0d6157c7b9ccd26add5312eddbed67d8e68111499c72b9842d25e36abcfcc47ca049ffff001d54470804","01000000a3ccc34389dda5da34ec2083e1a2acccfee1dcb8a573c4e31897857100000000093b577b9ba0e83787fc87f41f5f9bb3db057bb33271d16aab972bb768247f73877ea049ffff001d04932fb7","01000000dc4009d6ddcfd98ffa1dfb166afc2c6830a7729d782cf3b7aed34e48000000003a1544a41ff6fe62ea6c03b1c97a7ebb7a70d283780e4ccc17f4dd38c0b372327e81a049ffff001d36fd47b4","01000000b939104c0db76782fa1292bdb450c8125f732a2d33fc07af6c89efb400000000029cc774e1cad2178d8e3ec4ec60390ecec237bab0ce3a74bd1f04a610491bbc9a84a049ffff001d5691120f","0100000067d9babe3f395ce40a539b8ad9e30fe66637edc461099d41d5b909eb000000008c0db2b954e921c598c82621d20fd01f163d1468f1786f6a9773e26a725af776ee85a049ffff001d2cfc43fc","01000000d33adb9494c65fb35d3462fc65ecc4fa7b2192f0710ee561191f416b000000003e0fa19038b2e2ed69eb7be8aef45c503e0976089cef4e2ba6beb3489cef141fec8aa049ffff001d16a43890","01000000774f8d53548fae51c344eb932da5cf168449658e692bc5fe1198bbf100000000d086beb144c8b41bfdf6284a31f9f31df04058d76dd28ed3152b33370e3ffcd10f8da049ffff001d28e628c8","0100000073c5318c58db42d66e2073530481bf2372a7dfbc3b144bc96250861900000000d56008704a5a366916abf97df6ed92c4044345744d055e4ab3d5d202a524d270478ea049ffff001d2385207d","010000004caabaad3f71c9d303520beca4ec2215fabef56cd58cd3ebdf76b30100000000ce423243bf378cfe1c9079f5989ce202d83b8994ff54e3ac48dfb95a2d0c106e9e8fa049ffff001dc624ed05","0100000092a4603184f5cf5dc51ece60909522bd4eac596cb6516dcfdccbe8c600000000d625091e3253eb69b45103af748ce2d328db6ca1a82454ac7de7f5ce8c7f20f71290a049ffff001d1fbcfc87","0100000075f1826255ce3054ff6024c4199b815b9d870b379f601ee8a89ce59d000000000c0b0ae1ba33dc48df5fc76416a8886e2b4c49bc1365e0aae08c48b9f4b6998c2594a049ffff001d0970848b","0100000080b75032ddaaa94b8f484a33d45081251bb2a5562b71617f3ed0b78e00000000f84387ab1f95d976348781cb6cc0a4950504606b80a6b7b2d9568aff342a6d32af96a049ffff001d29d41876","01000000102f9060540769959e12f62e9f6d6d5ee10b62afbd4f367d0bc0c13d000000003dd312a2de79fa82e5030ff56421cca415f9fd22cff7ec055519c1ffcaa7b5b2d398a049ffff001d291fd18e","010000008834f1a40b4acbdbcfee84435481f55d731bda83668a2009cd4723a6000000004fa95445d90dbb07a1198172fa0503e4a2b544c645b68afbe647e6b9c013e57c369ba049ffff001d2e97e972","01000000500b297cacb9cf30a214381a5e517830281ee668b4ebf2ca78d55867000000007d42a215351e2756aaf3467362d37d9412f01106620532cad4eb7afbe4379f32689ca049ffff001d4a26a105","0100000053051877e51334a5488377d5922bf4c0dd4f8e43ae1f6f70329603df0000000002a6c2581b47c38ae9944b26baf329f6ca43e7e496f2f1a6c9f047faafc7168e689fa049ffff001d275569b6","01000000606003b9dbaa2196a66326e6666afa1ea55e0a16cb130143be8057fc00000000ee3661af323bf201a3e2a15f7da6c3e208a90185c26cb9e5782038556772d5ef53a2a049ffff001d1e64b604","01000000b65ff8819e91afc94f1830f2c7867817b9c1dc756f04e41ba2291d42000000004823b5217088b94b31df644ad25687545fe60b06638a0019c3daa4a9f2f19c69f0a2a049ffff001da064b902","010000009f11e110824dad738f2fb341fb8ccef4768506ce61cda7007e6a545200000000c7785e8726da6a56f987fba769feb19ddb109cb053eeb5170900b782a83fb1de51ada049ffff001d23a88331","01000000ae28335dfb45f7d1c03d375b858872e47b1faea7e50f853e74f1dd6400000000925150b8bcab3867f3a8224f8e52ad888d8d67d04734f1552001856b7cd3c99cc5ada049ffff001d95f98702","01000000aa0f815a2de68cd0e03a0d1485260a100d57293f5addac32a1e77a0a00000000d55219a74c785c59ed2050d5766352e4ed536c27ae300e913e7cab99fc602e0c34afa049ffff001d19121107","010000007528e97e94bddf6f6113899e783352fc24cd9f6050a6e4b0c53754b60000000030c233763802c9b647ef9bbb11df440cd0169418f6d955437a5aec060702aa4b16b3a049ffff001d01ec7238","010000001c0e226fc5e52e2e16957cf6b73b888452f28522088b27584329802a0000000024d28ee03ba87835ea86e692ffcf3e7ec785268da4923f818c1e8a050eb6e46442b3a049ffff001dbee23f00","01000000b31e9315eb8a5791f8247999e704bd5e5ac000fed5fcf3b4fa85deef00000000a3389378b31df6b2a932dba31f23828f4b657c131ef5a2850268b49a6b27f7dbdbb7a049ffff001d26a2287e","01000000f7346706e2ab506548bdc0cad305d5d206d0c67e011269b9d1c781b7000000002af4b81e7390ba7bf1feec1c49606de7d61152e46a66341fd25148e53b13bee1c2bca049ffff001d99ee5e13","010000004b953cf767e53a05afbe50e8adb43345c35dd6f340c00473f0a07dc50000000050581a7636c38ff1536c0a95a87035934600d2434f4909fb3340a08c9e4e1a870abea049ffff001d165606a5","01000000b2a6daaace389bdb7319137b52c8b87efcac3f718947a9ff7c20729f000000000223b3991e7d7b3a03fd00ff402394768809b25c6db3b79e97b36dc7b2b3fd1cebbfa049ffff001d245dad0d","01000000b2ca6537f631d6b5bcacd6b108fe7b39946ec9fbe667d8344f1e99790000000094b885355df8ad7d8d6557c0026d0d2bd5395bb1d6a32a5b66637b544ee8bed356c4a049ffff001d3304c5b4","010000008c6d87157f4ac220e7944e0da6c66b756e27a1010b080ef14fb2508000000000bca91a4d786e7b81acd9e34462a1150685f4821a70298c5be3706c141b791c3d58c6a049ffff001de773310a","010000009097ae27076f2058537a61b0697f1e4e56536d00ddfc3561dc870df6000000002c75c27254b1da85c5d84d73e3195f06bc3ff98c986f8b72a9bf0e43e368e5c51bc9a049ffff001d1bda5abb","01000000ed401badbad21667c2272f1ac1e3ef8f486827804be4cd28038d0a3d000000003d203657f34953703b03d1dbbeb0d28570edcfa54526e2532f923f0c073e2f46b1cba049ffff001d1a426ab2","010000006cf2618e4f922fd7ae05fd29ffe28d19fb050a160ee96b1a43c7d8eb0000000026e609e33c26a98e9b762f17afcac6fbe93b97beaf88692d3efe4f84e939205833cda049ffff001d03615f7b","0100000033dcaa256909542d97751d980b2abab90f33ed5913262304856c895900000000017fa1a8c254388eaf0107bdf3552e33fd68dcc5f4a9f42d19e13cb3f1fe4f9a0ccfa049ffff001d385f6d88","0100000031c794cdf110baffd28aee88f6de79d7cecc374b703750ed89b98339000000003b93887167d7d541ee3a0ad747bcb5261d65e9646c1bbfc29a1b30bf65aced6104d1a049ffff001d1a252195","01000000a668477da8872db5e8d929d642124179314e5d5e44fba7845f888976000000007ebbe22513f133aef358ff0ad76141f2555e4ddad4b1730e5ec000c02049c81353d4a049ffff001d064b57de","010000005262b915e2f083e43efdad382251ca560a4ccf0591bf862b25a8210d0000000001574524a51c218547fc76458aa88962db69689c152419207533a29725916275cfd7a049ffff001d075c24c4","010000009fb74c2ae41c35f417d9b1891fec8490ce635542fce5e04a5302af8e0000000074a08f138ef9b92253308edbdf4ab2bef86eb83dd897ed40b12d0b175e6b034862daa049ffff001d3a609853","010000000ab25cc4947e99293d68b6481ac6da65b0c626c88cbda826bce360e10000000026e032462f8252d1e1cacff587f7c7d4fcf6241f9042c9d101479bfe4806f9316adba049ffff001df9d55a04","0100000047cb39cbdae72e693e7289fb61995eae6b4ec1ab63376df2c41cd021000000006757e594cf8b7c0a8fe90021c7cd0c7893c8a52c6df40d643132543e90a9044529e0a049ffff001d1e403094","010000002d8c0871b5d220ea62be2f6c961591c814c12078f2785a2005136567000000004af0e8ad73a488a336bc98aebaa536eb917d45a94b01d79c57406d0f0c3a0f82efe1a049ffff001d800a6a07","0100000089efb4cb96b687cbefb45c4e15771fcc9e6a3f83b58e69e5bb2263700000000013743413a57d56e7d855c3cf3d039a6b92a6752a8f3f432fe7f1d989217aefd6bde3a049ffff001d05cde18e","0100000036bfec5a7582a2cd6d6f5deb13436ba783054898a69108b2ab91a5a60000000008aaa2f3245cd850719dfe4416207596dd6e2222b63dbd3332277ac11cb73a5813e9a049ffff001d2bbd7ee9","01000000c62fb6a16b8fad6bc75a446fba7316fbcc48706eb9c9c932405c2b0b000000000224467d6d490017163dd8d021b341e4833cd4e01e24121eb2d75c6d5e100ccd3feda049ffff001d6a913214","01000000078e36a7fa86a85cbcd2bec78198ffe1ff40c74ce829041adecf9a970000000099123bee313e9c27c05df5d90de7414622660c6785a48b381e4f4d37c148c1be01efa049ffff001d0018ba65","01000000216a4188d02b9cfeb368118453b3d3c1045fac5a82b1209133a73b9400000000eb78ba10daa7639cae7db1be90fc1404089c9390daec7168bc12c47d360ae5c404f4a049ffff001d245a0fe4","010000003cfaba76ec460575b65a5991e3e7ca29e7d31e9d73482a40fb80a6b2000000002de30aa29833428387c36dd2e06fbe02b0099b17b178a1ebc8d2f1db62e8855320f9a049ffff001d2499d9c6","01000000faece5b2525b927a6d862e79036ba0241ebfb52d1eb4d44eb10ba9c9000000003a6a50b488e676205b7ae3e5df3d07d98a951ef7fe8d7dc82f1fa620fc83685a4bfba049ffff001d19d629c1","01000000309d39ab87009cef5f296de358cdb589b059bdaad6f1f0be854f99790000000006a15cc302fe5f8aa28bd808723a4b09fa8c03b1678349404e08506197309e6952fda049ffff001d89c76b08","010000007df677f45a572fd40bc1fd6c043980116cd26c4feb91c4e75be0b5040000000029aab05792be7970f5b2bf37d0d2ca2f1b4cca14eccb80688888b502165b020817fea049ffff001dbc15f702","010000000f6bb18dd056c7e5c28d56f93f1e17515bb47293abf3d3dda0fc3951000000007564b3eed31d3ecf04fdaa88f49f7907a9558df64c78f81b12b3f77b212fc83f45fea049ffff001d66a5b200","01000000ec6992e0d1f47b47b0c5499a5294f6d25290dba74a25ac3c5c0a90a700000000807a0b49735b3564e308bfdb994c951d2dd3e70b9780e79be96bc069ef9be5aec1ffa049ffff001d27bbf205","01000000f9ae20ff83978c890d1502d3e686b263786924a81adf1cb7483d386b000000006a4864f7471e698f68bd98f67d074c9f2a0f2b79bf38ebe0ba4af6adf00c5d51a500a149ffff001d083eda6d","0100000058a7ccd2a716ff29b44241e999b34c5b79cecb02843cf253c757a5cc00000000e73c50181e74a729adb04dbf4821bb938a18edf191269eb79fabcab73e82f7b8f203a149ffff001d242dbb79","010000001f872bb5f6d84efab0465b05bef058decf0c25f9e4b27f01ba9be1d00000000046402f8abfa90d85d7b18bfbb0385bee6e40565cfaee74215a4e9a694ae1ad21e804a149ffff001d7656ed03","0100000015708de547c5a46d6fda7871e853583e705334469c79a8da4cf4acfa00000000a439ca52fbdd09cc9d50c51474a5ec01990b52e45c8f30a9b75f2963aadc4dd10d08a149ffff001d1a1e47f8","0100000065e1c2c2eaac86507444f906610e1cf7e00f746731c745728487911600000000348087ba3da1f726bd3d400ceb162954b527e4eb5b5814e88b05d599266cb893460ca149ffff001d1de92a50","01000000837016ee05c81c5e9fee94d58209fc0679450804a438a74526745c2200000000dc8b054c461731632f6f89ad42c2086d131105001669f4d0c15c49dbdebe503efd0da149ffff001d6b757807","01000000ebbf884bdf144bd8da73350b6b6eb226bd36f4009935240457265d9e000000002ef3d8364bf0b59d681661320ed0c19d51c7df44181d2fa8afffe7ccda78bbcf9110a149ffff001d16aaa67d","01000000eed221e3df31594621963e176d21c7b9af5a9e5189d26b8e6a3d6e3800000000c74383f62fba1dbfea4c321f1aa57b5455b610c2700ffd3b0f0ac40170c1decc4c12a149ffff001d29fa269d","01000000be733832c3da78e41655b07526273731c0d2542864b3bd25fb2442990000000033e7090e743dd41d9b9deaa420888f99f9a74140c9ac0dfa6e639f438e286aa40113a149ffff001d7f7a9801","01000000f76a0e33b41a3a9fe87343d6c1a37a127a3c481b5a267100e64ee03e00000000032fb4e09dd1dc2f9f1702c360c0181c53bba2f5a9cea03643d4df5b06f98fa61115a149ffff001d175c6707","010000007a4b303107b5fa19fa57e5a85b5f65282dbfd9555cd61d9efeae30db00000000675d5a1283ae9211807b0e0dad1e142de9f8fb7c59e0222d7791e4a02b357b6aa215a149ffff001d13444002","0100000002df4ac3c20a20e2c9963119792c2bc9b79f4c10d703d3a676b29c0b00000000611bf2a79a3d75744938544501ca5b9fa1dd2edc8e6f61f0e29b816842c658ec011aa149ffff001d20fa3be1","0100000054e6de0f93a240a1963cf4ee509bb9e5842059c4a4ea7973123508fc0000000012649e1c410114712ef08824a5c1f8d89d77f9244a4ce9a9ea998910a9f5cfd37d1ca149ffff001d3b3fd70b","0100000015c06adc26e6a3619d9d3262d4af286442f4f991995c3430072e37370000000076449ade972358c0f547ef669ffa593066a56c989b36e19e3132cd390c79c89c2e1da149ffff001d1aa06939","01000000944bb801c604dda3d51758f292afdca8d973288434c8fe4bf0b5982d000000008a7d204ffe05282b05f280459401b59be41b089cefc911f4fb5641f90309d942b929a149ffff001d1b8d847f","01000000c2c38774c33ffaf688f5a9184b02909fc54b843c39a0423c095f0725000000000b98101300aac640b6fdf78542076c1be81b68ead5a9a14f93e15fdc2528c021dc2ba149ffff001d1aece423","01000000d7b1e90c05142a4cdb7fa009e88ce66dac9ae11fdef59c9d109709980000000064fa640de5e5f841110f4ef465f4306fa3cf537721684d363d2523a1ef9857d70d2ea149ffff001da8d1aa08","01000000dcffff3ceb20dbfdec203311b301ca51dd77920b2a488dfaf7e5dff700000000c2be32e3d8da8abfaed89de548c74b1a0c414f7c3a8721fdd35d4aac2d825eaa7830a149ffff001d29116980","01000000f7854fc9d9bb587b9f4153f1d4a5f9694f2f211b082d0a127963a477000000002c52243d33e1d64d15211f31445f79cb8775b58d7bc3c919bff06e3858a563b83436a149ffff001d243d4ef8","010000005b1ffa8ed7a058b6b5b062d222ab0ee0c1afe7df6b136867e3f200170000000083fccc31906128a8a8b385535f88956d05f7b756e93bd6870fab03e2be76fbae383aa149ffff001d17ff8578","0100000023f6bbed502b3852cf772326e1280ce3958626cdb6a2b222e363e54a00000000c5f9425cefcade990f4417281d5bda218ad48c9eef705282901def7c451654d1ed3ca149ffff001d018fa0f2","010000008ea8a699da61242bbcf3df6696b19393fd20baec5732c840385a87ac00000000300a09080ef6516e5babd986680b4d52797e2560f05c405ee8bba2cb3df069f9ec3ea149ffff001d01e0e4e1","01000000e7138e9216baeb1ac40f2c62106da421e7c4dfe92e8520b9510ba896000000005797dcd9c94eaaf79c8dd89c78da026035a4298a6af56c0d8540e4f805fae5df1443a149ffff001d22bc2b47","01000000b9f0ab49351ff2a1d5c312e2d5d4090480b1f06d698002ce8ec2e4ab000000008ccd84ca27dd388340e95dbf98fe5064dc331e6dfb9c4af9da571480fd55f340b448a149ffff001d28ebd9c8","010000000c9451392c050b8e79b5c9666c18815420c01c80a8272959d9264089000000000870f038751a5fbc7aa9d688c9bfb14a10a1c3c79b86ead1a89a778ee077c339f44da149ffff001d3911d40d","01000000dd8bc83ba79aa605af45f89b214760db9672d931b1addc48c8a8b63d00000000b240cd6adb9a3c641ea64c448d7bb9cc4f0907ef16940e8ba744734417b3ca02624ea149ffff001d9c549101","01000000d3ee55906e63348930b7b54cf97a5ab157f9db928357d571f6c8340b00000000554c7bb15795b16b6ad25fc8ce6e09440fd0a3430f7007a2933b9cd2d840afe7c04fa149ffff001d30d57063","01000000a1b952170754f3e62b31d9235eabd5e00836d3c6aefa4d452d0846fd0000000045ba6f07672ebd49471e03d8f8069b033352a8335f1147798f1601e6c2415ab35453a149ffff001d09162000","010000003578e018dffb8116b53e83e5cb03a7a24667938a56dff78debe732b500000000e1d7e4cee5cb8a2004607d6d30a957cbdebde54fce6e362d255cee8508722031bf57a149ffff001d17f8601f","01000000314fb914cf0dba0f3ea60639f7eb53ca1321b1b5a46ea86a1d62cd6600000000a556ee1ca146302a660541a970efaee6651da0ef3af83a32c225dae1879a1b439159a149ffff001d0146143f","010000001d8face7a23ef60b775ed0d6d8fe3b54919846a3c55b87b35b567f3d00000000fec7d689bafcc558e3d949abeae236959ee100c1e14443a2d8150b6ea4af6394c45ba149ffff001d35e3814e","01000000e8521900a04cd28e24f5e29f6121747cbe4a2f4ff09ca5f8880b761000000000858276ece0b84d08f50eeb6ec8415a200bde1acb179822734c25e651f36a40e1595da149ffff001d9000d704","0100000017a99dca235435700345d5c46506e7849137b611c1c6f55ca76709cf00000000639e095a4ee778cf74501b6cfb36c1849843174de881a6900a79ba1d867caf21ff5ea149ffff001d01f88403","010000005a74d97022363bfa52f8b7be786883cc0684721160aa7c98dcfcb2f900000000f540f6ac4ed5ecaca18a4d98cf668b056899fe1f8ebd556d4840c628cd0249107c61a149ffff001dad17c40b","0100000007428ff011115ca7489767608459a48de09a67f9449f127d9ee9f372000000003b9cf0295947c4300655bb0d3f38e1a171e00530962f8457f91b657646176a450264a149ffff001d0795b0d8","0100000007e98c455d88562b7d7218a3c2f089002bb4e85aed1081df2d855826000000006df25068899edd14fbe0e16593f2689de1e1478d3f4357f2f0d08b88c51af4de8468a149ffff001d60dfa915","0100000021d38b68080358dde1d9ad50f29ff671e10ef6f3f8cfe07baa5fbfbe00000000f20b63a0cb230cbcdc66304945285e5d5aca9965668094c81310a1d92fd0b2d66e69a149ffff001d316dafbd","0100000060ac5a4320058c76ec04258e15dd3366138e242ca7547a6b4cfcc14100000000123af2a6f9757f7344be6bc2b9ba70373b2546facdce709a4a316d6b2c89b766216ca149ffff001d9f8de108","01000000a6a5d0991db8c8e5090114b01c24b3021830d8fd12563dbaf8d6bd5200000000e86aa5bab3c5b7a826c359c213569bced0b413aa98675be77579b758d78bf4c4386ca149ffff001d012a3439","010000002473cf7ba88bdca1126f4571688b936eda57869bb009dbb71a5a0e8700000000018f056845060dfece7b502e06ddd6b4c046aa5a4b84cb832cdf443f00d856d01e71a149ffff001d305f6f9d","01000000154d99dbc77e633e08efe15c187274c8d2e34e91fc8f89d015f9df37000000003812b01e5db45daf8b3e6b2eaf509d91a4c0125a19c22d74801c9346a6facd28a375a149ffff001d2fa1137b","010000000c733c950d79fd74a81c786ceb53a2c80be9b8a4eec31f2b0146e6dc0000000099b83d7e9d586dbb1337e21082964ccf36ad0b45198749bf83ab6c337076317bff76a149ffff001d2261ef5a","01000000d12d58dd228c906a2ae70f97cd17a221ef12b660a7362f69ac4bae7e000000005192a382266223429ce7f266c3a40d8b5d09c511b0aebf7529113e64459e0d43347aa149ffff001d2df5adb6","0100000070704dabebe7ec6ff3a0c795df6fab623575178ae7593ce129d8077a000000004d783bdd927c015fa9beffc2db75ae835ae8ef0eec26a02e6e3409c46f393bf4017ea149ffff001d3bbda308","01000000f21ae6b21ffdf510792b6ee04e729976a9b01c2a67b3df9976fc31fa00000000aba558b636d8851376f923087a2c3e36c4492208af71d7b5e1b37760e99e2e02457ea149ffff001d2ddc5ea0","01000000181a16841e1236e688546de42b490780c707e28d421cd5a6427ca23300000000bd805ca726c7b346d70ac10d05099e6184ce498f227cf580dc11dc16b180ae45fe81a149ffff001d1c0aad0f","01000000853bb5f822e32308e2bf17c31eb9df41e183496396c79481c0ee449200000000062be0ae390f31022b2720d2c6a8b0d55959465515c51d175c3621f087d4c82a5d82a149ffff001d1d697744","01000000ff261fdc9d69b06276f03ae7cc08f01a3d314d6ba22466524dd5ba3900000000fda61355d2a98ba8bd677ed5f048d04dadc0a83d37f471039b7a912526125a79da86a149ffff001d296e2a72","01000000de5850dffef58b71c274ec4b7512ce77e2c7d54f48a73eaf279be8e600000000872013855caf92cd2e7f6c75b3d4621c77a0f1aabd8e3f294eac19127422eff0b78ba149ffff001d1ba00b91","010000002341cb9e8106874b78cbbcfe6328135778dd6ff49578c77fc84d8d970000000099caf23b95624acb6f31a3583f879966dca08ab1b24766e62aaeaf10805d8b0d288fa149ffff001d14b45687","010000005edca4fcad10710fcd76c13f6bb9d5ad07243eff49bd76cad76369fb0000000045c39cc0d0706a37a008979aa9907bc35fd48b760bbe25af5f51d745e97796b1bc94a149ffff001d29122d5a","01000000cb4ab68d220c0a73fed718b5180912edb08f38afeed08598cd72befe00000000d9da63f7ff5215e12fc372432cabd8116a6a92d8b27a1b99cfb779d59be756b19c95a149ffff001da5b89503","01000000d03c87eb440330a7b50127aa2a55b6755e3e195b8d1ebdce074a239f0000000064d4989bbcf21141b2cef9935a04df6711e097866a84350eb69f90c79ef12ad5b297a149ffff001d15ac59b3","010000008a904b6cea544a4e9be961d875fe0aca457d840ed74be2259df5504c000000002dee93aabc3df99611c39ae5438af69f141db128796cbb0a2c393ce754433d88789aa149ffff001d1e6fb13d","0100000013db546854c0241a6e0869ce7a6fb388fecc9c7a9c613657b008558e0000000076f1efdca96bc50575c7928429704457a192dd5ab07409ddf492acbcc82354c5d59da149ffff001d1c500134","01000000286155b0a1241a371d70ea719ddb96d4927662e2e4df5eb6371b40ae00000000e4f8c7a6ccc5977c49f7514cdb587dc89b7d01e3194f635de81f869553f251c57ca0a149ffff001d46659c0c","01000000d2f2d6ef0f83170552e439e43be4609cb7a81667486b9db0539d8f4900000000a7d438393b4da70a3781e7e2ff77e42ec08fd388165e1503077eac338c1b4ffe7fa3a149ffff001d21ca757f","010000009158a3c1383b11f646a3886f6a4e283d9076d2ce5f260ba5564a9e5e00000000c6765d83219d35bb008563b4808dea7852322eddd925ac699eefd4bf32800cffe7a5a149ffff001db70fdc05","01000000a3ebbea6fc883572f350fbb610fcc9f2857b781c1053599801aa22260000000036602b9593aaacfecb5dac624c61f83aa7f69e45e861b5de59f7f54eb40d4a9af2a7a149ffff001d1ece76a3","010000006eed57cf8e1e643a3e3b1667bf861afc143f802848b0c7e947e47ed400000000936f969d74cefbb8414fff9c26cd7fa3d83b1344c380e47893abeac709794ffe54a9a149ffff001d7b214003","010000006fca3de36b992c3e19d6a1a0590c8e8f8b2056a247b45672f2214e93000000003388fdde7d25bbb79b64cb8f231ae9e28b7b002e334ead9113a8181a653760a7dbaaa149ffff001d3764eecf","0100000014d8dcf3f1effd291331f7ee8a54e65779c77688ce6a1c9f708bb8d0000000001fc977a1a369fc1389ca6397386a068a4c7105edf97819d86be9b44a122cc1cb86b0a149ffff001d375d10d4","0100000066f31962d83000f63f4c3962a17afb76998c6c56f2424d87398254a8000000005290a5be1c4176db2dffcd5ede32f9b8550934af8fa97196936534f7961379fe40b2a149ffff001d3b9bbb05","01000000189e14de74dd3139c76c2908e9667ce4132b6f953eb45d7e7598f2b200000000e5f2bfa71eb6fb5494d8fc6abb89063a2d47b30cd998f90f045919b0f8359c9204b5a149ffff001d09635a93","0100000044d729b3dc61112c02a6124990a2e3726cfe12526b8b7b15ff2a256d00000000ac8ca0db24f4c3f83ae6c9d22bb4c316de6394335aff8b63b09f4aa5e6f24ee682b8a149ffff001d015b6c79","0100000030fcd9fd7e0a3451c3be4fffaeb0079011d9f3e597d87ad27a13a090000000004e5caf5022de6a6fa5cfc39bc9fc9ef09622a558e095a2c64bcaff69d9dc03e75cbda149ffff001d1def03d2","010000007cb46bb15ad677ccf44210be0e242d70a7a2880b1f975f0c73e672990000000083b64f3abc1a7d5de5327487ccbb11ca299af956d6c013b48fed8714f5f8baf0cbc0a149ffff001d2f341394","01000000b27bfa7af3ce7f2c2b1e5a9b20bd71765fa9c4f5c8d2d1bf498740c1000000009af982d59017dc7e8d520f0c84eb569d95e51f082d65c13db1fcfd4bae36613eaac4a149ffff001d27f6840d","0100000018312a2fbeab9acb3105ec7d18a9a6d88f234f467c8a503a29412398000000002d04d5ccd07ed44d6826bc0cd3e05ca72c15de15cad111fcd982cd0025fc797f68caa149ffff001d20366cca","010000002cdde08e32bc9f5e050d4adf1cc55aa46c7017c7b38a3fdf9ef1ad080000000077736412752e4b751021f290f5f11b4c4cd56f0ce08b892cc9ba2ae542321c79e2cca149ffff001d3761347d","010000009879711b9bbb99f13de5bd0b4c6ff649e6c86dcfc627b322a45bf73600000000949cf4fbd07b4c11042dce7d68420fb86f6067f5ed8f45396c910b9832c197fd3fcda149ffff001d5f492301","0100000006fd1458b43f5bc4535d0ca8e5cbd53211e45c0202bb66219632ef5b00000000f74966e621f39a57706e1db4d95dd948220c553eb21ab6fb4111cf718b97216919cfa149ffff001d32e3b94c","01000000ce5a6526d8fb05d59c6df11c880e8cda1aa27cad5518d78ceafaeaf2000000004bdde2b59b38537873874008e4fa1ba04e96a72a47b08d43d74791ee19444cd750d2a149ffff001d29e71685","0100000042ec0255644db332132fc7c4786d44578fafe7157bbe8a588c8fa03700000000d284f4b9dfe46e5f718f1dfe02d4ea89b17d822fda4be19a23d7829ebc869f9a2cd5a149ffff001d1cfe0f93","010000004b74e77ca3a7de6b178d0b5edadeacf683360a0b8fb76ef7df22e3d7000000000e33e80e24d4c2c08c4e23994f5c1bf6308f86c2d63fc3a34e30c5dd1716c0ec2bd8a149ffff001d23fffbd8","01000000d2b9db2da738e21c42d4779dd30214ff8ab8cc46454eccc9b4200bed000000003706181b3731036528f72291b3189d52ea94e86d8e74cfd5ea7dc2d9b31de41572d8a149ffff001d75429600","010000000f7ad899694317aa605af84494d1d9baa274a54ae7e385b02b03933d00000000e579201bbbff4e123350df7344ee6c9ba1b649a328a7660da1e69116c9ce2bdf62daa149ffff001d19cb9d5a","01000000eba85462adedf41a5929e18ed2507d919b838ec6fb34cbb7f9042ccb000000002e653e9d9147ebab6ebfc4c360b8b728fc110e4f1f928701de3af0eb93275b4644dea149ffff001d21ed2aad","010000007d9bf83a808944b979e33341969dc2832dea6329b9ace088b5e1eef7000000001b8e63a74cac94318b93eb6065144487bf0156ecc21493ac3001b5d424264c483ce1a149ffff001d33ce4ab0","01000000944b1a60a03ccf563fad3d92f899eb1c91b185c6c8312a2343e9568e000000008f16b3928b65d91e670a9e7dc29ea18fb0478012af08bf6750dada6278737f7c6fe2a149ffff001d9d0fa005","01000000f1a91f28208d3a1d37e95b6677c88721d3cf416fc7d73db396386b1500000000b3b3d2f6223333fce41b1588f3e9feaa00424509dce536017108a86a30d03f0c87e5a149ffff001d257d3f04","01000000f9fe2a3cb774096a089c5ed3687a90d66524ddecd1e0ebb1f6ce49b000000000f0da12ea6b2f7b87d6eb5b6c299b661e3f12bf8e5565b1ffe7fe487b0663f080e6eaa149ffff001d1fba0a72","01000000f35ea9df70cfe9b0e1778e076ad60d63c2227e6c604350c647154c8d00000000979249998a9e23a048248c14f80eb00b48757a34bc1fe6753c21ce9e305b129352eca149ffff001d09081f62","01000000b38ac6a4bb4390e538b4363d9be5fcb90c8b85965106dec4a74ab041000000004197b631cd5585d7a285238e27c010d0e7b16ebe2f4300beb16862d92bb4392a56f1a149ffff001d3f4e6f18","01000000f4b8ea2848c7cb1432d32916dd26880e730d993ed472fbb1b512995c00000000031eeb54edcfca54319c1c729e543a68d97652e01e385811e470983e5340867c8ff1a149ffff001d2ab2de49","0100000087c3e6c9ed6c241d8e7a82f6576168f7a5d3fe1501efab3a6f7bcc6d00000000736638d850a4d4ab2e1255bc73299b0c31df19301fc0a55bd8375a573247053f2af3a149ffff001d5c199307","01000000e0def8976e9a6e231648e4a17fa8c6715aaa36b71a098317e5ba24fb0000000019ff52761f6a59e2b98099a119d6192eb71659df9f953a0ff5b22515c1dec38b6ef7a149ffff001d36f00715","010000007bce3772fa911ef8b93b0a374a8477de9413ce5384de9b5f56bebe200000000026faa601857028f3ebf67ceda2d0c7348dcb5b5dc58f826282197f166975df7e94fca149ffff001d009a4f8b","010000004afd187441c481b2fb98dc075894e61c51e340136425ae840ba0820500000000b77488dd74b14d13aa6a82fa816da9b266f3b762db65fa60ef53fee4408414f07801a249ffff001d2ed8b168","01000000ac201d7fca3a0213c4470d601fbfb3646f78d557ca86f206a672274400000000c8212230a662bcbc89209199c29227b0b7351812db7dcaedfb8e6eac1a6a3b37de05a249ffff001d3942f241","010000004cc5c4ad23044fc840a7d4e47e8e4e350a83f0ce73b46811f175326b000000006e30dcc3095a6e15d84642813c5beca26263d9a95dc37410518ab7aa87abcfaf8f0aa249ffff001d1a36a3f0","0100000039c9f3ee0fa1e62f172b9171f8cae9fca96ce3cc969b27215b711f2e00000000b7d055f866041ed76929f4431110bfd4787f78b8dac56b2049a86306477b5cade90ea249ffff001d22ef31b0","0100000088f92c72f2f63ac2b301470d09564242975515f8f217181aea348ed500000000c22eecd9e89ac8688a019e2a2723b05106ea673e376a3c437271f8097a28d75cf10fa249ffff001d7fa96903","010000001b887da197edeb3f15b5d464af308ba746f4b5d3783a507919003a5d00000000fda95be64920f7cc5703f7541e4dda3145969813f14f7a4fdbd5657f41668500fd11a249ffff001d37ea4286","0100000003767ab7e85380721823dc92c1bb2d5f68c08ae7884cd4e17a457e420000000035a7ed4cddbbfd2a21853cb7c2e059285a02f3bf48d5c47cbe876bf3124eb87d6117a249ffff001d26baf52b","01000000beb34a9db643f56ca0f0dcdcabb8b715e35f5f20f5212ec7442e032f000000008f896238cbcc0b1d6582b10220a1d816319d9328c4eb78831fba843bd391325fee1ca249ffff001d06406805","010000007fccd555973ce4917aeed0dcf1c63d54653bb5a1661223c67fb5eee2000000003a00a7ba77bf8b9d2037450c11f99a6f73d72c1702dff0d73382be44a374de336322a249ffff001d04126cb7","01000000a64c94c40406be2d93d7af9b3ec3d297f8156df08d8c22ae78a89f92000000002bd40c032d858d52bd936ea4396793160647d834604b039473f79b37cc12e4640627a249ffff001d31b0a689","01000000c9866f979b4601eddb27f89099f87340fe75bf18a77d9cc56b4fd53300000000bef9761ffc444a1d31e643d8bbc6ede3a5abc4e68bc9cdbdea0f7bc196637afd8929a249ffff001d0638062d","01000000099f86facbf3a91a85ff1e4e739ed8df4176182caa7602810061691100000000059fc195b1093c45fa29f02f325f3d73457e187ac6bd4073f028a76935671bead92ca249ffff001d23588319","01000000bc09dfa092534568c44adb508e0d1f20180c106e8c4872fd24779a11000000000dc33beb4e114960d3df602914de90a9fc8ff69e68d3174d5e5f00dfb35d641db032a249ffff001d23c7e095","01000000d5041c244afd07fd98b97dc9c18ed9c9120c6bfaeccd0b61ed676dda00000000f81cf3a22f18e811175f410500f4a81856fe0a1626a989aa7d5393e55f4f1106de34a249ffff001d2d248466","01000000009c8d191d95f041e0a4b967a1a6779f75424cea1665c03a32259dd1000000007f2cca755b868a7fcb234d05a09bb48f81d1ddac6b8f9912e50f57549d5931f96536a249ffff001d58960102","01000000fceb166d494db7d59dd6a02d1e4336c6459f596a8ce35d3f9f5e15fa00000000e2e04f8b9bf7edffeb48863abad428a3e6e6ecc3da3ab65a0310eedada6daf61a436a249ffff001dac660f01","010000005fa98f22de846e1b510d1c7a9a697bb772303d170d98ab621ef4ed1800000000a1c34cefa15c0654e9d03fb760bc422d78792cb64a1fd8627d748abf36fa09663437a249ffff001d02a84893","010000005b7e335bf7d32c92dd8ddea50eca6874a3bdfa35445b466b465fcc9e00000000a02c806b54fda6960a73d9bdc1489002f5156775b27e99251acb3107ce67c065e33ca249ffff001d31c95fe1","01000000efbfe0ae86696d859fa05ab70c588199b6437220a8f6f6f4ede6e8840000000068c21fd717df9db71a0ce900cc0e2b030e535e1a289a69380bf4275dc62fde987342a249ffff001d2aeeaa12","010000009661cef9b3c232008801ff1c86afd43e31f14769267677c7d43c011300000000b6c8ef2bd8f76ffcee86f97b4377b17e234eeadcb03ec9a280b117c0be182c930148a249ffff001d1851f8ab","010000003c6415f8bd6d97104b0c5168459e9ad05c9e5e92a1275bf0c667425c00000000c122b3fb2cce0f05a4af83b39a162b8f5c65480319de07cb693020fb418ec78b1d4ba249ffff001d2b71250d","010000006d85ab8142ba21dc0035299cfae273605ad596247f80c3e880b7af72000000006331cee6932cec6e81779bcc05876c440369248ae3140bef94f4172a44097ba7804ca249ffff001d33f4db46","010000000ed06c9c488fe72909e42e076b703378a97e83445745515fb4821a6000000000721f037235344f54b110f221b13e69c877f43c914eb5b671c6b7446abeb865389b51a249ffff001d1656e937","01000000ec6ff10ccbfcaba3ba00d6fe2dd8eb5fa8a4ab2009b1e1433999dba00000000088461e12f7a6c2c203a177ed3a935e29492a12441b1bb1cc41b66cc1ac8951d4fc56a249ffff001d1428271a","01000000af583a761e662d3542b1d52364b89e51153f589d00e873acfc0010ac00000000b5b2ad606e582b55614fabbd7576eb7154dc6c298f677e2231a4af4fe70eb8be975aa249ffff001d1a7b49e5","01000000d093ae8302aaab916f024e5faa55bad35ce3b18d6b4b4a1e1de65656000000006af032d145f01be1142f76f6cde2ea57138e1abcb1a05cc86735cbe9ba9a04eb2f5fa249ffff001d2629b083","0100000032baa946b9c44f25aaa0670ea74718c9bbd2a0f1e427eaadabd97a33000000000c4721fc74c9d0c93a5b047870789d5764e0aee1f504dca40c13d9d9b84e437e2b62a249ffff001d2d63bbca","010000000961cd77ed4c7bca22f48f208c25a12d234b540a8f6a88e221f2a0fa00000000544aac5d8e88ba74ee538b5517b9602b3f2925258a92e00f116098ff176af6347363a249ffff001d349d1cfe","010000004513b38a473925f5eb41866c4abd7704297b1fe4ae6055191439377700000000153060d5f7fca678b090b105a8575c9db6535ae289af5f7f8b1c9b3e185e02c68163a249ffff001d6f080600","01000000ae2a41c5e8a80461802831851650ba0559d0c224c1093e5374f42edf0000000092fc030e4638fe42891d9cadb43da472f78889d47a018a1fe24422f5f491c73e6064a249ffff001de6a95602","01000000413229186fb2df4590fffee947504c0647015aac7dd3952977e670fc00000000c37584b09280ee1c8362d0ca3af23ff83a66d07b088473d1d5c3c8ba9b62aebc5066a249ffff001d2c4c49e5","0100000092beddaed8ba39577d4a35d58efcc61234b517e428618a9b8f9fb6d30000000021feadb7906b4b5be6fe5f340d9894f3cbbaa6ca3087f570814e9c587a09d7c60368a249ffff001d3a146b66","01000000e1e57f2335249c51472d69333e1af698a23bff430f01cbb8577d114700000000fc74a1bbe60748db45bd65179cf7e84f7fdf551592542f7de30abc72b263b85c816aa249ffff001d47cd000c","010000008eb9d6586e314764254232897e93634a97c096daf81ee1d148e1077700000000ca41e334e809011c1b39c3096860f0588c1cb843fc0ef4cf8a933da99098982db46ca249ffff001d38a9afae","010000006d7161c746e85aa171aaf33b67f283c24228ece37f3939cbefd7a12800000000c7db38a80740272f55a5814e9eae9306d5e762b962c0e6800d98c05359780e0b0d72a249ffff001d00ae596d","010000006c0f2b5f4bb575e8061ede19084778b46d46ea89a2a4a4c335b63b5200000000fd5b6481273e5956c11d3e1f6647dfc783347d80a4c87ad0e790d08ebc500d00db74a249ffff001d176b3e47","010000008673a10993b8a90c92a1c3579e4104b8a7468369ebf92de694b1390c0000000054a6443b2a85fb32c0e3544dd28f715919e67f0589b7f60cecb9a94b8e61fee59576a249ffff001d1e157c81","0100000078c30b50f423eaa892bc497e9314af296566f0e2e134e0e2686a993400000000808039d038d7de9335143bcfd1ecfaf60fd1adc6a938afcd829dd22a4e97361e3f7aa249ffff001d2748983e","010000006172d3a7b5dc33249e197c29fbf7b0827212f8d9551eec417bc23c84000000006890d8dbaa19ca3382f005fe0f2405c3143dd38894a755042a3886268c80c701e67da249ffff001d0985021b","010000003e67c1a9b88201f50b42caad5a3d2df8933d55b094569acfb68f2940000000008e8baf95ec63e6735ce810988127c693ca1ed83bfda1d7ff370524e07ebd98510682a249ffff001d2b7daab9","01000000866654efcf9d622cf348af4b135b5b343442cc3c6c3a31a1719e8fb4000000004a61e560b1c368dcb75613eccea4289452f5892a46a2e0bc54f278340593e3a40887a249ffff001d1c8131a5","01000000d716f099ef9404e05f0a58e5acb5392199ccc15f0d25a904d6d8fd9e00000000bb9b95ee00769aeb85d3e77a734e4c9dcf3e6e1a0cd3a4e14531dfe6a5a853620389a249ffff001d23a9e7e8","01000000bada5252e4c3ddb4598122772d232daafd902b701f2917dc75be182300000000a4c93facf43a83b13612037b63d3889ece855d25c3ccd095609dcd7117f2c09d778ea249ffff001d1c086b84","0100000021880bb769dca89c018b583b8927628af69710f0f99b8b4d1b48bfb00000000067106875d8806215cc341d1198b7c773b0edce472986e59845ed120f42ae6ab42c93a249ffff001d2720397d","01000000ab5cdb14037cf80c80fe913d3e4c20837a5fab039d62db5ebf99b59a000000001c65cafa971f57a907af7a2440c56bb9ff6235136bb010658e57435a536363047494a249ffff001d08370cf6","010000000313104c46a4d5dfec21d4474431c17f744742d5f5e39d5c6b54bb980000000027a94cd6a81058178f5d60ac3924a140885e76f9d0dda233a98648e49bba19d2c199a249ffff001d39d7e366","010000000a027377b527fa83de83ab141bb975c5e673283904e872c2aa4c77720000000021e6ac50620aa4d1c58d95586a767cdcec3cbefd6547b9dd8f2df23fe93fe4918b9ea249ffff001d3a0f5781","0100000041bc40c4e1c3ea3ec78baa3cc51a53941d895ef14262b4019a7a865600000000240cb82122a04e8b55afd1bd8bd1f9b6ca860625570c31587fab1f96707e41713da3a249ffff001d26cbb01e","0100000061bcde87fd1afe1cf7e40e0cb4c980a1e2d1f7d56bfa4ef1fedb57d000000000cf1f429da22267dbc4859ad8b373630e7f700ccb85aa5a86b8f7871406c110fdbea3a249ffff001d210dd701","0100000075607f9db5b162754942c86f74a3c0be31a8b22228d47e6d2d9a69c10000000088495964f1fa71c95ebc0e8b619678d8fbede6e937a72b921c7d128881e32c2967a6a249ffff001d056b0f0e","01000000a6744bb62d3fd4c38dae5c1ee8133ed606a054610ada239f8ba76b1b000000007e2e086023cff453fa4668b505c2471c890461336867a6b54b31b487b00db7102fa8a249ffff001dd1277d08","01000000c1664c888234da803f330692cd1188671df67680379428483e002b0f00000000bd7726ca361a4529c9aab874a18d4f92252e20edeb6991c07fecc7a2c626d9300fa9a249ffff001d15af15f8","010000005ebf533b54577bb3ce13d31e305e612dc9c14afdd78f79172740c61100000000072085b9cc68eb1b2b6b5082cf78fdcf0475ae6a773f483f0e662d6bdc18bb189baba249ffff001d17e4603c","010000004ba40790bd0dd0ac86597978151dc8984e6c4b9bc1710121aaec94da00000000bf77c1da5323206eabc03dad3f7cbb535dbfc4d071a62d604bfd8c57738334164bada249ffff001d23428b11","010000009b28eef4be53473d8fa9f61a8511dc3a7661114734b8e8453a644f220000000016271c93a145b124f404f47fae20cc63635a6b098690ba0b35c658769fc3bbe670b2a249ffff001d065e0cbc","0100000066478b4cc98ffdb217dfb491b19a59e5a9b06040c91a9ce3f58084a800000000d5c8bb750417e6f67bbee51f2e16fef0b7259960c0d472a13d405ff09a25bb9809b5a249ffff001d01879465","0100000032d7829e7dbb5b8c65fcd060d1d83f0b85c34682d066b09b1f80cc76000000004a6e913883d5f10afbc210a9c445fc9ec4cf199ef8d98d3d3b85ec8cabf6d4fdc0b8a249ffff001d066ab262","010000006ae084cfbbd59aefabcddd26f950279b8e2c31e6c83e1d46f8d5b5180000000016d7db7fc73142e1207c98b3cdb9b2eac072286346f04979dca40a02e4308cd88fbda249ffff001d1eb2fde7","010000008aca69f7e9e6e11cbe64ea1d633a57543cbe9a70b3c6eddcfc0780b4000000005b6d689d3a12a75084a9cadf43ab71ba669c40a973dbbd2816c92a030058ae4008c1a249ffff001d03a2d52e","010000004cc0606de732a47ceec13cd61548a1d016bba96dedf1b4360eae7ae3000000008b68168dbeb8ab2ceb6867269284970b30164d77b8e8f25bad63d1f9cc007e976ec6a249ffff001d29f2b835","01000000dc8ef74d9992144e89de14c616f528bd3ae269d00e61bc7e72aa0a6600000000bc46db0423dc863f86798bb159f4d7565ebd7d5f037c7218e72f3bc481156ac135c7a249ffff001d99c31f03","01000000dbdb5bd6ba35b6e2bb5645c15ecb0e041033f9bd7ef8763d512ebe83000000003d42227783b9d9cafa7369e2cd08fc339593e9d447aae0e2fc8556977a3b9e37aecaa249ffff001d1409761d","0100000051a6442c9d8502f648bcbcb695e2d413bbb1cb62a6ac7495038fdd5d00000000632e312b4e1a6486138c0f6078b0fbc78a1d338f7bed8900a35de7c117cb03404acea249ffff001d05870485","0100000043b54232abaa7a2161360a4eb0406dc3cced62a8224a729ba73fbb250000000052172ef3eb60630cd2a8b40504e55045ebecdb7a92d4f9c786478bef0d18ea4c4bd0a249ffff001d1c5b1af5","0100000070a755ccb0211a98151d33443ed21d4e9179522c659c590a15c191d300000000a4c23e5e4da27c686bfd343c087df2dcf2516b7800ab309c7fa12623a688702a0ed4a249ffff001d1c0bef7f","010000009ddf57710e2b0f5062cea5a669e2739a17564b2c89c5af8845b1c9b3000000000eccb2946d402400c5f55ea7cb677867b02ac457f7ad535bb57c4d7d24f5ca9d0ad5a249ffff001de0175301","0100000077e8b9f9611f060b79c788cb7e13b5968c8f30306d8c03a5854709b30000000067f18a3d154ebed6edb5495355bd3eb1483f0ddace1bf60b84c967d9c3ac3def66d7a249ffff001d2dcca863","010000002c70192b872230c3de34ce4bef16fd51201143c4e4d1d1d0a5cd648f0000000063a211dd6f42441e2e01fcb281cdb2269c13ca69fd879d3a46a88c9e7ed122e91fdba249ffff001d3479af55","01000000550ce1dade628ba1dd1ab1615ae525b90838a7262229075a8abbfaba00000000d567d09b0da537b3e938351fb6ebabd1e7b51018ca85b12b0e642c686a2269776bdda249ffff001d147fa1e3","01000000eb0700f049bb64e5844be467fdc771de01cdc2f63386553b52ac2e0e00000000c5e946f87d9f64a0dda9e84f54d9a486fa07c67ba0e7619dc5f7227572be0ce67fe2a249ffff001d047ab802","01000000ad9bc07285ed383e3f8280c3790cadb4fbf3c0454f9df3c1f259e7f200000000120b9dc47c7c1e4f4ab2c714a7d822ba32eb572e6411988c2d3748eae0c56fce89e6a249ffff001d37eb7892","010000006c916567c8c84173c201e99bee4ccdbf0f9a6b66ae715dfa00b9241300000000fda479b3071fb4ce8b8153a26161ef6d6dffce1c42d00135c3c8da017c526e2bcce8a249ffff001d2afac893","01000000add3c7f6cb8e5de0e9f7f3f0349981227a517ab4c72d50693bb09c60000000007702e2df44384fd83eed6b991a103b4b2c8ea4828de91762d483a99589552fd34beaa249ffff001d34ab16b0","010000000477eb7e75c50ee4923d4a3c18ded3f5361a640c23c3e7125f2a92c30000000020bb1eb007e127fb74795cab57108efad0644158e0b67ffcdc090b40674b6d0100eda249ffff001d2500a6ba","0100000057ba61f3cdf6b343a15572522a3eab89dc9cd76719d410c33cfc9e4e000000004dd1c6fd37c02d79578087fcf20c623c658425e9676437db636edc704756f5e56df0a249ffff001d2193b3df","010000004ca677f2fcee20550a2578adb598f1ff4a1acf9e950317b4882cf0b60000000034128fcf5dc8bb1a1a0b817af073b65bbad5276f745273d750983bdbebe2129e8ff2a249ffff001d56ecd802","0100000034d7da80670abbc25fb11e7e153d1526a8cabe83205412c4758bdbe500000000145363d6ba8ea7107507a93dd9e823846d4e6ba8141984c69455a72145bb4b5f62f3a249ffff001d2fd82464","01000000351e1fcda3235638e422fcc6c3b3a3faf8aa9586f2353c32d5001739000000002cecc8604916c210510da8e1d7087fcfa03c5910c7a9d7712fcea49adb541db4b5f4a249ffff001daedf4105","01000000b0dd4843719ffe772162493410db978964e50a80b8c5bb79b257498c00000000d39dba54996a3c81f0ce5849ec4dec6fa5793c1c3207b1cd06b8fefef8995a6384f6a249ffff001d021a2ba7","0100000048addf60d275b503d11c2e0d21683585b8586328f6a72bb58aedfd9600000000fe82e82e32d82f65ec03a2b7f93f76feebf2b0d5be8c79ee70b61f34ff4b0cfb5bf8a249ffff001d3628148d","010000003f727587549547019e5d74a3ce55a3842e852899b192424b2150663200000000612ec673eb3e6b1b48b0cb8410bc379afa8d47416fb42cef8a500fa3e56bbad6aefaa249ffff001d539f300b","01000000d91778d0556b71ffc7e730f83db4ee84df23383f9f3b5845b549e5b4000000008de6ebc1a0a3822fd364baefb7d4b221e8c9c5a4a2684c2026e401bbe973c0da2efba249ffff001daf0d5202","0100000002973e0a325d5dfcdd96d89e28bf5a51821d323e639ea817aa646e07000000005211b7fa46c745087d06d00678a47e83e9edd93110822bad677b6225f636879627fda249ffff001d165ed4f8","01000000e74ad479620d7e03911d1319ac72307091fe6d600946aa19c68cecdb000000002183e9f7b7a311d28053d7ef89fc4b361030b8902ba2203bf3ec4594eb3febb8e402a349ffff001d160becac","01000000cf2752c850804b59a334aac16f5b7511829281243e63335a7bed34c50000000046509f1a97582db1edaa865737cb3ff09315dc8a52943e27c74fc3a1c88b85fd2304a349ffff001d59a7e705","01000000c1dd25451622c8b2e08049c3993c1c78a2c5103dbb10048ae32f89f400000000b52a1994930ee957a3740f651f8d5e1df44fab372f67c675f222c621acecb7d24806a349ffff001d345c5610","010000007e8dea5a0b8cf887e10495abdd83899694c1c6be140df2538be5ffce0000000007b795a6d18598f1881e03c2e2007695056ffbc66428dae26cc9a80d7f90eef6520ba349ffff001d0521f70e","0100000017178e0d7721c416e7cc7ad22b651f5a6ea00bf699c431d5a8cbde72000000009d73182fb8f380c99d8254e89e0ee5a9fa85171dfbe59944538d7d178b75a661760fa349ffff001d1f6f94e6","0100000010d7f27b3bc434ea3c0edd18f56765208e399e183b2d8119b3883b5b000000002c212f6c618865445042d92770f952aa87e263948636a3c13f8b15c89e73e3e68511a349ffff001d99b7ac02","01000000ef0a5cffa690be2e1fd83d950b80bd4a76942f0084ff5b85370798660000000069c18230ab338935cbee13eeb3f4f8019ba59321da2149b56076f8c38dccbaf60c12a349ffff001d2a4b760d","01000000d8972497db27abb39c03ac49db45a70a9821edc045797bd5b2e43d4b00000000e4c2f80c9c309786e6e9a8397372e8249ebd3e90bf769424d64ec102a7ebcad56412a349ffff001dd1934b01","01000000987700b7f711c29477a317e5c6ba923b032c6010c5d368cd694e24b900000000dc9624043958000f130ee77c17cec2ea56aa27b7647215f4f4dec96a420496935b17a349ffff001d149175fb","0100000041ff7eb5f70ec5c53365a2850f0fe591c875d5535a09a661478bd2b2000000000ea3013d80dd24425c204957ea7889cfb60d167d777f4891affe3086b6e4e9f5e819a349ffff001d20783069","010000004aed2a5108a569d33eed7e032a37f1f8fc170db5b977a28c75895bd000000000a955b153b6821cca80155d14bd579ffe326d8c72d72dc4c6a6f84c3fdbea20ae3c1ba349ffff001d355b7d15","01000000968bc2d347d0ea7c5ea8999a8b738d77c18719657e4fe1ede6c6a4d90000000021a982d6383771b9beb846c1a0b2393c17c398141dedf098907b993c2823e9a5b91fa349ffff001d2941d34a","01000000fa6945164d3fdf6f194a4ef3864c96e2226fec1f9534da702f6a316b00000000ce7272bd51f461fda7251ba0fec475d8fc59167a795d976daad79998a332dcb6d424a349ffff001d2c4d65d4","01000000a08d6b690927ab009ce8343f3e0e6dcca1a5ac48d04914184919f9ff00000000c1f3861d092e229ce52283e1b26a34c34d160b9cb5bea6d70c33bc8e502b6d8fec28a349ffff001d04930b84","0100000085f3910fbade1d81ed5470a4181fcd11a3f0b3909198ac40b7e9ead100000000876c81874e112d4751e5362a6f01db739d1824f71eb3dad7c491955828f180615d2da349ffff001d0579cd7f","010000009994e213571ae1d54c9519b10de88b932e038fe3687b647ac438f628000000007e1ac8a374bac15e690fff2b7f9159575b4bf31f70bf345cc7d81f35d368ae042731a349ffff001d25b22f35","01000000f771300aae7041c27d22e6bf011a7e4b48e44f3552651b1fabe6f13400000000e6de2efa5a3a4f2342ab583fa6e82d7a7949f8b0bb1cfe23cc416d9e2f916f3af434a349ffff001d2c7a7700","01000000bb842c0213f81b4122fa02750a45857368a9ff84f035f3a47b6309b70000000090672371868ad5a628dff909b04d23ba4b5820ea448c167a7cb5a795d893ae7bce35a349ffff001d1877b54c","01000000483468b0d9a9065fced7f8ee967d6c5693de4dc7c758e88a473cf429000000006637b043cb93f85b30c23e18db58716b2f07537a5b1b95f8576c26431781acbe583ba349ffff001d170449aa","010000008d4ee569766d3efecec3f2d1670de1aae51f985292b71bc947cc71900000000075f35e4c62d97501c684070fb8195bb72980fd12c7021a2b8a7250d5d610e2b9bb41a349ffff001d04a1f912","01000000d3efecc049f5e87844b7fb5d8832a65850bd9dcaad1d18a4125e376000000000fa3a9d5716372f63a3b1585b70ee43ddaf5c451dede1d2215ca437e7430dc9a62f43a349ffff001d0103ebeb","010000006c36c964013eb8a412e82c55e271d214aff90832b3854f66d8996077000000008a284c7f59f43dadf23caf60702f2edf64951b7b54552724ddb66184d9ddaa615645a349ffff001d19567a8e","0100000046ac86737bedcbe4520937482fe0e76f8807226882adbe2da534e1f400000000a5ac6029dc2b4d22b1747631b644f23fa135c98edd6cb1d2d2ea10622f352e1e044ba349ffff001d321fcb23","010000002c6e2d8ab67d707081979e0162376938fd9d0661a10f36bd9e44ac6d0000000026903ae626598c43029983e0dab9eb12500e69cb3573c90f4198073d92cbbcc8414da349ffff001d192375a3","01000000997a24904b427633a965a1b365ba672569b38bcfb5b3ddb4de23c18200000000139216f34809611eae64930c501d83fead0aae9a409ed4beee1d4d82ef6a8949224fa349ffff001d2ec24141","01000000017eee030747c2eb8b1958365bbaf54b2307b36e4360cffbf25f260500000000d85cac89972dd50b25ebcfb35ab9c3535528ea68bdf5129dc6bb59e99949da4d8d53a349ffff001d07ef1db0","01000000fc4017b61cd1614371699b40fd55b606f2c0ede4d2aa3e7d2b8664df0000000076c478ad85e16454040852621431b38c1d02e0599e1452d6c5a1d71def5423743e56a349ffff001d2050832f","010000007413b713862eb627b1a1979c0ceec0942ea7df41bb69d0965fe41938000000001fc685f0674829c92525a0ec2a497660eb5309c714fcb6987f8ca5e686dcf3df3e59a349ffff001d15cee30c","01000000c99c1ef70064f38a5858e3c99c6469b684cf9963710835f1e31144fd00000000bc2fb440ab0a29d5bf50f00c491cb79d3bb773a995cead9f5e0a86660fc2cc755659a349ffff001d04d56679","01000000d6cc09ded0e95ed6af727902de728ef2994ebe755aff1a150c8bbe08000000008e42994e755461d99402c9ea95ce5e6978e672b1b849eb12d07cc99fc3a6fe16105fa349ffff001d2a9e0843","01000000c1b83b934feaf86960126f29932fd139ebfd921e5e0df590bfaa4a9d00000000a69178adff89615132a45eddcf1d725828992461000376b2fccabafa55ebc83c9f5fa349ffff001d75d39302","01000000dc8ac3b586e7384a28a66095745d92739ed0ab19a7c7a94a8747a99c00000000527b970a6507e5de6d580f2b3b7f78c291822f1dc21ec81e6e51b81ad55f2560de60a349ffff001d378084d6","010000000ff7abbf42186640e8a0b3aeb8bb3944202da901bc025810d3ec6e7d000000002314becc9a548992a7fb4c3c56295cccb92e08d335f52bc60ba8d0b70a76071fb062a349ffff001d5466d804","0100000082c89c00e500a628c12b4fa66504d9dec36f0fa030f8745f53a194dc00000000b58f4edf8bb1b5a08f7a2cc999a1b006804526039b0dd3ca7101954483e274e63d63a349ffff001d146a02eb","010000005502f3ddf83618033947e860f008909bc2b021b42aecc1ab8b90b4310000000012a1b75739c40aceab42f6c0ac605c1608b806bbbc225e59d792e0b598fddba43969a349ffff001d02606fa7","01000000c03afea963a88ae4679b24baf72065b1fde50d2c6f10367ea95f7c9b0000000034f1def300f7b1c69f13387dc0b8476d109ade06379fb3c3a1cbd9adc0754970866aa349ffff001d331029c3","010000002406ff3ea6c3e39217ef6b765ec1cb5fbde45d7c1aaf0299defeb264000000000da4ab471b734b1642387a13f0294036c48866eca7283b8d22fbb97a4c491cc7b36ea349ffff001d0061131b","010000000597cee1856357d00aedad2d3ba0b79cd69d92c185273d8937cc8b4e000000005b3c024e83476967db87ea1c7810b571302c722008ce2da6ac2b15e3c22575826070a349ffff001d1ee33806","010000003310f68bbbfb188aa8ae55b83385d0f618a5bf7883091123345fa3840000000031e31b4e2c5007896be83a2b991374beda55d6bd2238a3f2c20a8a1609dea74b6474a349ffff001d243e7e2b","0100000003b0c0d34a4865bd51868ddfa68f5a92a3f46517d6d2e4dd70043a85000000008f5c65d98709ad72251a5ad29ed764625f039930888bc5a78e13467288773023be78a349ffff001d4fa94b15","0100000052e32dbd98db7f5088e617fe3744122b2b5daa37c251dfba45b692d300000000de729f3203ed7ddb38ab07a1701e88bdb6394d290ca93894c5d3309fa65c3031c079a349ffff001d1d2ea912","01000000591ea37fe991baa9cc91113d521f3e9a09df70f1698794a38ed0ad6e000000007fcbbb9d8b2240858fdf0f6041d4364494984dbdacbd5fb22b0c863883c78d70437fa349ffff001d2774d739","01000000532f619df04d9e231de8332f686211644e14d5b633dbd51f06af57010000000003346c4abc896dad424ca63b7958f785a0eaa0f055acb924278c8f4a1855a6785f81a349ffff001d19222c93","01000000f5b7dae5fd6420929ba867771c1db26dcf967a22b228e0d7da6c054f00000000d5b2995c08babd8ab7cc5c68b3a5cbc14c524bd74f0280dc0c197b1d7df3e7d32587a349ffff001d2f371d4b","010000008c705d705b476996adfb5521824d8e077760d252c039a22ebb47ee5f000000003c43902ac18dbb2bb9113ede309518e94a84cd7e25f0417e535f61400e8c02deff8aa349ffff001dede9860d","01000000654efa4a1a84e1537961ac1ccba9a2ec50644ff104bd04f4790edaaf0000000017e9ab9568bb270ee62302e56f1b6e6c5d6c89d3a77dadd2b30873115e983f8ed18ba349ffff001da15f6d03","01000000fe814b05a8b25cbb02cf2f8ff4c6bf6206efd6be66479bf4ab3d74d000000000cc561ce4a05404524da68377d5b8264e6c24dbbc47b8f6df2f314c2eff2ab9dc518ca349ffff001d2144ff57","01000000316da8d71f0c33a2cc5910103989f72785aa4427ec63a5e173230dfd000000002b4314be055ae1bdf200b7d40a02ea2bdfa38d6583d23d4c7082852ac6d8e1b92092a349ffff001d1d98c322","010000002f55735449eb905df7757d297899d65633631a2f2a34fb00fd2219ff00000000bd8765635f2d6b22765b9e2fae9a60baa40d7ec4b3dda9e357f4bafe878ee7fbb394a349ffff001d316da172","010000002d8e79fa6b8f9c4f6592aff571d573b5327c40037c3c2f948d78135c00000000931b38ffd19fded6ff7ffded31b4f2db1fce6bce29f18fdca1e14a1ba67770827097a349ffff001d3781a983","01000000bf9c394246842ad1955a2b6c6a5e7ac2a1133619f269b89f52e6749f00000000f9d348e0c26ae10913d33fbe35b19611c0226f0df246a5f05890b2a441b4da0afc9ca349ffff001d21352b3e","01000000733ebcc3c3bc5fe2adec156a4f11d4c1911a133b08bec13413f9877e000000001658b837aac8335ccfd73aa6cd2ef752bcf97bd5250827d6ece7d62ddd18349be8a1a349ffff001d2df1bb28","01000000f8758fbdc47fca10b637887c0fec9f07da0c507aec7949e5f64a86b100000000ae81b1cb62bb92a6f455953aa38f78a06b8e6c457b2b8d7ca7711e7dbd512ed150a6a349ffff001d30f0098b","01000000902431a9f1694aca1791be5cf83690fb856084687e12cf1e3a32d2180000000042e37f773ba2ac4b50fb9175aa3a09c8227df71198c5ccb5877caa524759df9888a9a349ffff001d15454bb5","010000001de8ac405110c2f5a65e237fd4731782a457f2b3406efa15a5778828000000004dfc2ebcfe2b33049d0eac14a5ea671b67687bf91d76aa77dd6b0b6098b0cd2800aba349ffff001d9085e103","010000007b4dd85bbb4f0f3c9ba9224ae787b17f4dd34cc5adedf8d1920c98880000000039ad958fd2cc8168124f72e3bf40a0342e90ae53356db58dab8131af6cebafe314ada349ffff001d15142e93","01000000e6a9641603b731c843924267326ae07429699a2ce8edb3db1a18a95f00000000ba5a1d1d7d8a2f0cc3bb7552cf8b8312adde9b19879c394907348ba77cf62109d6b0a349ffff001d046faeea","0100000042a2978f0d0c175d5eb90b5506f389342e7d67ea71bc257ba591bdfe00000000e926f01b1dcffabcf053656ff30fc27419a872f858e4b4cfa0a1aaf133d40586cdb2a349ffff001d191c0586","010000005eef61a04ec1220b114345e972aaed2706010abeeaca544a11ca740100000000f8fcd42e9df89f253c00abfce78ca5bd001a7e6fce4f810fd447bbaccc27238107b6a349ffff001d2bed4f90","01000000f471ca988641adfa11df4a53ef091c02c4d5befbd9285917e224799200000000c91c067c172ecc950e40aa3ce09d641f8b0bbafef7f4f68fd6d72d1300f94189b9bba349ffff001d1b14b6fc","01000000c8eaec69ceaed4cb5d4db662269546db543147e99332e5cb3b73923a000000000bb2b353f67f12722e2761966bb05520ef91467dd4f749caa6f58555bb34dbec30bea349ffff001d15ab7c97","01000000d1860575e53ae9399e6be50116ec5bf3a0059f1b80a4bb6ca79fe90200000000f3240b7079511189767bb5bcbade73e2d8ffe510d9b554be1253c9861d888a28f9c0a349ffff001d3831e4cd","010000002822942ed4aba2e674c72780e402e30aaec622ca7ebd642f2194ce6a000000000347d14d73a333f044e21ced122a8ec073808d96d4bd25e67accc8ad3e90c179fec5a349ffff001d02f73b97","010000009184adc0f4f21fb30c27a256ceb0db518d3f729fac3b1ad9f4dd57ba0000000091fa5e4c364aa7bd059db06fd7dcc81198fdbd4f9d1e19e3825912c5f98cfe0aa9c9a349ffff001d090d8870","010000005155c1994c86829b466b54b38c462baf85beeb8a37ad4ccfb1efb8e1000000005cccb30fa987168127822e5ad4ba56d964aed8d00abf29d8410aa09e5fbcbbf86acea349ffff001d37c9191b","010000006b77fb38d79a168eb736e389de5bbdd959c368f373d5f5622e20e1710000000000453221ef38abd93b33b04b48a73863c0af08c15b5a9594a11f59f7591b6010c2d3a349ffff001d19be0b13","01000000a956c58548bc506189b63901cb7f915331bae1b737c96d3972acb80400000000500a9216e34d3de1120aa3f72d586b3bb305e567e9bcd32d393a24e316d45dbb47d7a349ffff001d30d806c5","0100000082a7eb161faf5df3b1610e00469637e48d0cb3a5a19afdaded238fbb000000004fe68e33eed075f971c7fb3e2ff72513f347e51e0b5a142a83da459d72a620686bdaa349ffff001d214eff02","010000002e8667f066378d17bc5889f813e7c62b35223aff71a5068f487366ed00000000062b346530606a88603b2b99e0d96a9d89e1471e426cd6d0b96f5af8f84c437d43dca349ffff001d08f37a8e","0100000070313b2230b5b1dbf315ee2b8d42a8f3233825c3c5122ad734616eba00000000f6c28135366dce1ba29a3d35d284089466af7ef35b2ab38518bc519293e783b399e1a349ffff001d23117003","0100000061d2f8ff81d3a1909d28252007f6251ea0fbb576a257e595e7eca70c00000000577248d81492de444b6b93783ff4da76ab3581e156d8e5900a3c67db81e0b0fb31e4a349ffff001d00fbad52","01000000c8dfd3f3de8e7503e6b3c894029a616f73baa463035444e12c801e7b00000000bba28cbe1dd7be06c5ae8a31765ae9ea852455fcc0489ec0ebf0d4858233875d1eeaa349ffff001d0250ea30","01000000789c451da0a1a9ea43402a39cc6a93ed592a0d65df3ba007b38c8d3c00000000379a5804a9150b5b3f46f691c17e8f070c8a619318e8b6f388a16f91e23b3d003feca349ffff001d29a12db9","0100000062f22a8f5a0eb0be6e133620406c1d054174297906cf14f7fb450d1d000000003927e6f11e766c6577cdfbfaac74e0072e158f003fe537d5576832d68e40210221f0a349ffff001d38081d40","01000000884ead15e58e76254a250a8a7731cbcf033e5fa5be66c70043d8767e0000000046f8dd6f38c8ce97323d50712941a14ef10bbfe528cafb2bbdf3316fc0a70c863cf5a349ffff001d15a8736d","01000000f9de242a35d7263a1d8f1eb3e9b979a60fd1dbfd134cc89cb5df2c6e000000004b2aafd31b102dbee492ec527d2cfc5e6b3b15cd0b980f03b7421f24054be09ce6f9a349ffff001d2f149e5a","010000002eca49ab67d0c52757e834ab829b91c19900eefca94d8908cca7ecea00000000cb915feed600107e1fed9c2204cb72a0cde0e7cd3c0573242c55b902b549a511e1fca349ffff001d20ee7c15","01000000c3d92501712e0b3444cb5bddc78fe183b7f85e3659cf7bb15bbf6aef00000000f90beeafa40ff38494ccdfca69a14edd3b790741792af4aeae4800252934531e7c00a449ffff001d33aba1c0","01000000cdccf4e3e3fec0662f50caac58d803b0a9721c00c3728aef2351b8e60000000032ad27596e018b395c62841524bb6c0e56b4e440a50b131e283647ebb55754daf302a449ffff001d5e80f908","010000003097aba5d25c0b6e1441ba5ccd99532d0dd6266ff3ad1c1e0fcb8e9c00000000fd2c0a9063f8a99462eeae545fcabbca94481f6a01ae4dc7e96b822d8bf458157804a449ffff001d14928388","0100000023d031c7454da480251e67588944f2dbea1aba7f5d48bc384b766dbd0000000084c262fa72ee316e362248aa7ec5a1860ce48b3e96f5541a01d6720fde90d559dd06a449ffff001d08b70a9d","0100000013e8ca115b03f0cd1b1853f469d329c92a54c36dbdb3758454274f2e00000000832afb0138a450539fb6799494facb9e9add67d640fd2e339b911807128d16e65c0aa449ffff001d2b868cce","010000001935255675022d055b282da900e525926e97657c9fbf3d6fe1cd95c10000000092918f68fa9aad94b29a71c97a88b56f3ee72aeaefefad1eada15fe9cfaf2202880ca449ffff001d398fe27c","010000003822ebae18944b4dc2599083dc0bc9153147cb252be76308d97c1da400000000b02ed5782ca93effe0d3095f4415f86ed8d0047bc838e08d58b00f4b91a5e7c65d11a449ffff001d1ba4f7e2","010000008b4fefe62e362232c1fa7c4c5703e5773a91491c0f9ae46fc107a510000000000fba04e8656c63b2cae89833a1c56712b6ca1d345dd51ff949abeea4b9b775619b17a449ffff001d244f54d3","01000000e967104a9e64d279e4a6012545bc658177e206e6867501173038acc8000000002bfb3978f42349f73c91d9e1af55d97266cbd0ed316140a94dfc0f9676946b0d2f1aa449ffff001ddad75a0a","01000000cf33fe4dfce20955ba23b4f0fe136fcb10479e1a4bc0e1774690c71d00000000fa0c04118bfb1a35cd7537fe0759678e4decbeecd77ccb3232a87d64dd42bec8c51da449ffff001d310b72cb","01000000615cc30075cbbfe620aa87001fde8ab5ce8b134d6017e0c1eaa55a8500000000250d3c35de0dd8f006d985276ec829d427762eab2a5f5c8848840abbd953873aaf1ea449ffff001d97ee9303","010000003aa4b68155f275949d14bbe239316f45be4a25ff8202729318f5f6a700000000f4c294e89aae2774051b08aebd07c8d01ed443fa08261aaad6700250ef728095fa21a449ffff001d00b17fb7","010000005a67e793f682a9181a84c770516d8dddb63b2ff4bcef8545f44445b70000000020269f4750da589e4c4ef66f2aeb8176932f94dde7760ade5c1c27c1773cfa4e7724a449ffff001d94f9fa0b","01000000661534d456ab381a2bece46941278d576f8be790fea18f1c66fe1782000000008d6f84ea9e02ab26c55991c4af31e5c61409780a359bdf7354e428083e8801572925a449ffff001d18803707","01000000983c261ccbffcdfa59de9e49b1b7bdecabda6739a2cd973e80e9de8400000000071a62fedf86189453098641b622f3f34216d7912e99a49f882eb8d54997df1a5125a449ffff001d290a7600","01000000b48e4a9c92a40a6e20857cea213b37c8fcba4f9955415752ccec0c560000000064d9ab8a649b9b1f516531941cf204c6104d55ea9cc97d71bd5257363abd7f335329a449ffff001d219e9a7e","01000000e1fc21ee7abfa0e50d1afb80cdb5987e72abe39003b2996d79d32e6600000000765e3fbe8207789a78a878a4359f50826a6dfb597cc1952e540e3bf8cdce01fa352ca449ffff001d06f25fa2","010000005fc54dfe48124f384bfa83e67c90b142f2f717676dd5409422d7955c000000003b6164e6518ae604c78088589bb3185bffa5e5f94b09ace6dd763461b88d938ae82da449ffff001d061d2213","010000008eaab16d40bb4945cd3b34e395508e9595b58aa7c71c534f1a71198200000000b822d2654caaa0082578ddf536c4372c3925a7e46d725f0a6667018777ee57cd8031a449ffff001dd998800e","010000000706450dbabe82a73879b53594a122befa14923d7f596af9f86cc0d900000000e9f0df29a12f0508a0fa56121b440b5b4277553391bf6d8ed6814d51e9f5e77eb431a449ffff001d21f94c78","01000000ffc73522bf430f390b7233163f084c910587b1e56c3837c496d6ed12000000003fdd1e156c278b17614781d5e81b075b261b96c928556922fadaeb3690b6e8378f34a449ffff001d373b0189","01000000dec22a856277ebe99f21a4b4b14f3620595a16616a7ddca765e467cd00000000ddb6e597ae086b58cbe6db1ef4ef527b3560a983fa4e6ffabbf635f722daae217e37a449ffff001d346a7e69","01000000f812f4c438007de325b46917a43859ae807050989f0bbb32ee58e89f00000000d155575ad5c915db0a574a482216168402478780705f676a3eff44bf260544cc953ca449ffff001d2c118148","010000000121352884226c5fa187e8f3cf3ebb2de3819919cca61c37af89da70000000009727e7f4dc9a782e33351699a97298589f265b0dea2beb52c9b8655908e41f404640a449ffff001d2bd051a8","0100000049afc99bc726f55f89eb5e3e4892bcb26c4f172bd4ce5ad7c7beadb200000000eaf302e1bcc78aa5b82be66fd6bd2269d7a776ddeb839d37c441e9cef0ee77790243a449ffff001d078daad5","01000000f8456cfdcce05b05380f3118db07bce9c91867ecb114b48b1b3c1fa400000000277f707d51919d5544492f5d0b29bff629de87d899f1688eea00c2042c2b1b741e44a449ffff001de15c2305","0100000017eddfc8bcdd787bfaa42b35bfcbd51cd2460d9e3aa4986e1caf004a000000007a6dd1afe0e11a9cc94e332ea6cff1e4b9a72ecebe691b7763c1cab8e806f23b1245a449ffff001d22a1384e","01000000e726ce68bef16485838628abe95d8a39bcb0b51ecf77de5bfac7c954000000001c28fe4074f67390d81078658d2beeba2ac0bbed023724162be859675a9b3c9dd145a449ffff001d8dd3eb02","010000005dfa5e91ad6468ba4b0bad906853626c965630b22d70f9fc1be6e8e600000000a7f1ef247ab4b46f5c36f17df4520c299ca8c54a496c80f55d15ed230175a007b749a449ffff001d077222ea","010000000960ef7e99aab8c9036aba9131f4b4899dfd899c83932956bdda6dcc00000000cc220493867eaf165dbc47e4eb5848236c71f473e073b6f3f99eb6232efabd456c4ca449ffff001d5c58eb0c","010000007a8f5997c482b1cd3bc2e06af2ac6ff9137e0af28cefd61a148968cf0000000088bf1c9ac8fdb140b17be57192622b1d3d58b7ecf93f10775f5f8a07e018853e9f4da449ffff001d7508d405","01000000ef27dcf30a21d446d9a1174556700f011d2ee148d3a0fe9aea2d9f060000000035ba45c6fc7751180bb54783c9d4f84e2fd747ff2da7eced645ca4ea1f3e01d8f44da449ffff001d174b2cf9","010000005f5eca54b15b5c8687f8bf0181f8cec2bcb8e3a8278a05ba99116d980000000056356e284aca5e63f1c5171264cfe7d4a8a41769dff64a72cff3c71afacc1b086d50a449ffff001d2fd51794","01000000aeae0ee24bbabf14ed30db684135965f3cd14bbca6cd3deb343ed25900000000b0916b2515c25c604fa268a4dc9251f3cfc8163c81fe0be28e59e44e9f29551d3055a449ffff001d1bfef659","01000000e025421331e91b2b6293be91c27605ccfd8c0cae84b4d127177f1da500000000be430fd3583fb5e479c1b20c7959a5516286fac01bdbaa5cfc7e99b3d8f220ddfd5aa449ffff001d234011b7","01000000431ef7a13a82d2b22f0f1719812697449146cc4466bff41e7c0528c00000000022c30d3f89a21cc2e6015930f0f1154cd9ba4fa02ffa50f083017cb2e5ea9019145da449ffff001d185f5408","010000007394af1a3079f485a2974cffff9668d307fc28898d26fc49c0fc349c00000000933bbb36f4c192a9a1bb75dda0b7b7e01417bebbccb1c03e9809b72bd1f91d1dc760a449ffff001d2ec718c7","01000000f50bdd0fb5cb432e21d9e60082a34c2040bf6bf1d1a16d787efca5d0000000003a0cfec3df7393c405682236c55b385dcddffdb698c4711d970a474c9a4991ec7e64a449ffff001d13fb9474","0100000075310efb29dd4cdf9e000bd895958d019d364b971c8c9b71be4865de000000001e0f77bdf8eafbac338f7bf917e3248ea7986cb4a3b2b6482543bbf0e45d73dbfb67a449ffff001d18cd3b8e","0100000006dcb13d5eb0f63a69c795abc286c7cee3d2b18e66a7281dbfa169bb00000000b3e6a92776034c3f6b95c106f73a9ae056c5fb930138d2968c94e84d922a3f3edb6da449ffff001d361d15ce","0100000099ac6b55cac6af325d36a37d1861475db80da629fc61c32c86aeea9700000000208d74c69635bd43c0123a287ccd526a472c82bff967ef72ff32500e200655b18a73a449ffff001d05ff13b2","01000000cbee8276fea1f847c11aa407c96c3fa358626d5a657a15aadb2d25aa00000000117c2b48b2272b826335aa4420fabc19fb0a56b4d2980a9ad36e0777a63ec72d5a76a449ffff001d0431dc5a","01000000edfaec960c4cd90b37f2d03bffe89287a1f4fad14c24f83769a4339e0000000050f3881e4094d26c37fd3f542de88166ebe3881b0551b8ee86b4de6d109b63a4ce79a449ffff001d3738044f","010000007ae6f63020dd3c29812ad534db2cb5279195588754d419f1aefcd00200000000052e0feca5bb5040cd3a4a8466aa2fbd14b845dcb282030295379ba8fa024ef7bf7ca449ffff001d0335d277","010000007606166e8e94dace5dc2f4476fdd67870ecfad6c351c99824f7789ae000000000b2bd127cab7b712b78d1f93f3a9851b140ac8c478f0763506e06ad932045246fd81a449ffff001d2012c2d8","01000000f445739d3c48ff50cb06cdaf7d03efb90af1f0780d11c5a4ec40d4db00000000a533e1ebced577e070b49e4288617b9a3e0f245434d9fbb64b7a76dfbacf9f6a5686a449ffff001d066607de","0100000003e38004696b1915f8ea7f6e220f3b501e1dda765e466dc99f152aa60000000005b221bc77e6957ecb9d9e7307cd52ddaace85e6e962590e2187648d1b09f34f3f88a449ffff001d08268aaa","010000006cce77cbdb480e25cec9f24903e8598a56e22ca084e362ef668674ae00000000621d6644ec5a000f7e93cdfcd1270bef040e34acfd9bb5845bc06f75c50561a5358ba449ffff001d1cc3d966","01000000f99d6e0d773fe2ad93fc79d86e224c2550c4e8dfae349bc10d5aa61500000000327ab87dfe2b251bfb57ec5a671e995311629f118da1d8fa003c19fe81b768bba390a449ffff001d018a0491","01000000b9fb3a0a8d4d5dd9f4c68fac1b952a3b9808c9d2295be6ed7e9309e100000000aae47c1d5fa368cb905b431c2c2af3b7a439d2812b881deba5b34d2905bc76968793a449ffff001d2794c4f8","0100000023d1f23fb1a283b125dbfd31e2d4792eff28bb2976e54958fbfbf23200000000212075bb1b087afc56e9347df847e03a5dac72aac07966a3d396eb1f59ea150a3a96a449ffff001defaac908","010000004e5349d59f80a6e71e2d60fc804219a6b9ca7972c7cf82e39616d20d00000000966464d35339419d0e783a1e85ef14301217d2e8c62793ed6ad841ece292fbce5299a449ffff001d20aef750","01000000af91cdea28273abff426007f1ff331607db0f2070a153897558773c90000000040882e24f26dc08bf7cbd6a945125cfbb5cb722e759d1fbdca526583cb0338bf979ba449ffff001d28627f12","0100000073612aeb3c92322a2e8550dc8db2bc7ff32dd7bd5fb79697530af763000000003eca78fe9d925d5efc3ad67e9621a788e76324fb0a3903f43ffed44797ebff69229ea449ffff001d314591f0","01000000f9ebbe42b92cbe9b3c21e22d99948f77a2b12fa898b15dbd88121d38000000001712417ad00bd9dae9e1505bb56661a424a54c045bed2b457fbaa38091f4999561a0a449ffff001d1c028efe","01000000e244b043e43d2a5869f9c10c89ecc23bbe7b0dcdb562319af759b64d000000005e389634f632e5de4c3c1f9a156333c833086377768a1c1ed8aa90f0ece4a3291ba1a449ffff001d5efd5803","010000000b562276c703f30c76df9af21c06c4b353ac0c9c081812edd84affa1000000004f2e10e39a21a406ef92825cdc2beab64206b66bad9a4e31bebf9610fc6d3e64d3a4a449ffff001d1e23d775","0100000069139329d249ab884dd2cc314b2a38def372f08f03d7fdd08187f5db0000000021504ac99abf584ef694345a4fcedf1bef1f94574dbb25d9db634749a09aab7a56a8a449ffff001d293a14e3","0100000043bdf89ea8f481e7ab41bbca835c13a2ead857e91f9a3e9162cb830b0000000028372544a095d080ff7a4b6fadddbd5bbda0312c79530cf3ad0fb5ac8513abae17aca449ffff001d282a73ea","01000000f163698fd932a4fc0adeb67a40dfd88702f26278634c4a3864b61c93000000002df6293a341157e33fabd6893f7de42871eaf2c986b0ff0bcab11b6b929d78aba3b0a449ffff001d20667667","01000000b6f9d43fc78a7fa5f5ae952447af1b89cec1bbb3b4077cdcafd1689e00000000de8b328086f2e40fef3dbfd8f9d9b1c4bf4b2419252db5ad85896a5742cae7f8d0b2a449ffff001d1ae8bdf4","010000005dde69c2dccb90c1c07a4f3826b88f25e326cbba058808eb45fb0c0c00000000d78af885994eb85b825078c01c707e78e7cd2e910b443bb1e176ca1abc646f3433b5a449ffff001d1c91dc5c","01000000075aaa1b66fed7ccfd6c4260eaa1940ddea0aaf79602ab4585fabd0f00000000d896caa10916eab1789fd9017a0d828d7a9ebd13c70b1a7bc8408c069b86e518f9b9a449ffff001d3a10a381","0100000052523980c5b5ad1ebb5ad7e37d8fee88bb4fdcea657d2e217a4c4b0700000000e724fdcb272439a0545931a2722525dcd42e42f4eca47092876de4c6c09147d6c1bba449ffff001dfe619608","010000003f70528f48b0225b5ba63f73e2c55d0af457236e2d8af4d73200908b000000000d4af7a509dd23d55c90faf3054075a44b831a789cdf5525daaf6b253e2c4f1418bda449ffff001d040112e2","0100000003dc3a23b64e4df1f2847075101091eff78e6db3bf5bbcef9ddb8f5f00000000a35406c9ebcca7ad96d8450c3d7374b9e819fc74f212d8cbb1d474ef13b1eada43c3a449ffff001d08ccbc23","01000000a0942133fc387fb7b79baa0a00d6c2feaca5b1208a1eeae18972dc0e00000000ae9698557784f50e5ea4b49489686447d699841f0662a960105d0e2a5c02929443c4a449ffff001dc5a6c704","0100000080370d3fec8a09d059068863aec3f788dae4c0fa0405c89ce261a26f00000000538f96d5f19e3f4601b6710c46707cd538d1068d64754318dc6e507b4c3d0e6177c7a449ffff001d309b2d86","010000001573a74e72bee3da2dbf95915cbea3e04dafa4958091ce838506552c0000000089ece2f062934d9be6610bd7afb0953b8733c38a20f8bfaea2160e12c791c8bec2c9a449ffff001d146fd106","01000000cba81879348b4d74cbda59add03988f940f3276125a8817945ee88de00000000c4985487a811bed6ffa0ecae87498edf54ea581da187bd33aa79edabf26c016a39cba449ffff001d04e5fd64","0100000040c8366410647d0051721aacaf212773dc8307b00441dbc3ebd6164900000000c05d59e50c6fdd949a9c927d1a669ba4052c0bad6ab7724bbf857cbf812c4e2690cda449ffff001d331ef306","01000000fc461619a5d67b3026b7e0639acab2576c8bbdad3e86e62d0b852c1300000000ad1c764ccc89c22bfba3d394906a535dcc5d2153d7fab1b74d721a50145d3ef7a3d0a449ffff001d2c8c7dd4","01000000d988dafeac367cd79fc8f017632136f000ff8f03f8ba1923d9e186160000000039aca27c280ad595e0a5772a145e7be5f9686dd3123c6a1849d98584173ab81b94d5a449ffff001d300768fc","010000008705de795caf364628a3d9c7ba9e137a6c636ccebf622c455387d89800000000aee1d83d90933f543119cb0772206e29f70bab5ce70ec7d4a21def0bf3f5419f14daa449ffff001d24975e47","01000000c9544fe13e15ffa7464c08e87bcd2a15622a5732882bda5aede8808a00000000518cdeb818d58fc37c0c66358fcda81dd007ba90365f9af1c1a8b2dafdb0e487a2dba449ffff001d6abf7d06","0100000026939d26df34de8683675d9c43d65f9f0c5c8a10fd9ad2f706798b6600000000d9b39f1e6e26dc58159cbbe00927e03652c235733c8c52555b119b23e1c2790a4ddfa449ffff001d25ed576d","01000000cf25146b2fb00a6585c8a4f9a0b7b607c7f9153f64271fa34ad9b2770000000035daaa051f908cd1178bfc53813af230f3c0c4ee1152d9a508cd936ecb4ba52b53e2a449ffff001d07f1e6cd","010000003606b529b009ebb0138a24a799852b0f46e5f25e4b046e264e027f9f0000000090424b02ffe3cd8771205ee05748079aee672aab108c8f612626713d7776bcf525e8a449ffff001d26e9c3bd","010000005d58db317210d50730b9f3b803e05775a1001dbb1cf136237cd3466000000000ca717de1d676ccd295c770b47c3e5bc0e142d0d68a921d11e4e861ae618e5fdd79e9a449ffff001d023a091c","01000000c3ce7f76d0350fb875326be66af7b8f534abf03ffd4e92a9a931e0c400000000e355a092056f98851ad0d8bed9feb93ba5657aa064b9cd157757cf9c109569e1f5eaa449ffff001d20b6bbb3","01000000d913e3518ad0b92fa673f7f573d4aae4859e9d7556a404131d971053000000002e32385096bac2fa42f9499178ebfaa75a99078a908dcdc777ad42234da87e7371eba449ffff001daabae701","01000000651ac7aff6292e5da71bda963d3b0c3714c9351ca406a1742427b64600000000f954ca9820d4430e237b0ee44c7dbfb8048f796f2580f10b20ea1d495418221ab3eea449ffff001d3a422686","0100000041fb0d62065cbc1c6d3075df5c326aeaee89533f2058e423c0b1581d00000000a895a92071a90eb23b0a017fab2d3da4df77a2e5c8e4915e35c6f54c95f8eb6e26f1a449ffff001d19cd581b","01000000de1ba66a6cd3c43ae6d2210ced557bed0993f61f1c332f3fe0da9bc20000000048f7d79cac93be6683bc67466f1906fd889b6907d26c13448f92232b9968a75c5ef4a449ffff001d37fbabf7","01000000c6c61b00eede5a9aa2e96087dda94382b24c1ebd4444856f6fd1621c00000000c86032b5d42616e1b82e093f624bb7a04c4c3f57f1b73a4313d90d479496712eb7f9a449ffff001d00aa119c","010000006f7701ddfa87db21e25ad4e0d5f929d339af81e5fabcdcc15ad6fab700000000c5b31494cd0a98cca9f1a68b96f30a63c11a05c1a98479a06fc8ad87a6c9d8f74dfda449ffff001d002c7706","01000000424540579849129d6d154711ab0080a0688919cc80c2964524e5a5ba00000000b7e92259cc45f93f4ebd57dc6a485f7b6597c5e151c7611ca795e59e24516b70c101a549ffff001d213205f2","010000004daf97c8523f3cb39ac3ee701365b907b82eabd4e3343ab87a2d8e10000000004878e35cb673a6af928b5af049b81d2902144c7e47e89f1d011fc595f3f79521a903a549ffff001d1a5d4751","010000000c56b389505b89d9a5e73d3b97031f1e668d78c153a4f1f99ad2ca930000000080c3afda349b37342d1c5de26584d94f50ceabcfbcbb3ced568c0a59e0c1e295d808a549ffff001d08f15b68","01000000d86591fae9fa580ebef7442f4dec3a0734955015eede89725184fa9b00000000544fed9acd80adb59b09c54a549d561703655fc477e64c735b6b52f1c2b741f76b0da549ffff001d2aeedcc0","01000000e3bde09fbd1059fdda7613abee15000195bd995a2d5c34accfac623700000000b01d8f6a272d644d5f4f8d3d2ecdd728ad310cdb5cc80b0b3b7ef80791c6d8dc7111a549ffff001d34703723","01000000886081abd7b68938675b6cebbef14a92db1bed68a45860f23d7b929c000000007f461ae0a0cd346b820ae8e05242b7eddc496f869878d1575a3153475654f99dbd12a549ffff001d53c66e05","0100000060d7a220cdef2a30cd46061131afb51b87bbf663d0467c27631d08d9000000002e64dd7ccc893aaf06049af92847e4c7b4e9f902b41ddc83dfbb2d5b2e7c6b54fa16a549ffff001d031dd5d9","010000000b99b92a92e71fe7de601fca5a729a6b619610fe96bc867cab2d16fc000000004ec84405640c1e6f982ebeb78dd77c9b69257a024ea2a80a43d3ab4b58223b779b1ba549ffff001d142d7d33","01000000b533b3de6fff2905be205a07bb019532e6f5ecb93f0d3f7572ae9f82000000003e59351970048a6d0cc1e4ee95e5305a71d9f7f148b36e8774dad91dae17bfa8a820a549ffff001d1481aa25","01000000c7d14174ef5bfcc18c584949cda366df1fa9d3e1192f22b54e5592d7000000008b41051de4e32e7dca27a6932597125a6f81e4f63ea1f27ba4d336432044491f9f21a549ffff001d6eb59004","01000000a5f4d9bba6ef111acacc69301dacb033793a9a3d0e0512f98cab7393000000005130fd59b2c212e7f8fe51a0d794672d75631bdde74c9cd90ec0cbecb645b07d6325a549ffff001d2dc57c4b","01000000577cc0d081dde6f1fc927f9b3929611dffe29a854b19a21076a59fe800000000384627017f1fc46483190b0fec5c9e6f9f8053e7f2f4c0e6ccb85a47a4fa2ae94e27a549ffff001d4beacb07","01000000be4481f72cf67add18306ced9f0a061025f5b5680be40d72f842194e00000000b8dae07cfbd211ede9c4c07df427953e92c9834b559247656501f654363a4b68cf2aa549ffff001d0763b30b","01000000f56e91ce795e79d17bf14f597b97ae41f76f5dff0c989d8898acd97c000000009885b29b8beb79b76380f8ff58151349e4a23a6059e0995e3f1a434b11e8ec45c52ea549ffff001d06252cae","01000000bb0c61ad759da0e4ee41eddedda9af6e989c8a29ca240d9652b37bf100000000967bb0a1e4a71998e5fe1b3c735489d8b69f0d485b3c2435083351d9bcd7f5570d33a549ffff001d23297df4","01000000c95286a951a775fc12f7ddd779ae90bd8867856da8a0c9053800ab070000000068389b9a4d13e1e841d942f3de0fe971774f9f94e78b880a7afbccc125262d8d6a36a549ffff001d25489731","01000000abf0e0e1c59b4a5613c6d5a48afdda16a246f81566ea49f15c18aed900000000503d6b79695e363c3e654465cddf6ad0e3598c46b362cc5232617b248f430abef13aa549ffff001d090cd390","01000000d599d63113714c3d96dc508e15879e8ae8eccb74b497b2be370211d8000000001c863157048cf6f3644667aed1eb5493a67d2d562bbb9ce35ccd21fea825702e3a3fa549ffff001d08f3fb81","01000000f7ad4f3089ef657485e56bfd3dc6b3dafc35f119682817ed6500f11e000000005909ccb056c483d28c2055561479c9d4e721066975a800805531b9b1f16735186742a549ffff001deb61800c","01000000ba396e837f9c0bae5b0515b81704c6a2f92ae307c99b20249be4d5e000000000bf9fec5350add3c27557c22c94e8f6136af43cbbd56c58934bde45b70c42dd85e042a549ffff001d2778517c","01000000fc58eb3de9230bad2148a7e093694f452de938e547e97825283568a3000000000010859b86a12126571e150d7d478cb91e8266f3305af1be41bac6dbbb371654ac4ba549ffff001d22508c28","010000007e51abad8253000f239c0d537ab2ed8ff668504f185f99eb7c3276ba00000000e6851220bfe11a9935a6806318ab8bb8c18bb900a53580d92ddd650401863bc46a4da549ffff001d17614654","01000000cd0b956de9c1686a41c11c396fba0f32d8a0328a5f78611fd6c13dad00000000090ad395aa8ae80c036b9f88efec9a265a9608830e610abad38b970282f025638c4fa549ffff001d14adef9e","01000000b3939edbc8d3e07f1b0472fb8c7fe3c277cc545bd2a1903adf844c2500000000db75deca9e66400104d494bc4b4c40e442c99d5965546605464ea0563d9bbed14652a549ffff001d0c157207","010000002773c2838801b2f885f6bc878b8d8494a3bcaac646c1f2a76346d9890000000088447baa2010e60968f2317ec9ae8545b11f4c20d1d9da0e8e3c6f9d2d04ea40c654a549ffff001d145f7be8","0100000042a0e54aaeeaa83c2d9caf9ce682184a1396e7dbea8afe5f5f2c4ea800000000641d63ce7ba403bf3daff9c990555b38c27805908671b16187294caf30ee79423f56a549ffff001d253cf903","010000006aa2777287dcf42e15ff25e3afa077a72afab88491113cc05452dd4400000000cbe51451cb30fd455005b736f844c2600298509c54185c63e9ce26ea0a234028ff57a549ffff001d2e1a7360","010000000fc919cd0c494d2003ce5583cf43225752044bc997bfbdccfbd98bf10000000049996e798795716e4582087524c2abae65c4ce52717cd139e9bab609cfb4fcafe25ca549ffff001d22cb17ef","01000000afa44d03f19f370643d8c9a473ee1f28d2d24b710d63086be92786be00000000467182a331fe70f7ac6b06eaa5df62c1996f29702bd6f7602851d09c3ce351038361a549ffff001d39ec82cb","01000000e9d5bae97127f1e9a05f085135cbb9bf090616766a85ea543f0f2f0400000000213b827f3cfff727bbc03cdb7d87c163d161420a00023a0a554fa2a5787bc0449f63a549ffff001d35448474","01000000878db58a738b89ae8baf68472f0c607f8ef9b986c126e4a653c3c4fa000000000ee2cd113a19fe79de457b141494d5dea110bf6b25d58c8470404b312aed50309665a549ffff001d52a3c603","010000001ea7fc154d3099fdf3a681e0edc69544e9ee13474bba5546623be7e600000000dd503864e530f67dc078f5ffe9499feb00e74a51f6113a92d2b9727846ac53608e67a549ffff001d25e9c45c","010000005063ba3ce7b4d65498e66bccae51d8451bf65a985d22a091322d222b00000000dd4802add589b490e84ac5ca0d88a2adb6aea73efdb4fa2bfb0bae05ccf19f582b69a549ffff001d6b34b104","010000000b40c920bfb7b7c49c0c7d0b48b09f3bc673d60ffe9679445e1b35a700000000bb71771aceded49e4c6036aab8dfedeee0ed3fc1b9642241c669f7e510bdc64e596ca549ffff001ddcc3e60c","01000000b775c8d807a13ce1b309466aa663ee63d33ef546e20fc6928ed2ba83000000007736bacbe004c3bf2cf677fe22351d9522cdf3a63d916253f176a8c27c7e5e54716da549ffff001d09c0c4b1","01000000e6d47621ce0fc933bf05c7da9e0d181c5134848b08ffaafcf92b503500000000dae664f0607fb2891525e15dc4e5e4a54207cee617465c6fb3ff6026313a860aa274a549ffff001d2788ca1f","01000000bf11a14b2b4d704c5e4546220c3156cf0273ed1781ef8636b1fa335d00000000746588548672daff710dc7ebd3b989c2c0bb368c7133102e2f2c9394bda866401476a549ffff001d22a17945","01000000c978e42c418aa5c9e1e1cb306ae84cd951fada02d88a364db1d069b600000000726a129feac0bfdd91f1579ce84083c8ad38e2ce2f5b2cd47163f00dd0331082707ba549ffff001d1b7b8370","010000004732fbc1128701a9f9c70af0a4ec40fcdd9ba96fbbc506e32ec5660f00000000e285745765952616ce9f75fa13fef6171fd8fad73ab3565de8b02f6b067f01b8ec7da549ffff001df435780a","010000007d209324227a6c764998226f43cb276a8f2370b45373c7634ac8ada500000000f968f384530dc22b3c24ea819a2f81214eb7c215f6726da0117d3ead7a0e55996180a549ffff001d2363e661","01000000d367c50efccf97729dcc170230642bd9bbedbcedc0c6b66e64abf520000000002d9601b0a215a1289ae974d959b522c450104e83c5a4b69a38fb634bd806117a9683a549ffff001d09066e49","010000003949bc459671aa5cb4826f6929fc39ec32b1d3b6cf9ff0d1dec781e30000000026977ab38bcc749adec815d2df693548aa0387ce5d2e760596018c1f3d26d4491587a549ffff001d1dc08087","01000000107276bdbd03b16a30270ed42f4224440776bb1369e06ca65ae5225d000000002a46cdad3788ae5ac9e3495911098d09122625f145fb3c9a2821d33e8249c17d7689a549ffff001d00164511","01000000888e5e41eec9e18faf41e506b7606f56b35093a15ad9eba326d150b800000000e15cdeb831348555e3c8ff496a6a8e742aeabe3280231d3788fe0feb3211f0c3318ba549ffff001d00240e25","010000004173f070897d5d37e85a55302c109eba1014c0cf7cd30133e7450a76000000007d3d3727a356a1fdccc5c55f891a368cfd95377900640f6d305ac8d239297cdc028fa549ffff001d262603c7","01000000f87cec042b03d5c6079f9e8fbfc763a66ac852a2a58e1132ecfca793000000002b04402ce0503d430474ccca373af29b838b5641d9c7056067726f38b24079955991a549ffff001d354aa408","01000000d122903a92f6ba263e3f21f72bfded2b3357f151e6ab602f2cd4bc99000000004b3ab10a2ae6d1ded9335e4b0b93744b3d5901590830fe3c3d860ef64413f3a5ad92a549ffff001d042ac913","0100000084a36558986c95f373f4e9403f9e4df4351227037524b961424bebed000000000d44c652e090b1fad133a1d90a8c0ed95512b566f9433267b62ee11005373c53c794a549ffff001d08bcef30","010000003812f9f071b9a06458a6cbf6cdbd59eec636d6045ecc84c142ed104e00000000d5152ba9927c4180a663355c358eab2bd6db3ea89342d2ac00d8a3d712836beb0d97a549ffff001d358e24fc","01000000f37381f0ce17dcb0d1e31b0aa5626c80f88c669df09963ec0f97b2e200000000aefcbbcd7114ba0e9b14b5441a46a55e36b37d695d7d12a93a287101e583f6cec398a549ffff001d337eb2cc","010000006a34f6ea3345aa7f100b5bbc748d7153869f8c1ab808ab28734b99e40000000061631171579f4f35472421d247154a2604dcb55eecf565bcb3cf95ae06e92fd70f9aa549ffff001d25ac6bc6","01000000c7e617f9e8282aa81b413db60226607e7c6ba3ecbd5982ac9438fb650000000081215786972c8ab44e2a29491f8f035ddb3a1081ef0e1cd276e79ea55807c8d99d9da549ffff001d18fb782c","010000001d4f7848491cba1e17376c9ab93889eaec9b54a704ac8e72d5d0147300000000c0715619e20dc961f816f27c8b095e49620dd006bfe0e7933dc7d31576a07b8166a0a549ffff001d32bb6bb1","01000000be006337dbd98a77d4b45b7242c8d660ee30ea135bdc5b70ebd02374000000003ab22b606e436a14e9a79b805b665699bf486263cbbb77532240328a58378dd7eea2a549ffff001d1bef2eb2","01000000fd8e1d7f234a0961f007134c9fbcd27f6f1e5fdadd214cd1cbf6b33c0000000006714071634d97dc98ee72cd3d373c0e446b21c61560ef7a76eaf4262a1d151788a8a549ffff001d31a23ba1","01000000cdb53dfd0f4a47611da1c16ca93bd97f1ece5dbfe507314ce377a4d300000000962261e092117349a4cb9d58ce59bb7f77f82ac3db89e62b813074a1e9aef66b30aea549ffff001d219208a3","0100000005d93a58d443c23d9ad7f0bdbe70edf1a768d77af9cd2fc8f8c35dd800000000d22a8debbf946bc6b1be9e66593d0ac48c4c0df72b8bbbb89afd01dcf4b89a1e7eb0a549ffff001d05ed80f1","0100000069aced60d14908aa3b404765bab55a23292fc0f3ee9bcd6ff561d2ad00000000b7bcdcb1277a4ebbaf7c850e7954a6cc7419ddd73d225f2a023879f6bdc1b642efb6a549ffff001d062de40e","01000000dcc74a2ccf6dcd6bed06be48478c5aaa73ef2a7e66fe38c588740ef700000000d3b019fac2e2660f20d3692f776dd747bdb55ea9470cca6da77d494f965bb3de8cb9a549ffff001d2e53c555","01000000e81203b81f69127fabbb73114e8001f6b8e5302c0afd739c5928f7f4000000006e5725d91dfa73fd68547ed5c5958a34c4f9f3270fdf8217b9c87944f40dccc499bea549ffff001d1b0090b7","01000000c3804d8566990270c13d6402fb1ca0b90b4cff60cf0e6a2a28bb862a00000000ae2b39c4c647801e5d8775943181bce3071677c77936ab80f8c7e21cb24b08b362c3a549ffff001d1b802245","01000000678ae06bac3d7781bf0ebab59bceaa9330e6e1ddb73278dfeb6787fc0000000005ab65ecdf39fdf7491b6a56214b16c5f87b00ce1a7b1ec0d674a46b873d7fe0e7c4a549ffff001d29d22b85","01000000cdd66675c04f0dd1729e8413bcd1378a2382cc1e1ab29fb10f2ac86b00000000b061b2da403bd647ab754a9e4ad0031f680a26a8d54ad175a10c355fd128c3b5fdc9a549ffff001d1902ae89","0100000085132116a581294ebf624b82c14afa8e51a5f6cb249f7f3042e382eb000000001befdd30cf14e0b19f49519ca11a6f1726a21ff6a83fe21b5235b937075e7e27becfa549ffff001d3189efd3","01000000e0eefef4b6db52a6be8af56d0ea417880cc7aa0df9cfbb6b6f92c789000000000874763944c20daf83691b110b5768877959bc200d6834e20a8a9bddc87435af7cd5a549ffff001d1b73d3b0","0100000005166c3fc9521f3c12b30c04175f3066d1e1065468ce5b1abdf23f4200000000d1a61b3d29733e4c55bdce63de3bded7c7cec4d371336fac56e49228c1bc62996ed7a549ffff001d3171ff3d","0100000028b0722a27739fcc0f51332c1a20a7bb02da681da4acc9b76e97c42600000000596ce096d3eaf81b7afde89dec9961131e7998b1aa763ea5a6014baf755dba9848dca549ffff001d2e425dba","010000001954fb34cc06537ba7b85a72c8292b44f01316764d7d27512d8885e30000000072ab6182898ff6e4fb51fd1a646f64ab10ab2f97084d09e3287aaf6341c8b7ae62e1a549ffff001d1b6d83c6","010000007477072d2741e8c250565a6d3031df6357f0ba7f50a13df1fba364be00000000bc654b13eb50e258018c599838a70ab04ab6b6f6961fa16fc9f9e82c1dde84ac5ae4a549ffff001d2af8aae1","01000000c7a7dcface2eff28e826f4020e8be67afdeb32b43401e8a8f97e816000000000e2cd07f0aa96ea093969746355b5576a544d1f235739281aabafd356cb105bbc8ee5a549ffff001d41c20805","010000003f4ef30536d68717420ea2fc92d8916154ab5f1aff184caa81dbe29400000000c2fbc0dd4d354c94399f7a1da3b8f7833abc109ae50f201c0f452e26a513ff4150eaa549ffff001d34c326bd","0100000019c966dd8a7cf2b99cc3357e9f5c0ce3f2cfd0824c63bdc1dc61f174000000001116dfd0c6b137d0028503ec240c87091e692a926e635d53ef3bdbfd4651c40f9deca549ffff001d3681c603","0100000015a70b7200602b79410b51a49129a101a13e0b202d2f1ff8a5fba05d000000001544513139dfbcbeafda7775cebf0399422aa921e4c49e56eef9092c032c399534eea549ffff001d20803658","01000000b402284747d2bd2be4c88cd12cc0e34a24207b3e3e6b68e27bcb9dc800000000e18725495cbb926643be8b220ba674387c27fec4d8c2d28ee4c82a4f6de3718e35f1a549ffff001d3667255e","01000000e08dd089f1443497debef21467dec8f5c766be34c34d48c541b859af0000000078fe558a38ecc4fc49648484e9e4cf8f7da2a9dc0942d627698e1d80539a8e8c7df5a549ffff001d26bd23ec","01000000c4d1a89347a19f2057dd7a458f1d8d111359fe9d147fb3d14ac74cfd000000001a0591f93a11b1967293e6c8da8d2352d992b27dfe39233e08633f4611de46aaadf9a549ffff001d038760d7","0100000025e7b43f01e540a99c4b978646a8cbe960a01b35a916425add4b2c4200000000bf2cf10ab5f5158e0caab2f99d433edda2a94c5018dca123b4bfa78635c8fd23dbfba549ffff001d02a6a908","0100000094eef318e02ef8c8587795eb278a7024ce2abe7e67a68ee560b8ae0a00000000d504315c6b2b0f59c5610c3f1092d831cfd7bef4f70a3b14274832d2b89bf8adcfffa549ffff001d1f5d805c","010000002eaa40201609c33f782b90711116083053a215ad2b04f5fa3450f57700000000356cd737c5718de57951ed5bb560833ee52bb3e72e059f0b5c12dbfa62b5c255a403a649ffff001d34b95b3a","01000000f03e3b6d5e8ea8f954e6b9e82aa7eb8fca3417dd894cbd9a5c60770c00000000930a1c1f0d049b77c014b8a32d73025119b85315b90b26b1886e5befcd74bff79e05a649ffff001d2bbcdb30","0100000099c2a30e4a9b0d1953535529c80520daed35c4da8b8c7d3e30ed2aa4000000003a6ce3d49aeea98bf0bdade0f4f4a54406428eff4ce3a5208967b1353437e502de0aa649ffff001d3a8807e9","0100000025bc2b7e1a18b02edb35fd12f92e7bc7998c0818677246ff5f37d5a800000000a6752c350fb768147cf5c1b0fda87b4460b99e809dff937f23e39dcde5394e883e0da649ffff001d254f5443","010000003596c7428df7e43c08b365040f2c7c6f22882471013a62a2588073d800000000badb7dba1b93af32b652569dfe1c5f54b481c5ebd9f984d01c3fe59c4a63cdf6bb12a649ffff001d3206dd99","01000000fff2c7df56cf9cdc55dbe46e44d761d9d116ffe857e65d3451adf23900000000af8292a7287ab419dd622877cdfcaae5e2b7efdae8329ecb6ad69ce2222591823116a649ffff001d24e2100a","010000009760e8ed49906298948f0823a3f7cb7bf2b3d91aa4d15bb0ef85c3200000000077d4491b297b58c097c2ad1c868f776ae70436660e229760ff48b43c0e2de5487618a649ffff001d31d268a4","0100000076bc9d8b5210b61c65c16563543721cc59ee94b5666369b576aeaa770000000032069a4876c33230022e7f0cf0a98f292ee0eb706b8c61731f29ae849fc76cab281ea649ffff001d2fbd6231","0100000046f5ad2745f90ba9917e5bd321c297a8aee663b3906f97206d6e6815000000002dd4c5424bfc691bb36d85acf332fc430261461c635aefcabc99b42cbae5e26c8420a649ffff001d092cac42","0100000029204f7b9eadbdd9f705d45e61e392742c0145e06701a2dbb1458746000000006a9dbdf6e8e004f0adbf7d75e7263fb422f0d13b4fdcbd1b0e49de4bb379a1eb0622a649ffff001d37423bf0","0100000072d6a52cb5e628399eb6ea691630fe36d81621d2705ce0e9673833dd000000005733e0c221c70ac18f3f41d30de2b926a3921a85bc8f446ddaffb6bb46815ac98927a649ffff001d380ad7af","0100000009b34141222485cbd8178c48918bfd4dfc3458fcbab38bf3d49acae8000000007b08943566162c370b9e44f0c380946da28b197b8903769f3c9efef523c980e67829a649ffff001d28aa7846","01000000419d16be789412c0376804c8b3d4ca5043da319daa14d457f68df29800000000c16d0588eb1686cc2535a1498c84dded7dbe39f5a6e9328fa8c061bbbe50ee5f9b2ea649ffff001d26e49eb1","01000000a806065310ad7e562f4fe750761abda850f8584d263c883f7f55ac580000000039033eaac3b80c6aa220583745107b7d80958b5d475f1d16e0d24efd3b6a8fb98630a649ffff001d8420ad07","01000000c611ba97fa0d2072aeb6545a29b6f6868483201283980cc5f8d006f400000000ffb6f1fbb0e0673d980848af3daede6f7af9c18c56578b2e08a3121266f2f8759531a649ffff001d38d8ae16","010000002a38b36aa2d5a2684e99ff6f01fd1908761a662b7745bdec61da7251000000006d982ea37c46acef6ce7e8abe5ea33d8877febd722c825e84ae9fe9c6ccd5e818c36a649ffff001d3a38def4","01000000284da2d60dd1583f03db57fc4681d7debebee69f0b3bd592becde90900000000a26a9c37db9904fb4ac63763fd3a56465a568422a2334543a18a2043108546fd4e3aa649ffff001d17c3f044","010000003ca4bd71225ecea347970e80f11e1ba52cebc1daf4368b984dea8e8f00000000ba5c645a4dd03191519d9a95cff29d596c96d5b212306e5eafef8ea4eb2a81a5653fa649ffff001d01fad3ad","01000000e173d76de5affd4a972b84d93844350d34c1e7f5d140a95f4f48982a00000000780fbe6a12aecb9a7eb5e0e9f0291e7571561921c8150a81a153c934784c239a5945a649ffff001d1a4f56ff","0100000079475aace9a8206438ff6109a1b84f5d13d02c5572d60c3e5405f533000000005a841b5cdcbdef4d1887c7750dd8eb964c0951af8407931df9d9271c0324f2038049a649ffff001d3fcbc810","01000000066fbf54b2719b62d3477ec2f6a704035469c333c6c4cb5bf47dec2400000000fda787f3cde48f86b3c0c42123965e232b0caab115bfb01092447697456172cfa249a649ffff001d04ed2dfe","0100000091e30873e7d19a5e55dd22aefbd374d94837bb01e486bc56aa36ccd40000000055904d322059be2a7d0c9552c8f30b3229317869f23004261785319e32c76334b54ba649ffff001d397e7771","01000000a0016cf1b625bf1482148ac48fe6acb86136c38d2a14e8fa22d94460000000000ae39e1e952fa1861f08ff0fc793b8603ebf342c12878fa017d677ba98ccfba1a34da649ffff001d00950bbc","010000002c85f99f8c918a32010d42a18d01a9504967ea975cb7a23547e6730a00000000baaadf15eb554b53ab4fea47c9a91102907c78330cfa0f4479618a1095ef07dfd54da649ffff001d64dd3d00","010000002f77d2deba39aa1aa959d875acda1c1316518d35a197f4b067995c68000000000805f0bab547714ddfb782aba7e76bfdd53007d405648d4a4276efb5bbc5fac2b352a649ffff001d2e40abed","01000000f7284dd3fc200adb62ff2eb8c9b63b1ad9b3bf057bf6fefc8f13e40800000000c7c6eb0e4039d00d8b3cf98b8d5793be7e0c4ba61976e2207390e99c2de29269d657a649ffff001d1e9d5db8","01000000109c26c522fba88cc784ccbf0500c6055b6c74098dea77b1322fb337000000009a118e81f4b7244096a9ad3d939e41842b105bffab2462f56ccb5848931faf095c5aa649ffff001d00acff06","01000000319514b3faee06feef0fffbead03ad7d9b4a82193a42d16efd821bd600000000c4804ce59fbcb74b6f292efbe215fefeb2c00cadc09ffe1dcef2a8c12c450c8d755ca649ffff001d0054b751","01000000346dad4fa46dc7f073dfb0495b76f76c71febd4ccda1436619a194f100000000147608f3e3b766adc307b7e1cac6232056c738a68e70939dea2fd74ea2a632623d61a649ffff001d33381927","010000007554e9435e655a16b221a9a2b783e22898aae0d1e0c0e8915e1f3fff0000000074bc3eab75fa22402d8be84777b1a01492f3b8b2a2b13cb89dac01db0fa2e6f55264a649ffff001d395c2e84","0100000074a0ea117abdc5c60acbb8ff803ba24ebb39666a1ed110bfd6ec0f100000000038cb0e644ac212f65bbd35257ab833195d5272705b94ddbea70452df197d6e5f3068a649ffff001d097a0337","010000005b9696e5ec95df322a594a5b9072d504c998e2aae396ed1ea899b12000000000b851a4ce1679e76f985e3b45743e97e2bcc915cbd58e6f6f64beb46bf1dfac9d126ea649ffff001d0290acb8","0100000056fc1381566b4a3e42c9e05cb9e84b5e5a1afbff67a7436b4c8e840e00000000399122ef7d682645c45e3674442f11d65439a4c5957c19462e72df5afc514ec39573a649ffff001d2c461c17","010000009de5d046063a0e3d2bd9494aabe95ec50d435b34a0c5142c5c36d73700000000ad071bba73ba59302770e8557929d6c5cd0fd0da4bb2c9aea04a5d8716110253bb78a649ffff001d249cb752","010000004434618ebc7e0b76717c93f42665253ae1b520e47692481397ec004500000000623d2593c43710e3ed16530ecc1b308b89a080df0cacd4f1a6d935e895408efdce7ba649ffff001d398f3337","0100000041b91237e7ef0fd03b066776b2835d20298396cb497770573a7cdfe200000000f75c29ba2e18e351deb571079aeab158d4f5b7df6af66cbaa733ee0557dcb3ef237fa649ffff001d1e66f5e2","01000000391929c4a27ebd9cd3f710de8d6da346f90d7925e3b3432f1ebe81ff000000000d4ed6e51edac7a7034f5a4949f738fd867fce7dfa5092baf6561f72b540f9c47680a649ffff001d14c89c44","010000005b4502b54891cb9bf49af8b5bb74abbc5d62caa90a66472b4b8a96a800000000bd0893bcfacc0ef6a6eff5cc24b17caf48e588951ba1aecdf71a7bc7d983db76d684a649ffff001d186a474a","01000000a878c0c8efc6cd8c6e8bc734ba3e7b33d2353726fe953879b6ab97b5000000005bf9bfcf5e03a7506c0f2ac8614c1fa075d852da2de753bc1e51b6bb7e166d271787a649ffff001d369f3400","01000000c1dbab60cf6b14f0e4fc312b82cc22a01ff540c6c42829a4294ea014000000000e43a5fa526d3a136af95fd0c5734989c348de76c8485b139abef52a4735c1d1bf8ba649ffff001d2f17ba1d","010000005dab27ad1b3097ddc8450cd1aa1c310fe16d44ac001e4e2fd0727bf500000000617dc7241975884d1868e33c8a03accbbd73c7d3eb54ba0516775d4368b0bb98478fa649ffff001d2d56f25a","010000007035470e2c6c063ea939763a69f342153705a9c66a6a838085ad13b00000000097a24f553bd7d78257be739ccff768fb116c27f3331079d4232779ab921f3cd97f93a649ffff001d2bebc7f1","010000000012c588d28f14b15f4283e3d7ade693a3f993e64d8d65f979689a940000000078ce4e1f5f9e9b8b4ae4321f7ba5d6dff186fbb0706d06b3e39a61674d6883cbfe98a649ffff001d031e254e","01000000b05a09985df1129b5d250075b762d58fa1f09dcc4a139ecf8052964d00000000dc1e17e807bfab930ab52bbf80de436fbb6c737a5f267a6dc3d87e474a48a2f25f9da649ffff001d2b446846","0100000060925933cbb6e4d0b336a60711bc242dc92f41c6057de59d8ef9054d000000005ca0b58ffdd7f02b7b9fba6539994c202ff5fb69020854ee54ca8698cf65934aeba1a649ffff001d26d82b65","010000003296325fcabffbd5214988095df8e60cc682156addc526e4e15a3d690000000000573882d8acc906394a301cc44791a554daa066ba4caf8e7aaf90c08a153a0eeda3a649ffff001d1649993b","01000000478b5e4d0a12c9a2f166878af22437f8066ff3e6e080979a73b1abfa000000001830b95a9dd4bb30d8f9924ebdb43296b45b1f3debd8f98e2ee78047ba3f321ec1a8a649ffff001d0780bf26","01000000730422e386ba8cee044a123cf9a089f50728da64ef51669691fbf2ac000000007c869c9005059464445f1e461a17acda4ec00fa27e4b4c09d14a8f407e2a1644a6aea649ffff001d26251463","01000000f852bb45c35e3c6257a47d714c8f25f3fee3a4bf355226af7633ed3900000000730ec84cf94a4613341cd47dbc08ae9a06d099e6b80c34cca6f3764d31bd5d8f3bb2a649ffff001d341d080c","01000000dfbb355eaacc87219d4f4acbe8fb7bb71389255c39ab8a2555063d060000000073a28fefdd8f6ade4972d1e856f100bba7d4abf85e09cdf553a8249a16e55b58e2b5a649ffff001d8df18902","01000000782fda708e0707e5329a08ef6e55b382bd287bcf17819edb34b05f56000000009cce7154c27e4a71bd5fcabd81ca026f2fa8f7ec031400ae87810966e174887726b6a649ffff001df1ddf600","01000000ef50bd32bfa722ca5511ececce0050b0ed8ceee137a109fc44225b5600000000c59a30783a4b5e5819e9998e31f6a3376dd6b2fd9e979b143f2c29e4192bd2dae1b7a649ffff001d08139100","01000000aac202ba54d9ebc34da72a23b94a17cf886f74a94c3e12edb1560f5c00000000d7e76c1a7f3b2a1d6185523775ab57e24686b762f5fb36754352abb5bac76f6fa1bca649ffff001d342f1d54","010000003d56faf482435a384c94be178bbdfdd6439bf4544574fdbd9f01725400000000344037c5673deef9b97bb67d488111099184f21690e80781981a5c3f51a41a9629c0a649ffff001d3654f8a1","0100000056cc2f807cab3114c728a72ae30504a87c49f8c8299e27ad13470584000000001d30356d3a36817248902ff054bada7c61eccd94ffb4521ae1ab32931f7b5a31efc2a649ffff001d23dc49b0","01000000475ce65791b876bbfcdee016f65722c15f02d516c06de39bd687a39500000000ad44e63f91c074c8b641809409417ef52dc9d427b45e0dd4260273b637510ee5b6c4a649ffff001d076dba65","01000000bc5c11b81ee518a1a7bdcccad7dae3a685ea440183224589d4b378ef00000000d0ac3edfa20b49e524e219d972c166f59f7de90dccddc410512fd8cfe0e0830d7ac7a649ffff001d319602e6","010000006d2d069394c187d59709ee56a0b5effa7e6adef4b844595da8a5d4a4000000005abece8e36dbcf40ce8c82538304a80a16c43ee839e288da148a893a4693512472cca649ffff001d33dc682d","0100000058c361cb08f26a316dd2519b18b33a58f6da6149d75791d70fb4d25d000000006e9436f44b8a615a07c312f4d8db9d214235948a7b4df157505fbc425f3824e0d5d1a649ffff001d2f3ff737","01000000b23a26a6e441a2d4d734522f3fc6601dc292afb4a7718e595ce8a3cf00000000f4e6f950b07b634b4d50b427c47f38baa720c1ac70fe066bcfdab0ec272d07eadcd5a649ffff001d06cc9d62","010000008725d167ad526140441a0098379e354a76a4eb144dd035be47c4a44100000000f747bcc2e0b2fe0f4c795ef456f4dfb9bb61f88aa8ebf120a7600a4782802ccf51d7a649ffff001d1b9a1d2d","0100000045e0714b7877be7d2e0fefee65d6765e4be371ba84a4b734241d2e1e00000000f2d96d990c6e2d2a7302721a05edb8e859ab33567bf7336db8f4d2f687a6913be7dca649ffff001d011fd4ba","01000000505eda17701bddd74d34b78f94749ba3e68e3d1ec6bf04fb126c894f00000000042a409ab9b885e02f4fc55594a2f40c7123644e92ab276b6b1d572fe2f9739163dea649ffff001d026efdef","010000002c9002c19358e1e1cdff94a473af64a6c03b9b886060a6758a44643700000000b465c075731d6e0622e92e7d540bc709ede56c47da4a4a16e60360eb7026069025e0a649ffff001d2ea5ec06","010000008e1c16066f13c8d66c7f987325d969c161edc1c0acc6ada2aaa1158700000000f45f3f376c0ae8cacfb55bc05dddeb798f2a154095af49fe4e6f54503f24ee347ee1a649ffff001d2acb9aab","01000000c84fab60371d6d474f1896d956e7db5aff73d96bce66e751cd7f705e000000006c40f9e1a9aa62f95eef098dc4925c9c811565b1608e5eefeeb4c280bc304ba238e4a649ffff001d32ba23d2","01000000de60d3631b67dc6d6ed47193248def9d671fdf6201b840e789bb0cf1000000001321167dcdfcaa299e61bffe4bdbb6b9bb9d689beb9d5e2518fd7ace2bc1878e99e5a649ffff001d1c21c66d","0100000023e9e8dc99636099925a41384d46ce98ee9f246fe239394fc93fd2c400000000e6e0cfe71ec4133d57508912c7f9b7ea6a733aecfddbbf40dcebf7db7fef6f8892e6a649ffff001d632a2704","01000000a740645df0e288d8e6c1bd0a963f19ce4c3b73cb6247d052cb48b6aa00000000eb80e8c403d2917d223202a6a44416f46a484f501d92dba540403f754eff020fc9e8a649ffff001d33ab3dcf","010000002a6de218d649adf075420b24e8c7038ab5ddfdfcb5a69015fc09e66100000000570110b1029a84095fe248c7080c0e9ae1a30a84575aa7ea3e00fa4076568a2a81eca649ffff001d299c3b50","01000000f49c1c6e6743377667177b4c0b334ef1e24877407b2dcee1fef3184d00000000c9cf5db0787fe6169f877f5cfec0460d34f010eeb6e6433ad0fda7e891cc757c90eca649ffff001d6b432300","010000001573f290d499fd549c0a8e54734ec2afc8cacf4486f2b3f45cbeee9f00000000d9fe0f25c374292ea54196751fe89aebbb09937fc3457db99ec4dfb260c77f51f8eea649ffff001d350812f8","01000000b0bb837fdf745e1e6dd383e1c667dfcfb627a421e58c9bc53d4a100300000000799a13633903d31c47bd0be21c5c473d5c93ea6e70a8e16051e51c7068ed6f5391f2a649ffff001d04cafac0","0100000070b80404e3ba2756befff55f70efbc2dd82512d48fe9cd50912a7e76000000001c7f87980dc513a165a91bc6546096259d3f453f14c7b30c708722b3825198f8bef6a649ffff001d22a450eb","0100000046dac5757921c7700045ca3fd314ead26429d7e08fd4641dffe2410900000000b14698b8114ee270c5e759735e0a9351d8b75666d918db5d281b52a70edaa3a86ffaa649ffff001d02e5a08e","0100000004c3236a0c81f47efca8b9a84d09c0a9a90ffe9245fdf36ac47f7be900000000aae8dd1c2c2dc4677c5a6a038a860e23ed7f1070d976a194a2b4f75e29f87792fdfca649ffff001d33be10d2","0100000019c9edc3951108d035c8c3926f723b71aa0eadef15ebd3aee04b8b8a0000000047cf7fd293462f87a20de2a925b1d6f5f143bb09974562fd5cf780922b3d2dc5e2fea649ffff001d0610e8c5","01000000e9f17e474311dc8a04179560f15666c54fddcc3ed8ae9cc2a52b725300000000850c906a3b055ccb5f90901ee6108ad3667662ecbe791e6da072b93adf7134762500a749ffff001d2689eba8","01000000e97984385ac3cc83ffa46b86d63e3d03ae97faed5cc750b4d66e20730000000046eb7e30251932764101185fa79252050186615c96a6e06c849bfc31afb8e7eb1802a749ffff001d0803d42b","010000003cfb74752ef5492b4dc90317ca5476f74bfbc9797d5395acf4c11b3f00000000c7de593c321ae20088a5bd141d83170463cc4f494007ef7af7048f23ce6abfd1c603a749ffff001d189e2a16","010000003f9e2a5bfc77b82dd727d8609724866f4e955c2f74a4e74fa005e21200000000f9d96d6adea2f6cdab6775c45a3c35600f2d857078948e22152809718b72c29b0a06a749ffff001d016b30e6","01000000f106d5a4b27e1fb153e64b8c41fbdb91443eb4ad5993271403d7365000000000ab023dba7bee1dea00d189f763faabecc609008bf9672516fb57445ed11acf7bfa06a749ffff001d27c18004","010000005e2fb11101c8d5ee607eb72fc0c9079e984a168d3ea367d3455ae4ae000000001be65b702580cfa27149c916b77bde653729c2ea6dbf4f6a5cc2226dc261f390800ba749ffff001d22bfdf72","010000000d5a8454ee9680a040979e58700218b2282a2f5e582056c47546b37f0000000028148dd96e604ddef99514ea333f59dca99c2cdbb3640b16a176d0ee3870ecb5cd0ca749ffff001d76ed4e06","01000000c2f289c18e4165e119257b5de34e51dfca6b03ccd9f1f7b595a9e3e700000000c221d00fda2a5439e38196b425ba43922d7c2cd2b9c2f665977334861d163b4ef20ca749ffff001d3a4e24ca","01000000b391681e3bab67604bf331cd206613adc445b9610c9396fb1fd82563000000002bed81b3252cf59d798bb2b2f4281b07293f3540aaa15457e29164c57a7fd744c20ea749ffff001d22d4b005","01000000dcf7ac54a9d96ce02fe87173818ca624bcf2c16c4c894f616c1f4092000000005f86e98017bb82cd7c207a6bc923af9c121aab970cab788152af555c4be8e88d3712a749ffff001d34f38321","0100000079a432fd0227cc3d587888817bb2d8f8875a9c123b6a2a1314edda430000000090461b3168257304e62a78696fbee1f24d9503ec4dce43999b99da541318ca1eb915a749ffff001dfd083a0e","01000000d7bc497fd0002758a9974002482f7fc18d593fb02314785a3ae96aa4000000002bb7ffc892a6d384708983b1312dda7c0fe40c808a080db7181295acaa1f3ade5b17a749ffff001d394606a9","010000000eec555af12170cea028ab683dd4526297573594ce4cc5d9ef3eb8b10000000096303de63ebb921ab5a14b05e08638f3f8c99b8892a324e7ed31d02879750105a81da749ffff001d294d406e","010000005c7c01d309f75b0557a633a34b7aee89fa14b51660d06a2a7729f15b000000007236c7975a2e5c2594c786aac77009ffdb4d17ac1c9f59c513cec9b9e7e3f5468c22a749ffff001d31d1a7b3","01000000f8a6af4e0c4f08e65afcc55110b84df9b3766451fcbe363fdf8e904200000000545d9d04af4245b7a8dc821654666f24822c22abfaf693581cdae7d58514f3ed7b24a749ffff001d0041b492","0100000073c0f8c8dbd2c3718cbd887442b9db0586fcf93d9f0e92859370b1fe00000000884c131ccba147a72b3bef58d10e4692829ec833ad87421dca4bb7f9c57cf4808328a749ffff001d2daab3ed","01000000b625579d135965b9fff7f9534af20e2f37fd1c39e54b62df679bde2f00000000768ac6f5fd28502d9b3ba211aafed4ea886ba8436f35ab66088ddcb5aec2cd75592aa749ffff001d1d3acd19","01000000e3962e64f94b4775c82bc122c6b7dbd1c01f4b7e273927e2b34ad24c000000004b0427f8c000ca9005fba5ec8dfa61da47a5c3c889f9c296bd103799844e4b8b882ca749ffff001d038acb08","01000000ef70050d8f133edb1bdc3db5350ddc1988f7daaa3a1a4579c6aa189b000000004dd4ee092bb7733d456dcdb3bcedf3107e69ac5f1f294339e5b0c0be44327b055d30a749ffff001d2886f9f3","01000000cd8f43045c3b6474c24239fda42ce0db8b1a68c420e03cd3273e4a0f00000000e522758a02dc32bacf2db6d95b031f8ccc05a5f966ba069d84697267de0dd5058a32a749ffff001d348acff3","010000003f7c03320286424ae67eec1b8c79a408f46e72b5025d4c593f04ba1200000000e2d31cf894b335295ec815ae61d9fabfa9e5a25d404c34fbdf5cc6c93c6a54294735a749ffff001d148d3b2d","01000000729c488398ad4377039c4bd95f9acca4f6338f3e69d61eb09419083b00000000aecd57a9fc3223fed2ef63480ec95b5c65253dbf75dd2f54f7b5c0b25d806397d236a749ffff001d6c81a305","01000000b68c91b763cb92162da884ae8a6ff01bcff5b044a7cdc1723d44327800000000d80fcafdce1e3692f160ce38aea342c2c8855c0b959c5f1e23dbf4a6381ccf6a8b39a749ffff001d01875d17","01000000e666a0e4273e8c2faae653c387dc9f5e0178dc827f8abfab2e000c6700000000b17c48da3440bd9641b1d29ecb65d575df9d7e8c9617baf3a34ea35f4461e06b193ca749ffff001d16c9391a","01000000c294d21ace17d30fece740407c87a98128064ba358ceab825f5bb6c200000000419fdf9f62c5054733b7ada16dc1ed8047b46bac560b2f68662bec696f2f5dfdd540a749ffff001d2a5f0ac0","010000008db03848f54dc301e8568781ac8eee7f71d2f93c1f7a57f9c9dfd954000000000747eaa4ac01a5960beeb1bad8339f330ef1d8d8f4476516655dce041d2f3ac91c43a749ffff001d03915b35","0100000072bec2a13295871d5075183c696f9deb4c54dee806b457c098b081a2000000003b09ea1f291e22776954c7ee09e4ec0aa81cbd41bc971604815ccd7524fa261ae046a749ffff001d31ac329d","01000000e100314761aad8680a68b778b95bc25043bef9e9110199522cf6d34f0000000035b40645312004a42aee8e8809ad73eabbf8357149613050f2e2e20da6cc43a90d4ba749ffff001d322fcd39","01000000f34e796016fc9b13c11050c43bc52c1c61e3c9c5d48792350fdd5c0000000000a10928f56c7d49e9c6e5a7925b3b874322826258ff0a1fa0b2ced6af895d21fe054da749ffff001dbd87a409","01000000d29794f1d250411d6059024f251c3326474f33d09a695559eba486f1000000004681b2a370d332dcedcfa280943a599edea9e693445cf401206424b60a851dbc684fa749ffff001d6843a709","01000000b84f7d66b060b3d24b23590f920d4b13433721215be5f4d676ecab4100000000ab42093ca102cc34dd0414f29402d3fb6393a8f0435cddca516c8fad7ccc3608fb4fa749ffff001d1be38201","0100000029dd8588f73d08e6854d2de65414d692896678917364808704e584b7000000008a71e5c01cdc33044cbf1be2bfb72815d1955da2ff0a89d18cbd03baba6cf98ea452a749ffff001de54a1502","01000000bf156c4857756cc6f13dc09e7ffdc9c6843b6351806b9b20191727bb00000000863cb58a58a97e02ebbff824528eb1598c3dd75d3e7fe33b57d5d64b29f119e5f952a749ffff001d9a815501","0100000068bc4596ea4e6b6d3c586c23e0911cd16e90c97af997126420c061da0000000017c0e2fc39d63f191a3c5e0e2e70d1150c869b90582a1c94aae0c1f0e740c2a34453a749ffff001d06dd23ee","01000000d115f07b4550e4bdb7fb4a18a2c306f69fa14d5a7533ab520123fd9e000000005434e959809f43a467efd46c5d18144fc26cd7b5d4ac9d40d27db23b49eedf084e55a749ffff001d2994a6ea","0100000038c8cf5311a3fc6a97877144a11101528ef250e1582eb32b07c4d5ea0000000048561897d9bad2d9ff6ae1b63659cbde208c3bb9530fc7dae933bbdfed6520485e58a749ffff001d1ef6f395","01000000eeeb08e7ded1ebc362b699c197b46d817de9215b2bfb085459533cd200000000158c64b7b91828b7c22064ab70bdb8b4229ec3233a5dcc6d1522cf3f0e8d531e6d5ea749ffff001d2f95c0b6","0100000066d97cc9616448538fa2a26161de365000511e0f9b2c8ffe7570b34f00000000929c499992e57e2dcd7426b1abf1beab52e1f85e549f61781c127eea53f38d29ba5fa749ffff001d25ff586f","01000000bcc252f426817e9b53e87ece8d4d02add333eefb3dfe96db956e8d92000000003bbf3a3e293a73e434cd684bcefbd275dbbebabc103cf1b6dc90241fc236ab7c9264a749ffff001d2f6c86ee","01000000ae56262b3857d77f7c14838d48d9ceb1f6a1bfc54a765319a3a091a500000000a0992ed47e94ad86c77f5bf739852c73392e26d548725e21bdd24dfa3c60059b2566a749ffff001d1b846fa0","01000000a195614070e0aa4c1822100c156d9f30dfde35b9d9a46c3c72f2f69000000000dae712a77fa0182b248bad01bd937c87935a60b611d2e7ee865371be0c441039156ca749ffff001d3133030f","010000008a14c1c8e0db3c0246d6228668bc468294be69c72b051399b526345d00000000723954c3916f4e0994e50a0019fefc137585a3dfdedcae2e51363c99f78871fb4e6ca749ffff001dfe0e4001","01000000a8da4e8810aa77009078eebfc7f5305f6d4d6095e3e12ea3af104d310000000056ff706b921f414e62fcadd86ba4f46b4a6d83b5ad8c34e2c82b136608a288fe2c71a749ffff001d0443af5d","010000009e6527fe17653786ed00b8323c24889b797494050143c866b3b494f3000000005285b82fb1e7c5eb8d657fab67ed473457dccfbed555366e563d9fb251a2842a7b72a749ffff001d7f1a8d03","010000001befb2b8b62052efc24533e2ed0d38fa8a2506b80281f100cc32f07000000000222655a8afe5e632b2c6a7e58f2115cc2a203616b5f6156d427ae08c631de8522b73a749ffff001d0173e601","01000000b5011380127959aced20593216bee9630a94f3d3b72569a10d33b0cd000000001c945bb2113f33b49963ab0c3b671c2766c0c9b4e8bf68fc0dcd32826e7cc1f4e675a749ffff001d2dd0588b","0100000070686b1de92ce01d682713b8d154c5eac696fc51f92e2c16a7befaf1000000002215adf541507f7806fe8b019c85cf4eee7b9a2f2ef853314aa9c02f14ac2ec0f378a749ffff001d021e6d6b","0100000081b383f3b1434747b1864530dde4da4ff5f093c66f5e70758ec9afcf000000005831e26bfa88b61f611e1f52e91d971d226f087e9663341b3dc39bd5d16548f0e57ca749ffff001d1e4cadbc","01000000f21211f059c6edcbd55838c8fa3f553e4af8174a8673a3092db946cb00000000b7c4e6ef9baa2912f7892b58ed2ad45f8c8787964038f2e953a2ba5439097bb27b7fa749ffff001d29578edd","010000005c1ef3cc45b2f22ee4c687b04efcdd93e9f3dfcdb4e105c7dd8733170000000072de8cfb03749c6671dea6f154b050a494627f7d3d9029d705780ced98d69aa28283a749ffff001d36d4fc33","01000000ed2aff9ade3dfdf4e233c9b3b909be6c24fd59961fb1be320ab1bb070000000013da8e8cafc11a96ca9a010c8a02c85960d22f7cec8672c4df513b223f14a2818886a749ffff001d39a59102","010000008750eaacbde2a06c35859f84e0fbff2250dceb72c679a6b4b90ce5b400000000c7baec155a292445b0edbd498ff9c5cddcb230a4f19c98d7a1ea6c85882742bca687a749ffff001d4e676505","01000000750540a0eca0025a8351401834e544962387f188328dd04e1b8f39b9000000006fc18bce5adadeb161c3ec22ef47235b15b80da387bf739dac3015e0c7a61b33c589a749ffff001d18e25cbc","0100000080e3a5d7ce2dc9a0277d881d24e9ddcbd44e908ef4be2184572026da00000000137d7a013632e6f91a62d539dd45dd13863f9be64cd25b009109e207d802ea58428ea749ffff001d00fff8c7","01000000a36ab5e3d5a22ea0d197d6c87eaeaa5dbcdbbacf0db743071595d8c8000000002555315ff4d68f1ec81658b6ae2f0cfb0abfc080b3ea283e01a30821e4a89c66ec92a749ffff001d331c4ef5","01000000e73977f579361b5130dc3312373b54e2fd3f9416f30765b4b01e648000000000722d4707ac20af112b04f2d640a8d385c9aa1fbd527a830fab34f6488df0df9d1d97a749ffff001dd4da3512","010000001cc71ad62d1e2f87a05dfdba687f776f0e12d79d4be84c9ba1c214f100000000416a27b7decb00743a743a63430f18f43285c62ad2bff8bf8e207a3da37ea8d7f39ba749ffff001d6ffcf614","010000009564202a3190bb48599cd06e4698042ed4c76d98f550445993adc7f800000000a6ffd3bc5972707b070a84ab5b167e41bc32a15543af32ca1bbb3cc3a547a4d53aa2a749ffff001d03b0c223","01000000cf734261c68acc1eb898525ffd68a9a844b06c4a45e689eb698ea53d00000000d59b8bdc1d58866d5a715050340ddedbdbb1cd7f9de4893af3bf759c0024026df1a7a749ffff001d1b3e25e5","010000004ddfaa6c3a9649b8e95955e2a2ad96d39c90a2a1d236292be815939d00000000d34c0ece612ad8f0ac7d5dfbd8d7cb246897241d82d1fd8b19d926837e37ba3457aca749ffff001dabf7b112","01000000e00f1443139288905be8c05367fed4e179d3666b43bfe654d2a2878d00000000fe53fe7c9921a6572949657c12569fc4f89e24e811a9f05c03d094f473b2bb3b69ada749ffff001d14178f82","0100000055a5d5a8929053655b719691c1c2a08544b3afe2a01d08084d1380b70000000011273f9c0e058ca8e0603cf8810086f3b2a907b87767d5fff6b7f57f8b05e44c38afa749ffff001d7b0e7f05","01000000d662aeadfbef0460280d2275e0e069525e7b44a699d4ba323ba1c0af00000000ea69337666fd7a661d857af9bf5e3f4d8b7c70361fcca203d51437fed3ec51a2a7b0a749ffff001d2e10b59e","01000000aaca0b15c0793c49d73745b850db13a2f6dbb5b9cca39397c44c7359000000002a2a90f32ce33c56a660072ec44aacdb52d596504de3a0881c22a2aae2ce2eff78b3a749ffff001d38fccf85","0100000097ac29817a9014349d97dd97a3208d2d120120895d2f38ba1ab3b2a800000000fe28f5fc7586832baadd56143b96257214e288efb102ffb79d01659eb98d28d42fb8a749ffff001d6b0b0214","01000000365a75154363c4b6c760edfff4a7f210a1188293ce898ee241a6293e00000000069b2cf447afc97b36c0093e19f3919a03b1231a40711eabbb5828bfd379fc82e5b8a749ffff001d2550af72","010000005e78e16733a7c9c448d2d34582351881814862d4e7a89c8c3b9e0b7c00000000499145ca785d1a63638fa1d6548f591327abf5e5babb01e8f5421d6236c49557d7bba749ffff001d267c2b47","01000000c85a1ebb2abc85740d62aac9ee603c00cf17199d5a6d78c86428761500000000f49749565b956895b9d003d77076d203940f26d51a80f03f27370ec079fae72d67c0a749ffff001d2068541a","010000009d182fadcbe1008a0e1f285a2019fffc0109437b658e6ab384fac3b4000000009ba68f16874c1722d43888be5e5dca77c519358a0baa3e9c38f57a86ee3eb83531c3a749ffff001d4eaafc0b","010000004d22a2eec5f29807b185661641b7bf3d2b0160dce8a7a6f4d03768cb00000000f5bd6a200392c6746615fc249c79617c1792d36cbb2fed9f9b58b5822505494709c4a749ffff001d22bc2f37","01000000ef3e5b037208aa7797eb7bac06cfea3f60d4e449ae8a36de4a4040d000000000ce1f236c441664aba57431b00b522775b93d3113cdcab38ff3207ab8dbb24f0732c6a749ffff001d18534118","010000001cc07ed722c8a2fb155e1fdabb8bd7376376b1bb4eaf8e13e6cf7f5000000000aa44070513017e55334cdde976be605c3718cd1bbef6f88df8fd4d32906beb9fe6c6a749ffff001df2b7d602","0100000013e7a49951440d8f130b03f8d264f3c52991572b5cebe2eba3ab2c83000000007817316667cf169920bd037941303da740b65136c36e4830ca9900abde4e9fcf05c9a749ffff001d2296b867","0100000077d90d367347984f59077498ed2f87ed5427bdfd3993014e68656b0b00000000bf2d94b5afb24d395df9feafbea3deb6211184b7176309d5eacd3586c469b78a5dcca749ffff001d14352446","010000002675f0c1c4fc527719459cd8865599736d0092e05cbff4fbf257ded90000000087cd99e9acd7053e7da34bedff4a726ac7321ca3d071db8103c3e4b641c2c62f2bd1a749ffff001d160f3a44","010000007185bb365b4e744057238f428a44cca245a00907d28da7f6533d074000000000035b611a3b63f54f60653aa9e91d483221495f8df28323faecba182cb9fd9469d3d3a749ffff001d2c17e38b","01000000a88257e26c8b6bca81aad66f85256517a601714d6dad68938d1c5e1c00000000a27120a0c7798a74a2dacb27fc79e369dd9950f5b1b201fd0e8287c794ad28fdd2d9a749ffff001d35939e9f","01000000a8a9b8ce91d9341a1cefc4c27d82d62bee26f6c0217d1d301e8697ed0000000052afcc28557116b34d166f9260aaab4c1b589ed9bbbafeeb8155f0bb75a78b7240dba749ffff001de7e5cd06","01000000514db3a1ac11c323c41a443422f3032e4b1a1a71badb44ac22a4c8cd00000000c8541506b27b51174e7157a46aa49c89f1a04e9458093e331556de2bb87c568172dca749ffff001d00663fdd","01000000010ea7829f9dfbd901707da81a097be51171815b5580f8c866892011000000006b55adf56a16f595f1fa4a1a1a103523e8dc1c9ac57418c3e7d7f51df6d9ce85a3e1a749ffff001d2c2c641f","01000000f364da26625d05baa79a9b9376fac9501a19b9d3eaa8fbf7ac0ca9ab000000007265e97b4b240b0a3f1fe71111298f468e0315c6365d20544d0fd764237136a784e2a749ffff001db6e61004","010000006ac2726c7424172319ff2b630812e17f5525636bb00f9893de8ec396000000003c718373e5f68e32314c0a42fb51f01de49b11b1d9f3038fa7c5c0f3dd0aa5501be3a749ffff001d2fb2f940","010000009beeed9f7c06ab58eb7084a1132a823e6bcd48b60b0b2143df4aae4b0000000008490a0e5ba698ebc6a0841a0c2806f7b3acba69b8ce4a58dd735c07c57579e9e9e5a749ffff001d35893fe6","0100000057addd56d4ffd5e5c2e28bd271beb2b6d24f714bc8115a7248a82c51000000004c47a22946d24413799afc5c5cb6ff7dfd1c74460878514320c8d5f09a574b6568eaa749ffff001d18e2ec59","01000000a34b6bfd62eb680e26525c4bdca8c24f27f351855b3a77979747494200000000ec837fb46001695ddcb610aad3046b65de55a371437dd1f9937d192a1e813e3efbeda749ffff001d03f7d40d","01000000ec4e70ba9b75f7ac2eb2db834fb2949369e8c423337f0b76b99b6b05000000009b8f08cd0e0280c43b828bec6e6b86c24274c63160c7fed3c9b6867438a39a0090efa749ffff001de872a106","01000000be0e820f48eb0a1e1a4b64e522d50b396cdb9f898c28b736af27ec7b00000000ade95d31e74c5f85d6a7ccc1e6bc87fef1352c95a555e80206c722c55faa1cfc80f2a749ffff001d156a7a0e","01000000c300ab8b147c7792994375e70c33168391cfd78db6a627926d0fb5a900000000da3f1c08e2d6ffe82fb99ffab4fc969ad014e7dabbd37cccc697cb573b39b939c9f2a749ffff001d0893788f","0100000095d2a57a16f2fe5376c5cb75d080c5402c2a41406fe44bea26a1506900000000f2fb3181d77fa323352024e4bb1a334657afebefa313164db829cabe4780dc40dbf7a749ffff001d14ed6f2f","010000006343d8ce376143be5dd27f457a72ab90c01a16c174725f0b830c6512000000001dd5ba9b959eff44cd6d19fe5432cf187da209f7cbdfa91881bc20804ec5d4ae2efca749ffff001d15295a61","010000001e0498f5dab1b1e5486f9581c3d13c59158062781e779bedd4b51b2100000000343c739a2cb57606f54e7df6e8b6b9547792a84bc289e5bb453d6e5024f48e4c74fea749ffff001d33482344","0100000073d350a267295d32b6a525186c208190031e729496d8c683de379cac000000006457abc6c8ae1d1d928738f94eea39e266fad63d1e1fa9eee6384eb28eaccba2a103a849ffff001d30868698","010000006161a6a87a5717734dc61e2dd95fe288f3cc55ba76ef6a054e84cc5d00000000b084de40b08d7bdc3f86cf7b6c7a685be18b482bfe6bb4a74fc25f211b7b2b74bd08a849ffff001d13d2e335","0100000004a419f5e10684cd57e60584d85a94de5f680ae7b202517b8964d9de000000005c362f106e6f17009fe6547fee092de7894bb7c635dc4666e53e6c4382e66636320aa849ffff001d19951b77","0100000015bfae904a03183ba71550e6e03c2a88ece960fd92818e2f74ca1adc00000000ba494937680bf2780c6046a704544fc567e929d41f68c1589fc964ba761a61b4c70ca849ffff001d25206bb5","010000000b0fd92920cf2a1a1c3a487f667ddc94ab4bcf3259d67fa2fd2f51820000000016af86f1573074eaa600dbf75dbbe7dfe26ec64de40250c307c57c50b0a58629af10a849ffff001d25e67a3c","010000005cb6b6de2ba0c702abcf9aaa545364b2d8cb445c46736b87a24bfb81000000005da98168decb15a09673a0aa04ba9b5ac7ce7b4d545d1938eab8955837e8e25b0111a849ffff001d53750600","01000000ef43c29650df5f4bea76dd2c0ab94765aee17742f4e671be6979a8fb00000000a6389e4f3e2a74aab55ca40511cc59d6fb4f7a11adf1bb18106b199b4500250f5c15a849ffff001d1469fcef","01000000bfc5b969b5b6cdad4605bb997e6df0b413e71ab8d6dedb527f46f05b00000000685f6357c46baf50a69600fe72d2bfeffffbf457538e1c2273e625e327dd1718f316a849ffff001d06c4fc94","010000001fd6cdeb9209d46d8bf34432293ba1ccd3f8f9b819e07005e4347eab0000000068a1841aeb56b8b34b52a3987525790815c838052e0cce93627e5fbd20afddee901aa849ffff001d5e438011","01000000599887ce476c46530e375692376681fa0e126ee4783456ec2c65d0af00000000e05059eb430d6a04d9b77bc7201f72a87477ed749a78cb06105d2696565a4852751ca849ffff001d1d813423","010000009ecc5e3f44e5a453fdf317300b0205f55b2efc17d85776d5244f9b4a0000000078b4317fed12471b780d4192f8d9c5f20fac2d6fed4e8d8c89ec717f9ee92b6ae31ea849ffff001dcfd2880b","010000009675f5b29b94a53a07e01efc34bd8ad1d3d021897e7de60e2d2514ed00000000b955108245ece521b99baaa70f3147642736662bf9482fb42e6757f97a5556c03521a849ffff001d159ed314","01000000afffed989ac27a88917e881af03dfb0a4f9c362bb5366075ffb4ed9a000000005ac8c4f126c9fdad19a60cd814f65e83e1e71e09a52878fc26bb3f3952e09dc01b25a849ffff001d26c90fcf","01000000269ca21adcc2b2f916f62d06ebd620448e9e2c072856c5dd8109b0bc00000000812430d6d06f2f666d9c0b22b04039aa23df7d7d79e34faaac37e758be2632268b29a849ffff001d502fc70b","01000000a93305d61243b7fa38d48fc24e5354e76ee3b9db559a7069958cbbe00000000016bf7b5a3a774ccb6b7aa1fa3eaf69b3a6919bd47f03d18a36bb172a0a5dd681472aa849ffff001d23798863","010000007066e6328b2162daaa245bfd0ec838bf998a6b03867e1529be9a59170000000042a00181ed3c873f7c4046dab4a40832f2359711b54fcf1ee6d6990102f57653412ca849ffff001dea8a4707","01000000ebb8e63a0d08c7ab4cd8aa1d0b3d44d35d2debe0df4ecdcb3c7edcf400000000054d0b68ccd245c9a55660805d2e88e29dda55681a627b553235e1ea6a873655a92fa849ffff001d08420283","01000000df3f8f396a766beab23b15d6e22ab5014d36dc4f38d72ceb2644e26a00000000b7fb87e0841a326d19c77ec4d8dcd124e4192e45859771be96170e493a87f96eb731a849ffff001d08d6865d","01000000fcead761a9828ee1a86a770d2bcfd38089a909849f898ddb74983cc900000000aa7dfa5e317db90648bf83134f9eb6577403860d99e1520aa0db2f3790dfc73a9833a849ffff001d078aeeb5","010000007a7202a482f5e659c6622b1c26b6447ab86bf24cfa3b734fc8024df90000000057a0d279e12d91cd777bc3199ecc8a9c28b5edf832aef9b5aacf5c98a738db8c0734a849ffff001da6e8b301","010000005d0675cdeec83a3c56d596b3ba2c2beed5ce182de3638af8059ed53d00000000523caa2a5e9b908c3a3ff84f73b0be0aafb663325f0f95367a7c8f514a983527e035a849ffff001d05742fc6","01000000cd26435bc5722e3e32022bc8fe26cd256be8252046e1dc03c2396aed000000005a3fd0c496bc6fe6368a7c3a8a09873b069b23be9b95c64dae7a167811e1c9147a38a849ffff001db3667a0c","01000000f8013cd5b26f272524670e315fb7d018d0d2b18371105084ee98aa8000000000a114a3b5118a081bc45021d571c353a005eedaf856320ccc1a7fa1eb998f3b4d0f3ca849ffff001d23218c91","010000009889a2aa7097fa3a8a3469878d7881f859b022ff3599607969de22e90000000098f49d4062da6b5d99353411605cd7ca4b017d3201429e3cc88e322c45afb4a0cf3fa849ffff001d07c6769f","0100000026c16edc06f2196502badd2358678bd843c947a07fa5b76d1b838d3d000000006b5984dfc21e51e44fa2a3b9df656b3d56a13e554e7ed058338bd0e93ff3bb94af43a849ffff001d09c11df7","0100000056b5de84632973b7e562419c8c6af0c69bb0cb4536c7ad18727a3af900000000eb689c19b1cb0ef347db7328814bc6f92340ade86ddd3751765017e8b1e5c86cc646a849ffff001d336ef064","0100000013800c31d2ec7df578aceadeea5b60d2f94d2a63c9f8acf0e8b2ecba0000000077eac30ed555419a7f339530851601f8c5c7cc6962f9bf4393c0aa881d2fa1e87849a849ffff001d16ed19da","0100000015e3575d2a0963e094d0a909f096f2a7c309b55092e305fc96e0121900000000ceac6e0cea427171ee7204cc26adf686b15705b3eae90cf0131d5333ff637402f04ea849ffff001d05ffc5a4","0100000003459fe2aac4aa63eddb67d7e2d6505add6b2bd74e267c290b482a2b000000007ee74582a855b88791bc4cc9897403809f5f06f31ffe2db4807005ad4c7c6dcd0b52a849ffff001d02ed32fa","01000000382611ec001c1d0700a0fd5fde9fe476ec70eb2df81037d685027de7000000009dd63b651ecb1d4cc08e257bfc2fbc6a6346accf5793955abea1a31ced1fa12b3454a849ffff001d1a2f77e9","01000000389f150cb4ba481683e6b182427f09bf33a7050c02cf9103d800063c00000000b0ef8a56916cee451a38aa46e23e416c457e4295edda6dc138661ec6fd8e049a6f57a849ffff001d3623b456","01000000bb05560212e4516a2407893eee4e52a4d8bcd4d2f5357f5bc51c0e4e00000000af1d060807056b95d5242af28e5931e458fe668168facb53f95ca680780a1088295da849ffff001d38931a19","010000000ccb59cf0389d3bf3e94340b29a30aded0929a39e7d19f133cba1a3e00000000381b286de394b55709c53d5d2149ea4259c75770b18b5a19e1a1a77a72a1d14a6d60a849ffff001d31474eb4","0100000099fa0c3d8bd4f33f8b7582c56de091cd3827862e429cee2005fc49ad000000006bb81eaf8cc01107e999661016fb82a02d77551c24d37d78a63a7ca3e9cf56e98264a849ffff001d653dca08","010000003be8dbc3eb4cf50030baab58de0b811aca1208bca4bb2283919a41ae00000000ec89378c678c8f1a34bb703bc8ca611492cd0a278911805d3da38a77e8ea7f5c0b66a849ffff001d27935227","01000000c1a61921adff2196e2858fc977600dc28374e4323878a99f2768d15300000000b1586cd2653bafd281ed5d45ee2f1ce25618d71b1e0a7a458d82fcd857738f179469a849ffff001d262a513b","01000000fd749332af6e8a1d09ee70e93054209bba8ea414885aab90f4af62e900000000fa150165bba5850888c2dfd2720fe9841397d8fd3d36919693174978bc129b0ed46ba849ffff001d1facaca9","01000000c0c033ec69c4d792f083900b6f78f4b1576726d99e687d574b8cc0690000000007a502461d75000dd6865b52bbaa89550d2bf3c84371f3e61f1a727ab77b543f6b6ea849ffff001de544720c","01000000502a98bb12425322cfaa4400a3ad88d8d299493dd730778890aa76c000000000ba205e688c448f0ef456b73f03cc5865fd77f31f00c946fbd3bce7abeb2e89705970a849ffff001d1e9fcd43","01000000154f8cfcf4df4f9656af4cc908e8980106fedd1f4a6e140618462ae200000000b319335e85a03047d0b3eddaf2c599cf5f9cf3ae61d1b2a3f5ca5ca98817733a0273a849ffff001d1a891619","01000000b735021d31da86a4e34d5016bf5b44546dd8e3b653e8c3d51923ce9500000000860e4d4c0cdf703ce6b3c3248844f88458f532d67279b66d515e2fa86f96cd3f6877a849ffff001d07e496a8","010000000bf38ea218c0bccf9dd0f8c445cdb09b2eecd1ac3d6cf18f5c74158e0000000049829d3af259c2cd7b5576cb39b6b8c77a9efedfc5a9f24fde02253c25b393c76f7ca849ffff001d29b4dc36","01000000d01da378f6c4262063b74a520f0adac1e31201304ff80154c6916fdb00000000821d8428198c6f023ce2f35a7823e61fb39bb05f22b30040cbe1b00049aeb6952b7fa849ffff001d16b2c110","01000000aa686d0f52ce71d592688c0d8c3e29bedbf0fb47f3ccfac19d1ecb8900000000d93debd371a6ce359dfad338ed6f86f5d35b033538c7541db5b10a49b03ebe8b8080a849ffff001d2bfd769f","010000001c23f12965cc4f88d95479ea4ad5162889ed58c25a79943b9e9edb200000000064dfc71ebd250f3fc25a81685b46d48c0cce57ff19c9c36d3b177837f58d349bd884a849ffff001d18058587","010000006d01f64ca0c46b4bdb8a6d2abdc7d79250aa5c78570dd1753d135ae100000000fe42de6ef5497ffe9beccc9065c3a6b19a925a45ebcb828187b45bdbad8e5cc0408aa849ffff001d03cb148f","010000002bc5ea5eda00957064af678cbb2700b75d439f9e3bb9f26e2858a29a00000000549ca4482eb8b5fa016d884d17b4442e3c77887c61b654806ed3e4b4e8e5d7f2d58ea849ffff001d244afbc3","01000000070b0bb473365fb69459f42304480ac014626e1d0d95c6db3d8c592d000000005c11c0277a673d84299eb120e7eee526df19555d30496bb00e596e9b5559fe63ce91a849ffff001d4ccc5d0e","01000000c6ca1f35e23f3693ff09bf002e7ac03cd6d6afa5f24b5e5cc981ebcd00000000e84249e2dc8df57db52bfa333141a0f5ba24e1a5fe6b2a8b74aacc71a06da3fe4793a849ffff001d3813e36c","010000000e5bd4ef09c8a325bc4ae86dd1612c449c0f85c35253245a94a92e6b00000000d25e7d98b642a3a60ee3ff9154e17ad9bb7e439e45250c261a78d10afb027594f795a849ffff001d2db84898","01000000d5296a8f8a96d0ae0d9503c80385ca5312cbe0310a66efe710eeaca900000000ce7800642cb63f2537dad44b7ba85653663d0a3cea1431c16d667e1a04c7c2deef99a849ffff001d15f46d8d","01000000c81a8ccef62b5b9f8e928f38d0c807985a4a09467bd911adbd9a59c20000000054ea8ace9106007513dfc6c668da8c07bc92bf2852745c0a7800c9b7f01b0a9d8e9da849ffff001d9c9d9511","01000000fb7d422c7a4e4455361f5129715e681bd0089acc32aaf7afb374a60100000000c1c684ef3b87a0873159c783f4777460ecc8af6d10aa627b1ae45f908bae33ad539fa849ffff001d35fc5c52","01000000abd263824691923b62aaff72a8c878255f14bd4fd7a9e4c24bd6f816000000007cfc703c928c2529b6066fd4c76b34974add24e133750c0718d1d5aa64f8bcb2e1a3a849ffff001d384c2f31","01000000134f72e7b1d1c6e120467af4bc6013cb26913a6e7ec0d897a26488ac000000007a7699e8f69f35ee222e2f4db733ebb92c85333da870e43f72e00020b3638f8db4a9a849ffff001d335b382b","010000006665afd71a19b1490f5fadb88671b71607a7dcd9180d2824612a116800000000e05a9792675be30b226f1cc9287442de22261d828ee96897f4d504ef7e8edf9c94aca849ffff001d359c6e6a","01000000af8d938e027f9b768f81d7565d9e84e80458483359af06235fd088d1000000006ec1be18da41e2a75a905578c4968f3bea994f15d2940b9333f49265a9e8058bf3b1a849ffff001d1a99fe39","01000000c83f2dca885587c6cf172fbaad2d7535a02fe6de9195bc26a8bc1992000000008834b6c28f8cbf91b940568db30a2cd5cc8b5edd7d6ab2fdc6be9511b2523b0b68b4a849ffff001d093fb992","010000005ef30eb90e24a61bdc14871944e16b64dfe6d20c76474c3afca3877f00000000420ef84f061dcd19b649322a85604d3539bc98b6bf660c6d91c84283f26c97cabcb7a849ffff001d37802ffd","01000000887610d475c3d8bec3064986e3d2643f3136aea4ae807d1a9b74c2c30000000083674b01fa93f7cd1e8c1808dffe515b491a4c611299984fc95300f051c4187afcbaa849ffff001d303cd1fe","0100000037133eb6a7e5d45e9bebc6d439f7d093086f7006e8b9fda8a016338e00000000dee4957632980b7a337c5cae79b218ffede3c5a953b99f00a0d6e28db9dd2fa299bba849ffff001dcdf3a802","01000000c15e64b3d101f1030e735606913c5a707cffe0f379beec0a1066707f000000001f23b8c1f83f138176f6e7ff315dfd85920b9bb5f0cb7533fb0f2cf4952b199252bda849ffff001d274b299b","010000004b5220025104a6d38ded52ecdd01b9158afc42fd42a4378adb59826a0000000025a58a30540bec7eea21f32fc97ce57c2831f681d06a1e06301874b99f86f4a89fbea849ffff001d30db464f","0100000008e5d2c4377f577f24e38a690e2fa56323f4393070f74472fa60f3720000000056d6e199204207a8da29103dbea1de6cacdcfe3ed788389b30d77da4c4d89d38c9c3a849ffff001d3333fe1b","01000000771066e430a34ddab385f5ae28fba2169ed7e1ee0038ec747b180c48000000008590d72bdc61630e1bd33ca3399c5d61b7f026c25484ce438ae0213d55f313cb5bcaa849ffff001d26e8db0f","01000000e9835ac0c1a78203956ba3416670e074320c20c347329d87e8cc4f2200000000886d59161a28cdddb6b4ae4689b3f7649cbfc04cbd1c74d635ec3dbcaf20e3e6cecfa849ffff001d23225a9c","0100000087322763ae81f2edd52d451946c25ffbe8466398e719411d1104605200000000cff5b7c303266d202a5db5ec4ea8d4f48d5950cd32b059e6c5f0a4cdb550a267fbd2a849ffff001d1ec56496","010000002a44a1c5956a2664164a0fd9bce7170de44312357bec9662c581064e0000000007118b623d2bd9f1ecb453441098996f044d1f3c02eda0c6924d7412815919bb5cd8a849ffff001d3610af0e","01000000b3a70f2e328eaf2c590709cc35fa506e531f54204536830f8610afcf00000000ac95677b20337bd073d38847166d8e4169672922b11e651d0e26032e000feae3e9d9a849ffff001d23ccdfd1","01000000ed2d2069c4ed63f2a4bcdc44129741623c732768be5e39a7b43c39210000000047f96217d7557be565f6496641da762cb31e1f570562062ce832c417187449927edda849ffff001d0680da40","01000000c23163e70962c021af1a5ae355911b8185d99d48207a24b40b49ed540000000096e18c3989ff981e4eda477354ef779af768d2e098fa9b5ccad60626afc952ee1fdfa849ffff001d34b1a997","010000004058466aeb17c621e1fee73db020aa054d9075c16438a97c271efe2f0000000032883eef5c06022d913af1e32bbbbd1f76441fd7ed786cc4d7d43f6de3c09e1a19e1a849ffff001d3463f471","01000000caf19f015133eedac15d8a90201897c38be014165126f4775a5b60130000000056b58e1234c075378330219c670be3bd9435945480a5310e48b09094a95b320305e7a849ffff001d327b9cba","0100000074e703b1c7fe3908a0caf14ddc0f3867980c82c05e96d4032b10b4ce000000001664e1e4769c39b1750cf65a882a0bbc1204e6d11993b1cd679d51735a706df0ffeaa849ffff001d295bbe78","0100000061b8fe21d967fb83b6edd69db3c37b76224b513efc77e43e2870686b00000000fd488417a88e864b926c5b949922d85ac421cad4d8fd4f7a9baf4ae90c2ca8deafeda849ffff001d00546e3c","01000000900a26bafd4f3299ac267d41acc3290ea93a3e33fe79ad873b08cb3b0000000002dace8abe319a447a8db37ef19103e77f9d22b131fed6cb010aeb062add6bbac3efa849ffff001d2cdcdb4d","010000004ec3e98497c6e3af3275046ddb93b7b9909b4abf4c2e292007bf003b000000008f94ef8257bf58133f29ea6df8f517e67cb3b3a7f2d871b87a91b38965db4b49e0f2a849ffff001d1a6580cf","01000000348c163e7f1bad9a10c783581b1f4c334f882afa4162513a59e5012300000000dd82ef4ac97f3e5c5bdf33d16e024adc570889c81227af616b700e32889b9155cef4a849ffff001d2f6b371a","010000007d70cfb87544b38de60780ae7482ee4dce664f781b03dfbcac6783f3000000003419adbc0cacaf5bbfb06f6d9c23f671f7edad9ea0de0bac491e4a4f82cc21d09bf7a849ffff001d32e07373","01000000784f2bc6246a6270827da95087aa3e737ec66b3a9c6b65340873a310000000008176d39db474b79d4b48398df22d17e77595d7c4f0d4d2d316a04172e0da383100faa849ffff001d36fa73b4","01000000b17c0c5b12f8f15eeb86bde35fa9e0ffcdff56507c9ffe68f606ca6f00000000bd26de3a03b365cdf8257419799b2d735641725c832f35200272282c7e2c417abdfba849ffff001d1b71b7a1","0100000067f0bb796c0552b73e3a015cd6bf2234870104edf08e39104ae1266b000000004a3fbd906590bc825a59c5b1aac49cdb83fbdde50852778b1c1661d15c8c1b432cfea849ffff001dc7a9a90b","01000000d8144d1d6685652bb03becec390c9c17803315836390ed841c814cef00000000303c94531d5d9eec401f894eac2f4a48c10ac6996ecb33fadb0f580e394c4890f0ffa849ffff001d25f84d22","010000003312fcee0a72593ef2ae9a36042dfe77135fccc1f7adf4f3302c630c00000000d6057aee122fd4588ba9a95ec8e8d3de2770f36df3a53518aab61639e50cba630705a949ffff001d1ec4b017","010000008b954b165275eb803ee9f124a93a2de51d31153e86e587f7db8f3d1000000000420394c91f4b15d4097401f8b5b05a65d0778f589a2d90710b8c15f4703ab2c48109a949ffff001d03c57427","01000000f881165eb1d3e4a37451d45cc8f97a173be46a3b440d6a288347949900000000559642d65d8cc077a081c985c8cb02ab94fd1e5c6ceec1002ca2346254d2b5284d0fa949ffff001d093d6536","0100000048e27cd974a00e973ef853f7e3326b06b70ef894d8dd1adc663bb89b00000000324171a519ffca53a6010a98318743ca75880a3b970e7d8cbcfd6a07255e50eba413a949ffff001d2cea0e28","01000000ae6e854ad892e59b929744b6d99a2c6e7376c70d83b124de28534b4000000000e8513f0d0ba3de39727d0cd72accddcca365d7f7b55e899b979f4c5d175c179bbc19a949ffff001d1cfd6e48","01000000e0b4c9d034265d74687c90e0757b1134fb3ea930e637efde89574a520000000069b0c823a1138d8e0e8597fac2ed191a20074f8062adb95c7f65c1c35c3735d06c1fa949ffff001d37b82a69","01000000cf241d78868263dae16ea9938c148334035d8a0eb6ea17c95564a9c5000000002254450f92b2167644031c3ddf2b551689f3f68fcc79da9927220b71546024a14522a949ffff001d07c0f960","01000000230d7061707f6b4872d65e36f764bd6fa81a39775b3f850c670238a200000000168101766ecedd33f2e71b8f0228b9cbc91010e759e5f2ce9be54aa7e0aaeee17b24a949ffff001d2e4a247e","010000009973ef93dfe07e6eff38bc96d46a1516d24ef7dcadd415f4276002a1000000000edbc09e9afa93d399ab0cc47d45f883317681983a1d8280e7f1a5a2bde01e4e6d29a949ffff001d22cfc64e","01000000c3250ef2a5c88bd1a04df39bdeb2f0b257a6b5327620cdb3f1320d8500000000e602335e4a67062ef5e63c7ec1aa7a48eb79e8fda740745f6607d17453aab814d62ba949ffff001d26d9c9d5","010000006e12dbeb6dcd2001ecddd54891b2f00952b53f0ccb4c41001eb48e6100000000d8fd48e9d678f804cf84c479e06bfa4e0496f73c2d256c1966447f55d882b99d0a30a949ffff001d05a90746","01000000d56487f81b94e2e5ac6558d03326dabcc5dfe9b9a14078e2b049384e0000000022f630b0cc8b96e737eefcac98ff325ad51266597949d9ae4f19d302fc1599da5332a949ffff001d28630729","01000000280fbd28984b3878ea8181eb75c544c07c75b1f076c70a53950d1d790000000063380c99e30b2f9e8bacf000db460b4e0c6bb7362242d36241d2a645deaa09162436a949ffff001d3a809116","01000000585d6a372627231a05890c0bbc71dab067c24c5aeda2b9ff59410a1400000000be7a6807a034d4b9b4e9e806d54fa170c66233dc9ba348597f919efa80b7ddec9939a949ffff001d1aac8cc3","01000000373c08bec2c502478994f3f5fa4b04e4d205a3d72609f51a35d809050000000017ccd7348eca597020c15bd332315bb6eac99b05ca954cb3ebbbb1d9f89f1a08833ea949ffff001d14e432de","0100000014eea1501f9b834a7ba804e8e3114b183121ced6f26be638f551b73e00000000d7fbedfe7723035d0ec30e8402664c0c497c4975ed02c59230a40996f82ea2496a40a949ffff001d286d2834","01000000d8563a8bc7864108193b620fb428ab15c43428317bea75a7bc040d5d00000000f856ed961e42394d876037067db7e3968b8563b57fd53efdbc2df69b14257c594442a949ffff001df6331f08","01000000c4b4a9a6505553b30a28771a095107072d5c21399c4288bfd1ab129200000000fa02ab7bfa99a56f62c5bd5d799dfde3ae96d0fb04adef6c23e491fc949acbf6fa45a949ffff001d1d6e98ba","010000001d035652068c748903e763a36938a1fd535ec9eeb0bbd3f6169d8d2900000000de3a5e5636c17f8d94a27968b49820f76622a0198f2833374538da1d6bf8b4d6ee49a949ffff001d1fdfcea4","0100000029c8ce483b7da75f0922c829a563f31195a7f985afee236242632981000000008f921448f3be5502d505b801be69d3b183c0509ad10ef026efa3ae7637b85718c84ea949ffff001d2e12b753","01000000490035bb5130c82702278d07a0353bd2374fe2b6dddcd4d412029218000000005b8dbc8ba864f93c91dd2572ff90c87b7ad3eb73cb056b6e18a0fe6d46cb656a7651a949ffff001d0984a1c1","010000006b21583f47483230b7e72c5b90a08a4554ea55ff118cae47e68e8d67000000003bbf851d0f9d5756d53177bf4f621326a8823148b85bdd4efa2198dd0d647ffd2454a949ffff001d2cfad40c","010000002ec1fa3286e2159b26d608bc45664719e8e85d7b17ad6f605088f46900000000280d5f7c53a20615c1dee5a639ef52fe629b4660a59d361c2ed47b33e0cd5ed47854a949ffff001d07ee357a","01000000dd72d1e3627932b4e6e429b38101c526c31b10dfc1a7f8c68c2523d800000000b9f172510a1b420637054abc6d3cd86e1d2411c12f381b9fa9197ca3a288ab1ed155a949ffff001d14854925","01000000b3cced3fabee722f4160438609f2a6f9068ca7489ef31ecdb493e75d00000000d357eb9034dd4a66a3e021c74748e2eba060a09a7d20a710d2840be0f8f66dec6f5ba949ffff001d28d1650a","010000008cd4f233db03076200db05f43df976d628f29ee2f4efb28ac629f74400000000b0118613b0b474b8f31b6f93927959f92a8389c8b969dde7a7418f8468efa3ce2d5ea949ffff001d239b4f43","0100000063fc88a16ca71ee89020ce77bf0969079290c38b0d024c38e5d46b08000000009bc3fee46270a387f6b4fe85233663bb2b336b460b033df8b28bac45fa1b66c51160a949ffff001d3a1ce709","010000005b7420792b4a650856a9f235d845ddaee9dd376cb6f619c5055dbbcb00000000d819c323730f131b374c8a9787f0fa7c3adf68fec29389094d276b9bc9bc21366462a949ffff001d34b3f13f","01000000210b49348ed71ff0893e2b17e6ea13c0eb13c8c37eb8848b54165e42000000004c86ad9a8cb5a06e22829eec7be3c5b44976ba594a287f29c75207d59a4e1158f967a949ffff001d0206a934","010000007c1ca45233f2df247b82b1244aad49dd48710a9a54836d5c779e59b10000000085688021702fa5f1e0ed1b812495d696af48f380da8f24995c3e82fb9ade33ebcd68a949ffff001da6e02501","01000000eec36558f95f279d3b8be3371846032e0a487654cd46e3e50637df5700000000056b4bd7acb06665869a5d288d2594d39e6407d49d5bf9d78eb9b8c6b10cfaa7bd6ba949ffff001d34fc81bf","010000001273d58671c863af5cb3b8603eaa44d0999597fe973d23cce3d49001000000008266c5ebb5635c2b57bb61a00b0bdb879c3f64f916e1e0438f8a501fc7d9ee6c8f71a949ffff001d323dba7c","01000000b123a3dc8dfdbcceb30cf614aa18e4b97d73735cdc9a5cb9da79c90800000000eae39f095f60e34d88d66178471c265bc47fc7067ea62d079df00405baa9dc896a76a949ffff001d031f974f","01000000a51f4dd2fcd3e696b867180dc811cbdde082d249121231cb0046756c000000002d498db1a70dd8b2dce6b08a8274aadce7085fde1591f25bc7d15088432323575579a949ffff001d2ad68036","01000000a965d7eddea595131c446915587f42fd7fec40bbfc3610466dcb259500000000e3203a0e9ccc304798e92f1153cc7ded796757a0097e3e1eadaaab9eb1deb98c2c7ea949ffff001d34c26460","0100000026e971ab1ecc9db267306e14b8ba72d02b6f4fa63cc1a1589a491ab800000000a249114954b9380a2dadddf1c9b9da244e9a317fd87e85609a124c1a191b8149767fa949ffff001d084d7de4","0100000047577237c20e536fffaa86d11918e981480b60c407ac2f1d9926cee20000000016dd0b6c4f02c5dabe356f204bdd4066cd4b63f4e5d4e09070506fb5f2e093122a83a949ffff001d28c3992a","0100000016c8315279d43124e52387e19b7b6ad022fe517a3b02e891f73df118000000004348d3a2bd5006d3312d1e5f8f616ab159d91369995ba0253edbc3037c6faaaee588a949ffff001d2c90f111","01000000f719744056c2b78ede8e2eb750c363142983f7ce396fbd273401f1e800000000d68bf963f8e85c3eb3cbdf16dc4d42d78e59ffc1b1ee642a622e345e992551d4d98aa949ffff001d1983b3cb","0100000074b22fa109595144fa5d5b10fbef74a4a0145a50d6b651964be8c7a7000000000590510d419db45e01116a4df71f340b9ce2eed2ce31cf274b60416d4eadc7ec938ea949ffff001d89691c06","01000000a11183858c92aa5048f59a4e49430f648dff73f64cb318f2bc4d293700000000aa6e6813236a916829e014654fac46d872c726295f124c5bc0453f5fe3e6f9af048fa949ffff001dcb299800","010000009c92ad1c3672538ecccfe00bf856cf307e3b8801c8b5f82422e363b100000000977ca9d666e27133c9a9788963fb77c3983e232e65a4ca9f2de23114216ed1574790a949ffff001d1a93637c","010000000efcdf794db62026386e03ef832e811d38e3d01f66f948822fafa6090000000073292a24cd8fcd6d5222a3b6c997dcb0af7873aad680b01062604b722a5c78516e92a949ffff001d1d3c7e57","01000000b3e00bd0ff7d7834cf27bedceb8a6dc54c50a7ff5f240840640663f600000000e81ba9aeda190a571654e68546c142f9bb4906be05a0665fcf4b8af385b33d005d94a949ffff001d22266147","0100000044caa993de62c389914791c4d980083ca1cf61809a95f91bb7057e5700000000a13af4c0c198c8fbd9ab5dd9d483ba87b2b5a0899b1cd31127a14f399fb932683299a949ffff001d32086285","0100000030c8deb80c08c1172421baf7b35b1ccc3aeb8db0efe4a19ce8c9780100000000397e95198b6bf5598bc5fa66761346c7e1ad0e67d2c1ecf53b53fbd2137b3b3b299ca949ffff001d2e891aed","01000000836224fc75e03ec21718c2bc8d4835b4e7e34294df5f8214f1cefe26000000004a719b44fac13c0e6002afec71c923b637864290975d2a54aef9a78a16e990fe9ea1a949ffff001d1b0119a4","01000000b94ebee49de05aea8db8a8101243f68094c8b9448e047bbc622f846500000000c57747942fa47b52e282f593727bb98514a20c3d8b90edf1a1e2427cca52fe1e66a5a949ffff001d2b471f18","010000006f79c63a2c034672760ddb1680c535ef44c2540380b843bf0c4a1e9100000000f28719f05d2331b365ab02dacaf256bf4f6d5f5240429643fc6d0c9563e26c9016a8a949ffff001d33d40cf9","01000000e8297ea9d970dbfb4bccf87c701ecf78df18ba165b9620c453f0092500000000255dff8277dc2d7adc05ea4b4fc662bdf87ef617fb403a0fb203254cb0c47c9410aca949ffff001d311ee85e","01000000e3391f0b410faca1f8213781f3d57f93ef5f5ec1716debeb1f95f79800000000dbc96faccb8fc139b0e06cc177da00e0be757ed508bed3832ebe83c4e58b148d19b1a949ffff001d153c82e0","01000000e503d5aab404dd9ad6076cf3afd31e4365be6a067e8fb5a5321b88ac00000000e05300ae7ae591ee8927d2793422c57b363c3dfae6b01dfe514729dcec190b0d0eb7a949ffff001d31551a70","010000001019a3e8b5f87968d4cc86d0f9d37b63049361655898fc3dfc2efa4000000000b8e082250e3845e3c7a616d60bf9c5a6163799e35797155b073c6b5fc2b2bbceb3baa949ffff001d33015555","01000000c272051aea05ec3afedfcf26c1311b4387c1291a763db34d206e753600000000d320bb14bbe17f8383b198a53380600412e786054847eef323d3cbfd7fe9f50b17bca949ffff001d384bbb6c","01000000c5ca5904aabc6055603ceb3de3e70c10c34656ac12fc0e039c102c32000000004f0040c16a538a94bc6145cd06467bdb3c61bd94fc41235da88eeaf80b732a02e9c1a949ffff001d37e58e6b","0100000096e8bbca4f736b54893606809686a81520e3700bd17a2f8db7d78641000000001920b6b5b78b007f92227095663ec59ecfca0c49d6e583a8780c9eb1063b874d53c5a949ffff001d3a573a26","010000005a304439e21f0d6680c5ea3b127241b52e829880f0391d2abbbc0b1900000000b8a03e71a243cb5c435108d664348f6d4ee51140e205307b3b69618898e1b18ff9caa949ffff001d18f29f33","01000000d8b9a2921ccd0d3168d94dd3b49ae11f9b71bbceccb3601e98edc42200000000fb4a7dad6dee04607dc1c3d4517655ecb854e9858ac1ec4c4cd87437e46cef168fcfa949ffff001d2b8232ba","010000001e84f1e4b7811afb57424ac6e727ed1b829682c71dcfa0508062f3df0000000029319277904053b203c7083c14a785cdbccbc3bd9ee0f12c9377f54817afb72993d3a949ffff001d219168ec","01000000f5ff8e002144e741d849453cafc49b4978975f9d7cbb2cff925e5b88000000003109cc3406f076e0c69b36fa9665756fe7ddd54c7cfb55be5cbaac6ca41cb3c5bcd6a949ffff001d1978d8bb","010000009ccdf6dd172f23f9886b3e3b9d284b2dc57caf3ae3cd7f492471ce2f00000000982305e941efd97a1a3004584f66526ca29ce1e0c09626fc1a808e2a3ec70ceb05daa949ffff001d09bf29a9","01000000eb9d0e44d3216aaf3e6bf0590dedc9d792d397b5ad4dd3fc8450eace000000006026569d2b6ee74fae1393203406cdfe5864423b4bc07913a57191d4078c85c5e0dba949ffff001d184729d1","0100000071c4499fe69aa3001f7ef62aaae9d32e94824924f8d01a2ff11d254500000000418e8875bc5cf8b12b78ec3d1e8faa0260b4409f8eb8b50a9185494e88a9aa262ddda949ffff001d93611005","010000007e7ef2a24580698814243ed0fc2199e6b78f16f12b164b5395daf23200000000c6543e38d9a4689ec9da7d9c761ddd770147bad6d82cb39c2c832190e4667b984be1a949ffff001d04956529","01000000028ecf0b5146aa2929950a22c84907afff2c5c04a0520b7cd9653408000000007ee45c1039e6ff115dbe3f5a30b7192272bd89408e89206af708d3891633094008e7a949ffff001d1b2ee6e0","01000000c4880f85d0da95763567309fbd5355f1a745593d4427ba9c851a8e9c000000004c241494848b4f125cdc849c012df32b203bc30ecb04a5b5e5e5a88f775926b0b6e8a949ffff001d31c769ac","010000001e61370356bca27e354a70238eb74adc6cbf92e58c6a882834968e0900000000dd646a2a1a248c2349b613b8ddedb5445c74ba0e4b9486d3a7f860acdf26f5f696eda949ffff001d291d4000","0100000058f2b09d4de39add5d57b9de7986d3fd8c67a2358894316c9b94fca6000000005cf3caf3e6a238f15069f2f5b7a39516b8740139c55a28a9766be733fa1043fdb3f2a949ffff001d217433a2","01000000a07e71ee97ba813d3db5f07ad00e61ff3f4afe6c8fd089b6c940a93600000000c4ca68178a88912b850512a6ed7f5102d8b586e35c1ce4da9ed0692a98a2190e17f5a949ffff001d2c3bf94c","010000008d24116b57c5e4cc831ecf01bb28e787a184e4275e76fc3084c0569500000000b1c0c7c3f867ba6efc43e367ceedc156717d44691a97f59ae5b2eb6b5e81478dc4faa949ffff001d3558e860","01000000ae067de981c19890a2093608ef7c0e67991ba2b7a6c28ad7431ac87d00000000c79f7c9bb2309043d5b482a056b8919d93c32591915c76f346d54d81b556ada862fea949ffff001dd9630f0f","0100000045a003a0c2875515a368fd3546294fa7abe9b2144899d605ffb6f38300000000523d2a563cf9c1137035ad43d4aea99bb4ccd22fde22f12fce6412ece547178b7700aa49ffff001d34907045","0100000070224e73f1419fff08ea8a0cee729c545ff24961b1c601e994be39a400000000781c62fa21c276ea0870e1063ad0dc320c3bd96255db05c34ebfcb1b16449545e006aa49ffff001d2d8bf298","010000007233f5681c5b02336b7b3f402c6b25b51df51877accbcef3387d72f5000000001ea03f90b72ea443f615cab68373cbbf370cfc9db0da568cbbc25d737966d2713c07aa49ffff001d5d6ffb00","01000000f276df0070ac15520aca7c4f8055d3e66536172b633da216b5412c50000000004e19aae91e14c589e3ec4712c2427b75f46853cc2edb4422ae326834f454b9e5e20aaa49ffff001d263a5615","010000002ebba90cd1e6e7cf11d8d785f839b26bcf891e8c1279f9286dfa873f000000003cb18b77dc59cc5a03ea0a88e8b445c5435bc9f073f9ade7874671d9c2a3f517c60eaa49ffff001d1c907ec2","01000000462d7821c112be11b5a5de7532633bda01de58a4f6644a6bd114859b00000000c18da560c7c562cfd9e6e415cab17134ee0119d2f59e1f13701818d96b02be71b710aa49ffff001d144ec87f","01000000b637052a97247d1c6348ff9bacf0c05db61938e525a40246087be887000000008ffa9b9188fa89a3d98c76b60afabd282cb61d786eb64896107d51c3a16a6eac4f16aa49ffff001d37c07bd9","01000000c69be780609cf1075633d81d07e8d949ef302a0065d11ef46cd2f2cd00000000f2f362b6aed2ceb359637cda5ce05f20661e3638b1c27752450c8f1cecb0dfa8ae17aa49ffff001d891c9e05","01000000101daa1faa5d14dd4073754e101c290d209fe4bbf3783126e426ea5800000000d75aba03bab91f8f7756344412517254caa17f006af56aec49571fdae7e4ba50481baa49ffff001debacb911","010000006ea0579edf4defcb4addb390913616063e79e15e709a8c8f28f1664b000000008312fe6129c47e1598469a23ed24e45f7af47d1610f76b1cfa4265e0e77310db1a1caa49ffff001d27c115a8","0100000082428cf36949a62bdd2fa8e8d65097c655dbd8f3facf1ddf55773b7b000000000b43afe0b336b2ff895bcdc1f2afd37620980354386fe8ec6baf250fde0b2d075d1faa49ffff001d17752a76","0100000003d467866a84755b0dc7d449fc790e7b95e9e7557d220139ea5a215c00000000703869bb846db1e455b3ee0d0028d6939c3c01da59ef9b3cfd51ff345421e0496724aa49ffff001d2d7a1202","01000000535e15d3fb469d6df513d1f42d9240b8ab4faeb47d6f30a8a7d99293000000003cbe4f91e77dcc14def222c8004a2b10f0802b361ce5a37ec57e870d1adcb2154728aa49ffff001d337c6fae","01000000f1b963d6018c90a8906603ed1642ffdf3a891dae42cacec97137f18a00000000c39ece6e2cfd03a1cdbdc6a1c947e887dea8d0288f8e9855d16faa5cf31a437d542aaa49ffff001d2413ab94","01000000b02c6bf86a27d5cb036099af319d2421aab8f9bd02d43ff32d615f3d00000000825d42238de4932b12f239f1892655305f04dd40279318864280a3ad4f86db45522caa49ffff001d234cab01","01000000d0e5135997c09a5bafa44af1936343f44ab88d17455da71c8d67bc1d00000000cb493fa7b12d6bdaebb7d3d8e8b510e9d405a228d3383d0d29b845ff6a0568906f2eaa49ffff001d23d2cf1a","0100000077418fdf595af8c57cb315860b110c4b58625768e08687ad8b0cd7dd00000000d1a602b2b2ca44dfd5d1936b664f51f9f35d4427dfd36c3950d5562af4cba0b33930aa49ffff001db0085805","010000005c39ce099071c33170f2bd245193f1b100ec09ad9e6f63cc8cb5a6fd0000000001d68b06cca5918d72944e70ab1250d0d6d626c15e1aa4de35c455053f203257c031aa49ffff001d33057d1a","0100000099d5a065f14b6aaff267e9389163ccc65b8081adff943a08006ab1c200000000a05aeb1843ff1af3229e28a7cbbc3ad24f1975c9b25f471e6b04d8311f66d55e6036aa49ffff001d38170f6b","010000001e078779cdd96a3acfabbe05567e830f1a501ea6932c3f9dc531374900000000f547920b6d410a00c01ec2c2b8c2af6ee15e73172da2c892f45a4d129e74c691843aaa49ffff001d1d8b48a4","010000004c7ad0ca1847cfe3b7a9aabee2a057eaa9ec963611a55b26b151c1a70000000067722671c7c6bee0bfc692b4c04bb5ba8785514345a3365de630a88000962c77963eaa49ffff001d2b9d7aad","01000000f31cd00fd769416a065a95150ad7683db35c8be9b03099d642fe62840000000085b53a66e68cfb38c4998bbd4f26ae5a52faf46d891c10b148e5933f504b3e3ac341aa49ffff001d29689389","010000007afceba9daa016dd285b1d0fe09cd22f7d624e97462c4cc4a0a09767000000000a9a75ef384cf61501961a141ccd3003c5c8e2a92ffb78c227c251f80658c5fefb45aa49ffff001d2d27ce92","010000007625e2f424072771bf50aeb7c1cbaec5bd321e8ec36feae552a078d200000000f027545adc1f37547776ae624da6378d4e0c944bea94e459743b3a013c82992f704baa49ffff001d324c7e0c","01000000c7c4e703b7c0909a588edee5846c646cf3ccf248afebfe62e40408a700000000e2aa85d6acb96bd40ffacbedfe3642215ce9abd9d0428e456d3b00b844703757eb4baa49ffff001da011cc01","01000000a5b27ba395caa72d410346d72e2d10853fef790d273262fb79c0f0dd00000000de94c19d903adcdab23fd40c68c54b985ebf0d2a2614c90a48853a0678e628d8eb4eaa49ffff001d19c06eae","01000000f3a0e10c6afb01c48e340a96f87a1e526ab713f6e0df6ba8a9bbc707000000001c64667f46289387dca5dfa23c6bd3671c509675ac48d1fc5644eca5e300e19fba50aa49ffff001d22ac4c19","01000000356a921d0afb50e03c721ec3454026427b84e3ededbbfcd0f1727790000000000adad038998d35c9f0faec9f55dcc722f8abd0596d814ee6e1580694476841fac453aa49ffff001d1d9a9cc8","01000000b688ab8589ad6e8d8571093d55d16ab6fd120656c34e83d7a65fbe8900000000b99e19ff95129b70c9a92bc5d36aadd187bb71b6a6642303d0d7d42b6ffdb0883259aa49ffff001d16a50cc3","01000000dcbdce9412834ff1a9010510d51aa5a4dc67be267dcc04fcb50fd33a00000000d96ed0150e9404ea8da50a444906a1e79f3fffd2af4f3ddbca77f566f0c388e9265daa49ffff001d123f6e10","01000000daef7a43232ec3e1fbf7a5127846227d7a6f7362c795936d7ded22e40000000021d04c0a3bd6fbae658ebe4d0c9ed7f0ccd07ad05c338a45c488818b018e804af75daa49ffff001d26aaa73d","010000004c93a432dba5450ee332dd4de0e955b1e292dd3ec0277ecc32c6ed370000000091d70445bb8069db750a4b534d0e67272867d7ac8eef7f74d862a33cf95dbc704f62aa49ffff001d1569a542","010000004917142bdee187c42184fd61ef26faccb52cd1ec2ae5f16ce12412fd00000000bd93a74eac7977de45e105bc81921a305916247d485856f6cfb58d17951cd9586a66aa49ffff001d05c908b6","01000000953c62fb5c40d370e55d1294c3196a2a3eed509728437805020dd369000000007c1457028e4603273d6700d19c51d3ffb1fc71774190b6c3e12a09fcc8f59c7cac68aa49ffff001d27763488","0100000090150b24066f8f9561ee29eaff1409877362b7907043105750d6cb7d000000003547dc4964606bd3e226901826b49783dcf884aed15c70f8b55360ae02c49077346caa49ffff001d3117a9b4","010000005e989b193a76f28025be880df930a7829867f5d9a0dfe8b8fcd4508e0000000097d26d1549e8b0bc91edefadeec727642dcf0e79fcb5c66e2a951bcfb07e8821f16daa49ffff001d029b4bf4","01000000b4b8c9fdfcd50035d037e7a72d95cb0db545eda0e8e31b7da4d6ffdc000000004027529a8ec1403d8c654dc8ff1ed1b2b1419d01d0953dcfc850165ef1f2dca26e70aa49ffff001d27c1ac6d","0100000035469a1bea056b39c4bf0d70933e7e62430a2d4622fa66ee9cbc07a0000000004f1a1c9f72b7da7b548c5e5cceb6de3255a5e530af11cc2ee36113ea311ff1a0cc72aa49ffff001d483bd009","01000000a470f66bd7c1fb63d00f1187d1741aba9d0c6cbf6fe0dafeeef1676b000000009713027ef407bb3e57d2a30c718b04a248d29ae221f117420d49b9b7d0fb7e6f8e74aa49ffff001d27c2d9cf","01000000eb69cc3abe46bea5e549b81da3016555e14efffb5cf6c13b7a222b9e000000003272db6bcdb1c02113c6e82ff1d5e0ca6e37ef2512314c02102155f3347b92eb4978aa49ffff001d294212ba","01000000885701dfb8e1de06896627244e91f651a2ae1ba800321b3a75ab2644000000005fd3872388192653c1baded784afab6e83a18edbb163996ac74910e21890f3c3dd7baa49ffff001d243465ee","010000005615ed62dc17fada3426535879d8ae190bc5df5b7cbfefddf1bf25b2000000009f5fbd77677bc6a9244fb04a40026082ee28ae299bb1bfd48d4600e3fbf33571ae7eaa49ffff001d33939a1a","01000000f49eb7df7158eb543edfb18f627148476a67925604d4ebb52edba6230000000051345720fb78efae3aa27f73c335f45531b2fe48219e18f6836b61eb7ca01b4e2880aa49ffff001d040db45c","01000000bdabeac68ad70f678bf9695fd494b25226b89a204992100880362e860000000077563d44af7465ed3e55519d4e648e0707efa5d30f354446ab34b1a3b18455e8d982aa49ffff001d1ebfb955","0100000024a97573c4e892632800626cd6bc737a745af64a30ecb1b19fa5955700000000884c74a998897e7e29d4328a5498a9aae138c12926a87ce8c2e34525b18cdbaf5887aa49ffff001d28d6484c","01000000b839e6b27768e7bc5d617784186d8e41885ffc7a6e0419bb37304e070000000089cf8b56dbd53541d937f3985c703c213aac8b8eace3805fb8091ee35afb9ab2f089aa49ffff001d01f29d2c","010000002b62af2e8761fd2ebf33610a3f0124e10dc1e3cadf1f04935a8b7530000000005de0d35b42d6d37704edfe5c447dc41730828e175a7ca3eda49873c8ca59c20d9c8faa49ffff001d17b0c4aa","01000000bc8dc426fca62976d8a33451ac800b1be06b8fc4d56dab2be8d4a30700000000faf57f531de1ddaca6e8b35f4f9591162ce7d15de47d2af7fb728d5f24016e935c93aa49ffff001d24991da1","01000000d806232c5687ab4cdd71e7b464cfe9e9319ef26633046c5a1eb989b800000000bbf8236cdbbdc514312ec323fc46cd4d903fadb2e8dd41c52fd5eddae32d84078696aa49ffff001d1b3cdffd","010000003d940c16283f67d3d22218eb55216d1d8c3afa11a0b5e54e024b9b0000000000bd67a250897c592e1d75a6c3ad95e63ad439584165ac6e5ca5cf261f62411087de98aa49ffff001d6927b909","0100000002abffd8da7b81dd5d0547996dc76c1a932970545956393524d84c4800000000962c9247155a42b17bfbdf5dbeaefc6e068ca5ebef4f76098bd6f2563ad41496539caa49ffff001d254b4593","010000001212a07c5f87d1b1b1217a1a6d344d73de6e90e763e83634ad2c667a0000000021afb305e45070bca8b7dc1df972f81bec821777cb72ae51a367aa6ff5cf463a77a1aa49ffff001d347d07d6","010000006b8e61d04ce94984d8ff13a2f83831b6b902db9ee1a119d026982b9200000000086e4c32735335f71d40b97442e0e202c9aa05660f5d88493dc5b649cd7deb2ba7a4aa49ffff001d055c56dc","01000000b111cc31be002b9f773f59da696763f507047716158c7b5f1ddaa58d0000000003a8b66d167d29c7e239bb5745cd992233b553985321bf87d9546ed418304ae4cea6aa49ffff001d16e29834","010000004a52f3a7056f5cfbc1e291666065f2517a8fe2dd18d5d537b7e95ab00000000023c81e3490cff71db6ec40d480806974407850e0f28981f68b2fa979500dce4c55a8aa49ffff001d38734f21","010000000941daf63e6c1d947541d448e9999211eb2c01aff1ee8372ef637052000000000cbc47d2bfb5db0da8e24b78c9d6949bc97098fc669946c405ae7cfd7321449958acaa49ffff001d8dc41306","01000000523e6fe639c8f2df9d955f04fc825d8655ae05d618e65fe70c1d2c0b00000000088e0f28f6d5cfe659dd58e7acb00d145dfa70c8b40576dea194351183bc334f8cadaa49ffff001d256c1c32","0100000074aaf02228b2b5cfe76c6338134768dcffd9bf78cf68278251d58c0000000000ba4c997cc9017021bcd5adad30afd9915e33d12e3ec3121fa786cf714ea16f0816b0aa49ffff001d26e0279f","01000000db5438c745659c88170baa5ca6b636474fcbbb9037830709c27a7f9600000000bd9c12779ad47eddf98f60664a1330c5587e020c89168a4efd014a085ed19e3a45b6aa49ffff001d1f8f7444","01000000ebfde6ff7d0b30bffd427dd4043ad95cf7650e0a87f84865322f68de0000000083220e81ab3c3f094d5cedabfd48be282fbcc81fdb54430300232e59ce37afb949b8aa49ffff001d06148ee0","01000000ef2e137d1fae016a0ebdff4f07d95b97de641f1282c8520181064550000000003dbece1c67009dd90d337dd71d72744bd08f1293b4a7c2b1ba779d349e0961c636baaa49ffff001d2abf3209","010000009b19dbead8f87f840d25ceaf4475f32623c00e339603b21ca7a8fe66000000001254908dcb2207da6ba475d2564f2ecc43ac1acfab93f3ea0579dc4eb6dbdb0f7fbdaa49ffff001d328c3944","010000005b30a6436f1712f44904982fc3814b69f667707a28010d72c5926d0c00000000eda057b5c87355807d1729ede6453a7fe5a8953e9176fb94bc4bb803f36b4cf414c0aa49ffff001d70c26c0c","01000000bf7272a1308b99e6d2dc0edce28e387b297c65d0f1ed9b3797b48c820000000031576966e85a9c0ea91491ab9f2a8063ee5f070fb849cb0c1f0bacd0d833e5de7ec3aa49ffff001d294576d6","01000000a5c53012e155a9ecc2137266a0bb219cabd7c4c6d1bd03237979bbdb00000000c88c36fad7b1d811221a7297eb02687bd34854221728f82e230812a90328694340c5aa49ffff001d07b9110e","0100000015c6c4794f23b07986c1c85aa7ca5fb1216ab486bb829acb04affc550000000040eae70dff040897b7ddd89eb38b8316cb83a4d113c1bf6fb01dd191abb7abd74bc7aa49ffff001d25191e1b","01000000f580f72bb40d59eb2e4232117cf6bcd134e00f8d1f4087f755cc8d190000000029ed390805874ad984c3367fefbf3715ff1b426a102eac977f131e9eaeea89837cc8aa49ffff001dda3ad304","01000000409d73cb8348d977562e8af1b96ee700aadb9d22708101aa671475590000000021bc2fe835512ce4969433edf26923f443e7832c0c89ed637c32d64cf2f17a3b5bc9aa49ffff001da7d21604","010000004ae3382426073c845299654f2d32fd39bfe63cff84c7109652efddb300000000905453f49e51197b5562195c9d5f5655b15c00ca58566794b10e23a0be4726e619cdaa49ffff001d044ce6b4","01000000816f9547a28c9782abdd217bdc0efcaa68b3a45ea985e97dec0edd1900000000e77e7390cc2e22abe7403c06665ef60a0e0335f2246e71b560f6216c3d62995517cfaa49ffff001d1851fccc","010000000a2deb84b140c663d259d14bbc64bf79f440ef479596aaeb2131bf9b0000000006429b65da3315f4aede4024eccdb3297f1a0074324b3c678d735602edbdc834b3d0aa49ffff001dd9631101","0100000060da864b96db501d7bb69e42a941c5708f3b656535a92da7c1ccc38b00000000e93adba2314c70b1ca0c1a0c7db7ba8c14d6c167304da93270d4d7087fd021be11d2aa49ffff001d382f86cf","01000000aaa1549de5bb5ddcb5d13492d6935bce4ae7a5a004349e465ae120b6000000009614e7e8b7248ce2e4d4a170274e9d4058b71308553e10b9740b815878e25d1511d4aa49ffff001d38b7d088","0100000012ee6c2e758589e5a354f7c20f50cc75745751c2be81526f6f6bc754000000008d2d0dbfedf143e7db2a72ea8e1b957c9b475e161513fcc1702c44bdd70415d586d9aa49ffff001d1ac54daf","0100000061d95db6165de184473c1df44206f71c29b88948d1577249b09c092d000000006020f1f37fcbdb1c2df2d9d94eb59e087d1e81f91fb0b840b8cf7adaece232d1cfdeaa49ffff001d269b20f2","010000002e632b5b3bdadef48857af765979adec30edc81d7ae5d1cdf2ad9b5a00000000a5ae8cb1bc218e33cc9898bd71249ed67e4b227244b763b076be31742414ac6fb3e1aa49ffff001d3a083062","0100000086bcc2dc95defc7705e2a092eb46a30185562eca75823d474d8d3d44000000000fdf05c56bc0fa7ad53405ac50042804897d42afb58b5dd31d0f18c7bde040d3c9e4aa49ffff001d064c3cde","01000000f784fbc957ac1af415192a8f2086e5c3e38de1007e74043c82eb557700000000487f5ee59fdec64ab1f91bab05d300daa7b3318b0780e42d9ab0addcc1dedf6812eaaa49ffff001d08be4bc1","0100000053a040cae8b6763711928cc3530adb55b300e784af1e93dc109b4cbb0000000003a3d3ce802fb6ef13767db5b4e2205cd805e3334fdccdffbe099f80d960b7e746ecaa49ffff001d39ba2697","01000000cd87b2fde48ceafda5d0e4c9cab75e684a64545b70ef45c3b2731fd2000000008fef2f2ca2698e674cf42819cc654f54bf04b684028f4fa5a872b6884fe0170febf1aa49ffff001d07444189","0100000070e71294075c43ec6a509eeac04a92d5c6627475fab8d0940e9fe7a200000000d8028c5d030d2447781fe94a6e5d94959476af98d61acb433d36006b735e8ba339f3aa49ffff001d04c67066","01000000e52dddfd9e91982a47c13d1403e98b4586141ff8f45b9cfc4f857df4000000007df62c488c9b4fdf5575fbb79149167ec9dae2506c1d1979698b9ebda067fb3e81f8aa49ffff001d31417ee0","010000006c73b3e2dca18e4427781adf9431dbd12b0ad2490e39e24a9f2cf49f000000002ab64e7c4b917febe9cdfc5c7ab68dd1b9d4f72ba44a21f16168c9e5e26a7af764feaa49ffff001d13c4c1e3","0100000024c3e4cb28a5a5cf4894e9fcacbd03bbd123fbebc1570d1d574a174500000000f59696b4f6b3c4a63b969ec51a4ed853664395704bfde2cd362b59ae306f550a6703ab49ffff001d34623398","010000007191d88089a9d60495e69062f005b75cc9ad8ebc6981e8ce1531013f000000000e681d4a656ff87b2f356f2c9c49e33bf5dfcf02d37acd246805a759efe72f35ec07ab49ffff001d05116247","01000000b448731554fbe76ccf535bba4e7efd213a3828b803ac9d017d6bea2800000000673187bae41a81e52c8d11e321763860f02bc0e64626ac3f6bf1d9e0044658279a09ab49ffff001d01e62201","010000004889bfb80785b8462240585ecffa7e338d11c769be821e45b3e0323e00000000142f8ebe410bec2cf57f0a0bf49d033bd5cc3b6c4c805f9d2eca5c3f4252bac5ca0dab49ffff001d24561700","010000009781d3ad611964f1f1614e10e7918c9aa435ff028365ab8775c8348300000000517f2ebc381c809d9a7604190f7d8b46ab351e70624002294462ab3e1800ac4e4413ab49ffff001d04dc2762","01000000db47aa2e327349bd98b755668092e3ab9553dd05aaf85b7c8d9a96f100000000fef75c638f0825d5c2147c1b4b5b94a8dbe4ab53c049cc043eb134c6a06e1be21318ab49ffff001d028658a6","0100000041cf33494fb55168ce66d926befdc284a28d791a8d5ebdb5fd648e2100000000a7ee215314074ece789a807804316777170b2ae1b4b20052ca9637fa05f46b39f81bab49ffff001d2e7a4668","01000000736d75f81ddbc1d09cd03365fb7f01a8a27362a9cb8de154a073dcd30000000067989ebaae5997f96666c701f749b157b513e06fde7c16b07fb16a556368bdc0c31cab49ffff001d7679f302","0100000043b254b4f28c79510b3fd7a4cd018d6f60cffd724e60a9e904406f9400000000f6822c1c11ec0d8940763f058ce8b16f057db88936a09e52ff37c7e17af835e8ff1eab49ffff001d03d4b733","01000000e0284c691261d566fca96b44d52802a890dd1012c99ab1dc78f3f59f000000002b48ee9dc0bde185b8982f863d45c0af6c7b4918331b60ce0b83533a4940b6c7b721ab49ffff001d18f32938","01000000393953cca814f1e8406dfa93087936eb7cabb7ecae01402e7d24d109000000006b1f38d70f72c0c6c368a1c31cfbe4938c9c80f9e4f9271cc75205886be6aa0de627ab49ffff001d341aba80","01000000a3b74718cbe5a0ad3f8fbe7ded5e4516793d03bb3aad1d1186f6ca3d0000000030615c3e5666eb09d0086b94ccbf084a64cff986cd741cc364edd55e40b3c6b5e329ab49ffff001d383205dd","01000000a4ae00b85b90dc6821ad3dd94d7b1975b975ab36a142af6df724a2ba000000006efb76156d40b2843cba35f66f96f8c1e49caa322d546258846dcc8a6d63de912f2cab49ffff001d331069a0","01000000cc729851d0d5bd8b33f59e8fbe8920697644e604e41a8283b4893be500000000e6299dd0e131a8b4202a7599abef7c5070ed16d17f1f10463b0f4a6d9a011e6aa431ab49ffff001d2079dc56","010000000a33bda51b12fe16168bf5e738e8f51d1150ad09be112bf4fc0b8f830000000056b75788f6d2d76f8cbe3ce3b68835e0c6ce01085a0552c67d49e3eeccfc5a033933ab49ffff001d19163587","010000009e15e3cb5e27de75fbf6913dfdcbc67585e1804f0f3af0bbf8f9831300000000aa28208213b680c97a3d07a826b259c6801a65303533032efad17dabcc8f6c4d7536ab49ffff001d1634c2c7","010000000bdca3b5bc97e9b192fde59538b74b35fe7826883f22c64e00ccf89700000000a1c131f42e00f15be74a503a3f53a929a887b6412b93d866ed435b5f8f0428b95f37ab49ffff001d4640bc03","010000000b2c6b906084d63cbe084f14e115f37d137a07afb3252d0d32dca3f800000000c7d288a4710d629bbf7d374981bcbbc7f07c30fa7761a1e8c769048db1deb0bb7b38ab49ffff001d2b11553b","01000000601565e2924b36d8d4a342cba0378794e97234c17032a792ab33f72c000000005c0e5926f924df43ff77ac994a9b8a83c3a885530b4b2e43eb707ba93f6ef20d3939ab49ffff001d5674b701","01000000e2fa537a2808f20b789215921422682d679e64c95435ead4f75c77c40000000062bc50a344a70cdbfc2e5f494b30621e41c2f993a4773cc0d15e03067e40c6a4b83dab49ffff001d32b5d49e","01000000647bdbfc2cd7e2846d78c042f825ab54e5e1cc5033b4c90da690044700000000919b9eed21f73dbc478f6745f4cd8cf9fb26e511fc442d81b38bea5aecf1558a3b41ab49ffff001d8e8bff10","01000000561b96afb2687aa30a9a512b561ff923a1a49c7f59e309810dff1ec3000000001fe6a30e2bdbd5903302933a52b0f6733bdd21b3bcc4e7d215129d1fbb3c6f0dae42ab49ffff001d295b187b","0100000014485ad46b501909f67485ba8eead9ecb0d117e2f5a67a043f58df74000000006d2b550dbad928c745c83dc25f6c9da0315ce5103eb68ce551f6ca89b5f203541847ab49ffff001d19d42d2d","01000000c7593e08f5e70f8221f1e6b2aeff2bb863e325f7cdcf88a1ffa0260100000000d8a91acbe95912a9971959a2f5f17eafbf446ca578d60c47b0e2a3eb5512cd83d548ab49ffff001d37444b44","010000003a296308308bcf32d001e1acaedb6c21d1665b15b678df6f7f49f042000000006156af466d57156297bd225b5de395c7d2ab88aa6f6bdd9d2ecaf9f494678962654cab49ffff001d15bf4954","0100000002ec6b4a9615fc7b224b402220e69bbf3434c79d7833349ddb0a701200000000fe8d4646680ea3512229bbdd3fb8fccc444c64f975506fc4944deb59a8cb60b5ca4dab49ffff001d14bc11e5","01000000a8e0cb8ab99b57cb33bec7b42828a329b6a834e3400e69ef6efda4d600000000f451eea8fda840d4a9c60259b907f02905b6fc0958d43381adef8265b71da2a0fd52ab49ffff001d02cc50e0","0100000024ccdc33dd98f7eea3289de5329337d9a554d5874f1707dad5f0730c00000000b335adea1c386e4bf0f0ad2d2c152de563b139705a1b3a14625a9d023369807e1b56ab49ffff001d280a07ab","01000000e89d6cc069400a777d174f73671caa1b64c9cb3ae1ddce6ff1b5e86c000000003f1c50903a3412071dca8f1cb73822b7c7c3eea68c21aeddefb044ef3512fa67315aab49ffff001d5f7f2f06","0100000013b2dcf14dcdc07278eee82d34c2387713af974ab8bef6777590634c0000000034963f4f2bc0ac7c18bbffe5a8e0b73d43a3995bae8a95e62e1a5e4876483760f85aab49ffff001d1eb8d154","01000000df186fe666b7ea8553f6589fcb1095c2e20768ffee9ac51230be9989000000009d4bf3b8cd5ce9d99ff94510dd32354145d3f559849bef49dca29bf63ae8d83cf45cab49ffff001d13e7a28c","01000000d5936298703415812f4be85b4c765df993cb7644edfd3545c16e588400000000b5fd87dbde722f962ea9d721cec4703704425563bdf6b49a32c1b503b14bff495161ab49ffff001d15866ff9","01000000dfcae99c4434c07c2035e45b9648e7322a80c8f10b5ac6781d8b2c79000000008127aa488096d9352de20b7ec2bfb2f3362a21a63aca88abbffecf8dc8a8d89bb263ab49ffff001d0242a126","010000007494c6a19abddf6a74f6263a5c65dd26d14c2de3bd2ae39b96a957160000000055db03d9cdaea5af5d2b42e1799eb06d19607fea55f443b9eb2472d4f3e17108f468ab49ffff001d1d3d8609","0100000040af645b9686eadc277733105d567add2bc8b58bde55d0c52b5165db0000000022fcb9599961bcee920c732a659dd25cfac9ca016454a6cda2243a4f31e1ad0f196dab49ffff001d16739a6c","01000000cebfee97a832183a5ff5cc1bfa31642c99ae26cae5673f2ced283b73000000008bd6ed4d65212716f235e569c73fe4f788fefbfbd17f843d5474542e22a559655372ab49ffff001d1d761d10","010000006d4f7cc58e97b705f4b7618878e03b709f149fd2590565cb3d2e1b53000000009abb4f6feacfff02cceaece4dfd0f2d97939a9242574be2cc64c689389181b917f77ab49ffff001d19d081ff","01000000f7cf0c15d52a621f359c1f81dad0313854ee1b71db8928602cdaa1cf0000000039aa0b9e54ca4a5489a3cf1f7f5b9ca73ef79564f818c85c9d8c4463410c8230b07bab49ffff001db10d890f","010000000159e3352eff3a69f980451ba8b1cb7e5683e49d71bcfa63feaf0a8300000000894893cf9463fce590b7835ac026c91793d976b6dfe68ac29a5ff0ea1b6bb266167cab49ffff001d32f88a2f","010000008b6c3bb1786578241826302bc84fc439ac040ab1ef0d2106b4aa436e0000000045df376c892c7454d94201191588e2dbfffd4fed9963597644e095d51050108d1581ab49ffff001d00e395c0","0100000072a54d709f4a7ec4ae825f455022ddb8fde3b7ad4e731adb4691d52a00000000035308ad5e8715c80ac62bbaf5323cd2a0b41ab891ec7f0026aa473de3883d95fd83ab49ffff001d2d005730","0100000025df06d0aef465b5a5b9490853e552f7ee30a5153fcf4aea1c601b730000000057662af0bb60da2aa44f860ca02f7a29d97a6a197cf05fa4cdae0cde4b35a6932c86ab49ffff001d068b254d","01000000a27db6eaa1288b49064d035129d4bfe1459f87d976b0292cdfd40ff60000000069199bf941372f16db7fc07aad3356683c1265bad27f5e1a195a5a3ea1eb8fd2758aab49ffff001d3929e114","01000000bc58615ba4cfd8972d10192e01a4af14965c1580a81d98f32aca65c80000000048eaebd5fd70e8dc501709c40c669c6cb3e3537c641ea5db132f23057d16d56c298bab49ffff001d1b2b4575","010000007495184a35dd9d06aef8ce6ea21c28f1e35142e704420ee5e7260e4300000000c944d1aa7ca4e12cc4a8a2f483b0fe2e3aa93ae4e24898e6ac8d121fc0956ca3ec8eab49ffff001d211b432c","01000000d931c38f64d1e4870adcf27df188dc944ab96193c5e1948bd06a59090000000037a696a78b9a909e25823d1ab3f400efcdfeeb8a1dd7f41e773bf8569e9f916bec91ab49ffff001d84638904","01000000eebf32d639cdacb880ac9a15b5516573170c2dde54c2f18374a437f100000000f3f23547c77f44462aaea00827df7999c2719c8ffef840e9d0227835cf60888d5392ab49ffff001d037b8887","010000005674042e9da9f2185d04d556ad6bd5038cadce50154a8a2b8bf31b9f000000007ddafa6b5eb3037ba910f512d10de2415d28d3c166a3680f4fbba2c01232168da895ab49ffff001d03acbe18","01000000098977ab9a7f07ce65f53837fa28971dc520e4532198c504e8dc282000000000cd1b28942bdc18127793bdaefd9ddbf00342ea7244aa41741a8f2fa45afc6b10fd97ab49ffff001d25b34e20","010000002c7e18d292f102bf3c0ade844e2481348e1c387da64e1aa6068e6b85000000006d2e033b48e5228e3bba2441a09fb7a93194725e64e552e2f9e97a5163e932c0d19cab49ffff001d05176b4e","01000000a387ab392286ce40454439539088f5c33105672dee48f9e5ba7ca0db000000003331f03ed2dcd2079c4b000c8bda174930b981bce1f68c602a2da515cd71528ebd9eab49ffff001d283b02f4","01000000d0bd1a4d9f6f6fa7da6d2ae055187777042e9de4acde05f1fae48cfd000000004115caab8f0c3e816081d00d7b7995b45332255eebc33f85c15f06c50f78aedfb4a2ab49ffff001d14104b24","01000000fe646d1696f91676f0ed6e101b6082863a58b1bf8775b324eea8b55800000000015263ea87c86085c8b4955a5fd1105ac1829cf72ceb7c0b483f5a1182ce83497aa4ab49ffff001d23bbb323","010000001ea314855a98a483b0002af535c0ff6322d7af631f8ff266815108270000000018abb3a8d7947fa14ba7c2307f1616321246eea4ee0a7a8bdf6a4af9a172710a6ba8ab49ffff001d2e369c4b","010000008ba98366ef5307318aba692b5e932d701f0cf3c80f9555f3e2d6998100000000693c6c0596c43c022eb0a5fb7b5fc472ab4ae81b3bc89052d3702c2048d4a6a90cabab49ffff001d20d37fa2","010000002f5b2a96904eba87b5dc6f85e1620b38bf2bee05af6856e902facd74000000006ffe00de60b0c6024a39348bb87b1c8249ce28be1c0940579625dec765406a84b7afab49ffff001d179e4833","01000000e9c777148ebbccb382b7e70e4f0903b8c6165a096dd625e323db5be5000000000e42810ddaf9a4ceed24f9f6645ebc40fea4740252e6023feec071587ba3c6800db5ab49ffff001d1ca7d1e2","010000000d84a390f6c47f756549875576b1afdd4f515f3742eae2a40d932a1800000000bcf91f6e71b100f7cf97dca4237ee22870d7b6828ea787d4c0ec6200de752d01cfbaab49ffff001d13af9c54","0100000033ff7ea8e5d0cf751e278c031f9dc8c43ec20555c4be34a5f362f821000000006e15f757302819cff5535aca1ac00ed51599e414a53a10d8a864ff5883e6395daabcab49ffff001d8d4cad02","010000009d06fe7b783294f9828104883be97fd89be6a2b138a2a68170b5825f00000000ba5c4a444cc67c0c1a1c9be96657cd18c71dc6124310bab22f4cbf0681afeccb45bfab49ffff001d1958ef1e","01000000fc6d536d2dedbdd6404acd80665fb6c42b55df94170149ea8f2de8260000000024d86fb5da9f8b4e3150e37950803e97da1098974fd72160724266b6c88d368665c2ab49ffff001d28139a13","010000005dba698baebbaeef24755e65501e048df2821b48de9c3900e1fdfbec00000000e60b9564ea165dfbbe9caa364d4fb4ba3e10abc9963a5ef22e1b26ab7880553266c5ab49ffff001d043a7706","0100000090e15c1055e044dcca1d8d71752c2e39271c5c48b5a47e386b69121f000000004efdca68a9236c50b1fadf5d077894c70a74522119424d50bb6f61105198bd9562c8ab49ffff001d179809d5","010000002742fe48d1c3463e4726a6d1be3376ad5156aa0e9939d3fe04b8306d0000000066d5de20c901285869073b0098a75c0fda6b7876fdf3e043c438cd28cc1d92ff90caab49ffff001d05a7cfe8","010000008a2c9bf145b84d39c3e2ebb025c9252f5736a22b2c13b1a2e07000ae0000000030602cd00f58258de03519924f8d531630018c949e40c253806be48008fe5fa298cdab49ffff001d1f285599","01000000b626a8ac3b137005944c0ab850eddbc549ef5637eaddca3a2a4d0777000000007bd40d257a820a8cbe4c7a23fc8217f50c9d8b8c37c3125f137dfedf8373ff171ad2ab49ffff001d24e0d381","01000000d7eb72d9276c610a09ba192dfada90a82a6c3060da049a798c2ac57000000000677d74a215b820599a516ffc85bb7e7a09c319d2687ba5eafd7dd3936973709abdd3ab49ffff001d2fcc60d1","0100000066ae2c6b0a0612cdcd710da1f27ea94087d23357be4f6d2bdbd658e700000000e962f421b7920c0e19c28cfff029fcaf669dcc0536c09098a2f48cf6df19abe978d7ab49ffff001d2fb087a5","01000000434bc1ef150f47da78d363f858c0c72bd17fbf43464f22f19660da4e0000000002a0969a550ec79dbd502e3e5955591f350357c077baca98bfa2066d7740ebedcbd9ab49ffff001d36fa95a6","01000000ba605540fe70045de8f36d8ad2689649db9c5297a0419b367f84a79d000000001b4e55122b071efc39242b245c862c04e4802666b975337974d70b7f83fc5173bddcab49ffff001d01b968a7","0100000075ae7a7438430fbecb1022bd27bb5e2e623227352f7aa2a5e76b545300000000184ac0e25e8c3cf690191d822f3e45f22aa3712be80f9c00fb3467d8a6bc31373fddab49ffff001d2ab6d301","01000000d09bb5b4b00660a1a4c4861f768cdf689b65b18a71c6bd744a223d5500000000d69ab2dc7f582c063a7bb3419b97b6c8ffd3ac6596a229b9cebf5e1130da2229d3deab49ffff001d2d67d351","0100000042f3d6b4856d28cd6b8fbd43c7ace94d5465d4f470414e620d8cff38000000008eb812dfe1e53fb90d388cd4a952e701a780cbeb21887fd7450eba701fc324e227e1ab49ffff001d23426272","01000000bf97a1fc58a6a969b620f19f49b68eebdf829e376d9cb068c2fc5c6c000000004de3e1f08754986777160fddd99b52b7e48a9661c5645511e43712bbee0f98a534e7ab49ffff001d03027f17","01000000869809e94c438ebb7777f13cf278a2996399138bd8f87febd1ea6e38000000000cafa3d0ca37ecc464454b5b33d8e458b8a0c88b1f4b9c21b42b3a80fbde434812e9ab49ffff001d2e5249f2","010000008ef755f05e6481c78f923a96cd1b9b5735d82cd4ce130083d9e9413a000000004ed57a985b30f530d6f5170c5e8c95557132aa6c4ef87ad2dd091932dc870f32fcebab49ffff001d36a37f0c","0100000003a9c953569cc5c07a9fec1139de24e8dc35504c9c5a98c5ab6ad30f000000001e69b8ea9769a5957bcfb4d5595de923ea02676b1e0ea1fae203382ccf50f49012f1ab49ffff001d331700a2","010000001e66555f5afc89b956644e6c73aa6f5e6f947c31664df938e270d5270000000074a57b1e3170dc9292c6dcf3915fdc3c64b91fa1e79063a02b91b1650eda2fce55f6ab49ffff001d06c871eb","010000005050da5c593cb0fbbbf75a85184ad8c2007d1820c2b7dcb689845692000000008e96e133bd01441988d06c644cdd2a336f6d09501eea81dd632747c2be75cda9a4f9ab49ffff001d080c03be","01000000d519c5b27c415180f3be7f5d8c97f36c4e9d9b8e61b3bd483804171e0000000051b6aef3f962f8dff87d422366fd8f51a2f969ae74fb33df4ecd5058bb662378b3feab49ffff001d351b7a79","01000000882ab1b034917e37af8837b60559b607da48f9e5ebf5d406029fda7f0000000032c7a1742d30148388666e8cec7b8f9ed30638ef4e0ccad5edb182d7160644cf6f01ac49ffff001d04efb77d","010000000138042bcfa99cf439a214c1682fc6926e9525e7b6a3ac0cba5e7f700000000020a608f05ae3431e61c0d53bab34bea876854a2ab400ec9c336f9e3c04d96a891a07ac49ffff001d1a357111","0100000053873e3f93edfba74505e2ec4666266396085d6c1eed5092cac2dc6500000000ea0be7782928bf999069592751e203eda03a4e47764425258ed454cb498ab7e6f108ac49ffff001d37e6860e","0100000034e34a4172050b6ca26f3545a619d111dee4c901ff4eb12baa8d21d900000000b6e9ae6108913bc0734522674e86f150d9861db6f703f14d859d27041964cfeebc0aac49ffff001dce4ac208","010000002f9fcda4ebc01dc1f5f4c74e21bb42ee5923fc3432d00a9d20c73c1e000000008d208e1986d34ea8b0d07e4bac9947cba18204b841c3803baf1ea7443aa4a939630eac49ffff001d23ba63d4","010000005f4c9695887c7ad34bba2a07b3cb63307d7cbff1acc306a8d7ebc84c00000000e08d4cadbbb0dc3f25816d8ea70c44c801b47a1dca34092f37de5ca3f3a8916d7a0eac49ffff001da2994300","010000008d7fc376157a5dfb50606fc12be065c79dba00b4f4c11698eb8b8d10000000001049ce0742e9e36f7bf9c2e42d5887f6ecca50718f5ce08dcfdc9304ab2b7d5c9a10ac49ffff001d39a71ca5","01000000b711058f708a5a125317a0c3fa37434be5928fcf8a11ba5e6375df74000000000fd45211813e4b5c527c76ccc73f5da6e65fbb0571d7d4f30c0a0ba22e40478dee14ac49ffff001d3640170a","01000000246cc7a12cfb22b893704f6055f13cf5c5e25a620116c1d8e8e0bae90000000028ec32332c81bdfde11a587d13fef3841630931152745894b10f33192832f0488416ac49ffff001d395cb4ae","01000000e8587f951650676027a93af52a0c9ead7380a21180b452152a67ad6200000000b890df24fc921192f4eb2f427c1cabd014f269b27622ca485863b8bb98996625e61bac49ffff001d1400cf4c","01000000acf399c39840b5da1f7dce9bc5513e113a72d2a3ebc816d476475a080000000064f85a308edccbb262bb75ad9e91e729a8946faefae729acf6563c770418f0bc4f1eac49ffff001d144d2d38","010000008c10273eb1e0921b554f9f4566ec40a3a4b30c7d82abe53ebddfc6da0000000016e6f38daa422bafaddcd4ddd865bb3fd1c24d5d3df51a165a1a946837578153a822ac49ffff001d24ef67ac","010000004638e85cd4abb5e674c5659caf55ec90715a42539a301ac3b3ff285b0000000036633c8fafcf5e78081a87b7c88d4983587f70cb652f4ad5324f6f11da6890dce822ac49ffff001d9cd64d00","01000000ef39ebd3c4b94e2c93f3f90227e16b847bd3d3f35224a1f21498d41600000000d76f56ffebdaa4c53903a860833acf9f78ca1d0f8863ada5ed89b6647bff5a5b0e26ac49ffff001d0490e7f1","01000000347958efa213800af272631b9f6fb82dbe146966f9e351a18a09c10b000000002778f9b8581a531cbb6b31e69b928940553f94cd2f461447f1ac3c3f68d7a2be692bac49ffff001d2ae742b8","01000000cf5276da88f89e4ecdb6d5724f5387f238270c930dafaa0b06606e84000000008448a9491aca100adcc7627a23b246a6071e6c82ae99fcb1e408cf87f0c7338bba30ac49ffff001d1d579ea3","010000007404b0784c31eedde3a6445ef8c3d63a30119042459be8d213a00fe400000000bac6157aab8ff85c476822f44c120f1f02255e0260ceb474138b131b141255626b34ac49ffff001d118e210e","010000000795eea38e995ecce980f6a7ffa96d8f9896781ea404ebf756d5a44c0000000023123a6005a370a457ac1f93572c65052d371abce8567aa6cf78948b94d6a2a15a35ac49ffff001d2eec015a","010000001f5a9421763ec7b145430169639da39dec67d70f93ac40d9c2a0484700000000fe18915205a102f5cd42e911a2279802046db803eaff9dc79a36ade9dfc1fa4e5d38ac49ffff001d1a3e5c88","01000000c0f3ad6d3463344902ab283264393c0128cff38ad124ccaba627eba300000000d371e60dbc47883327d64850a7d52684c49d143036a97cf4d761ac7170003a65ea3eac49ffff001d15968ddb","0100000004ad475da6812e8766004bc6d6ec400cdcd58644472f2590a4a34542000000001bf9b24f01f311bf41074afb2784552290d19f15b4cdd64c3810cc8c1052a9943e41ac49ffff001d31fba244","01000000445e3323f87e91468e47faf83ca69a542bf40687fe4ae0ddb8beee4500000000216ffefa90f787fbe7ad8a78bf54d263d3a974c71b140c83689d1a9b0b221fd8c945ac49ffff001d2fb14cd6","010000000c131a717347f7fac4e5b053ae9b0c9797a99b176354ea17de3077e700000000b3bca406f59d961803f1dc98c29cacd5ea8f3df7e1bf5733d5a030c6fc7a43662047ac49ffff001d4e9fcd04","01000000c8ce02002171a22b5b752e48e6a47a5bb9196c515ca94dc2cf5f34d30000000034a8d699fcd3d3ba6a0e7b7d7c7d3128945ecb778b719e332ca79bd5d12432b05b48ac49ffff001d5ee16301","01000000ec7267effad6edfbe6c29f15278f2262daae3c528798f6a1701057a7000000008a1aeaecd67fc25ec799384f14b81bd20b8bcd00371a941703882776fa4f15844b4aac49ffff001d3a3b3885","01000000b28c9814b8fd5deb3327f8a80d44595bc4aa0bf23565b6aa556e7f2b000000009ccf25e10fa4bfbb55bb4c53e6fc137196401bcef2333cadd50e09021e2be6dd054fac49ffff001d170859ab","0100000013d33d18a8a792bf017e030d60f3adaa49587e68e96c6f389f73ca930000000068d4436aba2c69552194b148f2b783b742ae64570f65dd383a1494f8285e4ab71c51ac49ffff001d37842e8f","0100000046f6a17f88fbd48cba6df0a1f033da72fef9977b72e30e7fd2d62de0000000006847b7c8ce346f8532c2b355ff410a5988b6d9c58eef41b849a98e91cb808892a251ac49ffff001d4e985301","01000000d3fe496ff45f5e36bdc12f925a676c5d94957ddeffa4d60699ec77dd00000000ff5df9a4bedbe029db69177ccdbacf553d17da717c69ce0eed17dac11b273900a954ac49ffff001d22c71344","01000000907e4f8cf6846e4db5ec48e822a26577c3b616db7d7d862b0459bc89000000002563e518065286e10ab10142c0bd29f19b44dc2e37704a91d9381a718fdbbfea9656ac49ffff001d2916090e","0100000012c03b272de195d479f2dbef95f7bae01f50ae7e5ddb55982337565e000000009d1e3d6dc07d62f303e218272ffcbe49206fdf4436a0deb5263fecc6ca7d77f43a59ac49ffff001d0265de2e","010000004fed3f12d2be30cdddca2392549dc2d325c1602f98fec06207f29383000000004964a0f6eac17ca3d994fe004031521a5658f6eb14fc8e0f089e751ab842a63b385eac49ffff001d39336617","010000003c0ae7f8c388296c9a5ba4d259e7d6ae91f8ad353517006e6032a4e500000000190b2b4e8678385df10ece4015abb43d20cc4ec95ac89996a221e84eb5f16e97fa60ac49ffff001d02994abe","0100000046e85db797fcf876fc6cd404ed1a98554cdab7b9947f425a004cbcdb0000000014a6b35b588560a7e8ca7fa422431d737c4bb8c5dae23b23b7bc968c1135fa8d7b65ac49ffff001d38cc52ff","01000000c2f1f73546567364c0c7eda1105aa14073496efea955e01a83953fce000000002b33a1d74c509208df766f5d1b334aca7f729bcbf834e3fed74875c5cff3d582b76aac49ffff001d149aa68a","010000008c7e23e0ccce8ae368c4edc98ef726ec4ff26c0f70a3fd571beff92a0000000067b6b905f499649dedfe3d211230799dfb9dcd3a6fd988c4f27f991b42a9ee435b6dac49ffff001d0449d0d8","010000008e107d792403bf96ec8adb5f71fbac8d155b4cc89d611981f44f771000000000c50701ea27be2e48c4810f1d6f879ea79abbe362df14cf5a4acf7aad483eb9b12570ac49ffff001d2c9fba7a","01000000abf89e569867d1ebea0c24a3903ab19da5a51c65fdda796c17f942c200000000795299a35e9b174cd5d1b1f34644ecaabf100403cd62be0916f330a13cf42fb08a73ac49ffff001d39cd0a19","01000000ebfaa2cf7b852ef33580f8f005590cb2c2819b253704ed7a5d15fbae00000000d85f23552e79d59da8be690b26ef02517c0b810cd04f377a8be9b855f4200a053b76ac49ffff001d25e21619","01000000738f136a8d8ea62e8de4ddd77abd6c8073b22c589eee387e42461aee000000004670d7636b5e714158f9b28c688a29388d16063ef5a4f307102bce535b9dec648f7bac49ffff001d2e44fe75","0100000099321aadd7f518534595ad08473e35f31a330adc537934d22c29da9200000000b1d5d07259acbfc004df28d40ea996fb7b76e2b460d946983fca455ccca5de81f07fac49ffff001d24be588f","0100000083847b881148d527b36aedcca4f8641437eea503265d802d9eb19fd30000000091befd863d0fd796e1ddddaf41fa8b73c89e1907ed01f155880ebf9fdac7d0833686ac49ffff001d37769e90","01000000911cd80ec14bf036c076b711a093eb7a968d1f7586c2fdbd873214cb000000005bc4800806d1243a4165bb54ae020c92c4247d981e807eeffa92e9d5062318ec8a86ac49ffff001d38231f01","01000000eb257ea456ea3ebf018f052d12be7219680a363b7410fbfdcfd49746000000000213deb0d43002df052af1c9ee0640bef5ee3ab187963979f0a44ffbbc10cd0c4589ac49ffff001d17d02661","0100000017fe85ac44aa7bc471792a00f319a44397d7504a2f793996fb1c46c500000000b837a32fff3da09a1f643501e7a126dcb0e9474a888294df5691557461d903f7f98bac49ffff001d1f3c7a58","01000000eeb23f99278d2491d6dff86ceeecff9db5238648ee677fd104280126000000000195ee6d42dd13b76bb3afdb4d3c7700277f81244f3e23f38f148d3e9e5de396998fac49ffff001d215a4cd6","01000000a9c726cc86ede3f37f63db783b8fcc5f93038aac7ee904533b968341000000007081582c044e1ca89a561c41144ad755351a78e6a18b1709b4caf32380fa1579a792ac49ffff001de159fb0e","01000000e1868c061ca6b97fa69cfe55756846a3eca87d0403af96207a06b2510000000018bcf87501f2d0eb7183daea6b5f9561e33f0f98ff611933151f8ca7eb0ac06a0493ac49ffff001daca37d01","010000006f015afad8cbd6041292cb7af0cbb9a117914e62bec3416f4b259d7c00000000ad6fa70f8a9e68d44e9042c80a626aa238fa0aa7642d9ea8dffe334fcce3fea05693ac49ffff001d210a412a","01000000ef6410c907c5afb5c77605f134ed5393d9bb669d5dbcb42cebc273000000000010d4b6e7aa736a5da89462a1ba6f9ad489d3e1fde4f40d760e0997b36e9b07107696ac49ffff001d32570f61","0100000057e4f97a8767d9388d92a51f30902c2c75fc5222c77ad817cfe67e4e000000006d4c2bd5373c17647ea650774f7cfaf78c718f55ad5cae7d0b81fd6a5552d345d998ac49ffff001d39978613","01000000bdf98ff38c3980cf6d53086436fbb108c8221d3786e758c6416d6dc1000000008e93e55b38d8e19439777952ced9b873afd70ed0283bad7132775e374e8688c47e9aac49ffff001d1f18c559","01000000a8ccdae7ee6cb0b1583466eb2c2bb9ada3bf9df64b1ccf35bdead18a00000000ebf8916d80250b1149f3c51d60dd843053df99668f15f42dcaeca3a2f59e09b86ca0ac49ffff001d30160703","01000000d676968bcdd3a1e506496eb2a3ea43203b92c39aadecdb2b3e8df5550000000018e4b725ec496e9ec0dc102dc34d916d7897d8808579c0fb74fb532c16eea61062a6ac49ffff001d01bf8047","010000009693f13b6e67db7e9318673552e32b96738ef82a00e32f5f0ed803cd000000009f7c11bedca6e308bf443e170a6f4ba0e6b9baa84923ff1ef677b788e7482445dfa9ac49ffff001d22c20fb5","01000000b21549bce35b122e1db793d2e83e5f44480ea727ef0de5e7402e890a00000000d36c457e94991f393357234ba00df616281303a5b2cbff074f984a4e0923db2491abac49ffff001d25c668f4","010000004505184890e89bea25d3692193240a6f511b6b3bb1e293a39a19d7b9000000003084f75c7eb49d178b3a3e35531beeff52f023902f56d213fa0984193bf1d9b1f9b0ac49ffff001d25778228","01000000bc0e889b894c94ec041d0f19e066b01696705ead6e3371427278643f00000000d17ab6898024f4d0ad1450211dc799eb4a928c19d12c721cce6651cf975bde44d5b5ac49ffff001d2637089d","010000008c0748b68aa0797b6e3961b95e1c1a426f8af8abb99689db0de1b2a8000000009cf61aeaa58825c7a2224443d0691552eea28404beb71b77f0d2cc403b9de83719b9ac49ffff001d28885855","01000000a79ab1347d178d5c003d2d19225037d537118cd3a0e04d42035c9a4200000000a5fed8f5057c98987bc5143685a6b5318330adbaf144620fc23854379a6945f306bdac49ffff001d36ef3426","01000000d65cc4cb2c15f17a5014b597eb8bd03b8b6f69bba8e3ebe33f03dad20000000034ac01abb2b5051ab68d4b119421b6648664745c2ae67cf930cb563fe775050d6fc2ac49ffff001d34d1f20a","01000000b42254b4908505906e9b79bea5b7fc59072529b5a681acbb385497680000000030461e6ed3fdbac665db6106320c34d68c1eec49b2b64bd57013e9771bdf673e19c8ac49ffff001d18612883","01000000df2548227ba99849d480513828c70daf34543a5bc9542904104657ad000000008308815a819d96f58fdbed9c8dbad6483cf357fb6b0429c69aab652f36e9253e3acaac49ffff001dda729808","010000006751f185555c5cdd8c1cb0527f9d98f49832d35266472f4986e2cf7a00000000127a4acc9523b94a526db47b4df9154d82ef24a3f1ad245535493b7c00f8f25418cdac49ffff001d337e3104","010000004bbf2991f2e945268dfd769c3a1bea9684f261f25926e3f45a91ee5a00000000337e4ed4e7ed207b6598c0a2cf7741ff6e25e8c4c5351bb0a789ba5cd95bc5abb5d0ac49ffff001d1a65ce44","010000008c341177dd24df8ef0a16eca3153dac48aa8b705ec058cdea14d2883000000001bd7357434b0852523af8e9d143c85925a329350eef7034f5a5ef11d32c9b8c270d4ac49ffff001d04c01283","010000003afaf1bfed4fbde8048ddaf539e9c17ec324ec700f8c5bb5742d8a9c00000000fee097f44e4753641895f3b79c7684b9025ffd8cb52189741322ca3b24efe573e5d9ac49ffff001d2a28f4e8","010000009ffbe252c5e8c5968af18199861232f7bd628c437ada66f226471e0f00000000c738890670b6ab1f13f460381c673e297700c6dea8b9b561510248d06abc61af27dcac49ffff001d384c1198","0100000000b432b2b79bc765ab195b54533d09a5c750f573854ba68a0f0faa46000000001c75bc2308bd8dc8fd94e1593ae8e0ecb6852b06896652ae4e36701dbca0902834e0ac49ffff001d29d75473","0100000085aa3a75ce2977e823201093ed3931b4e975a2e6232f28042e53fa7d00000000d369f9dee781505669a1a18de915b5544945465add6ffc5f2a3039d29b850130d2e2ac49ffff001d23aa09ac","01000000ec8c4389cc51d07314e4f2fec504a346267c35af3452cd2a48827f20000000006562fb970994b1dce81f579d117aaa3f5b9c3818e440905de6716602fa99ebfaf9e6ac49ffff001d00773469","0100000032dcfaa32d1d4aa7e56d74374d52a4cb1c3f4153915647ee4dc54c3900000000268b5d95d822c3373cd277aa21954845a1be9ab3536a5399843b816ae5a869f250e9ac49ffff001d2e764015","01000000b15ebffba29576f848a103b4abebc2127a4597455c2ad69feda73aa100000000a3aac76256fc972bf17442c0465b3cde9984d0cd034543a30948f5c23024c856eeecac49ffff001d3613faee","01000000a1409bd3dd9504b06ab05048e32e53ce28808abe2474849d7500600700000000778348c084780a4f32900efb5d967cbc8b5950fd3b35f868b2b0d13a4e5a17dbf9eeac49ffff001d35eb99da","010000004496f07c9718e9f26547fd77d58eb99505460bdbf6af861d1c2557b10000000029c4fe972e82ed6618e28f5b6eeb46de11b192871946c354069f9a891d64e5d414f0ac49ffff001de2c16e04","01000000aba33941e9c2e346841b9ce4c4932fec375b16467e095065eef14b9500000000ed4964df64974d0144c832698a38eff17044d33d67837c5eac836a409ece7995baf3ac49ffff001d193dc3b3","010000000705b942837cf0f76c730ef1a0e7d9fce13eb562493f588b2107d5aa00000000e52b5f881612e6574fb2bf56415c1942960979329b7cc4b96efd30e8787121ab6ff5ac49ffff001d2e7279ab","010000008d3d1ac356c236551856f6331abbb4ef35a51fd69ad39f6c0dda4e000000000017a07dd599206ca8efa4c320b1160794451de9462346f26a51a767979775e74f06f7ac49ffff001d1bffd339","01000000aedaf47c7f147d98c815eb003cb5bc55192400c26b089a100a1e9def000000000ed2736a0c0fea6137b73aedee24760ca7e25586f46c9747a84979a842ca03174dfcac49ffff001d2da619c8","0100000064ea5b150a772fa646a0ca570dbb5479400f9c5c8dda27548da1a7d100000000d85ec10d190a4a305832fae98aa605463b7aa3c4fdc894f1bc1598aa509d8b965e01ad49ffff001d08fa4422","010000003fafd767276b98c777313eb2f98f06a306560a3b9b90a6375d3b5ab6000000005f000c1845332a571c0c28e5d14816eca2b65890b7a3fdb844fad890ac9d8bc80202ad49ffff001d260f9002","01000000b10049b3397f9f89e711b44c8c57bddad524015f816b100f132b0dc900000000328da3ae6ffc1498d99606c0c742638c7674374e291318d80ff8f945f4381353a406ad49ffff001d25e50b5a","0100000067bffc1d4fd19bb37216969a3e203ad6d0ffa7420d0d7b06d2a424030000000092e18bbd0c0554f9fbd27a7cd3151d7414e81b74f0fdd99569a6ac5ef9f5218a660cad49ffff001d34a4a004","01000000605935ec9f2df4ec54161fc7697a367fba035f3134eab0510fa49d8c00000000f9226b58ffe4ef2052168fc5d2d1a2f58e188f0dbcd846195208ad13b4c98d108810ad49ffff001d3297025a","01000000fe89ebf5e666b15d15e7e13a1bbc709504cf47c280575ac9a36bb38d000000008611df6e2c7375e2a06448c1ca99f48e231e022e8b0a76f06a59b8599d6d613cdd10ad49ffff001df2034001","0100000074f552684014a065a68d3e0fffd954b6c572be9e5a3c898831e1b4d100000000f42b618701e0aac9398bae8ed5eb662f7322ef9a19a1350b037effee0665cfaba215ad49ffff001d2087e864","01000000bef78f337d8f4ba66cf4ad0974e60d08d634d776d34a067d1e390801000000009f1527e10eec99b98df7cc4428cecb038729d51fefcfa4da01a2601c703192575e19ad49ffff001d1eed908b","01000000c632f89f1b6fe5ea7d15180add916568b67e8c4d2b9a83994c5120140000000026e4dc4a576c9395cc14c2c8f7283a765e708c1d8de5499d1f49ff024a1ddff4911cad49ffff001d2f271806","010000004f1a2820beb755e3774f6f8b79ca5bfe604c9adba8bb538a39e23280000000009da5f7fa1c310cedff0c5352662f0bb46b0734cba45797a824985220eec75e48f620ad49ffff001d2b51a7b8","01000000c2192b703bed1538f4c364007a645a431e1c1359f78730e1e3e63785000000007fddbfc7d089a7ff4aeb563e4e3fe2dc055264f853005f2618ce4ec82e2cc87a0423ad49ffff001d1a7d8efe","0100000033c077ecf534fafb7bccb6897022e570e08ff56d5f00a920b4c21be0000000007942696ebaff66dff3827aa66430188b04b7ec45dc442d3fec990a70be72deef9623ad49ffff001d2ce5b302","01000000bbd2bc7a201a136c6e89f21df2cb1c4f8d19e0c7280335683995b2dc000000001e37c9e6158672938354f4e8d3e5eac18a08f55de6baea69a2847e5e2201df4c0026ad49ffff001d01fcef94","01000000e3c62485bd6dd1a652dd8ec1dc0fbd51ea3b7d35ff64d00b661dbe5900000000cc58722fa5ef7c515e21cfa3a170410533e6e8cce5fd75ec8714866c3b1b339de126ad49ffff001d5f4aac03","010000008127a1522c1c00c2fa4e4694073c780d3668b218c1bc0dd429560a0c00000000a9d121f6a5a3c3b07607cb953345a21729cc8dc7f6a503e1b97634097995bbf8fa28ad49ffff001da0dab208","01000000718ff9c07d6e24cc159bc23b57be68c447a6df4d77e0ea3864afab0800000000f7ce97bb726f14f000ecb89c1646a2c1a6d725273394185f5fcf5925091fe44b052aad49ffff001dd03c2705","010000001d90c5eade26f62f06e354a13240c23d0357706755dab369ff4bb0ba00000000752ad83ce61e3511cbf1e21a1d0df264d6d7f30ad0857c65e0977025b7b9c699e02aad49ffff001d15573ecb","01000000cc1063a05801bd58e0a032237c2c1e7b26ac48b58830373db55202ef00000000515130216810945f2187eb0b4978623d86dfe9952e07013fe0d4371fc7ab49b1d330ad49ffff001d31dd1311","01000000e97332c637b7e3a8152a84a53bbec463451684cc7dd949a18d4cc2e400000000ab186aa431df92c5df493f24ccb1640345ae2d48e9a27d0216a065153f19d788c636ad49ffff001d37f4773e","0100000066f287ad553e10d5cf59d02018ac4ba9050664c5fc2cb3fa20acd75e00000000f5349435bef76a94bdba2ea73497e49140d16533f2c6c4ec0eb41f83aca9f6739c39ad49ffff001d31685059","0100000079086e4677f800bd1f8cdde557e798d4bb237e5da26f5de8a6a1941200000000f5cea84bdafaae170dbf8c8aa401b819e02bc97e9e7488951a87fb33efabac94053dad49ffff001d161282b6","01000000b6e6f7c7cf18418d3994515879293e12c9e8080e822c799dea176227000000006cc2bfc6cfdede0b4c20155a552a01169e3aa9287553006a98c1bef7c609259f6d41ad49ffff001d1ec81286","01000000cc60f177633ec7559f4b460b40510c5b6426f70e8c4cffdfebfc0d67000000008209a658f3758e693e73d711692829852f381e71e50ebae9d1cb1969be9959181b45ad49ffff001d2867946f","010000001b6d9cc8c18cbdcbf67676f8fb0b36055c7e72cf14180cf600876fce0000000066988f1a334142f10db2ad7d253987577adba610ee24827c197e2658cf598484ad48ad49ffff001d13d807f8","01000000aab26ddfc99fa3310bc71e618a04a30f265ef0725787e7e9efc0807600000000c351c4a2f3c391b0b7010d09f8a24a3e19ce81d904076c4a699bfb82bb93393c444cad49ffff001d164c89c3","01000000d16436d2ddea2d3bd0e2a75c5c229fe92f9341a7247aabbdb3bd7dcc0000000085f66f5c34964b7c27074c82503df4a24921092f6a63c1795eb10036002696d50b52ad49ffff001d38c95c01","010000006f6ee5e6fc0ae847082cc09c29c745205e3d23d93b29921bf8a9d581000000004067645758013c6e467682403c7ea4868bc9cd85ac800cf04ffe17e4424d76674c52ad49ffff001d88dcf100","01000000020d4ab1c19e0ec7bf673ac3a69cf4e3b9155cec0631e0ee19e9c87b000000005e20a1c95e64a1ae9d77dd453ed6f4c340a250c8585f2a9635e664629b1cab339b55ad49ffff001d26b96c47","01000000b02c0bb5decc69fb7ada70904aba9d834e61db11edfcbaddbc570f9e000000008758e3a70408a9d518c5e1c056a270a330ef217f36e14e5fac0e60fcdd7e9d746758ad49ffff001d5ea04004","010000004e012eb9055dfce955a99dcbfea4f0bfea0a02426ef1d2aa6bdc7c190000000086215965e5825f796802d91552ad83d843b1c505439ca805a792ed9a24ce291cb259ad49ffff001d040653a4","01000000a2b5c020d08544ddd31bb35efdc62aa62b72efbd3194b656289dc7e800000000df926e5fb3e29d3ad85bc2b952f9c8b3c63e1b4ea397a3e206b507d6bbf80a9ded5ead49ffff001d2076f210","01000000170ecd09169afe24fe0efc13995c7f0f88a842b8f0bed34612d48bb70000000063c83b8ca28dc4954670381e54f6b9332521cb50052aa7ed115b875c1ca81f1aab62ad49ffff001d054298e0","01000000e40d6f09cc055bb91510308aadc6b5bb5877a394ae6f92de4920d8a600000000d68e9456ccd14d87df8b4870d0459bba23589d5b615b5128d16221c774a48f061c67ad49ffff001d37faf8bc","0100000029cd2994dd3b6edb4e823dce9d8eea2b6bf89a4085de7d100124286b000000007392ac5b16d87f89506440ab3e320803a839b2e37a79f31e3fe954d1831561c8496aad49ffff001d394d887a","0100000058fcd2e9b0b383af4640fb883d3bf1c8b7342b61b7b77eae1f36b0520000000008069ce247526de37c6ed1d272d8c114b73571b220ced3b1743dc209e8c425b76f6ead49ffff001d21b95389","01000000e94ca47607e65da7935b003157ffe326f533de95213c3b50734d19fa00000000758325e1e9492ea4aced47e2409932bbe8b8f5a860697711aa601621947f7406df70ad49ffff001d5831f10b","010000003c284acf503c6a41f0a65e6695551ff2b670859f1928b0c5cccd1c390000000042689984162ec16f9e2d7499f8af5ee5fea3c5b560584d72dc36dcd2c59b6184df71ad49ffff001d222f15a9","01000000f9ac7764522901113dddc2a05bec91a7ac4dbbe7cec574a71fdbab7a00000000761e1aa49b7e0c7917752571181dab9ba74450d64c63ef5640b0cf134515184c4e73ad49ffff001d0bb39005","010000008c9f3e448082f71e3502a97c9bd16ba5db2cbc608db92c179424e1c6000000007912ea557339de807cbdb68738ae1e80d99badde6ce5c11d3438f2c9dd23026b1a75ad49ffff001d3a37b9a4","010000000cd24623ad0150ecbb82d8edf42c053f0f5a44f78939bbf9518095f500000000fe482bde5397a37e6f4e2d559428c759a877606ff627ee09b69955bda851718fc677ad49ffff001d13a4cdca","01000000247e44859e31cb3d9d6090d56829014bb059338139cb7e121a6d244e0000000046499a05bc9d29f85a6da2a5cc3f48bfc285f5d014288fe9345f5bd650fa13c2aa7dad49ffff001d33a5b212","01000000e643b6454015621801ec569405ee31c167ea4be72d4b04f0b6e63cfc00000000bafcbced203ab833ed664d20c559bc48a918e7f991940026dfd5792b58e120dd7c7fad49ffff001d214358e3","01000000dea2d92dd20ed429fe49622dc567ad0368c7011f54c03d5b56a2f7b60000000025f7af6e97b8cbb495720dc78a8878f85bd7e8298b0437ce22527c4cfcd66c5f7081ad49ffff001d1b76c023","0100000037f8d86abf9fad5b533105b64068625fac05028d3b83f22d1f8d48a00000000095fd001bc81a83dbbdd1d22fec4d5ebcc025a37fb7e32cde4de1ac7b9b17ac902486ad49ffff001d33c3f90d","010000007893385e779bc9c930ecb9aa1ff5f28da5895d480524255060862624000000004b8d5bc76e80d89ed54ce6c136a8d6f5a9be72124860846c6ffb9c798f1088207d88ad49ffff001d3649ba57","0100000061f2a7076eefa18c11e8815c502e543402ea0171585cf5868ef1e80500000000bc78328b5bcdb49282c746ed7521c6021e65413084672441972997ab41d83e0e7d8ead49ffff001d0045d927","01000000588c1e89742ca01ecf8cb519433d39cee44bc20e91224201b0dd58ce00000000ece4122dd669a8091ffdf97204fcc33442fd134719f4d9e2d6340300119ab4568893ad49ffff001d32ce2d25","0100000011672224f31f18843419e1f227b26c9771b14621baf7265b57e811ca000000001ab8a9b2e72ae803ce2c9f23402665d8faa1ac2ae8ee76f0dd57878dc50c20f0f794ad49ffff001d1affcee3","01000000b96120f36b8e9c3926dcfca06ab10f25dabe11504867a27439c0ffde000000009cdd200c33e79a4e6c8aa8a0fef7da73667468fbe502f8e6e16989e6052e3a94f199ad49ffff001d04e9c03e","01000000f7a2bd2539fad56844977c5234a9da8aed9dc3ac84f8981b7b69e453000000005f78bec83c6694f5e8d036f19cf8bb258b723073c8161f2237fdddd230f0f1e1c69bad49ffff001d2486ae27","01000000c15484d9fceb7eaf9b293fbcda5a272637981b4559b59ddd6ecad1a200000000937dc0264951e452d10676836e5f66f59dafff417174f132f1309e16b61bd8cedd9dad49ffff001d1b1ac3bf","01000000eec74dfadc132ab9f86a2540218f3410737d1b240d6ff29860aa3ed00000000068e4194faee3f63ef57f09b0e620f0271b7c9ae08dd0bc2734a37d58d3705aa699a1ad49ffff001d168704cf","0100000058614874962beed67ab97610e165b36cd0a9b2f9fcab95157d7beef7000000003f5b762b340edfcab016493c9a77e554a2d7eda332d6753886c8ab86f957fe3c82a5ad49ffff001d27592878","01000000ab2ab2f2243834df5bdcdacf42faaf9dabddc211210fabee0ea150db00000000c518c7874c55f90d9baaaa27b7b6120fc6f5005864e2a0fd8a9fffdf7ce296378fabad49ffff001d0560b24d","0100000056968b6a4cbe2a329d2217c9952a3e868ec64c587f1042f13043a83200000000c69a89c8aa57fdb3bac59085c937046533a8b3b4cc8fdbceefd5d23bef7751000bafad49ffff001d2c8ae2ec","0100000083fbd6ea814ff159c3520e7b6e106ce7762d9d479d0224fc0b002329000000000116d8224257c1ef178babccfb0917f5fee100537262e096e87b1c2a6d27c6e25db0ad49ffff001d06d76a06","01000000490048ec350a43e5fa1205e6c7cb4dc23ad677d9d372bb893779ff2900000000565051aa9474729cf73d5670102303fa8194841a4dfe422cec054c3ce3c57ce8aab4ad49ffff001d24b3cf91","01000000bfb3b09a265d0bc8da6c516e9c8e86345c03175553f72e8780c5864e000000006b37e64e7724dc9d7ffb72e0970cc2dde84b3a41ac502e0050b196e4a15b04efeab7ad49ffff001d05dcfe79","01000000beff592842ca1d92ce65a10b94ec6a41c4c0d7c66c3a0aa2375ba6ef00000000b472f6189b229d5673c1f17140e4ef641be7f1a4f1e02ac1a98616efd932814835baad49ffff001d2b0709b2","010000008fb266d166cf23fa99404a717aa08abc089af96069ea844f8848762d00000000194b1f6fbfa9541b007a49bd30a745418356ef71015884feb3b69a9e671688ae39bead49ffff001d20668367","0100000046f4052c2fada6b5e24d4e929ad652174989e0937e95ffe128d54900000000002b80bc12e772cdb91d99895fccb9cd9c77274988f4aa79e78198dbc856e67a2309c0ad49ffff001d0378e794","01000000d886907dc80f5df86707600bf68c1bb85e6eae8f0355703a19ca1c1d000000008accf0657d8301e399de09ede2ea121052929c9ec009600d989bf6c6ef7e9cb618c0ad49ffff001df1210500","01000000585578b679440cf2932c523406a5ca1ca01791e4e582ddfa7ea03a1c00000000af5f38e04e32b21156cff84cc1cec51967efd740a212b5240815ec7d171ff51b96c1ad49ffff001db2c73d02","01000000bb37e8f1faebc20387d501cc98ba9b0198c136899a8723ebd569ab66000000006da5d59345f469166f34ebfdbba58a2b87b345e822f5227af1a2c48cdaba14c5ecc4ad49ffff001d32a95625","01000000a2ba9ca1fc134bc579e5b9624ee29f1591e58b11af8a627d5b49994e00000000c1cb5da2275ebb801907a5864930f7e1be7a1c5eabd3161b65ad12cf1f62a122bfc8ad49ffff001d2edf2f55","01000000fd59274c3bee8aedb110fdf071a64eeb29c2ec8d828190d548d07c9a000000001c7e79c125d5e545050f13fc45620020ea11c3b640e66636084e773423719faf91ccad49ffff001d22965d3a","010000009b52de9cba89197965276089333d71bd84c7d557362ae09b9391b1d5000000002c5221cc7467c55ab7e3e851cb80081fa82f0f018fd3de9fd0e18211ccf5888f22d1ad49ffff001d13e0ae46","01000000714eb47b40fec1ac2032adb7140a0c9842190bceb616733864b9bc1100000000abb5010de4eb9c6843d9807bbe245d08ce3c8006f9b81bc14b258b412eb9209b59d3ad49ffff001d19434161","0100000028d86e6f70b8dc9fefeba5e950c72fc8e46189d9ef6ed9a79690a361000000003e411a6942e3ba624869e4f7772ec787f7d0654f6905ef3f7b01f4a240cfe5830ed9ad49ffff001d097263a6","01000000841287a35f1f8d24832f948580cd54deea7bd34c929365e8b05d4dcf000000003ce68edfe0aab42db8a38ceab8969672791b9d0f40f62ee4895fd57333dc3a9f35daad49ffff001d4b90b604","010000008dc2e088b667a9438ced76ac56b858ffc53e991c0bf26d61cad632b000000000b0023d41c0a8cb3e370e50622b58d241819cd390e8ea7fe20ab2cd5eb258566e0adbad49ffff001d21164e43","010000008c1a26ad381194c33fc1a1b1cd28d7df670c6ef228ce4673dc14b9b4000000003c4c670069d523eacd83596cdfc02a35bcf352158cad7a470c61e1a9f63bd4435ddfad49ffff001d32231335","01000000c2144aa9b7d799d0939607152a1b4308ceec701ae28049a91c0b776e000000007988eca59fc9bbe7c3c6e770142890f96f15e9a8844cd730f41c3924259d2a702fe4ad49ffff001d099c7a64","0100000026286bbe2a59a190fd5ca3b4094cbf640b82889ff6d4b294426a5455000000003589761a0d195d82ccee841b95f24de9de3b8cb7cf28d1594ee37c08a1e96758e1e5ad49ffff001d29815b61","010000006a2da734a31abdb20dc3fd0c54f062b92d25f6718332284c5440591a000000001c272c53b6ea58e816b4c1652ba05a706f6e8de2bcd2b21be908041de325f4e86feaad49ffff001d38e21e8d","010000008b7f89233a3486a98e0edb8f987906224413258a698f39b30428091d0000000078362865b22e32f1d1ec99a7a9646b603fc86c12064340660b9940052d3d94ef9aedad49ffff001d32fbc6ec","010000006562cb62fc130c34b82e6241034c6b553a8090c192fdcc27ec5c6bf600000000ed01228d6754a2ee38a624ad70b729bf6d29898c1d8ef485dbf423768c6457f29bf1ad49ffff001d35d6a51e","010000000fd4c84f6212433f2dbd2a2f47f7cc4ed50a13c82900c9d6bc6c8ca000000000d7c94fbcce5f14eb9e69e80369721f0b532bfa6b93c0e05e79e059b10632a449e4f5ad49ffff001d2c77721c","01000000c8c64dc2321adf4eef48630286dae35d350fb4a0616dc155ae3b4f48000000007c0b34a819abb49c3aa4279ec1f7fff7faa06e1810c38b3aeeafa8e298287766ecfbad49ffff001d278189b3","0100000070e627319a8de10747c5ba3ff79c3e451b052e8c82e30a8125d6522300000000ebd53afea1ec4cbdeee3d54c57c2fc0fa58fe96942a465230cc4c2515e03270b9bfead49ffff001d123ecd0a","0100000098d795bc36b15685e58ebf63fba13b688db650b07d053fefcbda7819000000003109bca21bee103ed0c29bf839932090dd407d40ab3260d6d2d4ffbf2fa4dbcb3501ae49ffff001d3683f1fc","01000000ca7ee2386129fd4dd731df9ccdc6b7906c02f5ce8f8ed53ad1a72d7f00000000072e2dae56c2dc487add212cc51dd0dfdc866e20adff3308766f38eeb083d43ff606ae49ffff001d3127f3e8","0100000043c9c7761a54863daf4a7ea4db18453e13a6e4920eacea69f578d33500000000a92f59feeb3a3dec937476fda9e0b1a0ae85fdd62ebfd7e018b628fd0dbb5e73dc0bae49ffff001d0182ee72","01000000e0f1ef55edd278097b13a0885e4b89f585991005c9268bfda409c94c000000007de88a0140928ce3635ddff2a03990ef52f923798ea96ce37a9cb030a2883ad3810dae49ffff001ded329206","01000000021d4c6156a4de907ab6f2fb1548f261df43fa4b2c06cda349717c46000000008f5b29b719d653f88c3389cc7685c578c474edea984befa2bf684bebc2cc3e52b911ae49ffff001d312f57d4","01000000f7805e2bb63c4490b984dd32bce9e12be53206697033cb4362027f03000000003945a12305dc83aadc67a7c621848da37ecb74e6ecacbc88daffdbfaab6575f17514ae49ffff001d64e57d0d","010000002e5802f97040e7951095bd8e7433ab05059feb0f9661ef91001e0d5e00000000201981206294ba3bbb1adf23caf3abdce47ce1d0e6c513ab9fc51369239161275e17ae49ffff001d03661be2","010000008aed79e0539ff83ffd814ac3cfd08a0823b93c0fc948a5a2f4a49ddd00000000aa472603cbb384b335dc019165381ea57731ff6077f64a00a8fae6c07df9aa960d1aae49ffff001d16c9d303","01000000b43c5eba7c4191c13eead8a9084326c00329b54f85d1116aab6280db000000005451f910c74929b55975b1e0da1334101dda4b0d1e857f451af8a31d10063a9ca81cae49ffff001d43478e0a","0100000034bb48a6b8405d8a4eca68bea979adfa1f8ea0426482645d338ee64400000000c4f973631ba5cef49675e0cb4af303011ec77427a3de59f1cfd631175d4efb87141dae49ffff001d35f28b9e","0100000095fb3a27bf0cbd29b078d1562013cef3ec196e097c90d5ae86291a2c000000000a76d4bd38e41f81dcb10b714de8dca5a237035b2a03309809e9f6bf24a36ef0cc21ae49ffff001dfee1b70e","01000000170bc19da5d0cb6bbbbaadba68610f66b1488cd686730729e5da782100000000faf94fe29ff92a55ceeada4d08fabc377ea78d179b2f8c1b9c17c91427b1d1315522ae49ffff001d0888a057","01000000a7fbcad95a081dc657464a5d26512e74fa52c8e6adff4532e53572920000000038226b909d4c44404dff9f0d5d16066477b4e9db86d3c573a3857837ce9dd631b025ae49ffff001d63f99a10","01000000191704371601e0ca5510536f9d4a2d8f7d2ea50ac8dd0dd02697e93c000000001976dd4e356332f08ed659ebb72ee02abaf791a58ac6e69a2aa12ff24ee7d77c1a26ae49ffff001de37fb001","01000000a88a55ca27affe7f05963e95203b33de35be91d084202a09e1eecc42000000004ebd8db7b00f1c2781d76569e5850cc4bdc919ca66633f6130cdf011a6648a439d26ae49ffff001d2bb4ae49","0100000036764588c930d4c83c4aca27426b281b69ca3adab3a92fbc5076ea7d00000000b5e2824584d46a209a36f4f50d8da8e8fed84502518a8e2e01d2c505c72f5d32332bae49ffff001d208bc658","0100000039f5b718508c76290fc2bb4c7d0194b52baa31b445e9ce969c151a6f00000000c7eef0e80cb43c8c18af7f387704b2efd27fbdabe54c6f49c21fb3163eae1b76372dae49ffff001d38d35829","01000000795d676569d8e687568bbb23f50edb381eb51094a4b4760d8410fc5c000000002c8239bed76c284518db8a6691897ecff4075ea5af0c1e4b4c31a4ed1b91b102b32dae49ffff001d5fc75100","0100000004e5046d8640af8ba1dc5737dda0b64c4a4ee8ac4a8c7b87eceed29000000000f376efaecef86c71bf84dd7d1f42d9b798604582d9387c0bd220ca16910502bb5830ae49ffff001d13c587f5","01000000271ea802875ec37e99f65e661f5754927e631abc6c4930e39213a61a000000002e3dd4ebbe7607b39c1c0a475b051debd6937c8bc09a8da23bbce781fb4d0557a033ae49ffff001d2091e8ee","010000009515aa5ed641c0f6e27c273500c27077aca96bff4a3c381db4d78138000000002d2863bbb8136526f49220d02914063e4e4bdb2718af65e18dd591cd5d9d2deae633ae49ffff001dd1439700","01000000748988acf42a90538cb9cd6b887a5db490057e0f7b3c01eded3cc5ec00000000519cb8e2e8a371b20684a8e10ac4f5015e0b4604176e4d8e408fc62bd7f1f5e3df35ae49ffff001d0764371a","01000000685cf59f3186d8862dafe64d9c23cdf4f6858ece21523ef144cbdd0600000000c87240b4df4bd4ed17023ebf94000c1420589c29f717ac93fc029a3397dc84d1453bae49ffff001d330fabe9","01000000688b2b9f7b8ebfdf526713d9947421bb66242bb2299643578715cad7000000005fcb28bd4b9116da566f0aaec360572c5386968d8b4ec5165c7d44f441b280a8a03fae49ffff001d40489311","01000000320bd6e6b7ce02a7682b32f473c14fb8d61e9e0593580a14044a41b000000000a0e785f16b71f85227bbb861d6c9c3d7cdafdeb36923128a1e3dd5a15e212b3da240ae49ffff001d2251c939","0100000037e054267da59ae17fb70199eb7f34ee8046b337e4cd716df2912c560000000098227a9dc35b6c2d0b38aa7b21e5bb5b62bf5230800112e0159da596b92fc56c7143ae49ffff001d22309c15","0100000053fee8db885fb3bc1e66891c4d834802bbaf94c204c18afffd10b5120000000061b029c805a68a4c23870593f487245c16876313afb27cf8afd3531704b2ad595a49ae49ffff001d1cc5e221","01000000fdf699136cb0372b89eef96a88bbd81011c813f8d668fe3347ad77040000000096bfcb20fdc983d0e68274a9e81dd57a1c36ea18569accd755640e70611d7bb8e24dae49ffff001d3605dc8a","01000000d73e66d87df6c33dee99b3c52f94dce561d0f434f7c98868e6d249190000000006d7e564effb2cf1253c4d47f5e06d162dc49a53b02a85d11583a079af395471fe50ae49ffff001d00018b3c","010000005cfc1125920d9a1194f035fee5bd401e528a1952e4abf2243fa26ca50000000049665e83faf1b227bc0dbc98ad4a659a1e84d57983a5e997c9fa0eaf73ae88ddca52ae49ffff001d038c5e90","01000000d873faebaf029d72393da101fc8d02fd1c4a7ed11b20887fe14e77de0000000038ed2e6ef4cd53004f0049faae682b557a0754c59db2a0f92b24f28eae2831b7c255ae49ffff001db012360c","01000000a8764e97e91f959909d53c311f5e9de2eb93e00b0b55a86b533b9eb100000000bd5a9f74f0ae5442c80089c0daf221a98b22050f00b0f636e4d9666fcf3a2dc91357ae49ffff001d30cf9803","01000000dd5b04c74cd3bdff63ee77bc6709a55bd2f502655c78f0f095903ea000000000a2826326645a5dec36bd5807ffdfe294b8c63863f71b6ee65b0959b4abc460a8da5bae49ffff001d0448f856","01000000eb44dbb0586c17c05b0843822b1b6d2199647f9b60d032be5c4ede190000000013a75830586ea6e101df0e678e7ad11c7e4a55b88c00d67ad4a26fe03008981a4f5fae49ffff001d14ea7de0","010000002ca78f2b8987a4aacd80e5e4bddb13e662f7523d400796d3aa87927400000000ca2c05216ac9cf056927afd2f227e591a090899b482070a8f27ed368d5a9cf7e7763ae49ffff001d01b57839","01000000c9ce2a2b0f387dbe3a3658247f49dc147ddd270e83c7b56f4d1c142c00000000d5611c99fb559aca8d340824fff8a53d23a886daabbf41459b2b5977d1fcd05d6c64ae49ffff001d7478bf03","01000000a48294de43e92a44a8ae25ac1e8b0170f6fa6951316d110d8d40682b000000001b0b54e3656108cfa990b1bd9af7c18a88d3887255fda9964ec42f64694ee0033e72ae49ffff001d2bd9e20b","0100000093e24660b173f28545eb5d6b0ef12ee0c431d20dd1b2f9ed608846e200000000012767bfe34cd293326ae794e7a04cfaeabad264e501d75d1500e003e0b353033275ae49ffff001da07ffb0c","01000000f30ea5ec27605d7cb3cdfab063529fa3ada2f84d697e7b5ffde0c74d00000000c4f2aaa8aad7229aec3da907760eb51b4e5e00934b477ff146106c344e603e838f77ae49ffff001d1a159371","01000000297d21dbe4a6611d80e56562911924edde8bb0d058fb50f1531489df00000000b53355136a2b1f436d2c312e465ba221d05e2d3c5844a4106aef7622ac5481f1f77aae49ffff001d1e460cea","01000000a9da432167dafd144eec8132591e1653678b9897313bd617228405d20000000048b614cf433585962cc62f2b4e9a4c672a0f6effd86000d7f9dc9f2687d0c629b67fae49ffff001d3a46ca54","01000000790925b3d5a82fa4867993d4376540b12de4485af3f1ab42302b298500000000336dd6c1dccdc62a1ffad377aeb0bc6483ebd87a1349e43ddf915c878f6e67e4ff80ae49ffff001d012bb322","01000000e7de9bb268e4a257baec1b2d8c78ad89c46a39e93ac28e0a34535fd700000000f0c53e21883f9e5c0256ea0a5b530b927602ead2684b11327f66f468c27bedb3f283ae49ffff001d2dec8f20","01000000567a6cbc9f7174abc524a6cf69ae12e7eb51b076f156d6366c164b000000000051b2e357e62c36e2f1badda492027d1cbaf552c97f6eef6ee536d5ad58610c627d88ae49ffff001d355513c6","010000001fe2ab56073fe90ad619ac99803244c04ddff78fabd12acc2c6e222f000000004415f57797d1782c654f1c933e3cf530e2489a26061e405cb43b517ca3f90a59d189ae49ffff001d3927ae06","010000003d98645829a6acbc5e8478c72175e23ab072ad40859243bc6b3bac93000000000589f1f38de739b3a4eeed7ad1351c54be3954493217190c2ecb487986fe98d50a8cae49ffff001d37deaede","0100000056781bfce0b1b38070fc0f7341f660ffb4a32565c5b5b5cd4efaad96000000002766380f0d74c984f2bbc9d7bfc4563101721b5af0dee53fc6547312cc2b4fc0e08dae49ffff001d18d80a2b","01000000ac88875fe86b02ea021035329fe006d6e7472730d8f82d0abfb3069e000000003cbd78bcddf83f8ede2e75fda347a67732b320b01c2376376d21557eaaa6f024898fae49ffff001d14ec8891","01000000c4a65290139717618603d18dbe9e25d0cecb9d8e99255eb7261862db000000009a53109559b655c039805a14508053f62500e7985a7b1869f7184acd6cdf8b5eda91ae49ffff001dfb1eb40c","01000000bb54d7bcaebbad47bcc048c945d6a155099a8cbef792615cc2240f1a00000000a4aaf10d2d1455d554f5d93e77257796acf58dce8fb2992b098ded7b21b321831795ae49ffff001d30300d91","01000000ed326f47d2cfdfa9969c0c10d5662970067b70e5ba9b45688611a35300000000063638b8edb7fbafb0d041f2acc0f3562789fb6c37db7a2d2119f04d77acbea14c97ae49ffff001d3464ffc3","01000000ab7e794a4fe317550e84da0bc8602f6b4b2d276653ea80b23fa240bb000000001f363cd9bf1b2f34a9bdc21f3ce5f809eefe1572cb1ae8fee9031c28f4180dd7eb9aae49ffff001d1633cf92","010000007f52992b5b2e0d7147e95d9812875ac77a9bd7e6e3c744e413cf014d0000000077e6952c417020409034543aa79c05243da5e932dc20ef494a74ab6dd9aae37d469cae49ffff001d7669f907","01000000d661c68b60446b6a6ce2f415f0c98228fe26c4255caf665b44c778f800000000dd010016a70de66a58393114ff0daa2a3b4a89da750c86b6f638cf09f04c7509759dae49ffff001d0214a946","01000000f923d011953d09596d841f1c6b0fe087ef088f537ca7c436036f53d100000000adc053ca3b900582748f01ab61d1ec43bfac409570510f06a86ccaecb68af4834da2ae49ffff001d220fb28e","01000000ffba15e6ddd117a44785a37906e183282324541803937e4448824cd700000000129c2d1b4ba2a6b5bc98d298d14d15fcf4afb334ee003f1795a1c29b7863d4380ca8ae49ffff001d3583f9a6","01000000a73f635b3c6ceeec80b08ea4c9ba905289eb35f1866d07d076e557340000000062187e1a67047be79388ff1663fd451643b67ceddb9ba193f67c8f0781b20467f7aaae49ffff001d18465fbe","0100000069422c46225b4ef8a46712479fc9dc83e96bf8b9a58fbf0237349dc100000000b5d7f7ce614f43b10f88383fcf613e7355e016cedb6092e98e44c01231c1cec0dbaaae49ffff001d33b99500","01000000c3e5c7210bd73911ed02cfaa03916405400aeb93f984392239836359000000002b3930cc1e4b0d49486450e242beb4accd478eb744d083a8ba3dd34b269b232ddeadae49ffff001d0481474d","010000001919ebfb794a6a277d2b7e961ab244e9f70c1ab6fae33795368ece38000000003bce8b1362e2d9f4c1aae3de1d6f8c63a463d81de1c904df65a977fa492ef23d86b3ae49ffff001d213377c9","01000000a216b273b8e9ae75ec94f4dbcddd72c59da04f4fda000842f61845050000000052fefb7697ba9076cc8257a432dc811fe83ba1c2e4d20b4ad355a749983481a098b8ae49ffff001d308a8c5e","0100000081ecc8b931b86d70a604b9b5d5fa83457a71a68579d539d1204a6d0d00000000e6efd14574d9c10a6d2329b2a68d4f38345afbb75a187ccfbd2310a56f1a8e0951bcae49ffff001d2c6c951a","01000000ead368c39b4821f8ae972247ec59e641599f83ce560891715dff8134000000009e7ad7e9205ddf923c95e96213098561b01480198313717662e7f9f804ca5842b8c1ae49ffff001d08fa6dc7","01000000f81dd259b712fd6a3af413bb5ec8256dd0b088498db03c2c901e03a600000000086a64631b82c6d5cf44a320d67f8101fd8e5ff7ae734cee1b235891fa9e8501ddc4ae49ffff001d151341c1","01000000ac33ba200ae098f2dcf6e7e2ea0595b31ff5342d9ea696ed08b68d3200000000467263a15e3bdbfc91aae578d10d0592f84ad5c93f4573ff23a1d613b23a0f27f9c6ae49ffff001d1a1a4884","01000000596d8aafaaa4c911885427ff455f956f12a3477d3c36e4c9fde2f055000000005cbaa69ca324daeb4fd5fc7671697c37e9b662de308de3a6a8f5c839400ba0433accae49ffff001d39d18086","01000000282450a11672e33a57d155f66c73362570922b01a853084a30d85bf100000000f6b9dfaa2c3ce1bd67cb4a0d0193adac3464b99b02e5041480cd15c3754a7f09ded1ae49ffff001d226d8566","010000004c03a91a054a73ff33f7640e07e046bebff1ee7da29ae5d8bbd1790700000000e31eab288ea0624ce047c4b1c911ddbed200edcbdcd0876c8230362228ca9e2a52d4ae49ffff001d1ee917b6","01000000bbb24c07110ce02d859f41270e6eaba3578847db10b502485f41f1a3000000001395d34325c1107973926bd41f9c919d6a414510fa07dabee39d71811b39c9034bd6ae49ffff001d2340754c","0100000054ab80996ab8788ce30181ce4611e4150e84e18745d5def61e36e7eb000000009d62460c4c88da9e811097b73429bb521a09752c4e466f2fb5eb9bd6e5e9e10bc0d7ae49ffff001d027915ef","01000000f7971f6fa74a75317d7233add989876efed93be609e590d1e2566c0000000000e89c4d435c0271e0de5b936bd3ec0ed1f2941e4e6a73fa38aebeb5673625010a85dbae49ffff001d204d75e5","0100000081fee1d42b75b4ea8d0d50d2936b42ada4a514218a13869d295a31e4000000003853c18ca936881fdba9656e33481052877a09f0cb1914d98671c6bb4a02824f02e0ae49ffff001d1685c33d","010000005aa794c7cc3ce0fee645519964ce9c3b2572a2d12834951675e7c36f00000000814221bc186c6b3dbd6a850462bb640f89a40816576e9591937cfd367ebd88049fe2ae49ffff001d47914b03","01000000995f02a0fd49b299adc71491cd3f3525dfdcb9033bc7b0d87bc9b302000000001f0d8e72e85de39c25da99eae6160ad2b2eaa5d833f8b29c9ea1cc4dcecefa285ee4ae49ffff001d18f78668","010000002bd267f255809a00df96f14e7b3a914af9989be000d38e45ed0c445e00000000b592496ce33b81c076fe424766ff485f27e7429f5b3f6c792615880313e91b6023e9ae49ffff001d31c66652","01000000dd6e9f309760538bae6f2bf9e177e8d3b45dd566aac26c442d8ff9e900000000560385bf9565b36a337dc94d2a5a2e0ccc8f1fcc41e0fb32ce608d4edd9ed020b4edae49ffff001d23c38ca7","010000004f126e2efc1ec903c46198c56d5e5c4cb4c56bdf943c96e166309f4200000000eea0955582278d0c2d11062098cc2c9c02adbd3588d392a9975fa1c4310af87c9cf1ae49ffff001d80188f14","01000000d2157eb9e3bcc834fd78e5898407f08fd5aec9aabd71763ce16cc15d000000008872cf2f895988f7b4938a268b6e7f0abe5de9bda5e925c18ad30f638355fe31bcf3ae49ffff001d316b8944","01000000add0d2db047b40a9d142b18e064c6c4785d5812fe3f81faaadb5f4c400000000c093f7248835075897a0c29e57ddb1a9ed8710b96173db8ede844253e3d24e488df7ae49ffff001d368fdcb7","01000000a6c1b5032af5d45112e8ec2c0e612e7b7ecde7e11bcce85dac9a6db3000000003d3efcf748aba390f480041bb8443679b832fb28ed80c3dc10a89bccee8252de94f9ae49ffff001d12a0a807","010000005d99c860959d69d544f444b657cf9fa30b8d509fcee05ee919f65e0700000000b6e85dcb9baa31d0c0ae2394d719a387bd744c2b1eacc3380bfa7679cadc797313fbae49ffff001d06c90fe1","01000000618580001e875a2525ab6f00c7e832927916b522637391f88db5c7a900000000e828c1aed04ffad23c26acade1a1030e3c961c5dad8b91f828d1fe3c99c3e5a96500af49ffff001d376b4f69","010000000f0a7a14256a35ed4dbe90126be8d5ff87a8cd3cf073c7e77dd9d2ef00000000cd0a1a0bd9c0b2c3febb5e6f68a829787ece1592f6d2e9022daae43206625f02f703af49ffff001d07f4bb16","010000000af73a8ba8d0786ccbb7c5b7aea76d082c301020981f28c6039098f500000000d39b9909d85a511332c8fbc3c362691f0da9450236930fef8f1f966dbe7c25f71f0aaf49ffff001d30553121","0100000092b84c498d8eb237fb1214b2daa6b7d6a51e739d01a8d831143113dc00000000e64f8339c3f656e029161c878d9d8cdd40ff3db094a708369b5eb01c97564a12d20eaf49ffff001d1904e9e2","010000003eb03f95a05cba1f89f54e247a6d3af7d9bd9a7a3d9e5a3f5b15531c0000000057050b5a17bc55d67960f0909fee1014b2953635bd479722c3f56bb3b5725c41b311af49ffff001d2355b860","01000000f67ad29a6b8c35665dc167d2f5b08cf6e8f58a1e106b085eda07611e00000000680a6f99cd56b79ef302e1889cc18bca3da8f7a95b3f1bae31897fd0b497bb024715af49ffff001d24455d2d","01000000254baf5e882214b4b858ab175ba60ad2d531f37860e26a0f9b159f9900000000c2b2e4a480a7947a600dce446800b31c0b0bee53e5c4659a131738c08d5cb5fe491aaf49ffff001d1e1dcf28","0100000045cc9965cea005fbbb54f268d13638aa156bc5e6b9564ae8e620649a00000000004a812360d7ffbd01c3e2781a85a8d58205fa89aaf8a7ee9d80aa1eb2f0da011b20af49ffff001d36498741","0100000011eb88fdfdf50131a462cde1610ae2f2c93f1390cbb497df1bf0010d000000002965766ed2322755a359a9bcddbad784d36015354b178f04aba51475ce7c4195ae25af49ffff001d13eefcf7","010000000fd6cd7e6d75288dd492c2da78970a4203b775378171dcc29ec29e700000000094ee91d24020f2fa440f163a9ce15649410b761fefed839db173d301f3a642b82a2aaf49ffff001d2aeb4824","01000000bccbb08b19677b8b5797d3f7732545f17325cdc76672fe4eb8ef6b7c0000000021c4d4007e9e3522bb37cbaca611033c7deb07795d053accb0a1a81be7ee2d7a082faf49ffff001d38414126","01000000ce26f22774bbe6f32cea7212732940e4e13b7b0519663b356fac686400000000038c8ca5c6d75b14e041928535bb1164ecf859914f7a3025dc31ab07aef81f0aec32af49ffff001d281f4072","01000000bd832893847a42aa4e27f4dd5adb76ba034da1b8d4fbeceb79d3bda800000000611244585197449a415fbfcd1d0eb29cfc8fefa8a51a7e298191311ad8e52fc4e936af49ffff001d08ad9779","01000000f4ee39a06357abfea40f0ed97ee00bda7679fbd45fa1432fee3af66a000000005f1d9f562c30377e722fce0cb5e5465d4148f7b3eedac1259bf3c08c5340484d7239af49ffff001d20f7c9f7","010000007f1beda0950ad95662ac29f143b86c014dee4f38392cddfec8ad6357000000003de272f4f91caf00a8a6928bbf7c3d81f808e4704647619118d5d709e77ba0ba0d3eaf49ffff001d29bdef00","010000009c2e3e330da93f197ee2bd59e2f09caf64689a332e2fe39b139f601900000000c6187cc21968d139b388ed02cc288c87a3e6a53486332aeccef2c4d2d1900b33a443af49ffff001d2c5a0c92","0100000038d06298b57969747204a50ca695c6aaf0dcf44ecd37d9988c146bb0000000003a25f5514a9c7f1b5d033e59412619b9e484c6a4273ebf7da20c990cd8e06d441a47af49ffff001d21f444b7","01000000c66c036c98946992cd1a7686bbb61863c150136b633e828a1720b24400000000fa62aaf7c7400fabbf5fa5375e370ed47e6fca08f70c79deec884f7dd199fcd78e49af49ffff001d1397ffb6","01000000d8b962812fbad52d448395a83b77ae2be65792aa08774c4646a52177000000008a56441386b688f2d89e1aaf33452dea403a17cc30378f0e1d3f5842344f1ddc1f4faf49ffff001d250dccdf","01000000c416e36049e0db2ec8bee84a6c20cd368fa9f0a0671e9be45d7f8c570000000034166d68ea02c4064238d7abc30b244e424e180b9e730dcd1a848de14282e5b0b350af49ffff001d20752cd7","0100000010ff6dcf3b3998ee7fc04963a5ffcdc954372bbaa7d989111a4776240000000057961deb395c122453473d698361c80a0a40eb79348cd0bcb9bee327fa3b2b150851af49ffff001d38e92301","01000000df4d01327ebb4126ac3925a9f45ae28b2ce0764650009c88ae76acbd00000000e415b19dcc42f5ebb48220518147f0a8b40851643c724caf200e51635ebdf329fb55af49ffff001d2707d30a","0100000028fb7fb1bc8d4aeb0db8dec85ec9bc1d7b2d2701dcac5facbd94fa1f00000000d20f913e59297066fd81a035274b0c9846f196bfbf4d930fc9a787a273dcca7a2e56af49ffff001d99315900","01000000d378233c8f45d762297702a50de005a9074e732fa9928234e922f9c600000000e2a5e01b6c729285afde49e650fdf506128d95bb0537e9e2673d821df20ee1087459af49ffff001d37e915a2","01000000c74b07555b2193a5bc7ef1b2f92e320cefa7cd73465789e0b16fabc4000000000b3f98a28c686b88251af3ce37c132208893881e24d1fda6e265242266f60990145caf49ffff001d040f23fa","010000004e3f441485d8fb22d076992bcf458565a468424cf0a6e6b16a08274f000000001a1118751b559091ff85e82d13b6c9f0f7b697b9a67e637b07885372180a13943462af49ffff001d16f45188","010000003e787ce0a654c4aa1a0c6e22536df3d50e75c332fddb9288b65ace2e000000002881339a7978ad3d38ba3f4dc60729885523ad4894986370cec72a7307e1a405d263af49ffff001d658e0001","01000000f33ade622025c70ff3fb761435dc36af8797806d579d1ef0558fa5ae00000000cfdd13e52137d7e9f4ced2aab16caa9636a8aaa0e4d8b5299978971e131b4d7e7e65af49ffff001d02a14684","01000000c3aff31bbe8562bb6c7b40019be3f413172faed29b5d52e488da068d00000000b938ac50f3b75058a7982b4e5ebd3a6cf301e23c9c1db2a0acabf2b6a7c358cd3168af49ffff001dc6a25a00","01000000bc0f0903018342423f5b9c472eea2855854000b58582b5021925039100000000a08157980fe7130c49b0f3ce97ab88c0842dcd2d776f900d37b29179153f17c87967af49ffff001d21d73281","01000000de3a195f13a45f5fe61a613ad512a26c6076c0390186de44557a3320000000003241035d6a0f404e947d4c7cbd4640669e539d386678f967f6244fea192eae6a756aaf49ffff001d20767ed5","0100000048e2333b9be042f39e9ab2f0e7cef0fc11aa8467fac631cde2bea40200000000de252a2d2fba113742d2831b5ee508cd535f33247b392d831230bbc21d0d27ee676faf49ffff001d090af0a0","0100000000765277f72991d110db99e069f535d4a16989c9eac9666c840e608c000000007545de65f0e6f050330dedab29fbabe2dfe25e796cfa17b3b3f631cee56bedaa4f74af49ffff001d2b1755ea","010000003ce18fc8bcca74a9532ed13b0dc3ebf6e730a3a1235261d820cc264900000000432556234b92cc59eb42b34a7c9539eafb466cce80344b5894dfb85aedb4bc1d7576af49ffff001d237fb4dd","0100000081e8a48e20414efb75aaf696521a872b70d691a9cc974f3a072a4827000000007ec56b135f2883e63c1589d04b5200b112d57671254b2d706fbd21ed698a7426b07aaf49ffff001d3a6f85d3","010000005894f14e43b58c588cf3d614ac5e16103f0f60b3cb970ccd197b9768000000008e872bf9c718eff370150c5c59a960e1eb4939d6f91b1b8003b475adbb90254c057faf49ffff001d38630d81","01000000714b8e87a8d23de154d39b3bc468a32aa6b4cd2c81e16d461f4d5e5d000000003ed275a5491626b1edf971daefaafe94667aea3479e5282549dece483b8294698484af49ffff001d22a81357","01000000bcbc002815e6aceec82544aba273e206a754637a643df8150161142a000000000fba51476bc7c421149c4d9f0642820437cf4e0509fb97cfc50ab896d83e98780988af49ffff001d2d0f76d9","01000000c43399217d7f2a2a2378010383a7cd4144743b14d7efaffb112761d6000000000e1d80f314da52304da8fb9dcb229bf589742c4859a2d8528d3a038b6e0ffd779e8baf49ffff001d22df82aa","010000006ddb29ef0abafe5a5808c808eb2e943ec7fef9917f2a71ec9b9bb65f0000000008308bef98b1514d73c1768cf306e6845663d828d6f7a562d9d39ed76a250d606e8eaf49ffff001d38a2fe77","01000000798523c547a35251bdf9b821e49f6c621431a8e115d1d5af1c1d91600000000003470184b0c97272a242201e99e3df5b11aedcac37beeac9c7f2d32fc17367af0190af49ffff001d268458c8","010000008fbeab386d751efa62720b690f2caf91bb12f044766158f7cf0c2087000000005df7cc30a70e01e04dd9d4d44dabe44a854965e72215e46485a515d8d34d48ccdc91af49ffff001d2c9d24b7","01000000713445ca83b584e8415c44770e1c1523d1e879d8f18a1a38f2c895ae0000000084611ff7d926f1c7d197f263ef4badfaec7a09db31c63c7bbb8021f7fda344901b94af49ffff001d03a6133f","010000007f50b65c94edace59601ae77246d3a45870af4a0d56f9356dcc98e77000000000572aa62718d94348e1554c94494f589e70ed394dfaa412d162ebee3ac50ddb87e97af49ffff001d2fdf08c6","0100000063faf376371d5d201ecd5eef40367cafaf60d87e447b13d5ffc490cb0000000016749dbd84ca67fe9a661a6c5df41a527a367769c5bea769c6ecbc1dfea7a5e45799af49ffff001d39edb5a9","010000009e7124f53cca9374c8943bbcf4fc3b7e145431c330e8d81acf12781e00000000fd3814e43d5c80c1eb3fd56dd932ac637b9143dad269d71108c054fa6b985e50b59aaf49ffff001dd169e602","0100000095e1cb3dd691b2381b2cbabf7ea75c047e4b850be40919fc463893bf0000000094be3fdb58628ccf85b7c2e3402a77120bbe8d4dbe70f97da21fb5f108189506cf9baf49ffff001d31dbaca7","010000006d847b5102211359ef7870238e0ece41a13db73c9a09762c1167156b00000000883764c9c3d2167d009050c27543cb5841cff86241b250e0b0e65a5aa7c8065f9d9daf49ffff001d2b61b102","010000004bb8a2bc5366ca0ad2f549611eb3ad147795d18637249274b32cbabd00000000ecf77a9ec3acd27575943d67f3eb052bf832d36a3a1ae42fecb623912e7969cd369faf49ffff001d30850c07","0100000008cfef9675169cba05383b7157eeecbd033a5da15bae67be023217f0000000009c7e7defe4682ebd703c4146637236a0ba40e1205114e60a4b3439cb667af533b7a5af49ffff001d364a29ef","01000000302827e72065a5159eed6d979bdca27acb19538eeb37bff248b7720900000000717de47131f395a2326eda7c619a48e28e507ebebdc162eba380c0d26cfbaddf76a8af49ffff001dc3bd5c0b","01000000e88e44b5f9d6776c7a76ac6d9d70cfc113e9f97c8d48bd67079a14fb000000002bef7dd4a55baf8131e9128c3df3baad93dbbeb700d2976d005efc078fea5cabfba8af49ffff001d1e28c9c7","0100000060b7a1d99992cf4dd7e1d0f83ec1a21e5963cd2773a49d2f05c2310600000000f83a0fa2ac75d8a2f000da7abf85a2f0aa354d4e02c067939cc52c3dd4cddd5fb5abaf49ffff001d278b10fd","010000004dcc220314908624eb53b196bb1ee8e4d466c673d8310a62c6e4779e00000000179c1306e4606513a63034ddd12a42f6b45aae5f1c93403d36ac9558b5e8ab48abaeaf49ffff001d7d584f0e","01000000c95c05da648b02c1b299d95e01dd2b1ec9308b5f34e691f09994aef300000000d509d061a8b66970d0b93a35be6041331348d7b92bf0f8b1d8b91f059c5a0065dab1af49ffff001d39a3c2c4","01000000729ef44a058130ef41fd6a45ff82e44d46fba5549f85689a6adf523e000000005332d3322b605f274e86a30fb494f4f406efe9faf796260d5fe6fcbd89f9678fe8b6af49ffff001d020767be","0100000045ea41c4f3143519a256b278588afc69f5b92b8241206cf2028ac68f000000003be1034894d479383cd3c68f11f0dea46ed329313f97ed86e119fe38d69abb1810b9af49ffff001d3a5ea2b7","010000000647664f3e81e67246615d00388d543dd1bc02f9875fbc36cc7f50cb00000000d903c70a675ad86e29013d9c285f74802fd47efffa06f5ad4214cf302cf104cb20bcaf49ffff001d2510a482","01000000054e9e30780eee4855d24db08f52fa477b73b2c7120fdcdf10d999d000000000b5f44ff5e3039418e9b4ad195afc00b65cb6e944eb15bc86f31420c8aee12329d3bdaf49ffff001d1a1127b9","01000000f4806c262cd66be04761d5d67f14a0d6d3ee3f04dd0c04f85125566d000000008c1627234a453ceba92dabcd7840401cd04aad07739d8816379c42e8f3d240cabec0af49ffff001d380d789e","0100000082f050cd286302e49a1587765461f7cd14375a5858467556eae3a3b800000000035e9b633e9a7a66a1efc8a2e8f46537220dfd688aec4b399aef90727381de9449c4af49ffff001d21ccb715","01000000cf175529cc08912f97904e81ed55d03aa7642fa3de1b8289c0204458000000005b8e5b212589bf6da90d7dab5ba8b27c30e54ce1793e1572ee5103df161aa41e68c7af49ffff001d1740190d","01000000c02271e66d9cf4770291c7b113f2ed9724ff333b333b80443a5b7d5e00000000b8601342d54a862ac1d116b32a38f98c68369cf3493d61132f910336df70329e0fc8af49ffff001d375be9ee","01000000fcaa965bb8cd9b2160dbc22d0231e0fc7b68699f2900bff73eb6678900000000f218a4e4aa38752d75735c11fbf0abe3878a960802c5eac35c3870bbc7c33e82c0cdaf49ffff001d243126d6","01000000859ff974106291ef7e3d8fca14884e0ba17bfd048a80ed86570d5923000000006d7a9c4cdbba3b41c39452e5905d4c471dac740efbd671caa76bf714f1a1342711d0af49ffff001d2bce2bc3","01000000c4dc5a8553007624c28eb82b83f97fc23cb52f43935091594d01564e000000005e82a1a71d071b6882f4c50c01ea69b1b235ec1d53e7a90135a1c02c6a522fdb46d0af49ffff001d56969700","01000000c79607861eaf20af5cb86c61e8ec07307d71c3e79d10e32c4d1cfeae00000000064805a7985037c50b626a5d8b9cbd17a3fba7d3828c8a1a271f9039bd916d934dd2af49ffff001d157aec10","0100000046827015cfd726a06e29113a68bd733d799d6f75a431948cfb74d11100000000a2118c7235394fd72c481a926a9cc7407636e42a683a7fb45df282c0c316f0b48fd6af49ffff001d23bd4587","0100000074925ab83d7c80cfbdae1321687830f4118c3074d6fb3d8175d8fe980000000081872e7282a2c8b29ec78f9703d1d2f044173c5fe6e90337588ef12b746b83e87adcaf49ffff001d3a77bbcb","01000000ed6fc96b70c6153d68a1707a415a7098c601fc68621b406570a4ed0f00000000e8b702bb3a56b07834c66170f24d8458c3ac440fc4171fcfdf0fcfd64b47f8681ee0af49ffff001d2a6b31d5","01000000befff8cfb646c0f20fb9bcdaf16ea20116031093d7367ac2c34cfd0700000000fe59cc831d9362ab6997c4407ad7202b1e9e6ab814817d744a191ee037d834c2e7e2af49ffff001d349ce749","01000000ebb15522dc1133b9afdc3ed84714a5ac8b574de80d567af643eec29e000000003780a4132559d36e96118d49026f51426f13aa8ccdd4bcce07a4855a7db4f6ee25e8af49ffff001d35fa6d76","01000000d6edb518d1a73958f92bbdb460009b2374c8957665f91ee9b88bee7700000000ff3dc2a997b28e1628639559474db57a890c89c676e3b5d20085aa9dda4a1332caebaf49ffff001d145d5fc1","01000000441bfac54f89a3a3b5f7f4e27a073bc6383e38681ea74253c65c788f00000000ccfde2362ed6bcfecc6131dc8a7dc10743d98cda1747599b21f78337aae5c51412f0af49ffff001d15192993","010000009e4b76b6f17488b2291990f5e16ad033ad0ccf5f89f6ad1fc3c68e74000000007aa790d49239f2c2456443b1f3ef5121351e02400473064b4f37cfc1fc2ef3e06ff3af49ffff001d2cc9f273","010000002bd391589c1bcfbc46461b8effe87dd9b317930a97af8528f2e1a4a8000000000eaefb10964db6b54940daeada0295c6152e60009f6e3cd7fae6dc36bd2d49df5af4af49ffff001dd813a103","01000000eb531105f2a7d6411b4b18d3e37e5d123b3483bdba9ed4f6a019a11b00000000f7cf8472e9c2fac2b5d2125bebbc40e2cdc2b03106808e0168e1a3cd89726095b9f6af49ffff001d18d0a0fc","01000000d616ee339ad7873baf59972757a0eda4e4498d6d7b202f49bb9d207300000000f5646abc4e01d6f94be955b561e4b976e41a9aa107f927704da1320d806963a8aaf7af49ffff001d9c90ba03","010000000e812a967a7e9768f9aeeab2fb869d30290a5a33fd4af1ceae21058a000000005b8e6c8ea73840c8483bcc598393db277ee17c107d74f88368e226e28ca92463aef8af49ffff001d14465a47","0100000078155b7f9c05a815dab71606891d106b74d21574ca1c22712dabc2310000000002e3cf8670d85c5bd9ccc5469ce300cab0ffcd395cab0b81a90a0b288095345abcfbaf49ffff001d341e9d06","0100000022e0298017e09118c1b637f12c192088297590f76810d11f75a8df6700000000c1d4e2225b6da0f8e05b7346a62d53b9d975f6db83dc85586b7300f554aab1d8f1fdaf49ffff001d04164c07","01000000cb54cce3cb560c7b1fd4fb7373e9546eae4d55d54343af6c538accbc00000000fc0eb3b6d58a81737cca8446756b9535660112cd1722d395982b04d317dab4c741ffaf49ffff001dad3e6805","01000000dd1d91c3fe3bd644cd6d8504aa27b1cebc97553effc229acc6cdf131000000004d45d843899376cb803f30883c733aa8548befc416d2345b4a2cca29bb849bba8402b049ffff001d17955716","010000002bfc0d376e060cb0802bb777d1239dbdd044ffee0276abdf8add24d600000000c1791eee9614f1108702ed2f577aa713782518cdc82992f407d1786202f9bf075505b049ffff001d198f6b87","0100000050269d4f49390e44cd7bfcececa2b4f6578a00262aa5726992601c590000000050980ff9e35e82ddfebe60f433ff33b8f714a819b3ff3413168029ad7db0b594500bb049ffff001d2aa78223","01000000a0d4ea3416518af0b238fef847274fc768cd39d0dc44a0ea5ec0c2dd000000007edfbf7974109f1fd628f17dfefd4915f217e0ec06e0c74e45049d36850abca4bc0eb049ffff001d27d0031e","01000000c7f093333e515f6105a40bddb5c5352b8c63bbf75d49fc3f1de0154d0000000099c15d11b2a732ef2a82cfda6c9463943f2f39c7c670f80657369babc86f0d0cc012b049ffff001d1a95c501","01000000a26a36ee8fb8028da013e3f85cdeb89303c5da9b882a39b0804edea300000000539c222738ff77beff7441fd2ace056466a5726daa867e1160415253bc0989113011b049ffff001d1709492b","01000000a30a52ae53a104a3a5862219f01c034c761b8b6f5458fc7ca7129b4100000000c1008c4542703fe12f596e98150b83898f2857869a6d4dbd58ee4b6b9d1d4c693d13b049ffff001d58dcff07","010000006eae16cb3510b35e14d3554b41f7b755eccdec570cf50aa52f9d89d100000000c59690bf4cee8cdf4ed2d1e8c0a8bb7f50960002e4b7f207b86edac76faa3abb1c17b049ffff001d37c3cd2a","0100000087ed0dd8f58866ed3ade804be0ae930cf16afb378d8f12b3fdf19c2000000000e265056a0ab22ab34037aec61f2b5897050d071233f4e29e0f343111ad2e5c16e71ab049ffff001d36fb3bf8","01000000fc9c60d3f54e0ddfa250d05a1a0fb5615db93c813d5d158c9d927b5a00000000fc3f900f206710d5c778ce0a17bba11aafbe21938a230987fb75f74c70ef43be7c1fb049ffff001d313771f8","01000000250b238212031e092b400d378d8545163ff86afbf8242d1eca9a79cf00000000233e82e6c43947f75003a7d2650a322ce04ffa81228bf02ca0c8b21d2b9c84990723b049ffff001d18b9e553","010000007f7eb2f905be3be1f25f6b88d72ceb20a20f145241c5c78f34239be600000000fb090981dab5eda9e4be08f8a049207199fe04e148bcbfd6fcd90518dc30ab17e626b049ffff001d3a3d1a81","010000009c5215acd31501f5d878a89420fe0de4061de05f105ea873890a24d700000000f94c2630e688df0e4c6ddb6e07ad75b1fbc3062ce758c391e2499b9cea2ae378f928b049ffff001d2ce67d69","01000000bbc1af9294556c8c5a3963401fddea008f937404c14413683f7d169600000000d5beb8c2f79477eb33aaa7748b25dcbcb3fb2fda0a587c1a3a1eb1c4df5d3a4f5c2eb049ffff001d3a7bb174","01000000b64cc13ce6b29c5daf3eeef192fd53facdede9a2018a76054d1338b400000000c1e70e888d9cf23c7bb78e746d58d433b2cddc62b2c1557df419dc441d354b26d92eb049ffff001d4fb5e101","01000000d8e9cc88490221d13b38849d1781855f6629d55f94144646fb1fd48d000000001e8b52b1966bab8876f0135af71169df76ba5da5c32e13791162d1b2a5d6e01d3933b049ffff001d69523602","01000000037a34d9e73d13892e6b35ce32b55a246974b7d9a896e8c173f3476d0000000033345688b5b7dd34b8acfc0b9934fb0ad85052b3cbbcf99f5262e480ab75a814c632b049ffff001d01dee7b6","010000004162fa0bad087ca4e8299e26d2d0d49c4a4d3793254fee68de9c3afd000000001a9196bd7af6b700677e487da0686ce520ce52957725058eca3803597daa6a518f35b049ffff001d232ce34c","010000009705d59fb252ea91d9a56567d519de80df6d1a4e6c7f01ba4bdbdbb800000000e8bf86800435066afadd2aa1d46411bd09742343aa9fde8b3b73dea229a2ffab8d38b049ffff001d2fcd3779","0100000042289ea29a23960c9224bfad9589fe6cbd685faa5ff2810cb7115bbd0000000056cdbfc1648a53e5df4c36ddaccd731fd5a56dcf82046aadf3279087f0672c74bd3ab049ffff001d3163b911","01000000da46a7dabb893b5254ce9460e41a562d331763c3d6bb35d47fe422290000000022d5810628a51708b76b525aed60701b462277d2d934e1c13bdd6cdccbfbb8f2193eb049ffff001d014772f5","01000000c0a22f2befab9bdfd28b3a4522804428817780c62131493d81de3d60000000005c596eafb8ae26916a7a4ac228cba9692a1641826767eee27d995e65104acc574343b049ffff001d5f142b03","010000001d63ce887f7c6a37ba033fc466e4c5b98eb42e3e50670b1fc02c6f05000000003de65764f7e596e5230e10f24f34e2b2d4c1154ccc39f04f7e506d99dbbe8d010e44b049ffff001d14cbda46","01000000cab2c8d786d82d89fb61d3eca1e8f2741bc721f9c05ba3c8f30d598d0000000042672c98d2fdc3e0324e4e03706617922e12b4265aaf2fb9693b63e034ed1479354ab049ffff001d281316fb","01000000b38bb766c501ea72f69b01eee10fb4ca2ad9bb404e791cc4199dc97e0000000098a49c972244384b06633c7cdc30d1985cd2552411d3884dc1be35d3ff2c50f17c4bb049ffff001d1451a304","01000000784b7b76f5468b80799122fc043a1b4dd4120795c295e5031ee955fc0000000087166bcd1c1d23d9173748c30173774586da79d924e50897126f0f136571f225bc4eb049ffff001d1b176860","01000000ba5419a7d16cd4d03e86f9c4dcf5a5ec6d719ed14ab1d56e9f535b5b00000000d7280e83b52d4fad686fdec3712db2ad701d5fbbce70ef521da7a84e8559f5045153b049ffff001d8510b310","010000006cd351ff80a627fdc2f4c9ac85ba1fde7f80c8ab6e4fbc8017d6bf98000000005588a1de129641cf33cab7459767c744dd6607beb097984dbcae315f8dd42281c754b049ffff001d30165bd3","010000002f3431f2fbaa70dddd1a687fade44f461aa7c99f36f9d28853e50f2200000000dea5caff23d776519ad0e77d0b7922ce28220ec3b91d1b370eb1bfa6333e32ace158b049ffff001d39ca65a7","01000000ef6cc0c397c8e6427bbd4d71cf5f2e96aa1dea49b5774cdfe5bc61e00000000067c1621e675972a7fb57b7a833698aa01a69dbacdacff5862c43214a0b622596b55bb049ffff001d760b730d","010000007285d9f03478f22faaeb958289ed3f592f23c341de4b0e9c00da484c00000000f25a6085d831b86f823b4988efb61447069d07b5ac29a14ca231c9f03ac44164985db049ffff001d00cbe417","010000009ba83cfe164046dfed8869d7662bcf7157b9fa5a7000a3476a75cc9a0000000030e3302d184821d2c6ffdb1fd6bf86800f266d28aaa1925b1ee68c147733f9e4ad5fb049ffff001d06d33c40","01000000980d60d4778ecc9899ba14fa21cc5d0c4c5ce7c0ff763cfb3d1345ea00000000bdf2e5c5347e1518329d34afa06c414ce92372d199e894d295e1cd6a40fd8cb48161b049ffff001dd2b68308","01000000915afa65bb9af7a6a0dc10fb4aa7736ead8a7f339e959bd0e6afb9e3000000000250a73b4740e6b4ea375e34574115cf39c93ed9fd5886c433504dbd796be5389362b049ffff001da3626e02","01000000a1a56762d0d6745067b0bfdfbd3224631d063cf85bcb4ea62f811efd000000007ce758828e46936958ef383a536f37da666190f563f374a3aac0218d21f489952f65b049ffff001d24526385","01000000969ee24e6f28f04d78be4b0b4070b4556bc9819d0072ba0a6ae073de00000000d7f92df31d5a1ec11a1eb6a126a469a82651b7e1ed813bffae6ad623a8fb8c49bf66b049ffff001d33b13994","010000007243192a9f5ba9f553b9627e0b6056507973a94fbcbb1b1ad5d1607600000000ccf68a2022615bfec3edc3aeef3e1f96c7bbf7dd9361585e59a1b0b466670795e66cb049ffff001d1c54c13c","010000008b1030e20db7bdea1954b8e22ba3677b59fe76cf0c475623b6171cbe000000009ccecdd19c5c161fc0cfdd03e97089c52144853a536a9c40a76223bc8c88c77fca6fb049ffff001d2913e524","01000000cfc0f6b1dea58897e54551309248fa51a0c0e56841027dce08645dd500000000a9476088b085576b2c296cfef02f2623a504ab5e54fd044364be8323f3d8343a7873b049ffff001d1f3e5414","01000000ff18aea716aef6d6e6a4941a95bd3095ac04243cd4201c968903f66b0000000070b3fe5c8d425ddbc61efdeb010859ee1dde96c13b9d0f237dcf2d22c6a5e4c02674b049ffff001dee0e4c02","010000003672e7d5d2da92c349d5d460e248de563d79d3a8df5695a3efecfca700000000e20514a925a0d7f88e75cc1090717790b4d99e473c0370e92b1384b1a62999be3a78b049ffff001d67d40c14","0100000059b697f92fb98438906ffec4f590dde788b605f56c294e7d37424449000000005252c46accc6327aaef4bff2f4078567b66337e00032ed1554a6c8a0eb3e1bec5278b049ffff001d7aee7600","01000000172d35d832b24b1c8635f70124d96fb606330160f26cb04ecf5f210700000000cb1905094eac29eccf296a149bd01b26638206432d5512dda46cadb4add2b10a0b79b049ffff001d40d4f602","01000000bea8c70489c05151fce715c6f1938980efae3b68fd5a602455c97bd100000000090f2f14b20b692d079db1d64729b0ed7e618c4e5915a20d9768f7ea7777375ede7ab049ffff001d30205907","01000000418e4b90f50ced6c7970d5b02ae3b697824950e2de744ce15b26334d00000000f330db0206cc3e9a2c3c3a6d19ba06716b676f6491df3a9b7fa44b0234fd290df07db049ffff001d36cc2512","010000009b59b587e4abbc282c43334b004ee4a51f517bb3a1f34fe7096bd4aa00000000c11877459322b40c3e1b3f5756dd62253aa48d24af8561278b5d22985d5bf7b90d83b049ffff001d242be9a8","010000000a49fb19d7c0ed7727b459b6572585da75f5f16b2464f7f882d1804d00000000431ea193a08e63a508fed0c246179dc8317cd300e83c99c73ee531b460e5dd5f5f87b049ffff001d1d0887ee","010000004ff7abda4ce0ffbbde0948641b044c8e0a8cdff14fd53ded775acf370000000088fbe4d4f0825bd99402d2e612a0a3db67c8155679e42910d395d295cd85c989558ab049ffff001d2ea63363","0100000020aabbeeb6f13e124c19c5a01b26e331317b3d81d0f28d83f5ed3f9200000000434e9d87a50f69b5fc5344d971b22a361075ff3dc71fb0b987836c19590eef62698eb049ffff001d2ef077a1","010000008d0f79b21300a27a4687b2feb2967adfd60ab4326e7f0445258f4232000000006ff530db2b0f474fdf5418bdc9f1f06539f62883abcbf10c027dcb8f8102df5a2291b049ffff001d15aea41c","010000008d978d7f7f33dcaf01fafd24ee59da516ee7322937c8f673434ca86b00000000b8e5c5df9e7f6935554fd3a61eb655f20624c0709cfd30d19d9c46e0a4a7fa392a95b049ffff001d15d1a5cd","01000000b41b20f5aed7dd6b95fa376c224f1b339f82192605aa76669df6314b00000000e685bb094ed287fe99e7af9984c49c82b763763f6676c7098ea82a30ee37867c5595b049ffff001d065d6c00","01000000924b7041daacefe0cd0b5fef27103dbad20a99c996e830255414dd090000000040ad4e42fe93e0006521ea63f6fe3a9fa5114286859f36c0e2232b7bb67ed36d1e99b049ffff001d210a377f","01000000b49cdf94b08b75bbee223b195202c4a56cf3bee3d30c69af08b88947000000000c252d3bd0aa93243cd50a6b70e569599f05c49870901cedbd87ffcc6e8ed0e2699bb049ffff001d399f3281","01000000bd35166c3c4dfe643a8b9afb5f640085ece97ad8abbfed31a703583700000000720a33800613a64ba7757efb2aa1659b5afdf8247e2395503a28c4c79e557b87c49fb049ffff001d075c5a69","010000008932e94548d99f66d942064cbdc5e667d7327103f26321124ab21000000000004498e9b7493047f495dafbbd8e360fe1972e7eeaf7c52fb48bbaa1d13cec8a9f6ea4b049ffff001d259c38d6","01000000fb9eca4cc0c8de5fd52eecbdafed7354f5d3c0005f127d05439ac4ec0000000063db427a861fa51cd09d0e2c87c907c1a929bcfdabe40718c7ef5ac40c9d917127a8b049ffff001da3a2d90e","01000000bb8a81bfcd537dd505166bb16b22a14fbd7ac8d37596b813b36d82de00000000e0477bd929bd919b3cabf87b79606bbbc48ff2f7e4a676f85e575022a54967ed1fabb049ffff001d29e11a96","01000000522db9cc51da24e96ee2d9334a5844e15579fbcb088bb356c56c4b8000000000478adf8dbdbf97717ddb049d38628178b0fa4578495f32b7ecfddaebe2aa46dce3acb049ffff001d32f61e12","010000005868ad10593ead72125234b707249a6c1ad5837d6005c1f9b6f5d5ab000000005d257c72b4b5cc6823288d0f7e7e505ad45b0b4740c1105eb9d7e2cf4663b124c2b2b049ffff001da91f1f18","01000000ebdcb3139eb1333acc42df22ef1f7c73be94ecfaa7d4c1361b2fa0e6000000003c219f8850b7e339ebbec37ef818d23ac911c485f91954ad4967175d982703e75ab3b049ffff001d2482fa57","01000000b85dfa071ef658f2fccc39d5e8d70092b355df69d0832ac081433d8f0000000017f3e75986993b40aa0c31f01c0cd70e7bd903d918733323dff99115aa82be1f7fb8b049ffff001d157b1c66","01000000d6aa8ecc17918fa59fdb4b3c647567dc1574ebb529212a3a2c93fecc0000000085c8f94d5e2bf14c2fd5d9d3f4972e89322b6a66a3c59869b64796129a21868febbab049ffff001db1f93505","01000000ba9c804e7a8130a336366214d993f35e1ea1f248beb5fbc50fe4914d00000000ad2c53d68a12a75b4a5ac5921df3f0a4a16e4625afa8d7447fb80b40a33888cbb8bdb049ffff001d1c0c8969","01000000a6b32d2955716a17fb445f1c57240ca9d4461950be2adf1904fd6ebd000000008fc54917d453376065d7c826f8c1af783f724a97701eb24bc4bc93a94bd5a5b4b8c1b049ffff001df220c301","01000000dca33a242b684a2c7026ffdcf8dfa69ddad7f7e33d647ed2f1131fe700000000fef69956d35e647573f96d8bb36dea5f6b5ba52e25e6708c27465c4314585e0afbbfb049ffff001d18a6e153","010000002556126d77debde04e353e50dd74718f5d59cd466078d464794d2f3b0000000045e1289501d0bd79f7acfcb1b4d9fc4808b0724b4ba4d3f376fdf95d1a3c9b62e4c1b049ffff001d2e3aaf57","01000000635c9ab8f1ad5214a8fdaa8dba4b98a1e9214c325378429713a5053e000000008bc3b5cb32b72c9e43179b5ede365e1ff6a7c760fded2e906276b6eb05dd29f59dc4b049ffff001d21203519","01000000821f72dc7afa9777478dcacccb7723b8918c0195664975cb0ad4386400000000e0f4ba5055cdf2c8d9b36ed6fe7f8882b0cdc9e8a887530478fe8ee434f91466a0c6b049ffff001d08e5ece3","0100000052af630b41c47b8b18de9b82e9316d287fee7b8e7a2b814463d11956000000001606df27561a80c544816d93104c2a553bc6148e849045b11b665cb50a787316b5c9b049ffff001d2b21629f","010000008eb42b4857083559489b5884dfce1171ad6b969c268c6ac764fb15bf00000000a29f7ee44bd13a82bfd33aee6c1869123daaa9c2b082e7fd41eddf128db163dd11cfb049ffff001d36299037","010000001510b279cebece31c3cf002706221dd65cefff68f2cf2389bb9ead5f0000000057d4ad587435ba2aba7f342f6c690aba92074b00ddf546f8fd190f8009397cee2ad3b049ffff001d13f50051","01000000180d6d9c57694e45f1a3d550e2c222844d66b9742ffd098812e98db5000000002c8517d8b849773e5002e4a6fb975f116d5c915050a24f5fcb7e1515518d50b251d7b049ffff001d1947f6d0","01000000c5289eaa8a61f4a7c5d5b6380d5ac4616fd902a3d440400739ae7140000000000b3fd9756986960bd1b23443be31df6c8f0fa6814d7e3b7d1ba6ccffa1716d78ccdbb049ffff001d30a23562","01000000fe781d2d1c746504c6405ea1b42891419d391f86830f2639cc143b9700000000034f25ba7eb3a0d245335166ae87cbcd600e428f5553d71f9649d2baa878399a09e1b049ffff001d2148e71f","01000000c6462bb21d9ea7e724b78f7b591ad98046e2c8d3159825016860a1980000000038f340c190d7de9913519d83c24f1b3be3bf5e555025c57de1b1627a49a183d52ee3b049ffff001d3a7aab6e","0100000075ec267529fc6ca8ded5415e18b810e6d779740b1ae5d86dc5502c8100000000cf14067a4cca2152336cab75a1d4cb7e529ee0205229452e27d654e3d1aa0774b0e6b049ffff001d05682d45","01000000de09e75932c4466fe70b98095ab89304afa3f1c7101f213ef132afd400000000f029cfb26c96bba8f975c7c424ffb7196c3e9d7b03b704c9c0457503cc28248e94e7b049ffff001d15db8103","010000002ea8bac11bc34bfb9b983f96f75102aef33fdcf49133fb6e9c40ede000000000bfd64db970d95b8b63fc69bf14748b348de4bab24a3295e8239b1af831691c3dc6e9b049ffff001d359f5d03","0100000052bf6deb312a31f9711200fc7b1cf1082de14aed16a533bf3f4acb2d0000000094acf020152b9f572e61dd0488e38a827e301f7783cff8254d4609e8313ba3c802ebb049ffff001d24838eaa","010000007b64c90b76a28d1efc4f2f8204feb92c58f825b9cdc21e093c0eafbc000000009cf2a1d9360877215d213330235ed22690e57761666f7c40ae09fc71d51bba078fefb049ffff001d33f57ea5","010000006b0285682d0e7ba8dd2759ec64b3a1f4754c32b7574c6e79780e1c0c000000005a36806c0b329788c43297f34f88abe951cfb88058ca866a3009df5d056b00cf28f2b049ffff001d21debe55","01000000aba17fb63e471dbdb16bdd8ad79a969d9b74733c8857ef5291c2f713000000008e7b932490c9cc7aa3f77c3c2ad641dacaf11ccd486b0e51f48698670553e8c5bef7b049ffff001d1b3c0d1d","01000000b28d88feba9a3d5eea7dbf74978709d5cd91a89b1004b47f5965c092000000002e06357e35257f841ac8eccd6ba9e6b8764fe41277f6db076ed1803d388e236e5af9b049ffff001d55a09606","010000007228b8f5e89d33d5a81264280b927df137c44337cb5da839cf465fb000000000e40e7bd2f38db80282de87027ab7e2f3d4761c368fa89d5a8b562e76f0a356d339fab049ffff001d00944976","01000000eb3e1439bd0dfac5ec95987868fcb592f71dd3a7a0fdab6ad7b56a8a00000000c0b99d7aaf2c75aac3ef288b05687e55c069b055d3ef07ec82cd1f6fbd645cc9c5fab049ffff001dbce1c100","01000000dc8f437c74f789388d9b10e9a2d94ebf74a4ab82f972721f64288a8500000000594c3d9dea421d91526be74a21f7ae700796d34c6dd76042462c250a4c0a49cae7fbb049ffff001d05bf7304","01000000dc224b8e24eca440a8af59e35941b3a3d298817e72635ba6923dd1c400000000e1a2721649cf1178c24abf38cf92356f7f425d021df7ce1a3f96eade429b9bb054fcb049ffff001dc2fb0801","01000000cff46b5223951bda50619570d2a64d9bdfb6447488ac90a578c2c72400000000b3bc9ed4df7a878925d825a25aa5cc4da677f4e3d3a45cb9b9e93515c52e98b1e6ffb049ffff001d1a0ae530","010000006ef9ab8f456028bdf9e76730cb58f3b2c305fbc2b22c30d27bc2dbe600000000cdd15050c9b4e0d92caf2fa892b59a8fbeef00be672ef9c8fd54ce8db3d0e290a302b149ffff001d2afe785d","01000000a4500747a327b0d2d086e4208563510e2fce3dd0ce848f49a9d0ab2900000000eed2dd178c959ff3e30aa3c908684fc5082217df07a4d1cd3d63a251c219d812e805b149ffff001d1bc05c4c","0100000008a9ee13af36642199cf6884651d0d49379b3344152f603effd8176c00000000ff93e0eabff4c712a957f95fc60793f91f35acacc97b6779bc133d4d870eeeffc506b149ffff001d2628bc01","01000000d095c812ffd0dc177904009ee59c88abf25a6410d936c4f74b6ff328000000006a59acbf069f35ecceb2d9b8071d919fdd21660d966c9e7f391798b6bf66cb168807b149ffff001d3a8416ac","01000000a1bada90333c6beb971b7756f66b489afc8e66f3a911c7f96c11324c0000000019521d64df2bb594babde6e64e87deec5adfd7eb3ca5f22e5aec2a1b2a05843f150ab149ffff001d13888e14","010000005013c5d531f77c5b6f1193d924373d78778cde1ef021299b75300eb000000000d4de3f2a53ba9cafbb211f0efcb563ff7aadf8d67af3852ad140c4e556914813190eb149ffff001d32110f5e","01000000655229bebc3b3e0718af54ed1ae56181c4beadea8ad2e2486ea85c69000000004c64b480b50253068c21f5e880195da78ad1c6fa72c0ab6914c2df3f08acb318b20eb149ffff001db0cf4001","01000000ad9d647bc29f5247674816d921e22065c1e628800cb4d2ed2404f42a00000000353b1b2c9b7cd41a89c3f5ceaf1138c16fd3142a0da4a77cd44b630391c4251aa610b149ffff001d073b9e0c","0100000035d2e4199d63ec60f4154f3c060e3be22a0338b541c38fa1b317e870000000002a8ccf7901d283127d7306dce0208ce615602c4b55c92c8ccbc122e3f89438713614b149ffff001d02202102","01000000d8bd3888b8a44fed0d661fddc105b1df4a0f570e118afc20ba07ad2d00000000b157fcfe82d51ad661dd507b9c6873b853373bed16207d2aeda41dff64bb9a6ba518b149ffff001d2268b539","01000000012942ebf37d1cdad741e2d016bab6509e44bf716ce4d302dd49625c0000000010743f506ba21edb438b04a636bf5f82ccc1af491368fa8a5b4756bb82348c46e51ab149ffff001d16bc5ef6","01000000c4ca9aa7b23e198fc41b656b1ad0e5ecd154327784359bff3fcd752100000000c663aa4b4c0794ce529ab256deea54cbdb3788ac47007f13fe59888d15f373d7ac1cb149ffff001d18b821d4","010000000d7086f773cac1f6e2df3a785dfb7123f79fd15e13eee12a9c66d9c9000000005da61d26d2845bb1e9ebe3c4195d1c1b47c484455c72b3e9ec1b9a4c75d686238d22b149ffff001d07b2062b","010000004641a5fb1ccfb981aa0b012ca8ae30bd2702330d6eca183e75f47ac900000000f70acf23b16d831374cce4137a8bb99993abfa26343f48a978ce275c043b00636d26b149ffff001d20b4beca","010000001376f63ce784eb7f1a8c787a5bf21529f9ecbe567b8788478dac883400000000832c038b5937fa1ef93448ee0c0e05dd6caa8f1680d15f478dd653246d1434c9c12bb149ffff001d206acc11","01000000d1df1ae119c1d3b23edbf8df67099c3ef7807b5a0400bf5225d84e5a0000000022ed83d1de8b90966e8478d24521733c26082112ab819e6e4cbf1b3cc39ba4e41230b149ffff001d1c7e505f","01000000764a34649d85258ec27d2b9e904fe4dbaed2f436a4519ace3f15bd86000000005d2d66da0cc63899175114a24b89312f0c74277844da09ae6564e640499e29916530b149ffff001df70ecb00","0100000070a30663b541cbf7e24db7cf23e8a1c205a223e966a035d9116f8934000000008431ebad25819f7badcf22f32aee7920e5af21208d4804487ae5baca35632f44cd31b149ffff001d26c12928","01000000e30dad863be555b24f594076873dfbc19ac5673a983bb44a59677fd500000000ee0b8154bca36a5353030de263bd77359eb80cffdaf7b262ed7ae28962080a880d36b149ffff001d09500802","0100000069d9df9c982f4aefa481a57a63b48ac4cc628c10c342931a733314b200000000ec5a0eb2f61008d409d91ec9c76cc1c32ef9181d9aaf01e83d0e796c0f1cd8c18035b149ffff001d1837a7bb","0100000083b8b53e14abb1f74f67da5a524177135089a0e980c3504316a6ed7b000000003a365b66294ff6f16e25050cb79bb50613f85e2ef479aaa0cd87c5e675e848ce4739b149ffff001d84a80912","01000000a10849019ccbc2e3bc4a0a6b135a3b6577e56c71486a2c4d5b90d74100000000827ce7909256b9cbe2fdc2d90343d27ca100d2778b3a5774566f25c13d6ec1f52b3ab149ffff001d23429000","0100000051202af69788dbba55c10f5c8270eaf8efabb4d3acdbfc49f5281c7900000000d1e75a6d3b43351b66f251cdf074f558ba5f7b11f3624eb6d8381e3d2faee6391f3fb149ffff001d03a8774b","01000000fd71db4a9832444ba642b5b51268132ca04e8137742240447cbdd31b00000000bf0734aa08d09fc51924a7bb54c15610740ca738777728123992b1d79d5f673d2443b149ffff001d26666613","010000006bc53ab591d5ecdb3f229b15da576569581f3e0d8ad02dfb8b0aa60200000000009b1c81aaa6a1dd5fc500f9c20d2612c95ce6963ac3d0b550698057cf52c1eedc46b149ffff001d2afbb4a4","010000005ddc46425632ff587b69e3d4e1f7da21cbbcd67aa61369ebe60b632f00000000aaace172f4c7cbab2056417fd91d01ab92306dc804075551c0fdd5d63be1fb6d104bb149ffff001d20b1c07d","0100000008df7c8ffa590f49f5316eb1713879ccb696d3f5e3d4d8a9eb85017d00000000cc094215dce04d39fa1dec87657036489ee2c657ee07f1b2c54bbb443ab0f289964eb149ffff001d39be7562","0100000081a5ab109457d35247a17730c94924b3baf4e371e9ff3afa987b97be00000000372d60234492fa5ae81b0f7901911390d02f68662a75db044ec54732879c7e609d51b149ffff001d1bc7c38b","01000000f18f15ea27bd41c439055cef128cd3ae04a3dc3c26afbf1d03f559510000000048d77c4d9d4c648ff0c23436390e1cb94715dfde126ea9c8423f189c9796a18ffb54b149ffff001df092480d","010000000a5f8127fb7cb0d4c832b6a98799e474d4d476f364efb22dc5dabe0d00000000bc21d9eb3c91ca23508a3e545c9e4b846a29ad1c8af0659d82a4b85240be41dcd556b149ffff001d24a74f0e","01000000ba4df08ad53c8ea0a01dd6f4756582531066c28b64c40b575cb9631600000000022f6c29f372c379185d587d0ec75666a8f5f65bd01727db9c33d688ceba9e3e1b59b149ffff001d189187f4","01000000570d59d87af5c682fe6a0c19ac4a61def854edc68be73888eee608c500000000537e512181e0b4db33cccb97ce41baa8233ecf8f807d81fac93ffbf6fc19a257795bb149ffff001d00755ee2","0100000050cd1c858c6063c19c77344732ca10ff399ce525ed4e67e6141d728d00000000079e48ba34ac17be218285a0ac0d85b3532cf9b284db7512e13ecb7de1e5f9f68b5eb149ffff001d082f18e8","01000000d4935221465844dbe92445ed7fa45b87d7c08184a1e7965a6c16723700000000b0efd47888bdacf908c52e5a75ba7d99fca1846b85b18d10b9f4bc5ee4cb9b52d460b149ffff001d021f0ef0","010000002af39d85329d791a7445cb7838a9b13bd69d1d7f3f5ce382b001230e0000000046ba525d757de69a3e58ae5a680bc01eda37afde960e13860c5352412b5586a2a561b149ffff001d27f9fb02","01000000296891367720cadb25a57de45c2a56463f186e01a1c63d5596d3e26700000000e13814a3ccea3cc0c6e9c0ab77fe899c2be72b1fca8cfdbcd5ff7235988306734064b149ffff001d07d4fced","01000000a89de1cb589db7db3714324a10a49f33cc2b9ae847e5c66b9250ec4200000000cb7a83abe36ede0cc772633fb392a65b33be1a4248e370aa173f1354c060220b7168b149ffff001d2518ce80","01000000195d0855865cc1b7789dd9b31d1d5356d2e9446e434953a1feaad9e00000000041963e5044ab032e117e3745c880fa72d0bd00d7bf967b5e2cdb2b9a4c3a6266ba6ab149ffff001d1720f768","01000000114ff25e1237e554139ef739554510f14d96b2590f6b2389606ff98600000000ba046c28d75c4fa3706a9d5345d2219f52953cfefff1a5426f5ac3a23b01c39cff6eb149ffff001d2d82aefe","01000000c0ea4de281a5a31bea0d9b5ce3e833fd3f89b3895784cc8f5343625b00000000e1036d29f3cd11826b0123f9ef38895d3d843b830960755d6cc27d2e22c21673216fb149ffff001ddb590400","0100000090924169b07aca3cf99ee3392838f6a511ec8ed76681b47bcbff647e00000000b007db23bf1fad01bd6ff25c03b5226d3d3daabb143cfa67c69d5a23d852034e2974b149ffff001d38925e90","01000000e2764d0089858c7a3af7dff3f09ee7617a864dc2947cd7726a50650800000000fbb2c95800ea261ec8de34b87435acf4afe80213d08fafecbb74ee1c5ee115836676b149ffff001d67f94d03","01000000f944774b2f0462decc10da8e8e1678ee94a0f729ce5866ad000c086900000000e11e707e3569c40025f1719764e3c5d948ad2b5ac37b9283c9e0a033bd682d712c78b149ffff001db1b9f606","010000000d6e885207960cfb26a2314d0cc6be1944a660c50e00abae2086c1280000000095e63d66cd093591856748859ae240c80638e434dcd775834c0b431ebe99aefa3279b149ffff001d0317e92f","01000000243bc361815049391547ce9a21f941e915dd59a3f321d7790d5e6d17000000003fbd491e69bbda4df1e7c8d447ffa5c387ba6088d9c06a2b443d53522f0b9db05a7db149ffff001d378b0878","010000006c2757efb5a86d0a9679e65d9017b46de5c4a0f5b5eb516c3a1281ce0000000019e17715fa422b4783413fb59cf1d90f9b5e2c6edf685b53450427d954e36cb77280b149ffff001d0689f9c6","01000000185ad94196a4fda482b308f97629216b8862badd123df8518c9546e7000000001b50b22be0fa6d031a3c5cf8a04e573abc6ca0390b90cd928d0ce738c75696bf5286b149ffff001d16307d20","010000009acda233bfb2abff1effd051f91e06ec4bd3c19710122b89705fcdb000000000f5f8dd0447ad584b9e0d90cbdff7481553ea79f985289f45d6dd19cfd9efb05dc98bb149ffff001d13951391","01000000313693091143ae94fc6b058ec7025181887466ce6997adf6b8016da6000000007b15584336bcc15453a053438f979d8c9fe91eb029a9df39cc0a5b2e2b4b1d5fd88db149ffff001d1b555885","010000000589890e25364b6fe04c71b6db963f43fd15179fa9ea94ae0be0b25f000000002b33fcbb4a2b55a94100f53be3d7b6781c4ccb8e47e8ec98d9dea3377ffbcbb9a592b149ffff001d0376aedf","010000001c08abe579f75839b60be68cd0cb31a4d9a310c16bc5b2d91c69208c00000000f159d8096467ffe925ad3bed06ea0cbb6611e3c2a69d3979df842ff98a80c7545694b149ffff001da5327902","01000000d423e1271159a683806968730eb3290eac200b703481e8e2648467b300000000c11f2b0a83e2c081651736a210151984e1a4a4f1b3c89c9bf4e2448e78a305939694b149ffff001d31f3f800","01000000181bc7c4316a5feb6ac4caafe5a3c320ccfbb4c9ded74cb4527ec20b00000000ecd778a6bb3da04963038b3c914ce90133cd6de35d0b0656581d3b1855982569d897b149ffff001d21c8b877","01000000f25310cf064e9671ff3522491f9806799c6f461d8ca6f3af2853994100000000a4c79a7f526dbf74d124fada846377ec1004720fb21f25710432f04ec3f732dbcb9ab149ffff001d180dcddd","01000000caf12b0f3ac89b529e07231c437335e5a5c85680db0a3c8b96f4ae4c00000000114a5bd5eeaeaa6e5f714ce9aea3a4d89d70e22626958c626e2fe085cbcb7740d29bb149ffff001dabeefe03","0100000048d5603850cf4b66300bc47f374b4924153786d0507abde0ce519046000000002468b1a681641d834140e05a35e63f8a1127fabbb205769d798b5a29b0498824bc9cb149ffff001d66956701","01000000393fd81bfc4dae252bcc0cae651d64a0fd3b75e7f14b7eeb6367a9f3000000004507259a753845e45efbc67bc4923490c8ba5b2b2ef9e25248864cc63db3fb37a99eb149ffff001d3a52742b","0100000054d3b72fe8e121ead6d3dd46dcd724bc0072f867bbad1a139f999708000000000f823e9db2672dc458493d282aef468cef61724c75f0ed915a3884723507f8544b9fb149ffff001d4d2d4002","01000000230715126780b81bf1ca474f64a0335629ad9ec383b06980e919824c00000000a6354c52b431349d4357dde49c85c741a987291d6f72c256da081a5cf6640ff462a4b149ffff001d32cfd6dd","010000007f3868f0c3d8a30e6da2676f9d79fdbc4a175c0bcde5118e2fd73fa200000000302f0dfe5e007231f8e4eb15f1278d5f951cdf8316aa2777919acb5bb56f154bfaa5b149ffff001d366d6ca7","010000008be070e0e8cf9203c9c17232c7e31eb2888107fa57778da9ab3c9b24000000009fdc2ffc688afa526fecc1c2e42f7a4d22d76288dcbee4f81d1224b0a903c1d2c8a8b149ffff001d04b037a6","0100000045a4c0a9b319dd3b4970213386b1c3409bc1e8dab7c5389005b808b200000000edac8f68220e5d861ee70ec73dc9ecfe51c76c8578983de967396f68a55547e31cadb149ffff001d2caf150c","0100000030d3f3f5fcadc01de499e3cf85fb5fa59cd2b78a7e41b8866ca04d0000000000abe818d20e918670fe421ab91b98e1770c89e38adfdf1e20ee05ef12dcdf024919b0b149ffff001d31d8714c","01000000c05161431a2af64c78ef281e16b116cae099612bc4e442e53eea818d00000000a26b840ef8f2f28a81947c5d7f338f5dd59182c25ad78ff008d2159e93f6262a71b5b149ffff001d24c9323d","0100000047fcad79e078a20ab046194abbf9f45ee34f54ee47cf0695753a470f000000002d806285fc13c5c9a8232667e1660868d1fec0a330e2d653aa8fd6e74c9ccf6550bab149ffff001d35cd75da","0100000047e307c397a97817a0e8cacc0a636251edfc68c4dd2c2194a178c85000000000c9e423006c0d4f4dca7577d7ca09e9098d3a5da84089966a7f889af9d4c69cda0fbdb149ffff001da3d8cb01","01000000fb73ba0ce1568ec9f8c2a0abeac2fffedaffe97b086040c0787c0b1900000000508978e6f38fccdc45d1cf5cefc81818199960878f505066235071c8b8431ac6ecbfb149ffff001d3884b920","0100000057fbb97097a1bbde9090aa6d64f7ea848f7eb730dabfcb4bc12847ea00000000acb9e9ae7d7ce1c485a65e853faea19fda130db8eb5b7fca1d7a65f38cee014bb1c1b149ffff001d3a68ff1a","01000000ae79e9763f0e85907d3864560d224bee04814d671d0723949aacb70a000000003aa9afc9ec79eb88531ccb01e72e0e444616d74b2ad638ed04d623292fc3d4d41cc4b149ffff001d29181682","01000000fc09ffbf5341528b9616e379171dabd5f0964935acbf37d57c7a0a580000000098b74c14524a35ea7a15b127f531a6825e46e18f99589d7cac885a77ef008d6fe9c8b149ffff001d1c874759","0100000029298ceae56cc91ebaeede03948316447bf19b7167d8aefc3943e6b5000000006e6366aac15b9d2d777652b05e47f4bfd695fbfdceb302c6905bdf12aa937b24afceb149ffff001d1481a48f","0100000049a8e593459a53981d5395b57a8979e644e5f3bc02934930d8b96bb400000000e7e0e65f38aacdb04da6e5f760ea68bef0e6f6a966d3d4140dee28b321f02683f8d4b149ffff001d9e734104","0100000078536372154d0699b2d62b590da82902d15f5e1586133af0ce4cc57f0000000058713daee3013dd84c9ad7aafcad3e8f64897efa9f141983ba029b9a6cb2c3d13bd3b149ffff001d2dada1e2","01000000a0a432e912142f774bf9e15d9d2e91e2aa499e22f8b3d8a0fc1573b10000000002b6d40f7b85d92265f57c16ec0b45640e64765e1c5c7a8b5205f71225e88777cad6b149ffff001d1dcdbead","010000004117a665c28bf85ef9d7b96ead5b4030bfe358c069a9706c1db2bd5300000000d5a9966b6be5f769984ee88b0aa22c0d64f4c763c0b0fd7dd745bb0674801a8127d8b149ffff001daef76006","0100000008f2ba2228ba4593387e57cdc4508ed7fd52f1db6b361c269ccfd5f400000000a9db478a78e6ecb49c9fc11c618f4b7852043b448f7ce214efeaa775e8e4a85e04dcb149ffff001d382988bf","0100000000bd292e98136fd72137fe6684fde18cb85e1509ee82edab9b60a0f200000000087533ff2cb595636d000a3ef62547f389c1d121aacd3700db815d0cdc2df2105be1b149ffff001d1ed854af","0100000066041c1eed11e0ee9cc03786a50402ce14234b3fd1168abf13cc802200000000e4db2646cd15b0ccf3d95e8778772da44d93f523bb87197b37b8c9a6aecd6667b5e5b149ffff001d32072a60","0100000047be07efc507fa4894a5ffbd1c3fb5917a35515e607151dc6f534b0000000000845f5b9f6a1f2e456ba795261c8dacd6c46e2c01f2df939097c6282a6778133197e9b149ffff001d313364e9","01000000f176a83fc2f36dfbb6b9a48aa78f8aa52be8dd9d702647a6a6f526c3000000002efe058877bab9614cc4b9cb4e7db5ca7db890c3ccf537395b98aac3e7906741b2eab149ffff001df53ae201","0100000099517140651357654df9ae6f78fe32ecb49f1f5d035f4bfdbf9430ad000000005cf5c80d013693b3b7a440dbc5fb3694f3edd4c4d59e5bf2aa0c62b3e759818dd3eeb149ffff001d34e4ee94","01000000b776b23b9017bfbf319aefd40b2e5011634ab7600ca7841c1da3b30c0000000008f1dcbe69fec383572a3bb1c5fb2dccc10f1bc7049320a3bb732d58cad297e377f3b149ffff001d1bfccc9b","0100000022e95634e398122fd9cf09ae0d09e3bf10b04e82ab16af2ecba11b6f000000004cb4083ccd702726aad620eb11c81ae24bb4549eb9f6292d38706e5dd7b6923e5af6b149ffff001d158e930f","0100000028e2325379a93cf9a8a37bcc0af1a12d5abb907670a71c34b4cacbd900000000c5ed14a22946cdc3af0362a89815b6e7a1663916c814e367079d111b8ca4be7dcaf6b149ffff001db42de201","0100000009e083cdc77239f28ef7dd98f9c9ba05ecc1efda9dc26dc4697e40770000000099cc8d3c1e0dbc7c63a51e9ef02f70e38610532b6f2e8f80f3bfc1659e651b1525fab149ffff001d0949ba60","0100000038953fa4f032821517e8cfc84936e1f1f39a75be6ecf51fb0f88b7f300000000eb03cdf8afb4b2d1cc07b0da3e6621256a27ab9863454e40d464b2a8b4cb76d16efeb149ffff001d3a9133f5","01000000dd3da123364ddf803c0070e1e2e6bc846d96709a53e5f5c94a6679ac00000000ba8b082dd8bb982750597f03efff439be255479022e735bd0677b075c04947f1b703b249ffff001d06d3622f","0100000092707c4f3d2582797a5f5dbe41c12cd7c2309933c2e61b30140a332f00000000e1c4554d5cfa69d474cc61ff6f3900b7dfdea95c549066ed2a4416aada50c51c5909b249ffff001d153d3f51","01000000fb2946738ea3414d77cfe0709d020cd4938ff72152d585757c8d4b9300000000d372f3418d855305432523e9b642ce0773fc0ded981a97fc9705b73a3f63b4b2c90cb249ffff001d22cc4a16","01000000a4523ef332ad5686f421f10bc62898aae40c5c8c748e2728609b2e3d000000007134c774fbda5979b086efa630c843fdee29ce2e0c74ca21520cd889e10894e92510b249ffff001d07d7bb0d","0100000023a4ff1f0182b49db76a8f607b6bd13801b2229b6715dd13257a46ed00000000cb3a0a4b4ef389af630295936cbd9e1e8e8fccbb82a5d6d31e5d1bae07f392e61411b249ffff001d2df19c96","01000000c960f64c3eda612f04af7ff38b27a9cc6c20bd91515e6a2a9b55d83000000000427abe72c512a005f65956a2de8982149fe92d88af88d8f332c0b7e66c03dd2ee213b249ffff001d2bd51f49","01000000cd8cc81df9c3a4bdeee04bf1f421bd0c6691a6746d29a8b0bdfed7d700000000fecbbd7f761a16c706788b5da9986bc9c15747f11f2a8adf0dcfe9c27afc80017715b249ffff001d81ac6506","0100000054b19b56ad070a7e164c59da7b498919e2d5b309666648acafbd2c1600000000466c34a4bb0cbdfb1460a5d059edb9fd41d1d6f5bd964a9f3f423f5bde28e1a77118b249ffff001d34e7bef2","010000003684ad6046eca421f84d39b81c7480a8bafbe5f88167b9b32074c73200000000cfab0dd209598d03a72c05eb1e41dac78f07d8475c4662204c309347c5425ed9cb1cb249ffff001d32062f55","0100000070ce2a0c56bb40d7b008774dae7d763371b49fe930f5570ec72cc2960000000078da8057b14b01d4286eb2f920ff63a9918b6726086989dd9eb700d4a01cfac2ec1db249ffff001dc7244905","01000000104fdf07cd5d97190919ca06d4e5bc1a119e9e3a45400f43fc160dbc0000000001935652b14eea6a2623646e0279eb456e0f887479ac3eb7e6e601878447875a1f20b249ffff001d22705fca","01000000aa93f7b158550b0f22f8abf02a694ced32424fc09ef31fd2cf3b1c02000000008f300d29deea21cbcabd987a3c904693734ecd949cada1a2f51fe2fe86c7f7b97e21b249ffff001d2abe0d43","01000000c1baa8586e713157b9baed7177d5b916fa50af1d17b0eba31fee76b700000000ba58d325d20a4b93795840bb62e697e81970988b8605f93c3ffbb7056fb409724225b249ffff001d325ed03e","010000005ef620e61decd96dbdc3655790be487efb708e16832b6aa956b9fd58000000002ef37f47dafbef148a6c43b6b8b5318451e79b5a00e851b67c2a917bd90009677b27b249ffff001dd0f16a01","010000008f3e9e56294a00dc5f54e14bdfab0194ff4fc977a4928948e61aaaf300000000f2b4acb984af536481bc719310032151e637a72590e8702e46212ac01821681b7629b249ffff001d27d9be4d","01000000afb631d9119dca1a1b272bc37c73febe83a1d63952e9685bde4127b0000000001cc38236a711d2466da8b992f1629fae1ab7e1667a5d54f680c3562a5fb9ef7aad29b249ffff001d66226f00","0100000041ae15ec1e77507a5158e2d31c6f1a13dc2e557990056791afe052bd00000000bf7825570555374992f37e27697ed6dfd5f286a5c49324e7b612ee99ae5fa386b32bb249ffff001d50149404","0100000053b2b07474615370f2cdf1c15949bc69b2184a29c545b302c073101e00000000ab999689d5fd200c5b55080f4875408a229a44e9aa196fa7a3eadaf73179bf521e2fb249ffff001d14d0d702","010000000e3a220ac26f0d6bc4ab0e90df6234176a2dfc7378dad18cd6f51ba900000000396fb5a8639e4bbbfb04f0437858a566d634c138f18523041c0362a4a5f596ba3033b249ffff001d26f5767f","010000007707f6502fbff8cdebf7965607f88b0b6a5122071e0c963597c3a896000000003ea43a924712f2cc122e056c048001a35a4b6a2720ee0fccdc68449a15ecf5562036b249ffff001d1c700e7e","010000007afce5e3b624913acdc018aab507bd0706aff18174290ad16af2d0c6000000009c1468ffcff2980837eda3c937ef290c84a77e91053800fc83ec3a8473b8862da237b249ffff001d08ac9ace","01000000bb97b3e55547c16c56c81deb7545df07403e86e1bef14224791d39ca0000000041943b8f164a8ee281ef5b8bd68e5a91e3e1745424dff3b58107b1382e73d158d03bb249ffff001d2879c42f","01000000071cb9a7e8894e3c30c822f31ec409dab0093d4bf98d79d8abf099ea00000000c44bec60954b27f51aaac58cf29fa6bf3fb56f957b6693f9a30ddd5f72947415663fb249ffff001d003b8e0e","01000000b06ca87ca32874c72d788afd6a0c2554fd49c17adaa87e55ee8934d8000000008653db9e1d6afa4e079a3bb0da278a38e2a668656e0d4fc35d0762c3dc4a8d88ef40b249ffff001d1fbe5307","0100000023455568464bdcb059ab006c27355af3a524cf9ef4f136f97557b266000000003a101c2ef74b113d9425ca7686169f5f38b2d5df4fda11f28a72c61cfa2916722643b249ffff001d1fbedefc","01000000330be27df5654a91e317a14bb58493687b20d54e3b97d6e7a897916400000000687fb4c2b04c8da99538aba52ea8a08658508b98e4601423efff4cb4c4a0abcf1047b249ffff001dfa7bd712","0100000040a959ccd9f9ce21ed00cd3657f10bba01776b199b0903a749e6fdec000000009e377c68a349554d7b783fc4367c65a9830f6ae2662281f7780f2bf2e7d932464647b249ffff001d4e32fe00","01000000d9badfcd568e85e57d5f4848d1582a2c0161220ce4fd663baae73dfd0000000064f83fb41f1787ba854bed973084fb21dd0c5c720ac86a84dfe91b58adc7b642ef49b249ffff001d3a67bfc4","010000000118a781943dd81e67b077f009e015535dd956cccf204a46a5ac6f0700000000f3a5581592ae4f8d6a81950a8da1ba8d4b5b875aa9bc6f3405d874a90df496c3b64fb249ffff001d352126ef","010000003f09976be998eb10bdcec7bedb5e2f2c6112f909cd1db9025e3499730000000003574b14e7772a15427dfa869cfff2784042d32f2356ed9e9b4cc22c3f9bcc8b1951b249ffff001d3831f927","01000000c61c97f4e252f76685c4c8b7f1dbcc4661050075c680450762eb6361000000000c2bcbd62a744a004b2dd039e6553ee2bf83b5d19618ef90de2a7fca7e8bee497e52b249ffff001d8adea105","0100000004d9addf3a16090c4ec4941cb3733bf92e346846b4628144fa4ddd16000000004e6dbfde95fec88f406cfe130fe0ae31f76bffd4bf71f15d6e5b73dc604aa8fe2855b249ffff001d39ec9048","01000000c1af81c15e87b5e779adb0de6676df9b3b3059dfbfe732d79545720f00000000b370b71ad192b0eeb71efbd6b63c9179e5c88f9172be6bef00de682d13cda49d6a5ab249ffff001d388717d6","010000000f0379199c0e06c70acb672c8caf1f4447c70a1df25d6858c9891064000000006605023f4d4e932ef43f3e9bbcfb4a9f378f9b6b7a441a35df4c68cd49a99b79c85eb249ffff001d3734867a","01000000cc71168ff8a10d27800ee5e34830be566d447c5576c38e3dfd40af6a00000000777cc9600f0bafaf57c00b6264c632621f6fe9793b9a6b46a5b20f026063866c6861b249ffff001d2285d56f","01000000a6b21b06d4717be53b650b43f251d17349bb8621ea59d997a90d4e5b00000000a803909892dbe864df8d5b81810e9197aab9b6f5aa0e41e6fedf70a781246458d665b249ffff001d14b9186b","01000000ed3f21d17f95fcbcf52a16911a0493a0555af01af022f0f37e1b0a9000000000407a41078b8ddbc9589ab131fd405d1ee3ba001cd66fb9c62b05a69ca098b4968568b249ffff001d26738e61","0100000027aa8365c21880e11d4ab25e42e11917405352179b04c7fc6024a88a00000000256e3ddfd5e6e13b903a17eb89b91dbf37d09f6e44239d988a75a5d5226ea310c36cb249ffff001d08238066","01000000c6e376f35ce261e7ae85ef160aecafe71a7d3130707e182195e64dad000000004ea77e0fecd89159ea35019c7832b5fe86ef7510ec9b7bc6bd23785df62602934670b249ffff001d0b073d0e","01000000ff181fcfa83dd960d125016923c08926681241560ffa51be272e01bb00000000c2c049d7b75c391d60a3dbf6801fb45822c499944d9dcae97168252c0e4d880cb672b249ffff001d36a4248c","0100000089a7da36e23b0548ff584b8d1d3b383d1c61b181cdffa7c8a0a68b1a00000000186da1b62ce919d4c85e10373c3e23e3f4e52cb47d375465d786e4589b1acb62a877b249ffff001d19d162bc","010000004f3e0bc6fbb561e5159ed22032567d1db3b0b88835afcbe6d6225fd800000000cc128a369490819041f76b74546af403966ef90b4a52e419f279f2fcdc171f101b7cb249ffff001d2598b70f","01000000c07cc2bf6456a5e86476a16ce874d849352ac67a9c6e39c71764c14900000000e1257dfdc36c6e3a9537ee36c3c155ee201ef5a53e2ebe5bc27750f090eb4d63ac80b249ffff001d2769baba","010000006260ef88643e48d6f4c738185c9473de32ce25370731154fba3b2ddf000000004d0a871fcba63ebbb271b1f6f6d5b3c15e0763fc05fd1f575ba60d474c3ae68d0586b249ffff001d1cdc6e90","01000000115cc4168839b595bd49acf5fa5fdfda7f4b49e3c6a3bad6710fa19d00000000bf4671b198d7db1e94cbddc78a271c4e0e2a78174fafecc7bc7e176ba2aac74a1d8bb249ffff001d2de9ac74","01000000c6467d4a414f69a4baf293bbd3745aa212777cd6911cfc128ea7766a00000000a48dadd32b949ce3be9a5236e052f77882b5ddcc2cc02e5035fbdab0e35c7758f78db249ffff001d0563ed95","010000005121cd74271e2fa0087a7c94f9960d0459b9026c9d15592973cb8722000000006bfbaaed8b05d508b966e37dfa0bbba621e0b4c83d7555aac7ab2e197642d65eda93b249ffff001d09a16059","010000005d4b94138d70979ef1b366414d4db72b41f744a7890cc1f11abd3da600000000f4b7d42b1eef4a5795103a308fa79da4b762dd4d7e2e2a5862b5ff79affa463ec696b249ffff001d2491b592","01000000829461a13be854d7113cf20a558ddc3a9963ec323ec46001ef11a15a00000000f7aa8fe8436443411064ad31cfa49a6ef84068940ba122a1324f133d78b0be162999b249ffff001dfa54d405","01000000ef9be984e558acb1f5907e3ba36cf1a9561c872a3a2631334db9a37200000000bf73658f7bfdb55811d18efd567c993ef824d04d7d191576d4ce9bff6cb59520589cb249ffff001d3216dc62","0100000001c9ce4f6798de945176ff24a43c3bcc50f99e02f97972e554027f76000000009144fe54f87002691960cf1c4589405c09204d89459f6a429688ee1a8074b034169eb249ffff001d8fa32a01","01000000424508e87ac1a3bc01a337e21d7c3deae6733476eec2deed6e9654fa00000000c9462713055c1aa9bc9e62ff1f1774e242d3d72534e65f7247f23c20660880e1309fb249ffff001d242939ef","01000000fb668fe7a84a6ae33490b4ebb2872c3cb22118d78f52ff08adab92270000000042ad5deb55d8e782e5e52b597b9a581958e72d878941e1fe9b244be0dcf05f3733a5b249ffff001d0417649a","010000004c48fe93753eabed5eb04c1826f0dd181c68a51630a6cc46f1e0e97f00000000a936451cfcd1665c0ba61e490564c0581d30011701e8732fab2e6bb5e784a994daa9b249ffff001d01196688","010000001973be26c278e875b4ef4b184e9acd40bc63c26b0978dd3eb629320e000000006e86dd235e058d7379a7e2361ffc03e8a3888724fc5f92d621471f6484cd025c7aacb249ffff001d268cf41e","01000000da5fcabd9c1881bafd10e9a0aeae478b55c8ac656b16a99570a0d10200000000e740b0fc5195125ecf572b8dd59ed41d693a0680842bad679ea5f990f3bdd63481afb249ffff001d38ec649e","0100000052d75d84445078e3ec5198bb25048bedab792a02b4f13fc0582a971900000000e1562c6888b43c98d7260e64980a464998d2ac4d58486cd03e003189d8e1e2e805b1b249ffff001d063dae42","01000000efba17c6605620bb20d8b22b93bac5d1685b19a4792bd0cef7ec673300000000b8d4300ade3209b608b29fe0b5d9061a673b0dc1bde0db4db817ae93f98219185fb4b249ffff001d3a65f4b1","01000000bcbb2d44d9754867625c83fe4aa146141180bbed1976d0820a32e75900000000cf52c6e720046895ade4829e515557ad584b3d6e7a9105aa838e77173ae562202eb6b249ffff001d37497474","0100000042e9f7ef569b2c3c9ef38db43e129ab4082d326370f77562319b787900000000083d8067034566cb2e2a790c6df08a5ef6716fc049783f69456501fde5f1c95503b7b249ffff001d52952801","01000000407efaf1b47fd94a19d312d5e77d00f23fc86052ec41b66aaf88d14c000000004eaaf17bce84e8d200dcbd7204951c3a534b4868172bae1e7e74bc87792a0eec1fb8b249ffff001d9218c200","010000002e26183a3e7f5642219fa02496c4b2ee85c85e183f037dbdf15004b600000000f3eb400ad9ac04210b6e722c6bcde9582c3c23901878859944191ea254e9141575bab249ffff001d28bae508","010000007e0f8967b6eff390f4e440ef0e51ba49cf68f4f2c9d13b04a76d1b090000000012904a7bad5b65bee3783d51952f20791c615c7f4bc46cf841b9f0ab56ca5a9111bdb249ffff001d14198a9d","010000005dabdadf0645f4e79fb22e25ecf29fed9acfecb4b6384fafcb10163c0000000017b8c8c9734590197a49e5d8287deea13a04ea9365ba45ce50f3bd1ad900ad3f54c1b249ffff001d20f0ecf7","0100000040f15e5728e77c8c2133c8203ebb3bcf6a221cabcacd68725e8743c7000000007d92a35d19af9e1ca13f009201f095a80c00554750c7700b0f602ba81bd02d60b3c2b249ffff001d15100cdd","0100000025555d4cb95e6c3c0688537cf4af3c9b6d2532d56275a4417266cecf00000000152ba1cb067fa65a6db959624bf91417290df15700e37b5af2d29ccc81a0668f92c4b249ffff001d336b8786","010000007197984a225c171cec3e166c6b9f5d444c064f9feec8de61deac9c310000000010933a45d1ee93ea1c5a8f9e78f832efc5b3dc8e6789afba3b17af8b4bbef26432c8b249ffff001d2d4043df","0100000042d31343fd67ac0d36cf5b6f728fa64ad31425aa78806e782c8c948b000000008997edfca59a77ab07e8856408f669b53b86bebf1346c480427c5109e89d2fbdf7cdb249ffff001d212f695a","0100000016f76e75e9df0f54745969a883b072277a752253d90df3c2c29cf9740000000046475e0822e9fbf8a9137f650bfdfee6f43771f92b7e4f0974746943c8ee074761d2b249ffff001d021cf55b","010000007e291ee6b4f96d286fdac1da7eea50d4d74b064bfdaeb635814d64c200000000ded866a39dab4b0bd43c13a52ebc4f13e701045dc5228b2970c3e8a7aa313c6fb9d4b249ffff001d1da41d2a","010000008c63f0fafa28faa80c150ef0f2ccbfa136f97e796b2f2b01a611287e0000000067d1a829498d631321f534bc2dcaa80090d5560efe4ef39bf0f66b6e944c353695d6b249ffff001d038a245c","01000000feef085f2d1c86007a41f3d3976679ef9c91e5bf81dc769aac8699ee00000000f160c2d4c24c238c2b3dc684c0baca60bf22b8ef9557b80cece79ca11b11d325e1d9b249ffff001d174e730c","01000000740cbb4d16421bca03f1bfecb3eb3377850115e1d5a39ef2e1c5c35f000000008a6a0797aca1ea06fe3d8b6f5520f52cbf539c5cb0f81f564948f27ce1ada6f223ddb249ffff001d1c1d1573","0100000011cf7280ff898f650f70538dd20dc48ca6bdeb87f9b77e2b9a73cc5c0000000061525acdfd0a504e8461838eb9ae786eba4bd4df2e09beae8efba4514314f45a70e0b249ffff001d306252b9","0100000029c6abd32709e6b3c4ea6b2b338fb771957fb4f3827a4836d61e389e00000000118f0fb0fe72337195ff31769161a254df0e0661285bf1f0265031e0f782db50dce5b249ffff001d1a55fcbb","01000000175efbcda1931663c8bffd6ce31d1a7e17b6c8e96a74e33c40527c92000000004053d6a4b55faa44b9432b2695b9e29e2da41ea0832bd160568e3a822abd601884ebb249ffff001d17623cf4","01000000515cd707388e7764c16f739a9896974ff5c61d77f4b14c5590c57e4800000000fb22541cd107fc78ecb00dac2a7eabe1fca958018073c1b64e33ab920e56bc49e4efb249ffff001d2af51951","01000000af6bc9292144dd35a8516398776ea0eaeec14489d538bfd5f3fd12c100000000853253216c89e116b023f803c2df70855ac2510976636d5c4ceaa1df4e7c266b49f1b249ffff001d98180e02","01000000a92f9cfbb4473ea2ad75ebb4e7db4d6fc6e7611bf4d3f6edcea08ad300000000acb7166f34f40ab6c8d14a6bb0cf4b65b31387d794f09a2717cc4f11a8f2bb1f3af3b249ffff001da4830b05","01000000550757fbb629c91ddcf9b3c6b3a05ee555394eb52b8fdb4ba84cdf6b00000000b9c37e605f25e78366daaf7034b663a3ae49af663f336dd7651e4f64ddf459d5ebf4b249ffff001d59941308","010000003e060cbe5ad36065a9807c7cc06a86028b4ad9f12e78893b12472e72000000003cb6b568095a61662022479ee6fd46e47c7b57116c3a5835f3a4b94da319368e0ff6b249ffff001d1b070639","0100000081538aa96ea717e0d2cd1e7dbf0746066dd0773b2f27060d356b219f00000000595f96a82ba1501c790734322cb02d3e46ab8a445d6494872b7cbd7761e20dfe88fbb249ffff001d305c4227","010000008b9a47954c48d51f91d7225a34a1f4cdef90c37aa698a777447701a800000000781380689eae5924e8e557820f44f8f92802a8d5d3fea126cda24f790e88f948d8fbb249ffff001dd9e66100","01000000e6b0488b18f790f07c6035dc55a8095a9a3b0973525a97bee2b407ec00000000559b63645dba4fb621cbab7ce33a197fae48a393c1d29cd855a42e489385782b1401b349ffff001d0664a8a9","010000003c663af0578182c6472515f09d2ebd0c6465fb10fb1711b1a4853bd400000000d652b30d3b4e445650249bcce947a916fdbfec496e12d7c6c68dfc398db9f3933604b349ffff001d2bd03c3f","010000008ce38542fa48c96ec5301cf768db27b13ac710109e27fa88ed10012300000000d24bb7a9f24a96de82476ca2e4fb641fa81668d31841352cfcf1ff8052d9a16dc005b349ffff001d60620302","01000000b0543d0d3a22a67cf381789d4095f86e878bdb454c6b4808e319b4a900000000d2d90de15b9273486f25530471e7958d491e1066ed345aad41ca906685d48228bc07b349ffff001d31276ed6","01000000d596b00e622305f3022a480010509461d8c18c1cadbfc9a99338b38100000000132928ff4e475ffef40b714738edbb4c91d7b63c3617e22b1156451bb70386243e0cb349ffff001d38966a50","010000001dd458df0ff2ec4b07d86265bfe7cf2289abab7e9dfa32796c4b1b180000000057fd8b9a355b7e442f801460f9f87db893ef5b1f4054a818e29e107295fe6368420fb349ffff001d36d65dbc","0100000040d2353e6a0ef0c2c4315f089ed9dc85c1b7a125c0cf6296075572ac000000003fc74c5bd63e3ec15b32fd4a0096c09afefd54210e20034ec965477a0404a9f64d13b349ffff001d1efcefcf","01000000923eb623ce1a1a02ea94d1453e467e9d5b9d59f059ece838d7ca41a600000000d16d08acbf82797e99a3c5c6494959fdef3b9bfcca85188d01b4e1b969286001f915b349ffff001d14c07dbb","01000000a3882a37c40f379a51fe052818c0860587a58790004bd245ede5a3ee00000000f1543cf521500d0870c934928b95041d5b75f75ee42b9d88eac62c6fb6a9e4796018b349ffff001d1fb92fbf","010000007b6573d5bd9cf745cb324e0955d62ef894b4e3c5ab6f47374100b2f20000000057d79805b02cf06b5a23c6b43ae243cf1e2bb7d1b0d8a0479d2f8f0f4437265cb21db349ffff001d140590af","01000000b159bf2b462904fc10fc6974e9756e245c1c311ecf2be9d9f16351c200000000b9d7e2f69b2aa4fe79f70556b979464f63b6bf2126b0094824074c7312afe5c2c122b349ffff001d1b126eaa","010000003b6836778eaa834a18e174e746764649031f5e520d489714277d945000000000e21b910a0f3f9c22137570f9977e0529754fd8c83a0d31546f33d2ed949418584126b349ffff001d350e380c","01000000ff8d3891a76b9918820c6c2f962ebdca56014c70d01af18c25ba3f7000000000ce08faabc451ad648d9894a421a023423851337a1b8488f153c4953f2b8711dbd727b349ffff001d50d2f405","01000000d37137df06d5e8d61d3cc84a4105fa260b707cf7f084a2ed416f49da000000000c55d002609f5364f83f6e22754379199789ae241032cb2a989f05086d7b7d613c2ab349ffff001d73080b06","01000000ada1c254c9c1fd7a42ec3a81c43fdd19c74e299592e6beb5560ec98b00000000dce834a5d8cb2df16a04ee7a72fc5b5d8428a2f057d84ffd8844e29db3ed49cb742ab349ffff001d1a44da91","01000000343a3754d2d0626893e6e3b7f76d556e0b955206bbfb7658569c9faa000000002e38a9bb15d8ba338190bee44a610bd8b7707762bc30f9d431d70e127aa49ad64f2db349ffff001d59ff8c00","010000006e2864806162918ad3c4ae616556753c7cae4a806deabf98b97dc72a00000000e3017a6c04a968fee7fab25b9f7b6ff5b7610c8361a6932f6f30e19991e02711692db349ffff001d02c3fceb","010000007ac3135250073a76c25bd0cf7407e3f080513a73622424383cc877a90000000078844a8c600ba3217cf73d8bb4520931a73df00fbac6764a143648cf20a6329c7030b349ffff001d233f604d","010000006267ba26953a58e1e7733a4aae3b81dfc72addbb766615eeba95716b0000000062736ae5e9cd4c5f6a408e54e48888a6d2a256595bd986293206f5be55658cc0d836b349ffff001d38565977","0100000063efee2f46c90213b0db8c1a1ad0497f46a34cef4528e1c42badaef8000000008078ed71b5540b13881669779b6e16be96e19f3d5fa62ac008774993632af2c69c3ab349ffff001d3591f416","01000000e8fccbf0d4047df291cdb1f08a4d7f31687537aaed114e2580a48576000000005675ffb1a48f03b80cbd3c9a1b5c1961b07a5432d97b79b34fe25dc240bd667eca3db349ffff001d2c325c84","010000004f9cc57a786a88fbacb1e51538dacdef1213c10de63c9d2efe82ad9700000000e857ba0ed1a2215f8137c818b0149bb4457e6e0849b09508e1e86b860fb90eb3083eb349ffff001d142ad800","01000000cc9b01a38b4e84409081da223767f825d7135b174269f75ce5bbd13f000000009cf20e2c0d4bc76f28a596aff99807fb083fc90143c84c8502cffecbcc9575c64843b349ffff001d00881ee4","01000000d64cc5856cc67297ef16d2d211a2aa1396135da81563378ecb43466000000000efec0e959f3537d347eae36c83908bdbfed6157705cbe1e3987c5e29e24b7b0fa944b349ffff001d26d0273f","0100000025639a12765643dd8846192b2515d80e188401b2f27aaa9f04b7640b0000000047bba5148e111ca8837701dc31c716b471027b37e906865a3ff83a3351c3c3e74448b349ffff001d30f28a33","01000000795e5636d7a0bf2d223660ebaf6383582b391e61386a179499e330b6000000005667d7d77c77d2561ff92aa034ef0adc81860b2ceb856f5164dee4e471f93a6ccc49b349ffff001d06a30403","0100000018fcce719ee8ff7c2cb565c5347d20b086e7071e30a7de4a05464eab00000000e886ac8f0a0e14d9a7284bedea46d7b095dd62684dbe7402fa5fd609659e15db5c4eb349ffff001d1decc346","01000000e83b8493d97d517a491c5db0a04f5ecd1f92a093f32da6edb60ce817000000001d3d0b5fe85abd1bc51c35f15e5bfba06cf5d8098b106705480f8f40b9baef5d2350b349ffff001d2fad51c6","0100000008309711c324ae06c3aba140705570b11a02748417bd553eab86f09500000000170dd5bd42cbbcd81c0dfc05bd7f93bbec8dfe0157ab2f7382f9078a4acdcaa61452b349ffff001d1819fe78","010000005594b6d8f1c5c6a51f2e927d83fa107444fed67c279459f11d46087100000000b828d03bbb5305b0085759f4f654972411aa9595030b2839d38a16fb585f4b3e3e57b349ffff001d277f2031","0100000078a8397da6bf0af577e916f46dab3e2f7a8f630e4f35caccf471773f0000000025e5b9e9e14fa9fce6ad1d28749158586c7005b1ca67f670b7e2dd8382d508d82a58b349ffff001d97a09203","01000000e84ec8ba4f248e30d8beb626a21a56409f6872a2ada91a2c7aebc8bb0000000060f6078268c10bd2747bbfa1ce51c0927cc6c6612138ef571c8defaba30a63a65759b349ffff001d09b91a3f","01000000e7eac80631b0f1a1c77cef865f34a9a781f12d808c681953981970510000000092175213a877ffc99bfe280171375d597f5fa992239c44a54f549378afedd18b0b5db349ffff001d187de678","01000000fdb21eacdbcdd9dfbdc842f604415113efd8406a55c4b25d7b8a0aa50000000090c51118cd64936a735aa6782d83dc9ab0f47f1fc3d5100c7ee53b2717f06f2b195fb349ffff001d1e7e290d","01000000127fa87671fcb742320e2f1ed7e2de3f74cc79948738a95912b1333900000000c2c58deb3eee55ad121d465e690f78b651694aa5f2d8477d4a86b1dcd0987ef70461b349ffff001d14cfd3ed","01000000864c9e975c885b5dd36343aad8019bb89f52f65fd26593120d90f19f000000003f06a98a62b6c717fbb680715f683edf31e885f97bb3a547bc7b19cf474c31520b66b349ffff001d22d12e28","0100000099daa2e5f00da6e6f8255b82681a6806183ee232b615cfde580ef1ca00000000fba00c1ba94660dc3be390f90a41bff97a2d4e91f0f2ce8cb0b5615ed158f56f5b69b349ffff001d3884cbce","010000009bf28bd278b39b75d4765257548f90661d4304af4d8fd89a3a6106e8000000006f5a69e81aacc4ef4a00aa94ca7edf1e385f9e479f57cd3a714a8cd281e6a2e8ec6ab349ffff001d2c2b0476","01000000c79d770db81538fadf39f6188d63c3b0354c6c9b0da29e6cf490c12400000000f08e9d46cdbc64a7ae3d49b67a797eae5a654672f79fb9640cc794c082a9b32bbf70b349ffff001d2f8e5eff","01000000c12074b076059805c27abdaab77899f77d1aa17022732adde18de3d9000000008baf512dc8e679060d0d7d46d9907d212d3caa44620c9e691b848595f00656056376b349ffff001d318461ed","01000000ca4379b6efd1ad157e634c22f0a504a9a37f56cbf83ecd79f725bd51000000007e40fa7901fc31476cc6054b052454c4f063c92df4a7433b0fc12fa1c684fb7fda77b349ffff001d2dbf3461","0100000027323e695d1b44995c1f66d58f85f836bed976652019cb95812df05c00000000bf873f510252455cf9e1c78d6a984649e62c8d8ba3c7d9d19674bffe10512a4d9a78b349ffff001db05f7700","010000001cb528f00758eb4c95d587a39d9e0c7bd0dd8dc6b3a0b3daacae92f500000000b2e427cc7a9b7651d450561855e21b124861aee0ec4ab5791bceac68848f1d8a317ab349ffff001dcaba2a07","010000000ae3481dbccf2aeb274bb1219bed6f5eab2c2a6bf3e7b49db8ab80400000000098b956fc566710fb520fe1ecc9a5de382fab029cfe750e4973e2b54997f373d57d7ab349ffff001d2a8cf529","01000000db45864dd63960b2656894a21399d08617f470cb8d18586cc920e243000000003a2c235354e6f7eaf850f3853e68430a50b93d17ed9b50e37e8bd086696ba025177fb349ffff001d375e4514","01000000731137df22785ba271a52bef798f210957f883e6c5f7d1741f9128f20000000079392654e6df6769496a99b778ff3f2ed6ed49d3f8e234c83d981a0a655a597b4784b349ffff001df16a5703","010000009047e513aa3741a88fbb157bb4c55adc0d2130bdcd86932b30c4342b00000000ca874b0dbcebb504e5974e926ea6ddc43bd74fd37d9076b239301e6c99d55290e184b349ffff001d1a5243cd","01000000088be9a1a11f2a759141aeee853a3adf0329c49c93c32b9a3ed19a34000000008ab748c1872648904201347309ec89a619e81e6e1c57f4e3c20980a2b5ad59182785b349ffff001dec3df700","0100000030bf7b9a20d33f8d9bea102dfab830f207cf0a6bd5437dafc6de1341000000004841d4cc4a25d265824afae9672ed73bbbb6c199778727bab6340989520335301986b349ffff001d82496504","0100000035799cf9a0687eace0886c419baa118e269cf88cb2bf49c3cbf6a80200000000d07ea42c4d34f7337ddfe6e2b17510d1bd37a3d15134bb48842371d0470fc826cb88b349ffff001d032e9337","01000000cc96dc3101a3ced5d58786d8ba66975197b90df1a51ddeb00678646200000000158398ff009b83225fb5e80b628eccb80b0441a06600d0a34fc112ac45673717048db349ffff001d2a374401","01000000bcfc8d355284bd1cd962d9ee1bd469c0808ed563fd5240ddc5f3ef6c000000000f279085142b75c1e313a6371d586831939cc059c07d6ae1c463d864387fff8ac891b349ffff001d33c7b58a","0100000090e4c400e9490ec28c68b6d1ee720f8f3e9f6d7bbfac3c2f48d0de6200000000c14a56281cda351155bcf995fd88b174270dc54a65aaa2ad30dc7eda31af7f16fd94b349ffff001d07b02b8f","01000000bd290c6a8ec73371ca3eed069aec1695a3ebed3923f20bd9fe1e0782000000008cef65b02e0698e13a9404b6bc19638b76f5563c9ec26232492f50a1bdead9a18196b349ffff001d246bf9af","0100000014b7a739fe4bde7c16002bd3e1654a603e531dc3e97ec9482feac1d1000000004d6c13c8e3543f10598eab7d8bdbdc241c79749f27ad82456b07b62b3d5cc216ac9ab349ffff001d38b3ba52","01000000818b81c1e7ab50aa190c7edd483e2745854bf8c07ce8080432c038bb00000000a26c518812486917db5ed5469141ed1e55c8f7f0a31c414e41c01711d4b3c5a2ce9ab349ffff001dba1e6b00","010000009fcc3290820076a7358d6507bb505ee4d035bdc241da01b4f0db6e9500000000924e0000da06b76413671dce98f4df213ac08f2a5b6c724eba99e90b3c1ddbe77c9fb349ffff001d1abc096b","01000000e37537db63783b91838ee0d1c92214368cdc0982026ca43971ca842900000000bfd9217701832f4228855bfa35cef9196adbeb73b9bbeb473147c9ad72357a91a4a3b349ffff001d36b09687","010000001bab207a0a47a4f873ed7afac489fdb0f63db05f0ef570ba49ad5297000000004fdeda23246f4ec9a589bb99a1e4d285ec36ec674ebb1c57a919dc7e6be06f6892a5b349ffff001d2b099c15","01000000d296e500cb2de699401170f02ec910335a516016e8988e7f139fbdc200000000c8380d82cac580f10e82e9b2247fc806ee434b58cf8bf21fa5652e0e29063f99e5a7b349ffff001d021ab29a","010000007a3705cbc992e8c3b66c9bac9ab0cbf1951f88b746a8c9d0abdfb4ab00000000554b3f3e1eb7786f5a9f0c0b04fb14511de4aeaa5f94ce65dec97ffae34cc49756acb349ffff001d024cf63e","01000000cdcfb30b0f334338a5c9e1a08264c10a967ae0718e5b1bc1e53e537f00000000c1a81ebc41b2a7d3e1d930eee1c111e5d46ac3fcb6b0a4d11b04657324981be095b1b349ffff001d38593ced","010000000ffa32fe05c9ad072a97d589301f35759eddd9e0bc5f1018f535b461000000006324ccdbafa112524b318ebd2a6ab062424bda266f41f56f96fb1a302382fb5f86b2b349ffff001d2d9e5404","01000000e8f6a70b4724d718387c234a4471009c68d4192252b50ce4a19d85d0000000009854b5b2fa4556a1ab633866afccd06d84a34ff9d053e997747db7760ae990ba54b4b349ffff001d352e2fb8","010000008b86f47d81caa285691925cbb375dff09f1be5c0b808f35d94b9cd2a00000000a61e3aee7177817e19ea0fd61dbcbd72a81bb90e64c59d7d0c08ca700beaebdb79b7b349ffff001d230e5177","01000000a1690c05bff45dbf06fd1312f92f56677c0247546fab8982426ac0c000000000a3fe6c02e93ee11bfe2287b750fd5aaf39decd0b6708425cebde554cc0ef078657bbb349ffff001d2a83debc","0100000047d2c1c9f881dad52e3019acc3fdd1a1895feaeac6e9b3c3d6e2b63700000000583c32729f31e34a41fb0e524b8d31e6999025971f690c536e40519ebf6dade3f7beb349ffff001d02e58235","01000000b45eb8cc75b3d649212947b3ba583fc53f0a47de441245710eb70093000000007c53a90adefec33d67f021ae11946ca20b1f6acff886944cf3e53b2bd1fec150ccc3b349ffff001d3292fbd4","01000000510d87ce419315194b2eac485ac97489a4cfec90cddb50b7285966c30000000018c0674143e98acca7fcf569843acbe428474bf448213414b3e9af9f72a5f81cb9c5b349ffff001d24d59b84","0100000068fdcec0e7ab2015de90b5b4ade0fd5c934237742fdec69155adb2a4000000008f985d55da42c44b46965cd96aed4387d8aaf8ec414191c84207275fea013abf4ec8b349ffff001d02b19f66","010000003535163951e0d10496016c551c49790914ee28e3641cde34b244dc0f00000000e68a83e58334e9537a508695efff6d6146c54780309f1146d08680b87ae5cdf265ccb349ffff001d270bfbf8","0100000023749bf7fe48795188c37986f36fee666ad8cf57b69c68004216db33000000000af6b36f96cc56dde408fee3813bff94bc374fc4fb31e64e7dd2a47a176466a031d1b349ffff001d36ad2a53","010000005de0fb422e68b469c5b45659d9745c6183c4467421435d00f30516b5000000003a16e41060eead3fc48ef1016246721278967885c70115f4cfbd93d46cbb2c3a20d5b349ffff001d1bf7a695","01000000aef277c0201fb6c6245fc0edf229c7bf6ad0560a1818d8a1471e6e1c000000006b175f5756d1884061b214bc8f54284c6b08f30346ce2fd335b2f2c8545fd6de94d9b349ffff001d38dc0f01","01000000cb76bbb5c478f2b1423c939dcda0b5d64f98159d4ac98101d87bcdfb00000000e3778a21654e648828a334af216ebbec3672a78c7bf17c77601cdae7613d5db1cdd9b349ffff001d53aecf00","01000000291b1b1dfb4a10a046d274ff2108b871183c5b0cca209632255fef9000000000aafb15c15f0b018acc7c1c336b3fcc8a8ff8f78b7098d32b889716e48bf784b291ddb349ffff001d1884d241","01000000eb616972160b51c32ed86822d3259ff17ed0dbb720fab9e3993da9d300000000d4d444b9cd77a9789d3a8b16467c7fb041cb43a6656882e882ba21bfc7456cc831dfb349ffff001d2e5f691f","01000000f3b82daf96fdf8a171c6d12a5f34ee7d34eb921a99c56308fe2bf67700000000f51aa45ca323ab97cbdfa94ba9f00d252445df6bdc3c2e79ee6029cd3ef213079ee4b349ffff001d00bdf8e9","010000004715e9c9bd039a6077305343e4fafe06f663203ec3b817c6a128f65500000000c88a0e4f2662f17d526505292a93eb3f8efb23060dcf182a44206d7bdf06b052ece6b349ffff001d1c5b7f07","01000000ead6eeebe6349a82869ff271a498ad5d7a187c5c99d17c4e431c5b4f000000009be10776f677f3211ea275c2c07d37b81345ff62d0a3b1f1da2a96cb1f761d0acdebb349ffff001d1892a222","01000000e204291667ab676ba356295bd13d60f897416a75424f89515573f41600000000256a6a93d3a4c4121d0ae16a27dd6547fb7191994d4a6c14c32a8d43acdb0c9064f0b349ffff001d2091aa2a","010000001d4a4ba8f85ecd4036873d4205c234eb5684b995a7cb8aac21e091790000000052eb8fb2d5bc6575dde1a1f2e863f5e8688b03d2d00afaca45833d0d316b56927bf4b349ffff001d74d4f905","01000000797d1b69d3d45654b479288f86124665e4cfd63ecbd1dcebdc213daf000000005067f9aadf3985de83213547bbdf7f5bae95ea6b06643b5e20f10b43344bc9f001f6b349ffff001d1d355a7f","01000000b81311b63a29c0917cfbcec020dfae03b5a29ddaf53c1c9f1705326d00000000a6472b8ae5cc4da60d017306d6fa5cdb75006a5dc582381a61d90ce01e5ac6fc1afbb349ffff001d250da59a","01000000ca0fdf60403318d1855e5d478dabdb8960bd4c214ddf568f96b791f70000000023039b2f46f7400535de20544b946eb5096f810864c62662430a775b835129220cfdb349ffff001d1a7f06a3","010000007747dd67e023f8fca5f113bed8b61fa0ae3fe9f77eae882346ff0c8f000000004f46b73b331e76392a064b178ffcf22c7c61ae6c8077b392de7edc4561fd775fd200b449ffff001d3a3dabda","01000000be4e84eb50d2c9ba8a499f43ed5ec6cfccf472294547a95296cfd6ff00000000bddb8203dff2c783e67c437c2cad8533cb98cd35025afb2bbb98039c1fc841fd8204b449ffff001d3a3e990f","01000000fd362c4ccb58b01284b93dded0ea985e8004493cb645cb5b4e6324f40000000032018fc78b0d1c4f35ec659c8e7cb052d9cde70176e6fae4c4198fb48f391787c304b449ffff001d2f6a8145","01000000fe1c6f7abac9a39987f5e6299d257a5043cd259030dcacba493a169d000000002374b0e4b3abe56c36ffcf7d3eed97fe51f98ac1dbc940b14b10aacd36e39d1f7609b449ffff001de01f2313","0100000072b4124ec2413d17e9d5e1b9e01583251bf7c9a75635f937fee9ef5b00000000c546c6f8fe4e42611e398326df74cf66fdbe97ea070256d836f65397db8578643d0ab449ffff001d3695b96b","010000002351d7b0adf0fe053d6557b3ab31d29843cb2be9c5bd76ef84e4bdd90000000009525dd5a79c78adc74c6e2c6fb6c4411df2ab5bf3d10fb692081eaccacf13c9390eb449ffff001d2ff20a5c","01000000f78a650e70b8a3ba2bab688b6b819e545c869c8aefa9b9fc9c143f7c000000003c9fb50477af3b1380b22cb125a5593ae0e9b444944b2ad88731d4a0b8d99795c111b449ffff001d86874901","01000000fb57de18b1078e2fe6663532ed1a18308f880dc46075924bf7f461b900000000d7f98b69a90706f514ce97b01d1b5896f5a40cb6866ac044ffd80958eca3c4d6fe12b449ffff001d03dd57bf","01000000d72c33a123ad98115c9bb84b5b4cf8c15842a3fc20b9a84f95c03df000000000f7bdf12e1c9fdbfc4a4a7211fee64166ee29942bc73eb6c203b0b033e01a9dbe1a17b449ffff001d32e3d22d","0100000007dc9a7efd1abd15d51f308c91122a96a3e9aece78c15905d6300f39000000001e12fc0323542ca10a3d54489cf0c88c8b325baba32b7656abf9e5a068a37a43451bb449ffff001d214baecc","01000000a678dc8e9343d70e1231cd1377dee3334a54e35239f211d8c84bd5e300000000a8599a069aa3e3eaa7c75f5943619a243e678cdf2e95e101974bd5dcc3b23756951db449ffff001d3339cbcb","01000000c165fedebdf062df9e3cb0c5f3b4f3094a66e31db95a923c17f9a28c000000002b7a5d62125ae2904e119474b019a41e78e64cec56be17060102c0c787262b210420b449ffff001ddf61a405","010000002f8db59a8d2141dec485e46806e4349e700a4dcca5a0389f00fbee7f000000003ab683b5b3ce2684647f4bbe06354c1d8a15546387dd66348c6a917be2ce96f51621b449ffff001d282d3dec","010000001aec3628ecfd01861b64d3fc85e174eb487b996918f42f39e2deccd700000000dac874108ca86ac45c1f802810c01adc994510451309d32064206242ca06f678d922b449ffff001d2de363d4","01000000aa2227e07a0d4cccf4a788c05473a989180133c6236c31e2c1c7e64c00000000bd6362455c5b33b7eeae21bebd5f1b619de8d5ad32236309328988df907d7c333027b449ffff001d347e176a","01000000b505fffe07234f87357e5f37c04d5310c5cb876ce845b1bb3d5dbd39000000001a391ace602a476a0f4854bf3ca17ceba6cf73f1540d6bcab58369ce3e2c0654c52ab449ffff001d2bb0461d","01000000a58a1e5d9595f9bb65d673e84f038a90fd2416167e1061ddb411cc9b000000003eeae0a733081b91ed83267035c6d809dcd3d6f09e59348aa0aaac6198ccccef782eb449ffff001d1884cd14","01000000f6f61b61d8899920ecdad30007a8616f7164a31cabf6aac4a54e6e33000000002a6c862d951d421879b70617196ac7c82289541beef9b33c1f5ddec8a827137c4634b449ffff001d059aabeb","010000002da9da01cbbc1bcd8b01ade29e590e89fcbed511f9ca75861063020500000000a4bb88178087d0bbb4a702b29d00b42b34386355c45dfe51db813473c57a371f2638b449ffff001d16217079","010000007c1324e0654fd267df0f378ddf322a7c49e60c25bf76d388ac39ab5a00000000eed48b0c0e2dd1036ff065567d783b3d3c8064930b55cee82c2ea614fce76d7e9e39b449ffff001d58400a07","01000000b55e8a750de4b9d0fcee2d4b9f28ea85faa41561f61360089032e32600000000d44819439e464e2725c6980e65748decd7dd8d573f58de210b076b3276a2a61a1e3bb449ffff001d39507ddd","010000003eca271ce93fbfce284f2c612af74224c94236928928989148d19f3e00000000415870e1d2e749eeeda1be3979711f4fd7c94c1bab6e62743aea17418a1e7459bb3fb449ffff001d24c7f292","010000003ad2e162baeb948677dbc7f5061322a58824ab9245f9438f2e0561df00000000f0440bea9d70d58e9b0174885f72bcd4c6933cf31845e6518767ead53f1bee10be42b449ffff001ddc15410c","010000002ad60f8871a573b7e13e0b37accce534688bc91e043161d709ae112200000000fb27fbff2ce6542774052a3f0c2803546e4b426ac898e452b6cf74c3932900f85143b449ffff001d1cd287a2","01000000b144d8f6c4ec8f13d6807b7644f3d3cf2a584c4227167947b06d5b090000000075c27203f0d0881c9d2a74639e253860b424e6d4831fede84ab202be550513a2c943b449ffff001d6cdac201","01000000f1894ec8050413e3ec20f0443e6daeac8269badbe3434831d6cbad3600000000b2040c416ef9a9818b9a9ee5f8e9969492f87a78feaebb1436697fc4b0897d7c7b47b449ffff001d3704f945","0100000090569a5f72ed498ff41348348f7dd179d817e4d41f5a40d5edc92a83000000004c48666ad7bf59d09bc52710d82a5d238fe8825bd099fc5b82530cf7bc6283f12b49b449ffff001d34d34bbc","010000007b578cc5e2cf72400b1b06fe7dcd4fd7db17ca75d7d66f02e0ec2852000000002f54969f52fef368f4869202bb20cf06fc7df5e2fba86853fd76305e59ec3d4c9c4ab449ffff001d39d86488","01000000d3b78ee4e84b2806acb1a961121154a741e93665daf99999e4c54d9000000000b0b8e833afff6f07843a2babe2e307b9b8f09379318d11310931aea0670bc260404db449ffff001d2ab5cc10","010000002cb028768a35e745d8379f171091a9affdb9816f75df07b48b4b72a800000000a948bf4d05d34adc482bce41e3fc5291abb02e86278bd365b73d0c92fa3d19d7d350b449ffff001d246cc6d0","0100000026c793f8e08bb78bcdffc9f812b5d99c4741d8af8811bf19714f2d3c000000008f05850d277293e7c3c59e462964bd42af43583f9e7308268d1f4f7501420d38a954b449ffff001d616ea70f","01000000969bf4e3cc877bee2c0b7973b8a4f188e1115bc201405249701daa29000000007a7d1be8d4432a6b2f0d4c71a9fa832945a50efba3d543a2b69b3dfd13f5919d1655b449ffff001d18d1bf6c","010000007593e0ba667c912be3fe95136476d12628ff37bb7690957d236cfafd00000000077fbdcd2c45d70e16c86750892cde23707c3d29c5972fc4ab0b1be4bbe2eeaa0858b449ffff001d25fe6435","01000000c8e5c19630324a9d795e8013d4f845520e81a59fccc4bd0b890a0c8d00000000ed42c14a245747570f9f40cd9c1d035a3a79a9932a10106e01dd2e55eab1a29bab5bb449ffff001d63b8dc11","010000008cf24d57cfebb9753c87d7872a6a70966a17503be003197b313aa7fc00000000c96f1cd0bce17285c55ffa9d102656c580478609cd01b7a2bd672d4d22a8c7ff795cb449ffff001d1683228d","0100000091579b1d989425e69ef2b4b581a1aa7b34c7891b16756fac4cb6f15c00000000458107debe6dc9d02cab48f89fb0a3029c61fb200a3f23e9379751be582b4c877560b449ffff001d36919875","010000006736b95900163e2c4ef997e94b4ccc69ef97651765b18b558a01bf9d000000008309296ec7f0d48be00e4deacf7abbce2c10032359ae45822de6adc827f74e2dda63b449ffff001d01f682c2","010000005353837a94fb276a7aa910afcf822dff77374ff6e28e5a6ea016e109000000008cdc4999606b921f29a77f74c955f18c979ae8288ee2453fe8d6e506f6ed92ee9f65b449ffff001d31eb66b8","01000000d5b6567787f186011bcbbf139ac3cd75e6cd01bd05283249dff5432a00000000fe65d66d012763193c6a2ed42836dc3c6b54fdd3add0e009761da931e5e235ecca68b449ffff001d0390568d","010000006e8a757725655d157e74712cd614a2c1f27191dc216a10049dfce624000000007c0489966550ba40f2b4084b75f99afdc12ca733bee90ee00bae5949de2de0ac326eb449ffff001db0e3ba03","01000000074fad26934e5b9053545b5aa4a6a812260691dc95741e796df4836e0000000055404437d341935b5dc3193656b19b28ebc0249f240d7c6e86bc00ee520ee1195c6eb449ffff001d04f8c2ba","01000000ab1369ee8b829d952069746bea231f1136678ec30116390f0d6731670000000093624de53e57380b77f25c56f82a6ada76611d04074a8cc19aef6fe4d82acf7c8470b449ffff001dc11c770a","0100000088b2b15a51aa2e3b0252083ff8b271e1b679e147bf24c630d18b941b00000000cdd0485ea8a6250231a65a4a434263ea1aec174e1250316529c3ca7a200e6cc1f571b449ffff001d3514b059","01000000e2b38693cf4e68dbc7f2b19117b701e2b26051653ccb2c026d5713e4000000007d47dfa554dfa94b435dc01a87e39f1a91e1f12d6435e9a5abd9d59f86189e110274b449ffff001d372c738b","010000006685d3c9d894eeadd70fab82c2242f9a6cabec11dbc52ed3f61ae7b800000000e71ffd69a989dd4ef3fdaf07a2debc66a7d25d6779834cf4a68d27f5026bcf7f1f77b449ffff001da39fa90c","010000007453e60690cf60568d749d6e7075d98dfd1118eb532c1085018d9c3c00000000821ce826d1600f80ed6675a4e6fb6cf2962c3dbbdcd2b37c5bf40a02cfeac362d279b449ffff001d2466d5a5","010000001a7074ef65120bbca87201b5e4badb540fdc567cb33c4f51497db39400000000ae177a78856593166d33c59f44a8f782be5d07932bcbf49129d8dc7cc1bb32ecc27ab449ffff001d79d59500","0100000036a1b3d06521fe6f91fcc78fc9c2b204fa1872a1cd689283437b303a00000000056fd13f1d36821ed51a41a04b6333d1fd56a61e5e37dd5286da21ee2d4a5bd18a7bb449ffff001d27106803","01000000bb77a507452623811ee63198d688e10ff6225d3d34ed379b5ac8716800000000e8ccbfdf24ff2ced8d5164d9f8ad6ffb5c2bff85b183d1aa1db66d1c6a8bff98f57bb449ffff001d2379a3be","010000007d903597337d20acd04de5cc41183a3340b68c8c99dfd5a2494858b000000000617a07a295f44f1f01dde669683b49027e68a0f1948d688108a5a8a26bddc38a9f80b449ffff001d2c5cc2c6","010000002aa5027bed33f9d76fd7b48ea23617d72a81d9d2c2a6711e5d6e318e000000004609fc11d7a812df1c24b0629b47eb561b7987a7cbb22f07c0c3494995d8a7c91d82b449ffff001d34c842d2","010000004e8bbae20e29e8ac1a6c243fd59f6d2b937ab6c2237f5431e2505f81000000008d8ce112f6e50d117b236497ab2bd6f8c2f345498ad1f9fce850ba438f41f57d6385b449ffff001d1b226e08","010000001283cc76093c5fad1b49966754a4e5ee2bbfc2fdd7d38881087d7ac400000000336154ec95333d2c610519e0d7f9e21984e82c200687708b81b48d7a34b5453b618bb449ffff001d17706105","0100000085a710d4ae562d9b69b4908ea9df5c93abe3069f39b83a99808f09800000000094bf612bbc60b86303f5d5a5a23fe049f5096f2b5dc1e5b2523a6c4b449140c57a8db449ffff001d19f55148","010000005163596e1011be5a3e360b223a2fedbbf0915cbbcd3c0f291d5c98b2000000008be81704c0bb4b1dcc922d1103b54ad6e18236cbeadb35a713c11521acdf60c67090b449ffff001d1f914d01","01000000b5c799b570b0415d02f184ad724562c3e00c4d037ca81ca30ed22eff00000000e60288953258e25e2515f450e8acc8529cccbb2560290c33499a5453ee86f2dac795b449ffff001d23dfde83","0100000085c105214b3f7b7bde3582de5e4a7f96d4b02ba36ae1a23ab975b4d4000000007cefb763f5133c753caa1b8cf9741649d12491f6306f1b53cafea7ee1c15da18fb97b449ffff001d1d3b225c","01000000d8d6c91a4716fc1e2c2e5c7cf32eafec86ef4787dbf5f3e934ca98e00000000018a9607e86b1201fe0c3449bfddb9b9dc008de2be66a34332c5ca4be68832b03c49ab449ffff001d186c8d59","010000007d22137a519a53359450c3d322f2240335acf36a86b301bce52cde9c00000000cca9d10eeb8cb4b4354812592660c45776085c94b7eaeb0f99df415b882e0122399eb449ffff001d27d3c1f9","0100000031d7b769ccd1febb330146c0bdd1cebcfa0d3fa760848fa531000b8300000000d136127dbc38e12b378025dc30c78065d0c48b04fb897d1f46068d01b018f4f0a9a3b449ffff001d014c338a","01000000700ace25c97d9223932da03351ddb6c19b8650245815d658aa1e2efe000000009685347f0fc7ff07884c7dbab8115481f175bc77cabe37ab51befac2d6daf370aaa8b449ffff001d03edd88f","01000000b7bb0aca185af873895775de009c411da28f11e6820f28d48b27984200000000ebf497d9915f800831f6ca32e77242027c72c16705c8986a9f8de85552ebaef5f1acb449ffff001d02edbf9b","01000000cc535b5c19e89238fe8feafb59d8de48f7eaff6432f06ff6f33c958a00000000806b41b43e005bc14bcabfddd8c11414ff5562823efc63bca2b1f871b387bc0cc7aeb449ffff001d318cd424","0100000037533d44e276ae0be05bfe7482c98c983f42f9c1dc35c1fd4ec3de6900000000bddbaea85f8e8c3bff55d6c3a15bddf47bc358ef5767108774d79afbf90eb551b6b1b449ffff001d07675a57","0100000065eb8c6a43a21bf16ec2ea0524901a8c0e3f5f20c6990ba0b2968d3900000000bebbb269a240e4a061d51a46ff1aada50d8824cba9599d4c093b5e71427282636db2b449ffff001d34fad502","010000000a51912f83090e147f4cd0de8ee740674a5e03d439ec800106657c6900000000ea93248ceb0af458bea1fe58d0258c10ec960ad7c1d0a4ad57ee6821bfa146435ab6b449ffff001d354531cb","01000000c3c23a7dfd908d2be628c4c9a208c3fde6c2fb7f9f011db85d03b60f00000000947ecdcd3cf5202f9b4c6df059174240e514d84a2b1456b06dc145488efec63db8b8b449ffff001d055415c4","010000007881b23d3b7163dc0d842b7024206e90f5634786fcbcc25b57fca24500000000f6a96a80591c92bcc906e2bbc27dd9f046c35207e515525b0727edeec3cd35e07bbbb449ffff001d23c1e301","01000000840c3b0c5526f127c5ae6c706935867a6f8858810d01c1d05fd60a5a000000009e67db0b1c76dac4dad4e1c18bd3b96883e5e690cdc323129e9ba03855b4622b20bcb449ffff001d5620f602","01000000a3dcf93a7cf921eb87766eae57a2df7c35743894671016d6b6bd7de30000000095f1ffe6aa07d108bf69c2f42e303d76d24695415c5b35fe705f29786e1c9920bebcb449ffff001d7d637a02","01000000a0c39f86995c2cb286f8a73b1d107d0c8daf8cfadaf3a6166faed1630000000090c45771a54e2f3d2136dbaddb07d443c75fa313a9e03be5e7f38470d9f4efa9e1bfb449ffff001d145eb371","01000000e17e55c9be37fd1ed2a387e0d574d058d2024da3c772b73385a9f8a000000000b24da18e70a4f01e69268c58ce120b7d5ef4f699c697397315dfd90ffb7b67baefc2b449ffff001db028bd06","010000005d4ba97023193091c0974c6e327c8a6837aa2866f1f1fbb6ae61c7b50000000087c5625268e2f6646d252e564b4b339eb436097fdbcbf4619595f10a4e5a8bf6e1c5b449ffff001d274aa61c","010000008af85247635c0652f542280f7fb98254eb0f0d7980b7fa7226e9c177000000009b8e5d16501a65c1fc639c0ef5451f7ed67d8f25e12d7870744436c5bab5177d42c9b449ffff001d21ddcf7d","01000000e43498d9bf34a3ee0594a475613ad836d94dae9787f5671458ae41dd00000000516377c4c14b685a0eb066350678a0b6781d474ee7bb26529b0722951fb7439e7ccdb449ffff001d3a93c4d4","01000000be20ec711f91f5f0696e4c7653dbb916f2a0839bad1ab0a1c82c64ae000000005bbaaff327f736060ca8fb20967a859a1789e7c3549479f56cb3f418d35e36f2daceb449ffff001d9c1e9806","010000007839581ea8b90605ef36fa686607c841c2f39ea7f66b707d1a44e75a000000003c9615220db24ed669991900d00e2d749f3e001cfbc62bf9bbd98eaf727b88b121d0b449ffff001d18f92fb0","01000000b18436193b6003fe69a7013472f36e4dbc746b3dfbe1e288b0933185000000000b26843be00fb324ddd6ed945b15fab3b49c4257f44eec75bde77a6d43b54ad054d3b449ffff001d383b32db","01000000580adf8b06cf1591f08ff969ec5558fbae6f527afb7dcf0ea83317ca000000008e0201ced0dbd69d71839b5b4e278c23204f6d1e1b92cd1c56fe1f14393b272437d9b449ffff001d1552f0b9","01000000c79fa107ac9cedf41d3d27c552b21a1b4aee7d1435a414662ff0082c00000000af2ebcfbb9bf11cdc3899a098e8664dcf68534f841190a9f6e7747130454fec386e8b449ffff001ddf081105","0100000040c4629df1b5564136e2408856e2fb67f72b238ff00acce8fa1c12ff00000000810c1b56d026bfce8822abc3270d60223ffc84c5065b93ad3b8b0a2fcf3ce220d4dab449ffff001d2f111268","010000008b1c071fd301e992fbe7dd9d75fc321057cff8a6d763545e0fcb7db200000000dfb6e89e4aec8343f6be7374a75e1509fb857dc3601aa0525df7c7c22b1f7bc598e0b449ffff001d33a8bef0","01000000823275deb60ce69eaa42fa822dc5c1efb67f812a78c05f23e5bf2ac2000000002ea2a7d200431a9677d178dfb955760ec693ee68bac67a00a25fe359182475e4b3e5b449ffff001d92e2b807","010000008c0ed5eb0ee73270555b53e41acc7b5218ab30332ffe0dd54973ca4b00000000abcd9b7448cdbdc6867681fc3cace78121f0d1cc2e2a260130b5d48f6820b842d6e5b449ffff001d203b1a0f","010000008eb8d8228093db51ad05eb8f8232f4fb3feb70b04513ef568af2f878000000001e58396446341ff6c4aa035ddb064f6cf65f8e80bd5fda95e78f3152b13c9d86b0ebb449ffff001d39b85b89","010000003cc296ef2542f6a7412ed2361ee0e86f87550bc2ceee1bc232c805aa000000008b092c02ef124c9292227c28555b259e7a2cbe668488001a4a44b095a4e36e92a0edb449ffff001d04fc296b","0100000001a7e55de15811bf8a3d23e02763dab57674ebf359ff10d8d31edc1b000000009649a07b6aa6298dc43631602eed1a71250cb55177a1423a2621c0939ada97ff8ef1b449ffff001d23807b6e","010000003d6b1345dc1e11d0bf0cba72d17f0d800824d8bf208f2cd6bf7f19b8000000006179e23625d08b824e36e4fec05164253c17f3ccf80e1780210dfcf6ea6f708008f6b449ffff001d208fb92b","0100000096865852ac07c70fcec4948fe780a830299c3c0aebadc104ab0255d400000000ec06158ee245bced4ea2f20b1e48e72e19f5f141d8baa508bcdc3dd87f5e8a4aeefab449ffff001d13dc20b6","01000000a67e4b05e0f9e9be99d3ad559ee5418e77261086d09ded9f366f6b1e0000000013469923bad6d6767330727b83c15e70675543246eff18fb155b8d60a13dbe913afdb449ffff001dcf6d1505","0100000091cbf95c85701bf73c737f3c773b278612fbd9f4ec747f33a51cb27d00000000d6633db197896d5de688a6671e1e0f19c232b5d427a20482a866ca1461716d5e0dffb449ffff001d052a6a98","01000000028d62a92d10ea89f7cd794d770f29d498520fba1e08d0cc20a9738f00000000e33003e121b2ceb619c0e12a15b63bd660c1ae07c3f7d7cf8c49a7164c21210ab904b549ffff001d1a8308af","010000008c6c89d6d11e0e10123b93f771b63b9f5dd026c5fd298128cb17862700000000129fc9f68caff5840cfcc028d09ff58b3343549124eee7363a00d4993b1b5ad81807b549ffff001d08c98618","010000003998862334b2be0e594a2013065d8b57ca8d66a81f8394c0d3cba40300000000059e350f8cbd6ad334b13c1126a7275b3ed4c1306cbde5cafbe30bf265eea8ae4d15b549ffff001d31fc7900","01000000d876ab2b745aedf891df4531a5f27d9cce1474eb90cf4e97e627629e0000000020de30aa33f1373793417a0fc37aa9b32b95ad1e0c1ae35cfecb5e63cdc61e41d20bb549ffff001d1f8e19fb","01000000bc830de3d6432be9c23b9244d1f8ed40709295f67c451c2975a82be1000000007f88fa8f96936e0390e63f39f3947c6f9f13dad8ebba70ead1f3f4e2dc9ec18b3b0db549ffff001d6349a506","010000009ff2ce4122b6ec9e1b6ebcc46ec2a4ea129fa86ef7bb48a11784d5c0000000004e48bd2fe15f9d5ffc2354517f912cf1c59b81d40eea6dd713de8ca408b112cdc711b549ffff001d3922c127","010000005d27a2ae753e22802ddb8817cb78a83c906256ef61164ed9b03c1f6200000000a8b3b925d6b94ea70a5f6d3686655b1330a4e413e8d1c8949bbf3c41d9b68b4d4712b549ffff001dc1d54200","01000000c38c341fa11f947b781132ed9126cd0f95a3a6995957cd6376e7a25000000000e62662039d6f3d771d7afe83fa6f55b8779265c89fcb10250245a0dbf7bb443e1916b549ffff001d363c2139","01000000b02023d8eff9eda4e4972c7710b1b3e5ba29ff02332d55494048c21b0000000006d3b2e646cc7365ad8a3f9efb1052c10eda639c1c08a7b8a4076bf019cd9f047918b549ffff001d52b85e0b","010000008627149262366312cd753f1e83188c1ba98d074d9adedd11cfcf617f00000000a9add55bd514e3cacfe87deae6e0a08bbd1d08bd526a9957117da058a5b7c2b5d31ab549ffff001d7f77b509","0100000066a7dd91addd81082e1ac23588c1fb9c2bb40fd9a273bd3d1cfcaae5000000008c28d82510ad811d45926876a7b404828254354f95c155fdab68d09c17a333b4fb1bb549ffff001d2346f749","01000000d797323d5daecacabdb33c9d642e797d6bf365d4745be609948b58fe00000000f38fd1f5dc4d0fde7a6cc60726bce7c3b239e0056f6f9f398528f7fc1fbbb69dd11db549ffff001d35a446d3","01000000b6b2d9abc710725108366e75477ab4a8d1a16340579934c48d63ec1500000000df651e7143773ed4641a3bb2688e8e0503682ff8b353907a0fc07a600c283e51fe20b549ffff001d0039bd69","01000000db4eee25cefb012b6f81a7e498aaae7ae05f903e5e6fd4e6b71848d0000000005f2c88c4816404d019733d26bb06a0d10ff12d8588a3a0aceaef30ea05a76713d323b549ffff001d03c1d0fb","01000000e23c47d9af739a9a1ce0543b8d5ceec4451c86a0804b21b7cb9001f0000000003b379c66be5c6aab73963553ebd952ab2447703fd7c445365c958a15b0e7b18d7f25b549ffff001d0360d75a","01000000bea1e4cea1ac1925f74e8a1e305ae9222a55e5dfac407bb7a89b5beb000000003bc6780c2becb69ce0b96665f6fcbfcccc8b730478d1bad622ef3260115850f69828b549ffff001d18d26aaa","0100000003ed7a025509a3adb53e6c7045e58e888070739452478d96945acf34000000008c0a6be51880eab89d44f7d052a33abf7164e15130f9a3b6911558c56c262fa26b2eb549ffff001d340666f7","010000002d862f5f0209f7a1b7e820c29523111c63bc159045f443d233c8022e00000000591108d011ca224edb4c764cbd03286004ca7947d68511cbb0ff2aa8cfd48889ad32b549ffff001d3013b11d","0100000042cf0c95c9f21fde8dccf985cdfa607fb8f428d08d93319ef76163ad0000000098657a7106a7787e4e9907fbc09ef3fa478e373628a2214a8d0fc9ac0293e84eb136b549ffff001d2dc8d425","0100000013856c4fe61a6b3455fc04e83f224c5fdb6b9232a3bddf696ac1d63d00000000300bd5c04fcb3a16687a9ad71ed6c936b7be3fac9cd19933672a5bcc5e3136df9e3bb549ffff001d2fdac9c0","010000005468a5a0d46d9f698a39d5f9af5125d1526b594eaabcf59995cefeac00000000107ceaafd30361eac35504f6f02a5113d3e71af6c650faaeacdab7691be753c93140b549ffff001d2c73d297","01000000898e7432e4f5f6567e352645973a9303ea626a040c9071dce294a07600000000f38cd0d26033b5aea1dc40f713de96f92ab724b225c7cf4f96e2b931761f814f4c43b549ffff001d374a5262","0100000035aaa9c4c5508e87b99d4b31f6e7948326a7312e4b1af65a63cfa47100000000e363377727f81b7e10904fd2ba7463f8859ddf2816ef81727a5bff946337579efe48b549ffff001d36898f0c","01000000c9eb2441eeacfa71950520780bf2df58c734cc05cfc35c4aff5007eb00000000e4f5bb8fd9569381b9ed3410c13345a49bb556c4fc586108ba1736e3bbc6f073234cb549ffff001d26ee6115","01000000db3d8666d15088e6fec2826a0e027f3471beca46e039690658b4570a00000000dbeb0f396c3831349ef884b410d0ae3b228715944c086aed831cc656a0c27b0cea4cb549ffff001d2de76500","01000000aa63bda84687c4e10cfb3f14a81af698f7c992dfb4b04d1875f947cf000000009139ee16107a30872ffd50db3c39b743d313dd5f1b6e0d35018f0e19e547af37a850b549ffff001d1ad784fc","01000000cb3acf1a8d069207cd64b9e44cda82c3b7fdb4811b70f9f8c28983fa0000000085ccedd1cf4622f1a49fc824478d397de86e7733ba57341070dbd63cb27b09aed75bb549ffff001d1474a32b","0100000010b8b2305d563b79ab99c19b66912339e1652f575a72d7ae4bacc4300000000021efcc39616305b8b588b673162a2a50c2b1094fa004fd22ee57e8b5536f612f575fb549ffff001d20df1c6a","01000000b14f6acf6cb0577513272f9ca46225681b211c3f2387ad8d4e6443c2000000000aa401975939730b2d095c1f54a4bdeee314701d04036b7464013abbb9d19ab7c164b549ffff001d2828ef13","010000005efc1d6d176fcd8922e74d7598684e48f284abb855451fe457db44c700000000ba1e4fa0d8910da1eee34e3a35a5b6be568b8e1493e2756298e45d11baad7ea72067b549ffff001d8281e403","010000001a18648b27462ac952378c06fde8e9020c065d334c1a2506d55e9729000000005c1d16e0f04c9e6c3027c7915225d0936964dfc84ef1c01d7aabe38dbd96bd55056ab549ffff001d3063d249","01000000bd7cd756f00550603aa1dfa1851a1b461d1271cc2357a24d7ef1cbe70000000076e3e756fd33cfb5c034ec61915950208b94acbe8844f7b0059fb5b8994cb6c1226cb549ffff001d16765391","0100000036c58f2ba965c61f74590f0c97fb9f5092887e6b34e21e8ee940409a00000000fc004326c5a432d55deef7a951a931e67f2cb4dbb5a125d5e7b6f4f0612bf41aec70b549ffff001d366f9a0c","0100000077fea06a2211ac58016f4a8fe127d5fd2fcc436f9d718921aa6624e200000000ff7f98579c1755073c2fb12c61dd1c773435b6d9c6e4523386940272cf2bbb880e73b549ffff001d3469ea53","010000006b644c4c308adcbb4eeb763e8e52501100c3fb493d16552204fee2db000000009d321be9244ae95d51a26357234a7998217d982ceac358ba26b436eae8e688fbaa76b549ffff001d2916ef5e","01000000e32fa09d9b6f305e072232671acafb013feac8fd8f31313e9a9adff50000000049d1d260f900c63dc192e34782723a38d932b84fe426e6d3f36d29fb4001bf04d378b549ffff001d2c80bbbe","010000007ae7985d388823423d23d86ce49ab69b97d13f4e9d45038b068aaaed0000000041d1be38c7896586d00fcf6939520c89b85c340225666bdf76114a545a72b051d17eb549ffff001d2ed43246","0100000071142d8419313c5c453975a651a1ed80593b780144c4a73f5c8fa550000000008753ed3952bec5e16691ae57f87ec6f54b58596db08f927a9cd8fc1fa4d8b9d59783b549ffff001d087dce2d","01000000f927a6d20b773eeba16ccdab003567d0e11de19beb54a4b3c7ddb8b8000000001bf1067c37552b46b4df8ffa2280e3fd1f011370da4611ebb2c60796d5e45dc28f83b549ffff001d7e07e500","01000000b0f4f962275855ad3dd5f1bc29ffa551f6eada860537bf211af5076a000000007d5bf167d6b67d44e35f4a2acb263ab43ce3e1d57f1beefb3d1752044d2acbf6ef85b549ffff001dd714d709","010000008a16dd4dfe0fc99c63a9ad58b82a326141afb4c19f636bc9ef36dc5e00000000c08cf55d62cb06b91dafb9343dce736d0f2ca7c892c8368475396fff912584789789b549ffff001d1732616f","010000007fb55900898c42f6602254b6ea4cf3b6099e468307ba544da7de1cf4000000004ba55661af04040bc3491f5b09f973bc1e438d52698eeeaa89beb315bb5f1c5d788bb549ffff001d2361b2f9","0100000057628a91186d86d55a4222f023bd20ea7625746050d4e992ffe7f11500000000e6995ad4fef9f54a2506c286ff36761c86c3dac21b0150fc49f50d8dfca7b48c9a8fb549ffff001d076e42db","01000000f92f791b4a8de52bc39f54dd6f566bcffdb3511df041eba1c1056c9800000000bf473b70d3d469d5c172e25292c0ae13aa40c11cc4ffdff6e0d430c24bef3e0f9a92b549ffff001d23892f18","010000000458405d37a4f0769a82e7c6483302b98630d6d2b53fa5a1b171f64600000000ff50ac1cb782243196521095dccf25d01110d8eb7532527c15b2f638549eaab45995b549ffff001d0371c0bf","01000000cfa3c31687301003846d135bf0b71f0a44c5a8864b5205b226bc552800000000ccedc988a1b22d218c10f50a150b93754bd6edca492d2df2c7f2852a7686ea8bda97b549ffff001d3100832a","01000000abfe51c9b87fa5e05f26a32dc08c688b734f4c8e38ef4eed732eb02b000000009ebb967881a6df6c76b80ad7a46c77f509e98e43e5f85ca2dee8f139669cfd3be19db549ffff001d2672c7e5","0100000096d99c4e8625890dd02c2cc5b9b4fd65df66b4b1f6d29dc5376797a1000000001dee4f8e4510e799aaa51bb4bb9b572e172a3821986343482303a27413ac79d5a29fb549ffff001d3984ff31","010000009c920b66a79dabd64065bb1368d1ac96dd8cc90a74f8fe8d9e8c103200000000037ff53931397a6eaba705875a03dfcf61e0fd60c9df6d4e36dbcd70c1bfe2e46aa4b549ffff001d045e82fc","01000000d94dfe6e950fbd2c8e1f2636d0b571c38cc24a46883db6eee2c53ba7000000000f8e46fcd917c0e0443fae021346b890fe1134cb380edbe9a48dcd5530258155c5a6b549ffff001d7ebd7a0b","01000000cd386be6ccbc760d6eb181c09f96f155e9e409f431dc7bb2725b2e1600000000ac847ba0de760c8892549c2ffc2e97055437b6218a9d5d58c05e83cd22ed5129d5a7b549ffff001d08b2f9a2","0100000018140d7d99f6651b4a5a3bbbbbb6e9f7e5bf17d3fdd7a80ef74b606a000000009175a0c14777d20fb0549e702845edc336373bc372e03c8405aa34ea8b6a01419eb0b549ffff001d270381df","01000000faf2d402b387649455a723c726456fad4428ad4258cfcfa249892a0f00000000e192c56459b5736cbd7de4fe8a721490ec52b5c3efd7516682f027455425a9ceb4b2b549ffff001d69c63709","01000000879d17f216b4ef4a21a91300192d5ac82fbdd33d4723a11531989e85000000001d9470598fbc41ef05a69c9ad0d514a01e97ba7266259e737c99720e9fc04f16d8b6b549ffff001d02cfd26a","01000000458643de1b2aa68306ab170271f2d1694e03d53f1a9c0cc907288ec3000000002a09a032bc154c0ce6e2c7ede864abd8c667c988c8db247e493ae48fec800254d6b7b549ffff001d6c860104","01000000f688ebde25e028efc3a784e1aaa455a94389adce7af23586f8938432000000001f0ba9a4bd33e9c0ea346c382d9ff6ebff6ed8a3bc8c18312a709bf29d48c916d3b9b549ffff001d299df580","01000000e9b969bcfab3486e508c5b32717f48890313fca0eda0f3b103e80b30000000008d5db3ab9239eb4c9ffc8f702edc71a726e24b06d501948613ec25eeab9a37ba95beb549ffff001d27cf677c","010000007ea6bee11d65fcc99a18e3a91030d96ac365c8fd2435e880ec05f2d100000000600bb7fa1c92be0985cbaed95a263b0b850994e35dc9b02c37ba5f7387bb1f58b7c1b549ffff001d17f7339e","01000000e556f05617534ffcb7c6c892c4466bbf13353223f6974ddb31b188e200000000d1ced67a4add349faaf234980de934df9c30137c9fc7f6e4284c6db4f47d079d29c4b549ffff001d2a6dbd5b","010000008bdeb5f57c62793229e60aabc841a68ca0887335726b2d54a586097d000000001f450e785fce4107f5265252ae0626a50c1e2a6587fc27b0944ce0b0d1d3a37733c6b549ffff001df6cf6109","010000006cfb0bffd4bec6b169a99070e67d10b94724e10195383e31b569a85d000000007cbf2931a7ba846b57d14699571240896620e3f27ded5d11c0610286fade67ddd8c8b549ffff001d28482813","01000000336716e5266a40eb6cec27e064d17ca9464553f99bba92f0772a11d200000000a9d2a0d1c92a99dee490596ed8157c0376b4ca083110fce5f1e31d41c1cd600fcac9b549ffff001dbeaa2e04","0100000004dde7f73ea71c198871c82d43a231364cb5ffc710d7156283651fde00000000dec4068587007c564f2ab9227ec0a9e38b780955c8198e8e0ef6da0435906fe3bccdb549ffff001d3a2977ef","010000000f68157ab9f4abff47cf05b41baf0c4bca767460c53cf1d91ff0755e00000000f3a4110081b20ec7f2daa8698062f6bb2f0af2cfa6e51ec73e9e590b737a63f25cd0b549ffff001d14f40e51","0100000037746c63a2fc4cbe360b578abdcb800061ef1760042888bda4ce270e00000000a41650dc61f8243166f47d0232ea200490794cfbcca8e206fcde4aa018577b971dd1b549ffff001de3dc2703","01000000fe71a157aadd489bf3453a3e9905dd262b62732204e62c575510c06c000000001a88191b967d0aff1316a7d7057078cd8094abd1773fc007774f9d79da6193c2bad4b549ffff001d79f90d09","0100000024c51ad365419fb1d0bc8867fe6848f7f87c7b7fa578aeff76db6c2e00000000ea5f47b37743e4f4491569f35909f76fc579efe04d1b389503ffc5d91b4f5006aad5b549ffff001d234f4227","010000009a25149ea4046e0e64f45e6c8bb3ddfdc138f0d5e1762c63d56ea14f00000000d60c496bc44dad9598debb3445d644635a72906ff56cc26923a12f083ce31a8a62d8b549ffff001d20004a15","010000009f156567367b558d95726264dfc7ae77a46f7b69762d8876bdc9defc00000000fce645645ef8eabfe9410a7b90c866883c7a27f9ad0f926c1664d4dbb3dee5ceedddb549ffff001d22738872","010000007b64c18b9bc83254fe2c275f3185525a71053bae215b1f9d6fc05f0c000000004ea4a8682806b703108d485f82a693d9479266437b4afcd7cd818df4004e757dcce0b549ffff001d19dc6916","01000000b86592f5d8242d970876719c85e8f8b5ce13eb76f1e5839c378ad28800000000c216d5f5758acffb333a3db280d23d57baefe24ec40debfc83b78378548d9bfe6ee7b549ffff001d358d5c48","01000000f94e7540c2bf3b541e567851c520cbb83288caee04dad6e08f0c21a200000000433507fffdd504f25f4dfe14fb7205ba2eb959cf407d0aa9759c431b79d2c2921aecb549ffff001d245946cb","01000000fe1eb62e7c02a8d5d16f24c4ab7f7adf1677db218689ac9723f56f2b00000000f18b40d4af11ad0171c0f49f7925db3065ac4df6f5885718ce3bbe6fa3b225e73feeb549ffff001d2151325e","010000009999987e0d01e0012205ad06232069ea65330ef585591090e91b9147000000007048dc62c473dd9649997361ed170898b090e36e5a2eb7584c43f8e4ae7673d131f2b549ffff001d2d3a2e47","01000000e2f9208a05b8529cb8c1f327a9683df02a2639172e427e1c42c48896000000008c252a7a8e8888985f8646c692c8ae5f99b701010098f61e7bbd63fdc537373a56f4b549ffff001de8d4c705","01000000017e2079f5a664602e8d35d2778e76c1a4f28e8a1fafbea06f9d9af4000000002556725dd20b5fcfe26579600a6fa50683aa48692bfa8e28ce41f80d3467edf52af8b549ffff001d1584a714","0100000050a3380880e289d79f0a04e245c86856c6847d7a56d6a5e5eeb77a6100000000c9b0de72c16948f9f2df09c5bd7d18ccfdd5e71a6e0f898a62c56c006a87baadc3fbb549ffff001d048bcd12","01000000f2ddc65e16c074e10419158dc8d86c94aa1ad9db2a372c81e0bb8bd200000000ba386c4565c3b3f1cb09ff219b187023a3fb44128d3d93995d44157bc936b4b1ea01b649ffff001d09ba8653","010000002a8c0b3ec96c6491c7bf4a80edab5c7e1e932ee1ed0bbe4d13003188000000007e8a4ac919728f097cc77d38d15aa8ecf750ef2fca809a50f63f36705f805a15d103b649ffff001d2121ef36","010000002ae0f5744108a6d1b06b96ed6fbd0b87f6f3b8e9a3ab1d96c513be0d0000000098dcec4b33636f9eb8dbc8baad30b324a5988d148dde3ae12a069c3ae63c76ce1207b649ffff001d18846f90","01000000ec60cb01a688d098a626bd5a9e2fb05288aa30eb1954fab99bdcbdee00000000ac094eed2a0540a20db695f92f52c8ef351218c97b873a9f38e86069db0dd7213c08b649ffff001d35beca04","010000005d4d67a7586b8f7208849aaabe6056bf22d7e5c64cf43ad957af364300000000b4dfc9c78283fe8fe39f3634c5dd37dc9caec03dfecd29288dcd031de3d68195770ab649ffff001d17f1be65","01000000e33e48e41b89643660c27273cf83aaa95934e3c3a55dfde7d84ab811000000000acb34e11a4a2732ba9177a3821887ba890af155ab4478994222fb4b961bd77d320fb649ffff001d227eff24","01000000c9079a0adfc802d56e0801d82d08c6325b24686a10d480a16b195c8500000000b1e9980c5cdc9cb2f2237444ac3468518ea8db4083efb2b294bcd99e436506c51413b649ffff001d32d60f88","010000003e6e48525f1a833758d28e7c0a23a34a1af209246bf1c217b7fe1cd700000000f6e6ac5b6451e8ab5f9df1a2c044416626870c94f470195e39a30e0a1a965a682915b649ffff001d14873b8b","01000000a03b1d1a3e78ddeb5b61d4f06d8837cf745b35e1bcd5454d562bc29a00000000463d86a6300f26ea537cca811dbd6a9f7c75daba34b5a99e87c7fe1e62075e52a41ab649ffff001d3067b8ca","01000000c8fc6e8852b8837f4c901353c1bdba2bf15be269c834ec9e65e4f2fc000000004962e588a88964f7ee24053ae259f25b379251f0a5133c30398383e008f9b7d0231eb649ffff001d1a1bbc7f","01000000ac4f8f4a7bef9e418bcb1e16b5859294c74f916b5cbbad9c8e5fe07600000000f5d74574b0bc8ebf0e0b03cf4152a75402d207425bfef2064d9653633746c51ef822b649ffff001d2a7b4c6d","0100000020805dea68001a6612f7d78201e06e62c7cc91cb81bea37ac4006fe3000000004ba327f0d3517290bf073d2c57d492a8acafadf809101a3b91e3c73334b75e44b628b649ffff001d2363b98d","01000000f13f22cdd222686793a7c12dc0833f31d406363dc4bc0be01510328300000000f7ed7281f0525dc23bb6f4d3da514e15ee25e20c737456c40e4cae08cf7c81cb952db649ffff001d1cb63082","01000000ca8bf9428e8b4e84866188042b2c8cc4a03805a5cbdd83234b467f49000000007942b8adfccae7f2e03861282c2b0a961c6d7be832f9159787c7ac0e774f00c5ab30b649ffff001d30dd4599","010000004685ebcae89dd41f11014e19bfee12b06ee0545ecd7d1948ed8d1cef00000000de3ad1c1b7d23fdee684db7e5d4b6f77a137f2bdff123180504f685284cdfedcac35b649ffff001d195da855","01000000e679301cbbc3e2bd6cbad0a78c9d9d432b2b585a112a9b22571dc87b000000006dcf25857a683eb1b6d20665981e6a4a0e4ff650936d2fd139a163acfa7656445f3ab649ffff001d00ce4a0e","01000000dcbf6d9835804226841c30343865a62ed35bcb2c571919e25e74529a000000009002d5b9d91b97038e16d6759598a26bc3821ad84819cf940a1d260a1a71d7780a3bb649ffff001dfc9eae01","0100000032a260674f5feacf7c66a817044d863d8f17ab22e9c9f280a3a1f2c600000000a7a90d45cf92ad38a72c3ed29fa210ab3ee800c094540fe116e6fc901fe3c7a2c63db649ffff001dc5e34a0b","010000009f425915fe9764ffcc8ff9a5977560fdcfee2dac830f17cf0fb1e6c6000000002a95bfa2038d8c37dc38eabd2202414f9d714a1ea39dfa1bd9e783261bc2d5405140b649ffff001d22fad5d3","01000000d37a661798a7d2369f437411b27e6c3597bc9a967d302f37cc71c26a00000000981023213873c1fbd9a40914357fd0eb958e233a386c373048900ce7295cf4f62342b649ffff001d1e318aec","0100000066df311102756db2d9ec01786efa6b908b9ec563ae94920a6c8235bb00000000d7b529373f08dc3d90d6711d7e19fe08e13a6e7b7124783ffe30e180854167c66a46b649ffff001d1ea09d3d","01000000655734c48e1279732a5ebc6941f5ecec2a66b9fbfd5d5ba55fe62895000000000fb333ac507ddf5df073a5e5cc6189211ceee113094f48e7da1dd362ee6df7d6b74bb649ffff001d05b70001","010000003cc4f289ff6e19e7ddba318de1d56a0468ac2ae71f574a54e7a2465400000000c1c263958b1625038fc5291525ebe3159e705a5cfdea7bc8f0aae9dcba3ff7ef1f4eb649ffff001d3564f902","0100000011850e111189ddb84abcd977a1ca1be6ea2afff4bdc3e36537e9e32000000000509977819b78dc84e2b3c5dca836aff1173108f1fcf506ede27b805bca785f092a4fb649ffff001d21f8afae","01000000d829c21dfe9ddb4935ebb6259a01802eaf144a9a3aea46eb34499be200000000893ab1ecf1da18d3940e53bfba4b37af071362f787a24b8fa9f21a0718353bab6554b649ffff001d0048699e","010000007611f563cc68a3754d8ac377e55c67b793d19a31dd6d6dff578d87b000000000e62799dacf91d1123f6a3379aad697773bfa5cbf09b8f9d54cd7250e9c580818c055b649ffff001d3467d114","01000000d112aa7d63d459b8b9ebfe9d015245a087d262f1ce66cde6725fc3db00000000b09e44eb3928e2a90e99e1cfbbeb9144165ec9d8eeca212760ffa43f2e584e8aad58b649ffff001d08052047","0100000056640579e7343fd586837e30954010f2867d592fb540d20e9f016d3300000000c149ea82cdcb386812bbaa2142b9e79e8074557cbec2d0f78fe6eec3cb2c80a35a5ab649ffff001dab3fbd01","0100000078a1df66ef749cb201f5a5028daa21f62273d85fce64f90fecab22910000000038215de954f1bae918c70556eab1ead005343373bf126f50ec9a20aedc5a3913d45db649ffff001d25e2a2bd","01000000c554aaa617683af6906962b244df113a83d33cba07c9b28a631c56b300000000e42bf3f6a5649b00646f6d1cbdafabd731c544546b0781ab3097ef5518863511b05fb649ffff001d3209db07","01000000b6351104363e90ea6a95b2dc27824c5eaae4fb5b3aa8edb67b61556400000000338b0717df9660c51d22b842fbf39985d2ecb694647b5381b37a1195c9ca863c1f62b649ffff001d04859d06","0100000087a44cb97e99bedb123ff5003c6bceff223170b5ba282ddb1c5eeb1700000000ad5d79cd1fd249869c834d0ac8c21a7f917af5c5c5d4c025e335a149d3b007466865b649ffff001d35b24523","010000009f97a78e3f21e52c569aa973596c1bc67f14361d8cde4a4b15b800da0000000099c09458764079fa3c7951a1743a4dd700d1833d998212e9e89b440925e507632167b649ffff001d190758da","010000006d121213f041c43399026ba806ca5cf844bd86911bab3bea192ecf9e00000000650cebf1d06a79d9e50ab86ac6b62b4ded2afec5bc2b85657860778d2b6b90db7269b649ffff001d1e3fc147","010000000896ecffb0d91974d56dd24c48c52986f4b2a4ddb64bbe9a6411ed0c0000000021b4bd20e931378c425fe4be03f015cfdfc161f387ef309bd642f85b412c95fc4d6db649ffff001d22600d51","01000000163a8b84fbe439f3f379482a992570b8f8cfc23ef14c52f56cc3a0a300000000e00f10edc83dc88487211f0e3bdb28bf1afaf1201ea1b4189776db9fc85951d8086fb649ffff001d8ce4fc01","010000008a5974a37645a194fa3976dd19b7fdc8575b4f948a436dfc714cc4b5000000006f81591d0d02ff9327864bdfc4bbd43b2cfe14cb481d455d03e058f9cc103f314770b649ffff001d357e01c8","0100000042eba6be3ed60aeb91c76657d1cb7a35d16631751980138c10955b54000000007dd509a1ed02dbb2968d8212fd5c5c6ba533c96b0efab907829f39307665ef3a7d74b649ffff001d55d89714","0100000013c9a7a3fce10d15f7e599c83aad7cdcfb11e4b808c0cc5af2fc149c000000001e0fa3966fe3f611497b0e1a78df4d29c3ac6e7ac458aa7d80843671274e85baac74b649ffff001d2b64c756","0100000016ac04287d1ba5e595a09f7b55285209deac81f79fcee0537989b9990000000086397eee1e8db69b1d64293bb4d851b97dd6d8abf8cc391ede8f2a4e8f0ef428fa78b649ffff001d32b5d112","01000000614c8493033aa65c0a3fb5dff9fff37b92f0323f3e9aa00880440a9c0000000016126f83beaad2893ec320ff30657b2de0f6f679870c0a5a20159f7bf926ad78187ab649ffff001d33e5e0e8","01000000ccf84f769370829eedf0d35f61e555d4cab2f2a608d1c90f8ba0041700000000a6f3b379841ac6b627d6075dfe67c7b9fbaa53f3c45350221df3d5fea9f048044a7db649ffff001dc9e14608","0100000028b6c0041d169e7e6ef486175685b076d106c9f2ed2cf3954435d78300000000282f9aaa106314b4d8e7bb78a708f035493377d5e36f22f0f27de55e9efc0352467eb649ffff001d289dd3a2","01000000aeac4822548d23534b4df76215d2d6a7029a7769aa67cbdf0ff85c390000000084680ca48ff187629eabfcdf3dbffda7428ed5b3a7d97bd9364f6a4169a660490e82b649ffff001d0721c307","010000000a088aa3b645f019f9ca2ae0dbcfc8da49bf38dddbed4b8f05c9f56700000000dd800ddfc860d513ef9d75a81d9557da0ae694b7bdd03f5159bfc6f5a883e29c1e84b649ffff001d2183e899","01000000600ea8c8f649e8c1ac801d2d612ca775e1016b6b52fd9469ae99f1c000000000a3b756c39c1f804ea0a1e88ec2e2a156969bcea4d3a4abfc1f704a66be15aac9cf85b649ffff001d202968b3","010000001305abf617eb63eace31751fc30c0febba1d69ba0069005a690decd6000000003e497491f7d954fb24525e9a4dc2ad8115dbbf352ac6101ca1c878e965b619006d8ab649ffff001d2d883d41","0100000061fcf0013c5d4a038d2ccdd45d3dd779b57eba81ac7820d47c0105200000000013a43163d4543c495bd7725e5a413af85374f11f58aab3ae0fb400a3baffa1f07990b649ffff001d1f2a9acd","0100000053ed603cafe6c250c22ba1c9133fc5bd19743d6022b7a9a2767f1fc300000000f3d4d25c7cd2294ccce79fb941660239e719d1469fb0bc295fa4e63ccd30b5f71693b649ffff001d030c1b83","01000000a7c16b8c8b487b2aff47cf46d22efa6593bc2cfe2247149a2ed8766d00000000a0ed4ea288904bbfb3c13eb48f4ae887da8e36a75dc37e6ce462ba084c0b547fdc94b649ffff001d2db548fb","01000000940f177c2b007d8abadd2d8479123404bde35a04d156a71d59f201ee00000000f6a2bc7e4632fdab33b5dca370376f5822baf8228be724ed7751bf6100257c80409ab649ffff001d3a5e4123","0100000044a7bab72faf8de033a279f6f9115f5c923094e312829852cac1359b00000000b8deec2d242764c1fb46146c5a436064db6da04ced636edc615216159db138e0789fb649ffff001d32feb680","010000003af74cded5fa7ec182f0535dca7a9a095eb4ab85cc1aed58929ddf7400000000986da9f7a56db86de951222339d9702bacef7a5a91ee6dfbd82df266582772dc61a2b649ffff001d152ca51d","010000005337e7b4f8988bc3298bd8a8ba4c71b5655f6ea440d58e0e2ae6af7d0000000088bac0fb7b01e20ae04071022297237a33af7211fbc356be39e0f1a00ab050aaaba7b649ffff001d18426220","0100000052b4cf644cd945ad9e9842fe45260232303d8ba98780d49377806b3d00000000b192548292a668454765961fe09e37470787c955013cd22bf516fb2cc6ac822b9dabb649ffff001d2a5ae99c","01000000191456ac55d5ec8c7519c0db715b2b82bb9f6ea86b24b5b281e901f500000000171bea128f864c3fd04c56a7aa64f6f55474c25f59a7c71d0f8bb06c06a633a81eafb649ffff001d2236f62d","0100000047e8767195b4aba9629af6cf4af63ef1db06430bfac568bea2e14db7000000002c037ded1691cb6ab1ac2d09eb7505a41ee264aa5a38dce470c8e76ee9bfadd4f3b1b649ffff001d360d7344","0100000060a448dba669f0c23a08a382c3e31c81a5f8bf25ec8fdec8ec00676f0000000074b5a3e737200cdc6306c1ae7c3f90d328654615ef92521851b5c830228600a73cb7b649ffff001d1a8eb24b","010000009015e94844dc646bc331cbdc7367977da12d8fefcf6263cda4667caf00000000d513a37395c4e4d9a28744385920440cf1b17307c30b4acda0e1def08ec71f0f85b7b649ffff001dd3f0ef00","010000000268527da3f93ef5776feb8769c6a60fcc28823a37b53c99192673b10000000051e32a8d70530088451eff2adec6f39047b989ab80b023388f35dc0420af3d9d41bbb649ffff001d3e3a3b05","01000000a6b70ec79848b0a7b147bd3874b88d0098aaa5d9c3c883cfddea7af7000000001fd66b91745de1e736e1540857c1feb0276d675f357e703be6ff735640e970eea9bcb649ffff001d178039e7","010000009f617853be348f47312cd3784536138b04df0f57f8f2dcde4e1f28eb00000000a6b0e0536819be6d8b571adbc48c841a301dec523aa6bbdc01baf300dc9e30d9fabeb649ffff001d29ecfdfd","0100000030cf36a0cc92d2220fa01f9da92d28d77af9ca583bb0672663cbdf95000000006a0914e5ec791250f3c86a83dd8b53772baf188d35de2068ccc537aa51d2728962c2b649ffff001d39d18f51","010000004a892d6ab3d1e2e09f0a426e631bc041fcede6466157d4e253a42ddc00000000f72ed224b9231d1ac7feccb7b42897f6e09fa3bff33cd4fff256b7e496a80f4374c8b649ffff001d30a18f07","0100000071fce38a4054146201bc5c1ec53beb1c676c7a8addceb697c98f9c0d000000009a18c673dcbff563762151b849ae21cf0eb12c3b90bca93b3118b1b277d25e972ccbb649ffff001d09be2dcf","01000000b9d8f3a98e1dc0bd46889bbaadcc2427829a9244bab770521e242e200000000017a17038472bbe6bd29020a49be7e7af55a2a4ff84dceeb306a7170739ed255b83ccb649ffff001dad446206","01000000b67eee91e06c27762b1c67b656d3c1fae9451ca2e84614a764334e9400000000f8548a35261940d7b8650c6abc9827527ac27f38e8c5ebe4037e0366b2344ecd52cfb649ffff001d378e6ea2","01000000983236c64cab3d7b91c61b2ec447810a3950238d0a5382d8e895edbc0000000013ab16804d3cfd1bd88bb6fac184121b624e4be6cd9dcf56b99ce7352b07febc0fd1b649ffff001d21443334","0100000055de0ab91a7914033c9e1f96ba33af4f0d2badbef855cd270c75befe000000001707fd57c6fb94dea03a889e0cdcd00c07d554814d0b2aee75ca08b96197eaeee7d4b649ffff001d1a3f0769","01000000e46b37d1b6312848f2eb6918baed6b7fdf8d680460f28e35cae9bd1b000000008a5dc4fce19abf9c0d1a532077ac8a0cfb9a4f079e3f743f05750ad3f061af9550d9b649ffff001d08f751b6","010000002f4334807bbb73553010a139ddd2eab8c8cbd1273643ed321235333c000000002e9f173dfe752af1a85e3503f45d53c24cfe8012ccc0b8505698f6534b5e1ddee1ddb649ffff001d287a7a85","01000000aae28f791f4bbfcb2ee9540e23da7d91b90fbdc6c04c57e9a02d2cd4000000005f48b3a6ffced9ff284bb3583638188f4cfdac14dd6cfe8918459ee7296b368b74dfb649ffff001d337631e8","01000000d6c243697e43dcf1aa4ec1135481e9c85388bec2a4264fe5809db9c900000000390e7b2e43bb286ed22447ea2fde905a2fe096bcfe79461084332e011607b60a96e1b649ffff001d32b7dd9c","01000000f06f3677601438e336e3f2aa658f0c2d0836e3e591391981472e85b400000000b0bd464f445db36c8bdb987c1a20a65846ed60adf8601a3486e9963d87e7c4a9dee4b649ffff001d02e533da","01000000f237f10ba0f401e16d410d5ca9cf1c6bd558347bc2462a0b6d0e185f000000006f17f45260d1dfdfac11a0a7e638aa56cc3ca55f433f08c6076bf5f31dca7b7a83e7b649ffff001d05b43236","0100000059630260756a69a4960b9017d03fd11ffe93f8e0047a56a5e12930a7000000004fe38fb09506f679e6a1a0b0233ac1beedf02f0650adcf7023503e72375e810db9ebb649ffff001d1f9fa8fb","0100000066670468cf4c9074da7e9642526f8bbb46db1a0cc8d3d025b119e006000000002b3c90cc51a5022fba5a806a4f7feeb7e060bc393755e921812d271464cbe3d423f1b649ffff001d207f463c","01000000f6348f616b20cb6f900f8e882abceeacf0960e3e1d88cfd06b96fe0f00000000215c469c80636a1135cee2d19fc12a32a8a03b26e1d0ac2046ca9f66d7ed670136f3b649ffff001d28b5a2a1","010000003e04e65ab0942b527694da244250bd345caff63b4bb761cb8b7f7d4b00000000d6ce7ebecbc3abad09997fab79997b96342e395c07f28ce78f1dfc3c88b9443c7bf6b649ffff001d249d1b6c","010000009cf2e0ec7a79866f428c77212f475651263314dc1046e7e318e8a52900000000335758cbba49aed2c2248a2e2aa875265b63abe170734144f900643468aa47fbaef7b649ffff001d193c4405","01000000f8cf1e8bbc7929dbb8448ae1346277f3f341f718c546847c92dc015e00000000d28e8732fc0605a0bf426c95d565457c89fdd8479fdbf1f97d15178fd9f1f3b25dfbb649ffff001d225e9cd2","010000002de8578be78e86293703c748205871ea47b6570b6923ea2ef316bc3b0000000079e877c145a9a2a24e45b92b776bd86d0c859a5c056e9dd8847ace5e0b4f07f71cffb649ffff001d342f6973","010000001fe01b87efd484ceb6baf58d0877e33c0adceba7924ca1e779ea2cc000000000532c9104a0b0ef228d6a14aec037dc67edb0d5a03c1b5340f13e756b2ef36e0de1ffb649ffff001d72a0e002","01000000854b76d5dee8ffc4188b0e51adef331ce8ed188790a72f953195551500000000cea82736d55808327c5939156e637deea5d150eb7b6371e460e045551e7e0fd4b603b749ffff001d1d08c513","01000000713652e11b0531f3583539be9537103f57d977dfe44993fddf68ec9e00000000e4b360eb792ac8246eae77635d9e6af04cbd2f1e8fe75a12ab37c44ea4d13e962905b749ffff001d2286f4df","01000000d03d772feedbf1d3cecd4dc2547b2038ee1987c013a20de171d232840000000026326ce081f65b6e40e75d3987e58d1337e3576a79f3c674a630175b34289da41e09b749ffff001d33864787","01000000b9c8fd6573419c332f3f45759c24aa492fb0ed4e55680ba17882871a000000005d40194e46aef8d33c6f60676b7dc8981cef4c6e276bae1e1509235e5b162d92f90cb749ffff001d31833028","01000000cc321f1d1431b4cfbc862b2a2d9f2f5b884c397a6a57c2a773daca14000000008de04854b6909e7bd7f674d9fa848cd488cf778ac3e74160c4c03b492d2ea8c64310b749ffff001d24ff6a8b","01000000c5a1e67aa978e53833645ec40d98362ac6e3adf9400835c9c6eb67c9000000008d4449595065cf1fa100052161469b2ffda18028b1d24ad6252b262df0142716f011b749ffff001d2d6962ee","01000000cd205ba7f846920b58c3f922ca02ef8c22e4bec7a5c0f0a3c48bc0e900000000415be6dafff930c8f97eb2f5e3a5af73eb747659b729a242fd62037e84d9f2cbcd13b749ffff001dfc428504","0100000057f95dec136f5a42d3d81950695699e4fc336202475f06e6b1462b3400000000b9a086137aa86a56ca8c3473018c47da99d3ab6081d7ba2916b98c004cb1669cd316b749ffff001d2109fbe7","010000009b780e9321380846c044b83431252cdfa9b1708bc0c72f16611b3b2e00000000262fed64260ffc53e470fb65e3961e5a235c65bf3b8967038bd0fff6c763adc8031bb749ffff001d3a2391c3","010000005e14ea15557ecf055f7fad3a9da8da2b94dc75a58805e5186430bb6200000000eaf260724a9c47c98510210a132324cf7084517e8349432561a40a275c98f5b95420b749ffff001d305c46c9","01000000513a9c6815557e5c35dcdde8b7a5bc4703ce2da4004ca55049d3c73f00000000bb4add9ff03d60b7f9c9daff8c26cf3c4ef3044d4feece10dd40da5ee93e2b9f1223b749ffff001d5407c106","01000000d0d9fa8c1b88aac14efcc5b827699c998bf420a75b559e7163eea43200000000147e09e35060f334e974e6a975221bcba84b8ba761095006bb93d6fb793e457fde23b749ffff001d27fcb4ba","01000000f27cd103178e158095f0eac0effd1ad97b1a0cc172a9a928b9e07077000000005bca17dc99844328c6e552342bfbc6a68079401a14addc6fe1a7869d43a828107324b749ffff001d56d24c02","010000005e6c74d90a4312d0964197047dc50acff64404409d14be20b941c4c800000000a45f9cbb175edbe36894a181f4cebe72b53908d3d23f5eb8da42ecdc76f3af382c25b749ffff001d21f07a28","0100000037c2f1e31f1998a8d4c6cc14268ec0e60e0b8ccec117269255231f3a000000004cdd5fd41ccb1905f0095ceee40d54e21ae5dec5714b456a9c648d3dc638ebd87f28b749ffff001d1f8e8f3f","010000009f41817756bda2cfacac298088ef86ed4511b65824b6ab025897630700000000a84d6e92ab2362aab8bf30ab5d63d26e3b77eab205cf3504a144d8df907804e9922bb749ffff001d1ec7ecaa","01000000b9ad7619218da88759ce5e15ca31f150f4a0fddf118d5827ee77c164000000009a18cab1ce5659aef58b8b870b500029905fc2a43367e1999a9379d2a240a6241030b749ffff001d2e2af46d","010000007285718ae70dabe793b0235b517794633f7f832b065c1dbc261e5cea00000000cf4755adb8ef837821e8b861294da71394ea887ea0e9b5cc4c2804ecc2908cdab535b749ffff001d1a858672","01000000292b03c6ce4d8e478186640c5f0f2aade58c80781cf78889467360ed0000000044d126c4102e030663d547e17c2896f2d1cb15705774fe6b7b8666999e705c47de36b749ffff001d77a0c403","01000000a127aaba139877fcf6062f8a381acd0560682b8b16490561e1bf8af300000000922eb04065591c81a815a51d239cdf82611be749d2388dbb11f24b6852a10131013ab749ffff001d357c8714","01000000aa635ef5502b5449fac70e1085d9f5a40d18b60ddb999c47b592edbb000000004cb13dc8e0805049e76f75edeb2bbb5dce7a053e36ee267692222f8bdff04dae4f3db749ffff001d053e0741","01000000814c057b9078f6f3f4f6e10fd9ab02e8cca7669626a6b3285a9f3f5b000000004d77f9121665bbba4cfb2bffe86a477172a4953b29dcde95d0c485af4f33d1be923fb749ffff001d18039993","010000005168c2a08b5eaba3ca3e32ce306929552f9b5d5b0c23b019b19677ba000000000e6e22ab7d743a1d098da5431f34c06fe26a46d463549190740bdd5bb87a6b0af342b749ffff001d366025c1","0100000052437871510aab4206364ccfd600006572409ab7061aedac61f8cd7000000000a0dfd4293178286adf918188341b360ed7ac81daf4929f6b583fdb4935647fcd1a45b749ffff001dba4ddf09","01000000dabe5176482cca7d2e0a3079ef6d84071a291bc1c6f273a415156195000000007c556a940b147d9d1b5f2ff95713ed81e1c58a64f77fabd2b8b95faa4fb4f222b445b749ffff001d010dd8d7","01000000b67469362b5b3bbf8bdb87223cb4e625f0cce596135bf9f32b29d702000000007c1d3f170b4a18a61a846b13555e57490017e01692f557227b3c79b898bcef30b14ab749ffff001d3855df33","0100000037511e587d2ac27d46eb862ea45b233ed91acf6c7d69b81ce030770a000000004c26edce0758a45d127694ee6223d2c7f7beabdd24dbcebd6923d1269170c70f874eb749ffff001d314f1b1a","010000009b7d5f8db9af8eb29b3ea50e5e8896f37dcaebc3e59829184968ce3500000000bd3804efd42be9bb9d26825beca05d7db7eb9ca6ef92f0df30377b53de8a2c963053b749ffff001d2146900a","01000000c9b454d2873fe097c135d953c8f26086da2b3e5a3ca06e4c06fba17100000000d2b58c2a8c9ef863d414cb45f888bf4d61af517cda80b5cd9ee6b44ed428748f4758b749ffff001d36bfa409","010000003f84d63327e3f92b25fa86a5028252d97d61a65f9b434c41086a2ed700000000d8b5a1931d85d20f295cd72ae4dd659bf21cdb161968dd30d3bce5c7b83a1826d45bb749ffff001d1869060d","010000006b2f8203892e3ec502dbf5411ea640c3db4b3bb86eafbe3f8b792da7000000001c869d3f761fab2b10816387b75ee1d7368140d3bb525c9c149ee76992b8499c3762b749ffff001d2dc9e2dd","01000000b494552629441cf484cb4b2c5221d4b9c15ad7baa93eb5ee3d2d014f0000000019c652190158afe2819c19259acf04ed22ac47ae3976c20d9521172a3924b0633f65b749ffff001d38c90a7e","010000002c96637ba95890863726c6153e3d94ac9c10d68ae02604005fbba4aa0000000084f6ee9d04e39385a2d6610b97a99158e207bad4ea91b57513efff81b4b89b0dfc67b749ffff001d60bbac01","01000000eab2b4c80e6114ebe9ff78e00429a00a41b69a92f09a8f7700900ecf000000000d8607f866a697ff17a1e5262b9cfdb3b3101a3efb72ea19a68b6ffcc72db211666ab749ffff001d1a43e851","01000000c0049ac37c6636117fb31a32786e53fbdfd9e721896a6d23604cc63f00000000feb3287036e9e6b32746fe3babca8349c70904c4ada54952d56112c7ab83e47c196fb749ffff001d1d501a82","010000000b90a912aac95e1157a5b0aaecbee299b8673fc11320093e46a0eb9c000000008e98a937c1e47edaafb5e83cabf71568d7d182daa301fa2d4071c2fa7a35c005b273b749ffff001d0040eb20","0100000078e6c4bbc509467fde54ce12cb764f4b2e5ac8918fb726ca2779bb1a00000000d1bf0cb3815fde67bf305314245b1d53b56a0ab5be0752bf2905ceedd101031d9d76b749ffff001d298fc792","0100000099aa15cca1eb58892c51ac47edb7929f2e4cac27ecee34dd7ba8b78f00000000f3d017fa4ea8ef7378b5379be6012c03d822fa01afbbc6244a17a2ef6d889df34477b749ffff001d3fbe6d02","01000000b40cba2d949b7605b63faa45fcc558ecadde387a3cbcc39b4e4793c100000000accc4adad36eda1ec3e3290368da619bd6e8a79af29a7cb7583e869926d142092f78b749ffff001d1f972083","0100000098733091a83565290e38835cd96123286a4cce9b30e72865c620c71200000000f216bb8662f5b8482669f7bb705b4b49ae2e5f963163f59c9519548efd7e9949bf78b749ffff001d6dc8f401","010000009e16d5ad802afb532e64f3d689f84efec30bbc238ece31a644c26a1b000000003f7a360376e47f71c7dc0303fb0620fd37ab85d57d71f41a2945ba162c4653ec977cb749ffff001d20943613","0100000021f055e071a0bdd44486b9a9db977134ef4b55a08eb69d7ae67b751b000000007b5c3e14cc2774c40ee2e81a907b7de2b281da5c96148ad0b88c974433ac6022c57db749ffff001d2c2cd105","010000001918d1a77a6d97baba4d7819cee8ca476a46740e0266130727513f3300000000bbe4ab101fae9966cd3cfbbc1d766368a3071f7b88a4f3ea8e732bd1e0976a8b097eb749ffff001d2d87268b","01000000b1584fece0d5d657421ae41c9b5078028ddc848d0b66fa791c15f93300000000778ae7e635ba0f044f0fa12b1e801033df333d1136262f278e8e57e07fe40285c481b749ffff001d34037084","0100000069d6c99294156889592238c10c29eb0d29ac22056b6af1a203cc2359000000004d37a254e3e96e9289dbb738dd320f78bcbb783d8758b70e3aad2f8ce2cb1019b286b749ffff001d264dcbae","01000000d211104a72c0d8e0f79b9a106620c6e640f69a6cba4f6ccd7fdad7fa0000000055ed0c456a9ba86c5fd87d509948c00755c1e4ec6c1ed58542c430da796fed19978cb749ffff001d2fd4c566","0100000004a514d8124a1cacb784c1ba18438a17d2cd9c5369c81195b83e407200000000c6af2758f361a86091bb0baa7e12954f0ba021cb51043733462828ee6031f14c9f8eb749ffff001d164e8dce","01000000ea9a3b388e079e764f05d33106977ba71230adebb1da58dffdf65e01000000007af5ae2c85a87456cdfa74b207a85da010053f6ee2f94d0059dab65e3c4607341a94b749ffff001d1f70f3dc","01000000234cf43aa2647a119f4755ba8407dc5864d18a1f0a7998eb493f4c0900000000f369039385097642ea611b75963d5309162fb6d90855bbda87b33a1bfe0a7b466094b749ffff001dd88ecc00","010000003b6f19992c0e79e81735159d86775f2151488cc41a78ba723927e66a000000006a9261e56296925a9e3a35b1da00da78a875747aba082830b6c1b8e8487719439a99b749ffff001d1b073f40","010000001e80bbdda44b9fc926f251dbd2eb8524182ff6362b1bf44b9e3f5c33000000004090aae24183ab9c69f08f035b49af86240c87052802018877a7277cd775fdabdb9fb749ffff001d35dcdbe0","010000002fee435c9d325ca832ce8ff6e4e391934e51c0428d8bec72a5861d25000000008a1a260b13aeff43d015d115ea2209c58402680861093bb4896dd9ecf96d1af4cea2b749ffff001df25d490d","01000000bb1c33cb1aa4f5cc6eb6da0314fe18dc412a06998da3d5fc63082b9000000000103adffe62d742d1bfb4be418b64a96b66cb186e6df4bdab7cb6ef0e259d66a3d7a3b749ffff001d2c433c84","010000000176b0bfd8015eb9d7c46c419beb2a7b9239daf8cc4e21d097cd9fa200000000acdaac82af724f96ca95123e632f4da4c37c97314c8b73598bdcbb7ad37e084990a5b749ffff001d1ef0e4f0","01000000ec1aca8138b25c121c14737c05a70d3272ad5349240725a428a17ca8000000007a6ea6f579a3a6776c6ea37d1ab1f65be4e822c9aaac82d245b6880fc6f517414ca8b749ffff001d03731f64","01000000bf0ae5597dac97878f273aa5946f769135a03ef25834baac8b4445fe00000000fdd31d6b5780024024d303d9b5639a5f14509a4cae113430e5e511ce3d96a22ef4a9b749ffff001da1c40704","01000000e481b19337b344fc24eecfa9df7de8fd0296391b8005989880e79c99000000001ec6a78e6362d31390c5c56180162cbd1eb6acb340f38840c8dd9ef4b5cede2bcfabb749ffff001d15a6f472","010000006e59aaf7774d1b1a5060501890fc35dd7c02b093ee154aeb93c06c95000000006d8849ad22831cb6f407d383a6835a335324c4d5d36277ca951f9de50ced86b07cafb749ffff001d6d67ed11","01000000b7b2bc28b2cbd38fd791312d33da3b4533c9edfb926688773f7312bf000000002094a94b4f007f3d0effc8c124fdc667999c16d819a05739f0c3a2ea1f65638fb1afb749ffff001d36aeea50","010000006a5ff3a513e86ddb8e6bd0cd684edc1f111a15baf31735cf081ec35f000000002ad2565f675988dd1bc66086aaf07520851c3c4af65c816922c675b58df759bd4bb1b749ffff001d26933332","01000000dc9bb76d428261a571f43ff906c153e688db6c526711ad791d91d7350000000088c20c61f3925764292e9c552138bab9a16b6a36907626c53374b08e243e81096bb5b749ffff001d38d3a216","010000008cdcb43ab6c96a41b354783edfdb08993b659ccf8305f216b21d54e300000000d2ad10b59cbe747c2e80dd11ad09bc267fb93e332947ac31a4adc2b21c897547efb9b749ffff001d1640e24c","01000000642bbf5d6a194f92006e309d8ea62fd51ef55fe176bd189232accd130000000047b4372b8b6d29479171ef5a8f2195189ef2c3089a7fe8e1ff46ca5c9af522c33bbeb749ffff001d27df619f","010000009985063610a81d46067698fef8b62daae743c3da9d6436d59c5282e600000000725136b08ccf90f533fb922d801e9ed9c1d486bc6c84cd7b8b564fe3345599d0bfc0b749ffff001d02578bc5","01000000f13d3eb61d5c01840ce60c063edb86a66e7805670f0bc00514b22a020000000008438abb7225560fe5cf85a4c02956665a02cc3d6bda57d1a4f7bd91dcc0f064c5c4b749ffff001d2c516ee7","01000000e0bb2ce041b8ffcc5fb14b3338614a3c15531f8b7f91e4a6a74183db000000002e2504384b8db208c4bcafca047b83bd1f785b5e65cba58cb02fd82be7de188e5ec7b749ffff001d09a57a39","01000000b8cd05d75a920da3405b5853c186104f9c00739a06fd4908c01d7c4800000000083d44340739dd0946355a776a15fb52158912aba19bef10dd041882ba73df5efdccb749ffff001d37ec931a","01000000d5be1113c2a56d320073bcf0f7d8166ed1a39e8caaaa4a1272121ce000000000b457758b8920a6287089082925aa4363d11f16579363e1b33b8bd8f4b678a7ca04cfb749ffff001d862f6903","01000000d00be9db189f1d6b4e17247d6e6c6897755682c0125f0be7094bbbcb000000006e42127585834ac2bc9c631c48430d4cd6f62d7cab587c3769b2c686c2ffe426ddd2b749ffff001d31ed658b","01000000d5040f5707696a1d90a7f86b35911046888c7291594db4928f3e5e28000000007e0fb8cc2679126ac093645b25ce04d8560c43db0b3e0d42c89bc989f81b291380d9b749ffff001d3334c25e","0100000067b3e16a8d240a337ec3573cfad6d8b81ec7fb7a1e9930683a9fa8a3000000003462c981bd05ac94fdb1c2d13788251013a9d9d0076df34bc78e06eb6b848b1315dbb749ffff001d09b7ca06","01000000ad60e8209375d10684c285b289f795f0737996491fce266f42ed161d000000004629b8d07d6959047e2b3336424246ac43203153522aa1a757575ab839b717dc8ae0b749ffff001d2e3c85c1","01000000158734e1cbb5e13ee958998c370a4b2dc6855af32eed99612eee47660000000010cd1a96dcfe470922d7350266fcdba59b75c5a0b1aa4b950b5740acbac424dbcde1b749ffff001dc6ff1305","01000000a4de9aad9c6e3aaf157f3e81bdec4d89513ec33073e3f55db23c29ee00000000a66165ad6a5204350eeeee9992b13935015821ccc1c7442cc992babf37c1f0bd6ee6b749ffff001d058af474","01000000adc1aae7f30999d5a1d073e74cad75827a83eedd9a96f6e753fbb6ab00000000974b39dd29eeb1bfd30c1286a2fab013f44d03ac33acb1215c53d529670a82b3bae9b749ffff001d09727c47","0100000098038af038542ac92fb507c1d3ea6033b7d5bc35c0018d10d45b9a7000000000e050b1404342009b8f0c84a0e6ee82af286c47e509e939ab61a4d54197157035c7efb749ffff001d23665f34","01000000947c3f6872a1c55396661dc65bc077246dec96ec796bb5860b46e0de000000003bd490ceb6b105ff76a1a442eebba442c8d1f1154385bb072422c0c798b29987d3f3b749ffff001d14d768d1","0100000013a663be4323ee6f9caf4008036a42711356e5cde7da306a6df81d0200000000cda2d6bd186a38e01338ccc8a7173f507ac0503e5633ed283544dedc23ec9023d6f8b749ffff001d28ae54f4","010000002df27fd80eaa5eb8a157aefa579c2812ef42081977a80b6fa5b406e800000000ac352c2f1d7c0b7c1cf1719c68457e7680a327e14439f2ce2ea13313cf322ecda1fdb749ffff001d37ea6371","010000000d6cc3d84570b20eb6312a82009ec6b4eeaf1fa60b568ab051a1f24600000000acd5d3ba78abe53efe93da1a8042624224229f5b9d7423544b9b4265bb801c030cffb749ffff001d165164bc","0100000011c0325e208dcb6cb2f80601f4a0ba7db499af510bdf21550f232c4800000000b204b99cab4425b1318a425c251c6b338f80baa3af940949f16b787b330333451703b849ffff001d742f7e02","010000006ba416e76509a7aa0967601da515e15c9914bcf5442dcd903e81149c0000000036951cc8f5cae760ef71b5163f0fc976fd8b1c2ffc1dd041249da20afd00fd927e03b849ffff001d148bc201","01000000a04b53ba72122dc4848049cdd5877a90a0d27f8a178bb29f6736c582000000007154d719f2e574263fab36235212aca07040f96f99c5f8b2f368d265b7135aa6db03b849ffff001d11bbc401","01000000241fdb1b32c612e10711fa45b83de106c5b196c4df8d77fa58ffa99f000000009106254df16924a58414927746070114631a4ca04e1b5b82c4a7888bea51d7dcf804b849ffff001d387abb77","0100000044efa0622939da13a887324fd3c87344adaa101088237049870202b6000000006a374c8cf7c7911df8159cb7ac6330e7e9ce9efe5f3ffd524bcc9dd56d15e03b1709b849ffff001d6d678a10","010000009f37532460f6d2f5ad0a34d2e09f2b4d75ddd48a0089a0434a87716100000000ccf110d85ce20fe24cdc159af748c6555c37a0ccb56c6ac7394b3f0f6cde8d0d9709b849ffff001d413f0602","010000009cc991cbe666caca898df25242d741ef9cce1fc97c594172bf495b87000000009941870e4dd39d617d97ede0ee7cadf46732a7f8913fea1645e2c1e8f901fd0ada0ab849ffff001d35e51f75","010000006ad648c60c6870e1d31d1ee0d5d6d3877f70c4d3ccbb156fa803f3800000000082bdfa0b5043f08db6e58b7bcc7e5ab95e26df9c0c9620e15bdf1c8de6ff561cb40db849ffff001d3a2ff2b4","01000000e8c9221311a77d2a2d4a0616a3550aeb66a2357cf95c6ef95035bcec0000000074a1339dcd88a1b0569dfc4667f99874388c6b7f76a3c3108c3ce0c58cc232fbd612b849ffff001d29217a8d","0100000050898ca36cf25cd397aca59995725f34e3e344f193429b73fe2162e500000000146cfb70301c0d30295b3e3f32a66e59e502d3f58f517d2ef6df1a1495974f79f814b849ffff001df2996f0a","01000000fe895686f7b3018c9118f384c3f3888bf086551039a25a02004684ca000000003536c2dca146695f14e8b1186aacd2639cf29a8baa02c12d21488c706379c6dcec18b849ffff001d2461dcf7","0100000051b117bf42fe058d997e2eb3cfe8df2a139798d4900e97f0ff51c26f00000000f5a2cdd51fcee89faa2b8825c9b85f8fa6600d48942b50d6f47b76ea266f4c9e0a1db849ffff001d06ad9c05","010000002749afb49b3f1ab3c5a50c1a1a0797715b30cb1e0a01385318b29862000000006cb3da360f1cb8ef2e7fa2c22d48af78c2006a1c10e80d44190a5d50f72e08e77322b849ffff001d240d324c","01000000bda33f3882b74174dbb9dad142131dea1b4fd4b2b4d63f2d7e5deead00000000259fea5a17ff8d8975d62e06ec8033a27808570b99be9b446ea34bc70a497e8d4125b849ffff001d3e58b50d","01000000116543532c8038c2d2c6d4203f89aff4bcdcba45c40684596955552a00000000f3077ccf372dbdb16e29017d68d9a3805bde82d4b7e1f2f34a301be5d07b36a11528b849ffff001d374a07c6","01000000559615610ea1b2e567504e043c163853ab3b243fe1690773fdb19cc100000000a32a96fc078312dc24f82f09d4aa55069420b331818d9f40b9a263aba48dada3bf29b849ffff001d1c81b487","01000000abd78e7a58906bbac8d4d5e3b14fc0ced61e4714e6a32bca9ebb07fa0000000020aa7d9c19a50255ebe3a0db9a5f4d68a56d66b5f803e4ebe6a26c6e435361087d2fb849ffff001d163d8a65","01000000bf3517f22e8dd36f5b2b1203679326259c9d2b9a3caa1fa9aa547c1200000000e408d7ab560983e9e8b2ae314b39e94817a4af53090755d128fa03148100105feb30b849ffff001d1025af05","0100000046268150ca784673a0f9ed86fa7508957c26076af9c1dcf5ad7168690000000076f454705b69a8d69940769c4a075ba1acafc3f73f064f2a762271bd4794fa5ffc31b849ffff001d1df2f850","01000000e62844f35d23d67d1ab2cc3acbcc35c48ab5d3dfac488af64f16a64c000000008d9cbd23c6968ebe1acba77b42da073a4a74c66f793980b56d782caadac9ac7eec36b849ffff001d388a1bb9","010000002a42e6ebc6239f146ddf4d6c3b6ec05fcb13a406d0ed7cdd4a85a5440000000084db6fdfdecd0c94ad17b15353dede0fad689b186dee79daaa521ded0a229dc21e37b849ffff001d041cc100","010000007153d219f1d1a6a8ff35e4154ac6a6dc82b35454ce5640f5ffdb65ba0000000036e06e7859309028f381f06263a25641ead53d3f9e5ec178501b2bcbbc93fc58db39b849ffff001d687c340b","010000000f9cfad3beafca772c5502305057dfa211174c43301563ff8289ee8900000000bc9fd329d7cb535f24f344817de0847b8c59cde90f5cded7dd9640ccc900b770353ab849ffff001d54843800","01000000d99b1e8b83f38615e863a8aaca1e371fb5fc77b2dd99a2bb92bb15c400000000544f54713470347043aade11a82c884959bb6c8dc659eedf9818c0fa3eb2fd57383bb849ffff001d397e6201","010000008fe41c62a311e7bfbcdec32b2b2988cd1b7f5b87c07c1676dbfde110000000004be9c6e92643f6a34af681f55691a884ad00c8b4dc511ad4277b8d1a1ee23fdbb63cb849ffff001d160d8738","01000000a2eeee0edf719a0f558b800a3559d577005d520c7dbcafc86f6b28ba000000003d138e7934b644e2ce813754eafc640edd82846f318856482a1db0b5e65f9ef10c41b849ffff001de7819311","010000007df611c19964d724f4c6f9cb51f25d0df03ff95fd4a13e2a7819b5350000000037187edf8f055b0e2621339a70fb2b2cbab371afa6a4a7025694d45634f5ee3ad042b849ffff001d07f0cb7a","0100000019a9fb2074bae67ba73706218fce403df38deb1e2ac91400c870a6320000000087d073f431d5a1e174b701caef9abdc8f6575b613358b9df1509d33bde56e3cf2245b849ffff001d054a8fdb","010000000a7610c525de8b9a9a0670d9bba4b39d2634d6987c38e27590225b4000000000ee1bfabda3f8cf75346a6ab524cb3c0aab991a137e7ef7436988e7ab349732e4d749b849ffff001d2b753041","01000000bfa302a116108465cd38daee088e104227fc3b7dca5dbede674e481d00000000173978bd24be7d9ccc2634d61e3419f3b16f78a9aae4932c4d2e7055bcdbd6265c4bb849ffff001d1d0f9bc8","01000000b99bf475a95e1881e3c2a498d7422d52187b1684f7c1757f7fb711b90000000006243f7b84390cf56eca1374ab1e3d5ffbc2994ac2e45f028c8106bec4a6707fa24db849ffff001d36ba75b8","01000000237a574aa48d80862f155fdbb9d63232022f3d7d1c12e5d3b7e0e1d200000000ac895564bbcbceec80e645d4cfb4c152109a914725aa276c01b5829549cedef54850b849ffff001d1d5892b6","010000006f9cfa5f07f9682ba497703d1bd9940f560342e31c1b675b14138a8200000000a65d3771958cb47e6fdbab313975c8117c71463c32e9f30d678d72dddd54e3544c52b849ffff001d21c78baa","0100000038ab4bc4b5845ac5328a079865e5dfd6f249092fcb756366d296b90a0000000096275f124400b0c570b4be60fd02d2db24ff77a8395346f6d871fa036f443e884b54b849ffff001d00661808","01000000995c7a205bea7144ff9feea0ea78ff49ad0374231a20a006fb76982100000000cc2df80a5629908d26f6be888c6bffa0c24ce5f11d44465ceb077953a41e72efc354b849ffff001d2f2cd06b","01000000778688153d55ce1d37867f643db7ef03859b8b82a19d2c9eb2e87b9d000000006a85583a5ecb17820e2b2f736e4cdb9c75a85b1ea881b9a63c81686eab6a8e6b595bb849ffff001d297527da","01000000d2585e16481c44a3802bdf385822fc89d025bd595c80096f6fef313500000000df6dd6e13e79a01edaf39c95841b5a3495bf84a1db6261c3b46aa05c083d4ec95e5db849ffff001d3fdf8203","01000000da10b6eee4d505f3dc08305c5a9fd3fa76b4093570587d43a20f0290000000004dd38d37f6aa021bc70f980ce32d85dbc3d5bd47b63f5652e1fd132089181de3c15db849ffff001d4b9a5001","01000000b294ead6c16c593bcf59fad94d32f2fdee3bb408575de3b7f88c3970000000009ee981daebb8cd02452c23b599d53398c67663b59fffc9d23392e46d1ced939a8e5eb849ffff001d4c98d903","01000000df667864915bd5f132083b0866f396f74a791c05e2e73c01893d65e900000000a78af10208dce5beac9f4f6ffe0e68846c87007dbaa0aaaa5834cf208b801d56b664b849ffff001d14a3544c","01000000f5880b4dd2a4c1f6d9b53f9315f89bcc092a711cf05843bb25847e42000000009f788c974e44b18cafd381cb8a0031057bae9c9d9d1969439f716af802e2e8cb5269b849ffff001d0018d774","010000009593889fe71bf21b8d0f14c9f49f203e36e414c9147b1ae92b56b5ca0000000093959e7dff714411268a0ab57523fdc4e52691c729e4a9262da118eb82aceea93f6cb849ffff001d2abbc875","01000000fa6ab491fe9310c489b36d7c053c9d288d4031843cab67ce9989998b00000000f0569ec589b54d8d07c77ebd42fd9cf34189fce4dcebb93a1e7f9965c760e5a8d370b849ffff001d2a99d6f0","010000004f1fc8261869e4cd21e5a2dab237cddff52d76c797f1e6bac94352de00000000aa59ca9b54acc7f3e59a37eaef527ff83442fcafbb0fee1c0c13a4562ae9cecfca74b849ffff001dabbe0209","01000000d7047179d053077b9dbb5667c1235c8ba342c7f383b0f371d89ca27b00000000e84dc913b55c64db6fe94dd9219036939755fea428261bb2d1d5ee5829493ab8af77b849ffff001d3457a691","01000000eb71c4a87f53cad9b55d132e83d3b7791d7aa1fd0d9a2cec8285b2f50000000046268bb623d13766674a21cf1f4dba4b4ae46e4402759026f4f08b53c2cd76c5407cb849ffff001d2c2db411","01000000bbb6a0207b3cd5d69df7a7641db66974d7b57b46c9e8ca5506f083d400000000389039b145f541faeacceba74f4c26f493b86ac7322ed1e22472be8a85af2b2a1582b849ffff001d0038c6a8","01000000c27230634e5c2f6a04180c621787e7e1368200bc6b1fb61a6e187c4b00000000b4eab5abcad1386ec5c64c3d7a0bc4fdc68fa58e5a9527098bea54f7eee364b25186b849ffff001d09ad8af2","010000009aaff60e347aa484b7b3bb98441459fb225ae315e7a573aaf8155b640000000070fd9954e0e2c305148635b1a28fa1955f0f292d78fcd37c89c98b53b2e88bd98088b849ffff001d08d9d10f","01000000228dbe216ec8a306d3e346d3719b65f63d0ab8d8f7a4ce0f7d54122600000000cd398404dc77c2922e12129e6855ff7d45778a2ec90d910c46b7f023e630479dd58db849ffff001d1f8ee75e","010000004951a377e2e5b87fba3300db75c5e28b57e7770acc98fee98b907e19000000003b7aabd322a0b277128d5cd6a44a602295e54b16f18487ba82b1c73ca921bc8b2993b849ffff001d337380cd","01000000969a2d45a7304025b319f88801bf0a37239ffc7375f39144789cb126000000005cae96bc08b01943900b07ca6883e5e32ac515c8a451d4d990227e261530517bcf96b849ffff001d032ba959","010000004db2b0ac8ac6aa95dbcd6010f3d14658a29d72a092489b9bccdc32050000000061a5b2b6071ddb31d73551a14da234d89e69a87bba687168c39f7e10a1b495025898b849ffff001d07195d07","0100000022a00f8dab8615f478e321799cc7961fa7c3ce12864fae8194cb42a80000000092a7cf6c75dd1e63d4b0fb62c61c64263394fcfb3debdfe29da0b7560b2e49ebf29db849ffff001d3a388c65","01000000f6e7e8c705bb90b0722e27e3e73888ca6768462b492c3bb6ab3d9f65000000003c8ff2fa4a05428ecfea7aade1268bf09aa7a977ccdc0dd52ab6b94ded3b2c68909fb849ffff001d26d0e507","01000000bf232fb167dc0ab3902375bf8234be037c317f0ce509aeb0994ba7a300000000d7a13d28fbbf054f20cea9f483f5acb8d802f178e7590119b1af3989db6b898b9ba2b849ffff001d085b03e8","010000000c397a546f4613ed2f5c8bbf3a210e5886928ec390ea2b8b53b75f10000000007f5c98b14e9986f1f248c01ad93bf2b39b6fbbcc9456c8ab59ca1a86874ce3d0fba2b849ffff001dc44d9101","010000003c6bba7f048456aaa4e4cece19e1fbdb366f0b8a9d23b9b1756f82e3000000004519feb96e0bd089f8c9b4cd03f9c16e548c1117e2985531d7bbff86507795d961a6b849ffff001d1bf39c4a","01000000db4112c2e78217a97e7d1da79e97f1653372eef414a63c24457024ca000000003f1baa1963c19e70f5d0bbb62c558f76dbc517ffb5333a34f8326391881ac1d332a7b849ffff001dbacd4e03","01000000e702cc22f8642eab543053d7b87be13edee47d09e01280ff2073ee2a000000006ff584a56676ce3e78cdef4080894f0d69cc91a63620ae6d684d8eeabd3ead3a12a8b849ffff001d31426543","010000007da404846568c92fac61df2b65fcdeff043f3f111cc670fb49a94943000000007a904f38d89d4af2071938ef290826a93c2565386b70575f29f9a1b7cb773d0b0aaab849ffff001d196004cc","010000009378a75d9c41b945bf077ad62082186b34ab2659e1e3d330a9a0b92900000000af81811337396471ea8e017363e15137f38dae5b78e2550e5098efb66321af8178acb849ffff001d058ed959","01000000c32277c8533112e59a08caf5cdd27966128ca538f54c84fd457651f600000000a1c7eeed853dde825c9fed1d389767116f8b789a21a458bb322fe3b605f87dcc99afb849ffff001d669ab506","01000000ca2d5990a826a7fb76664d89b29c77e8e5f6b41b30240dbb937d09be00000000c05241b76cacc2edb06b6b31dc5c40eb72c85e12f33e2f56a447ac494ffd67bcb6b0b849ffff001d39b08ee0","010000008fe68e23ef5c72fdfc0f0ce00d815a9dc9a8fff0ddf57afcc73bb80f000000002b2b0e1fe76f7eddbdab744e39719997a303d8eebf1a0f80b7857f54abc9563bc7b5b849ffff001d36d4a75d","010000009171cf85a4da13603eff0c1fb3366e62b6ee1165cb892e0bd1be385e000000003347064c2b2404540d95cf30616757b024bc2df6944c20cd8e9ea478589471a346b7b849ffff001dd2cfba06","01000000a5f52777b7aef703f57b4e42f97befe64284f92883f8c00bcd7e25e2000000002a42c110d7b3743511970766c91e09a6817eaf07ade8e12331effe893589dc16f1b7b849ffff001d2ed949bc","01000000b4203892a2beb4abb864e3e0d5288d28245b620711359c171403760f00000000d3b99d96063049fbab22aa94ed180582329f372c1d4b4a2befeff272ff38f8e9f8bab849ffff001d2a138cd9","0100000036fca1255cd6afbd53efeac3bf54a638730b9d841b6b9184c8637d3d0000000049442611977ee76cd457cbcdf06e68fb2ffed538abde6d9851fc5942f3ebd837d6beb849ffff001d1a42d323","01000000c5cbe90ff15cf6e9a64d2c09d70a40b55ee59555eb965d484324e81b00000000087ae0fe02cb2c0f7c7d989c2ad6797534dab9689a34c64f8282c0f09d2aad9dd1c3b849ffff001d29b3e777","01000000ae8704759705b0e6848c9e4238ad2ad442a22642e78e217b23b736b50000000052f7476bf72a81d42b895466920de38e7d99696c777a02a813cf760063db3b24e9c7b849ffff001d21db3153","01000000d88023139722bdf06edc49fca9aa48e72fa2d6834e493b8f761b7cd100000000be6e86461311fa3256e694d7743221dd43f33976272c60bdb8a3d4da44202f23bac8b849ffff001d66c11202","010000001f796e5b759199b3f55beb0795d8429446ceeb0b97ba6da9de526fd3000000003c679f0cf48ddb8e5982e12e1ee393535d30de62532016d88ef0e98f1f47cd9d93ccb849ffff001d33c9e90a","01000000fbbd9e5c44c88cbce13638324ac1cc6a0f9e1fb7341e42d7ad1ff47b000000006c57ab026e1c488f0a9eaf6e72f5b8dd2544c6f961e59166ea824c80e2efd26016cdb849ffff001d6272bd00","01000000f56794467797922fe98c4dcd14dfbfe09e4492b596d0e99b97233348000000004907c3639e54365270ba404bf8420537f537bc5e76d416406a694fb5571457d5afceb849ffff001d272096ba","010000006d75530ce540268bdc3afffd6b60d0fc0e52fd9194b4485cde6775cc0000000032dd13e1e390205d13827e265c2e1196f034d3d4608ec05b0dd47b5a484379a1c7d0b849ffff001d38d088b7","01000000afefbaac6ec03ae2a11d36f744461a8b9dd90086db793480873cd648000000000cc393994b40bf579a5600cad5f8e2911852815d5a3626084f5c6dfe1491b81fced6b849ffff001d3a607222","010000003d6cf6a1820de692094ed85a3e36abe7945a0166a422f51c895248a40000000068d1cc3bf7e7df31293392f34ca087769183202936078466129532d27563b630aadab849ffff001d1d0ff971","01000000dd1251119afc5888c34dfdf38df17abfeeca5bc55c67c8c01e77d61000000000d84f9baf2a04490b094020605a55e2a7c5d94fffeb94e6a4a0bfaf44356e161c30ddb849ffff001d375c1908","01000000ffd0076c24f89050788384a99853d457e8502fe923f83993cabea64300000000e7233f954d26e49c410b90891dc18eb7d0c8ef86d82e130b121483cff596437098e2b849ffff001d095fb6fe","010000009c0345f8700fb4da0fbc898a0ce491454a67c77ca3cb9fb5b1845e66000000002d51ac9c19d1d8bcbf051e792d1c81557ce24d3f56d4695f157876f4c653b9bad5e4b849ffff001da726e00a","0100000089c92a276e824b73b5152b521742567acb40ebe7cb20bb5e590bc4d100000000d08fd7a333250f7895d7424275adfd43360e6dc954fca91244b51dec5a62893d4fe5b849ffff001d30b73afa","01000000d34bb6887f77a4800058f324b45963c7a283c4d1f27ef199f5f9093d00000000c8d966a94fbc7e5b59cd66aaafad097723174befebfa9d2baf43d710eb49a9c896e8b849ffff001d2024edf8","01000000b8e2dec5a241d45577f54ffad1b0ac3bcf013dab2a1e9d3fad6c203f0000000039b087617000efdb416a87bb350e0248448dbcce86c4a7fddda0be2e805e14e22debb849ffff001d1f130c49","01000000aba9b1ddb14d31c411adb8e24f1cb84518741ecdfb2cc1eea74cee5f00000000897a2f2d22b777a637e35d40cd284bdee7e60e19838a2b932f11e3c7d72a2327b7eeb849ffff001d3db5c903","010000005af1f58bee8061b1c771598ab50c415ef5caa78ec1f1742ecb66c4d6000000009daad6f051398668651331fef5e7565baa9682581c6e8cadac9d7cef9fd5687767f0b849ffff001d2f3d9b59","01000000414221ecffb1031de7f1de19eb0ae0036200e68feed872043cecd28e000000001940dd983b5ce956e58a023497bcf8a13c8cad32c0049aa4a74c1a5d2daf47ff5ef5b849ffff001d383db1fe","01000000cbb82692c84ed9396e8f6e18e0ee097cbe58785445accdd5acb4c481000000001fc088c20bd0c4ea140f2b5c921a14dc4c6ad154058f09dca735110badd8abeb8ff7b849ffff001d0e910f09","010000007f3a13dcd298e4fb17ee551e80377520fee708243297d8fdb47d882d000000007aeed0da1026df4834a80c7dec2780ee009140e0dc646f9ccad4aae7c2769ecb3cf9b849ffff001d5b879504","01000000c6f48d9d30dbcfb6dfab9190ce1e0843f1c5a96f6c4563dc09ceca8a000000009d5635dfc87751ea493c9477c3fc64a10cb0a5c6e2691718ee29658a24d4486674fab849ffff001d9778fb05","010000007d0933d39590ab7fa334dfd8f53a3683e232ecfd51183baf371e55ba00000000d6a0fc1b07f9d2201de96ad463636ffae56cd45cf633f505740ae3cb5ffbf4b0fcfab849ffff001d141697e1","0100000059913b36c1320bfdce30d30d465c7a5b2a1e27ba68f998b9bbeb46ff000000006f430db311ee9ebd7b09337919f67ba366c8554fec6d984feb1bf65ebc858e00a8feb849ffff001d09c0adb4","01000000734e1ff502b319d306cd4e0e7740a28f7affa31319063c6e84c9a89f00000000378ee67dd7f0d2278dff4813fdebb8330b843237c2e061589c4f1d6198f86838b800b949ffff001d13dede0c","010000002bd4084c459b4edbfa84fc44869ddc58bc611af805df89f7d82cc20e00000000b82c6718c2e16210b8e68962a5a5be190a635cf0e3471b6b22fdc4825e00ac666705b949ffff001d1ed20373","0100000081fc89a641256a7c46b305053ecce95ddab0432b52660fa8e4233a8000000000d5f601af2758e66281d41274806abd9c3f1651a177df18f3968ff47d447bafb8ed09b949ffff001d08f4a870","010000004d0293984b437ec311921da5fece4222a7b4e28bcf97ed8ab447e540000000006817ff83719ab7d68e431e7ce374b597e977d2352527ae0a620b9ce81e5cc430c10bb949ffff001d346fb805","010000009f7c34015f1c24a058b7a2a64e0b2c77cff47e71ee18c9e2a22e98a800000000cf4473434b5a366f4ba20095d6b7d238b93761f23d4ee19653cd2f3ee21b2f1cce0cb949ffff001d262ae4c2","01000000f2b208d8df1f304c35891b56c0a83a7a7280853fe68f985e44098fc4000000006d2152a8107ac7207765b29e3fccad687da367a5337e1ba739237730796eb06a3c0eb949ffff001d5434e306","0100000023e1b84dc5c690f66b95b978786ebbe6bdb1acef65e911352e18f11100000000ee23d3b9cab0b897615ff3768a6727da6d880ba8554912551c31b06afe77dfd07f0fb949ffff001db28f5305","01000000d28be6410bdaeba651b5064bac7e09b3044819d8dc7200cb863394db00000000937009499dd8ef183618a90700bef1fccbe71cd5d6fc3c816180963af503c9bdfc0fb949ffff001d36a3fcdf","01000000de32cde92cfe257a854ded37cfcd0197b973abe8118e82407c1031f10000000025c5e6181bb1775fa594b76cdae92addd6c83168aac75656f6506f82a0cf7782b814b949ffff001d07cc8eae","010000006d72a6de21e6b87bbb92bec040df3234f320240c83cb6033d095b990000000000b3ae93b51e833791c81c8bddd617834bb704e30c875dbe74cde46e83ce1dd98f819b949ffff001d02581e1d","01000000cac8542240e48809fc80bc5f4d34e375702a30a826aaa188ca03b21400000000f73929ecc16505f87da2a615f3dbd1e93f529a5cbdc713646a5b03c1f5b4d7bb631fb949ffff001d3232d7e8","01000000142675e7a3f746921a57e2f737a9a62e3f9fd7084de1ec77124388a50000000001b4f303e53effee09daeadcb70cedc637d9eaa67658b4249cb9b5b8c8379ac21224b949ffff001d08fed88d","010000005d1a1d86bb7c6f96466d14253fce9a415a937f34a1a40a981afd63a000000000f4a88bd371a0d7395e822b2c4886944b6538855ea9dbb80b32925fa6af31edc9a124b949ffff001d65cb4602","01000000b148d98f341aa433574e33aaee1d0d20d97088e62064b7827ecd1844000000001c924d1bd31109ba78296c641923572b60b0e9aad23984468a469b44272e488e7428b949ffff001d2a7b4174","01000000b1f10c560e66c5b7e5521aacdddc3fcda9136a68d5b809a3b60ff29400000000c1007569c6de5b3c85665ed55ad5654755e8f0ab8b41c9115f8425a9acc50b1cac2db949ffff001d19100291","010000008a41aeb41889bde07d63772c16b3042fdf4af97b958ac5cb71f000c1000000000274ae0cdec520ac3bb7fa7f47149da983458b4495384c54ba05297c380ee4d78f30b949ffff001d359d6e12","0100000037e61a870b6cd8cc501ba07c98ad8ab729a34871bda1a829339dc84a00000000aeeb23397a33d86257af931e5ea2c70e602b4ccaab3b649668ec750ae133ff1d2b31b949ffff001d11407c02","010000009d27ca37353b78c784b12bfb13192f8d25b84e171b3772c3ddfaaa7a00000000b1f21674ea332bde88d795d055922833fd63a50a418c17b501240bf8a99ff47d3834b949ffff001d06f33e57","010000007d35e0984a2651800ab4bac8a06c329ff779f2c62842043ccad7f9b700000000d8cb36f90df9848c1765a91a7e13d149b9ecf828ffa80b776852bd2569eb7f080335b949ffff001d3acc1a02","01000000dec93f3d2102a7000f6264f6de7aa9b0425d7c0a724df22f201b893d00000000ab24f446da6a41096878e3359bfa610472f7e1151a288b46550a7d3de464d7af873ab949ffff001d2542a7bb","01000000177046e3a61c3efb75218ffcc0335e21e232581510ece8b7cc12631d00000000c8ee660c69f31cd39e60d11ed413b3d66bf79a1d9a4db9c75e13b9ce67f4dd2b4a3eb949ffff001d03d7d9e0","01000000416e8ee90fc42049fa4b631ade2961b944068073257322764af73bac000000007d34691f575aab5457a58e38b365b661ddfe1121e21d2d06bb6a976024c1073cd243b949ffff001d1a108c10","01000000af7926b6e2709e476672d63b4f402be6a0be0ab808258e415aac1f21000000009d19a93ac3d623c7e97df77f4fcc82b754bd1f173e5e4140cbf335a1a3c9128bbb48b949ffff001d24bcb9b6","010000003f8d0e7fcfca85e47f90698a07e17e179d71c1730e5ae45a9ba3e4f70000000000fda4097bd856d778c2b2bf57613be26c658f0d31f86bfb7ce03a9d36e116983e4db949ffff001d4c780502","0100000088b0739aa917744c41461b0c4b04b3bd4825901062ae7eaa087cbac400000000812ba63234fbca61b3230ea8740fa186e9f16536b67a3f1409e00f64323081c1894db949ffff001d2dd286ec","01000000287e34a84021326459980e81625c76afd4b91eeb17bed57ecb05f71700000000ff8117749508cc8e4e2a262db4ad81f2efc45e15ded19eb8ea7e21415dff5376df50b949ffff001d0543e6bb","010000007f114cb5cf39ed79fa0915d8113a7ba0fe5772d49fc5ad7ec111fa9f00000000235ffc7570a1ed93c343f6ce0fdd2c5af9faa05f92d65787a4de6d6ea7f6f91b4a52b949ffff001d1c886043","01000000f7c408b4004e88c2bb2573580273d981e642e1ce933bb699fc6981bb000000002dc3219a9337950f988f8ecb80519769beef14f3ba6177b2244946d1817a622b8a54b949ffff001d36cef20a","0100000082eae89f40813dacfe9aabbf2dd6e6163913c68ef4d494a3fec5117700000000a4a406c9c34ec6a311948e38fe1c2f4e6ea0059cbc2a04143347e213be5c50debe55b949ffff001d5e005a03","01000000c8ac6b1ec688ff648a5e64299f51a72b890f23ceb7836053380d3604000000006a9f7f22149ef3fd0866a9a410586819e9631485325dfe36a74bc046c7d111eab557b949ffff001d1fd01b9a","0100000099702707cfa18383955953445274aef7aaf1643409278f6d5089cf320000000066917a06e272fedba9cdc1fdeb114d113703f04419260f4ab8d359456404c741c85cb949ffff001d21aa0389","0100000043c94170800b3153f1dedbe1f89e76ddf23099935c5e4d33929d0aa900000000c398a2163794d5d6e53fe4d3282745af3fab6c83e2cc6a82e3f5309a93d5294a2760b949ffff001d187f4b14","010000002575bf1040355e8e038ef8b67035e0b4269c265a22204b327f65f72600000000818a74913d1acb787486c08454fb3440fe3d09ac1c25168daba924165bc4274b0e62b949ffff001d2750892b","01000000b1107873ea2dde34096884c7f0fdecfea12b0e3a2726697e757d3260000000005e9b3b7bdb1cfc000f33890d2ad91d067af33260197821102223b2cf247ac124d263b949ffff001d2c09b2e8","01000000d9f8742c25b37b626f0b5000a1b0535104afa1172742bf96d484081800000000a0ceb80102f5273e492feaf035f8cf730100ad9256444112eff92b1d169dff832967b949ffff001d3275a8c1","010000009598bf1f115c41fd72d8d748688174a5632d61c4967f5d23c16833c2000000002c89edc30fa5829739a76738674824b3029f29e585d14ad04530ca03d14873f6c46bb949ffff001d3983cc9b","01000000d11f4030d47fd2d0a68b1165108398538faa3a6238729a6ce81f0bf400000000cfb000d92d36e02fe445042518c1e5574c7a2790d5aa34ceed0307892cc915b82f6db949ffff001d31ddfd87","010000004b49b0a4e1fbf81c92d7f2fa0daf3e1b1394cd575ae63c08e9e6fff20000000022792f80bdd1fe1153004d9ea04e5b7d3be32124e24c4e3b2cf09aa6406bf5a21c6eb949ffff001d45cbec03","010000007a205db3425259d23b95622e21ada614beb3cf4ba78739c8d86fa6dc000000004b43f7028ce5ef6311890586cceb5c52283d99978c2e7349ddfbd30beed8da6b0f73b949ffff001d1ba012b8","01000000bbe668b937264ec8c35921277c495d1eed28b359322b4986bd5fbb9400000000e2aa70b47e59edf6566d5144e1ea8283c3130502894aa4b71cbb2e42b6a5aed76d73b949ffff001da30b6d00","010000000bae0b4164e3127867094ba845f1496d5d2af2f6d03091a5211a576f00000000f412bc571959c415e43d933fae79ac67c616c6464006e3bb2690370942501815d777b949ffff001d1e21acb4","0100000090139b56aa83cec61b23a2d3f0d9469b9d1fd79ff1f47311a39c913400000000e7844bfe29334e3668089d732206d7fb300c33615111d57100486f72fdcc5df83279b949ffff001d046778a1","0100000052c1449326646a3a5097728e1d575fd3f48d5e048abcff03ea8f0f6d000000000f2569a00e6e62495e0619dc5c4b39f6ada90b3d45ff83a1f1eaa215f05f211b217eb949ffff001dcc2bd814","010000005533cdd97db849ddd2ae62874d5dabe053089bf5ab03064c11898b8a0000000064767e88e46fce63b340c3648b8e392cb8f8b6b10259b9439db00b38a8e8c5d95c7fb949ffff001d39538948","01000000df5b3c1d0a5fec0bacb67aef307ae011f1a8933a22573a65472864650000000006d4ebda9fa5756aa2788d1c2d5d9d8c9f935ac64e1ffd2dab708b1451151d6c817fb949ffff001d5bc48e00","010000008026eda7fd6f184bd1f483fafa054937412a417a9221d5b6dd1c18fe00000000228a44c3d9e51e18d0b5843ce1fd92c71b40f1ede57bbeae171321c6ff61b00e0381b949ffff001d33c33017","010000005ea668d807bb7f0cd9d39e7990e436793ad2df7213bb96f342a63bd30000000099af34dea703c96214077eb5953cb00003d584fa4285b45066dd7449bc623cf84084b949ffff001d32496980","0100000083a9ec529edd31a993fabb2ae3504afb9fd458ecc3aeeef9b5ebd18e00000000f163c13fe5e68773aa69da417573dc6eb209f5e7f78a6b09182295b753c110a81b87b949ffff001dca1e840b","0100000070fff74d8d52762073bb21f9bf2f492344714a225319326bf065b0e000000000e95a75022171910530adec8bc57f290c6d22547c7cf313dca275fed2cfb29c355c88b949ffff001d11081d06","01000000c5cfe3d8c6e188ec4b93d5b212ee9ca536bfce916ba8808acfbc738700000000e0e8372016c557d3c41316af7d35bd6197697725a76ef060287b708895c6f9bf9c89b949ffff001d3209fb8d","01000000e3a2cdb6fed25be9fe05a798af0426549d888a49c5a7e1afef9532f1000000005cd96266b069bbd8b439ee976c9fb2cea79b85e2ee050ecb9b7eb7ef4cd5ab37758cb949ffff001d08a90371","0100000043e86f306bea56748b8afccbf85e8184efc05769996c44cc396ced1f00000000db0b970df91e0b7c3e3f978006011b8386b0ee1c51bfbe457298290a32873aec5790b949ffff001d164e412f","010000006988a699e4a8d54b2edf186eece34bc1742fade18773076ecb7ceab10000000057d1767c8575b0fb168c581d11a5cc150621e95fb15753e8664d3f5a1a750e6ee592b949ffff001d39c07c94","0100000054484cbfa3708ec4808da274a71f09f8bb514f4d85c4ddc50fe399cf000000003a3acae397072f319f62027ff9424d2a57b6379234cf94a6892784a5d11ea537f594b949ffff001d6bc3bf08","010000002f9a365faa5f27c8487fbeda825c646a099b06e4518a7c2a892d88c300000000721466306f6cd265a9d48a6bf4d600afda0b536528cde59396770dc130dcca928a97b949ffff001d068db9e0","01000000dd0cf9093041dcd6cd9ce396b029fe7fcdb15a5e5ac79b80e201ce0c0000000023d831e608147fb9cb1130c4dd012eb1f01c37c6933da8de05777508d5d8655bc69ab949ffff001d14cb68e0","0100000006dd07e6542962820db0632afa890b1059ae73663a82102771b12cd4000000002234d02edd56a81f148b900014a5820eb23a94c8074f06a5b6e76cee74c3f26fd99ab949ffff001df58b2d00","010000003c86eca70821b30aaeb0c2b63b552232124fda6891a0b973a858dc1a00000000f289fd87b88eb832e15161bd958eb9d552eb9885410297e0bc7c9dfb72b83dfdd99fb949ffff001d2b5e3c1c","010000008ea503d23bc71edf9fdaadd923387c0443a1797b4304c38ba01edfef00000000aa1577e6150133b5c184fc9072e39f784475f1cb11c443daba2a6d2860f207dc59a2b949ffff001d1c274a10","010000000a35d54ac6722b1924d150ba5641586eb23c4fe3a04c9ba88ffb2326000000007945d2db01b3a7bc218f8f2401ac89c7333e425c3d962e812f519ccf7edf3602fda6b949ffff001d0935085c","01000000dcac2f02dc42243296f044cc88607e0c5266a6efbadb617cc2a36c6600000000a23b1e0f8a764f5dfe0148588d642e5155b6f74f4e07d9f60f1dea484d19916180acb949ffff001d21b7be34","010000009bcac64b2bd24b090ef393e5d879a275dda82b5960e2bbe92e3bf19600000000741ca9374b187c8f0140eba4f31119f808659a91f0caed01dbcc1f197a2f01f7e6b0b949ffff001d1532c45a","01000000db89f39add5db65432c58c7781cc7a5683e34ecdb27135fa7c062ce6000000000b22d67acb059d03d0a28c8f4d219cd1b59b9e40550def1eae8953da0b6a06907cb2b949ffff001d1ff38416","01000000d39e17661102fc5e46990382a48dae71916bd4ee126ddf8e14c90207000000005936eb5e7031a1134325d41f4378eb01ce0fcddf96ed29712aebb56a65b6bed7fdb7b949ffff001d22a0686c","01000000dafa30cb7d98d43ca026e1627ecfd1590e616b3702a91aa72427f81c000000005d63b261497f03261eae37dce3f3c9e5419d71d76f67a6608de3288817216fe1d4bcb949ffff001d2c7ca4a1","010000005b164812c03d2c30af2eae9e1ca91331a091ba9a5376ebf637426fd7000000000da9b7ea435cdda458c9f2b52ee314ba4186bd43fcec35f3fa8d55c21ba470abddc1b949ffff001d177ec43e","01000000a12b0cfa2657e346913167bb399b488ce6653fc58543af0d33e144b80000000053a0c67d4d4b607a5305e4815586194e2870ff01af6bc5e76f87319c8c77af5022c3b949ffff001d391a305a","01000000cb3f05bb04c9951c9b76115f2b69d6164c55591a3866e4deef4b9b5a0000000006fbaff8dfca626bdc5dfff60f6198fb4d96d9f82fbccdef3e1361f017b215055ac8b949ffff001d28e074cc","01000000659216cb53aa91274b195915e78671f4cc6109b4339241928c1c7ee500000000ff922aae752c7e5f949548b88c359cca517eeb166356549ffe57fbf53455d3f6b1c9b949ffff001d15f795c5","010000005670d67ca40f68e51167e1b767b7c355d3367eb3c63ae254446adb560000000062ac16125454e57e69dabdd7d43e433bc5fef0cae2a19ff76e9e764755808f15dbcfb949ffff001d29a3d601","010000001bc4cdea76badea59e9172c53787776f821b85979e136a93d73a31730000000087fa928ad4de63c6c3bc0ad6c215d0bd0df28218ffd8cbbfb041096f32572aca0bd4b949ffff001d2c31b907","01000000372459ff4d2f8f6e511a92fce27a7f5a3d71bbc1142dddb1f0fb041900000000f6051d7dcf946d87e09fc4b4b2628bc4845fbfd5fd9d9080902f28dbb929e7f089d6b949ffff001d037e7527","010000005e75d211914cde865232350b9f1489cafad94b4c41e94e07ed3d7493000000002a1a0fe14d086c2da3565e6d9e585ac55695c3bda4b3da6a93cb5cf37fa510c559dab949ffff001d215e35d4","01000000325b55cc0dfc264f9dea8ae680443ee29f3d6003e77d6eb08b5706d200000000d245fb179224cc87bd1b12f364e1ee77147a02449aacdc4c166cb47ab1f98144cddbb949ffff001d08bab9b4","010000009bcdf8f6fcc83691d7c50a50026d00b9365472129e7138baf474cc60000000009e8731b33ba75e83154a0a6c71e2fb48deb0faf51f8531a2f16294753a86fb7dc9e1b949ffff001d1aff4509","010000002c57f5dd2a479f8d8cdcb0f66a4113450fc6b1026fc99d85346183ad0000000086d279103432ebce33dad5172dd25a8be1b208f2a3873b665980cef0ce78fc2417e6b949ffff001df01be813","0100000041958b1fb8910a5f6fe5a829c8f37b7edf842f58a09c7da27b91c6a7000000006dfa5857a857ab3b448365a301220b177e6764e22a48632cf21fd9f5750816dd25e6b949ffff001d08c5a297","010000002f23b63c41369912ae643228bca2b656fce7fc948eaa14cc7723e41400000000f057b6f1e206dc6ac22ae00d6d48757862bb0d78da09b14ac6bf263bf418155debe8b949ffff001d2200e361","010000009dd2a89793c21d2c902d0247aa2be18bd442291308a4e2a19c4c88cf0000000016683a3daba1e074031d51d94cc2071674fd20dcf1d3a91f19689e2eeed15cdaa8ecb949ffff001d18ac5449","010000006acbe477165f79d965dba88cde884a93bd6c5223845d0500c119818700000000ccec1baaab0d2ad42800eb4b04407af047f4d640367e844139321229c1bbb9b85bf0b949ffff001d13a1cd14","010000009006aaaa2e3995285cf5da148086cc0cebb7f6093db404bac895c553000000004e4927161a8a16d0b0309e77cfd9bb3dd03877b0ae00a19bb3a2f86448e67a76b4f2b949ffff001dea6d830b","0100000096f3165a1847cb88434a8607c180b70fa0fafecf2e7097a07bbb35f70000000002a63c4ee56baa74b7f2262327a6992094613593cac94d933df0bb60ed932474f1f2b949ffff001d2e8d08cc","01000000175655f8a424df3af16032fdc398996e5926a24344d54061010643fb00000000358a88fcf09421e8fe13e7c810845834156ed46cd294134429116140c852c091f7f5b949ffff001d21469bce","01000000d6ec72f71e75e407ede87a4873bfb7faf53a632aecaf6c0d266288ae00000000d50ac247576e2d207aa055597027cc3e99d6963212dfcdb996d5bea8e21762afaaf7b949ffff001d36e3d160","01000000ba3fe12c4abb2f7ab39a1b75d031f428e98eb135c3ba66eefb689893000000005848b6680896ba035a6f693537194f3f0d90008afeb8c89e3eea3ec204d9313863f9b949ffff001d1d8aa085","010000003e3927903ac81e75feb65631fd3cd824d2a419f5277ee4d2ef46310d000000001247d266745f4498b72a6fa312dcd05b869aad1dd129ee3d56868880f541e18030fcb949ffff001d15005794","010000007ba021b12114ef1ea5b0c13cb9b6b0a5a2a625563ac2e46f71f4fe5200000000b4e7e3dd83bd40fbf0e68cd1ab9da4810910f1bd8f7ff14e3d7046091e26ceda1fffb949ffff001d17b8105b","01000000aaee096a09ce66761cc97b26ac2ff287ec98d03c17cda017945d71750000000076d8f1a91828182054031dc0ec804c4b268fb368bcc68ff6c223518fc4ba5bee2404ba49ffff001d21d43da9","01000000dc9a4060941a086de91bddfa4bf64a0e4310346a9467cb27ab1ee57f00000000a0a9f4b37157bf4fcd318ed8b67c5e6714ff5bd2becaacd065a0c014a94cbf59b909ba49ffff001d2b637aef","010000009c7f8dac2e2e240610cc62df5f2dd7305155a2f8e4cfd794e6af4e9b000000004ae150d5ddd641ae57b821233324f04e14229268505673dfbebd8bb42a792663f10bba49ffff001d55b81d04","01000000103abacf572eac2c3a118dd80482b761621febcc0db96ef2000aebfe00000000add7f3b47f4eb8c583635c6b322594fd1fd00273e14ee653b28ba84a379f988ed00dba49ffff001d2b0256c6","0100000076c276a860564c06183df7026d6bec23edc9394b2aa6234546d44d4200000000123cda6234814e30b533b83a0e2e75924b8af73df91f473388ba2c196194c77cfa10ba49ffff001d1a01a895","0100000005c5d6b6d8314a58ba7b3a1b07894cffb74259840622e982e7acebbd00000000e39e31797b61ba2cf929b04e32b68ac9fb9807ef9d63b249d6e816b3f8d4872a2d12ba49ffff001d87f7cc05","010000004b91cd1d63f1031d489b85bb5abe77fef8b656dd7eb024afc9cd56ab00000000c64073f291ed67017e906f2f199de02cc0e938938890bd53b040e93d81e060b3aa16ba49ffff001d1f4efb9d","0100000067658eea63889f72b3cef0ac1514742d826662f3b895744f5d496f7a0000000039d235c5f072a232cfdf7be75789f02123d821271463684eadaab48e0b1b0a57e219ba49ffff001d2cb0c17b","01000000fc839db1cf98733ff64bbc96691b56549e7fd7396087ab8d1a7e64dc000000003c623092d3d4924c776858c76fc6bdf7b5dd5bf5137ea77f93408f75ae5f109bf61fba49ffff001d2f0c7491","01000000be0bd0e859b5e0903b1d0471ec3278db87865962f46f12ef8891fb6f00000000a64325459d0940bb0a23218ca2d79c1407486d74a6b7f593e13c819fd23bbaadf725ba49ffff001d03afbce5","010000007207472973dbd332f475f58294da919ea8490e5c4a4c9e234c9b3303000000007ac02ae239aae0d1901a1ae90717edee9407bc557ff8640647ea51cf4f8ad61b2b28ba49ffff001d062ccb24","01000000ff7cea2e89320d79390b277b79735100698930eb2f73b75fa35acec100000000fba7f084fcb7144aa6dfa5a8e0c35a9469bf502f96ff785077878d2b7b45fd176a2cba49ffff001d27819fa0","01000000daccd1622ae5874e72e093569016f3ec23f845249548320df40951a500000000cd20ed61665749d1513b3e02b14aa6fd5158f44d0baa7161b4c55f82d9f625a7af2eba49ffff001d01b07f39","01000000ac921053796f9b740189a8e1522d27c9bb454eb832624a27f763d67200000000e89c51dfbd91cc00078c2d83a7632891a5fe3782000f14a6139f06ed6545f761a431ba49ffff001d165d5277","01000000f9f6f6a5363361ab6b387a0547cf5bfd098926ac468a0dfcdb28248200000000c27eceffc66681927f32f7a941aac14e9b8915e9380e48ce9cfae53854d09f79f136ba49ffff001d2de62804","01000000ec32dbc02ab500765e14a7c6485a22bd91109217a6c4241c389047d7000000000552270b6e920b5ebb7f280e0d57b5c682a5f23f18d7c5f5d679e4475fd22a8d973aba49ffff001d0930c939","01000000482c7152fc2e032acad0db585a4ad4cd23c7e97eaf9692dc2188322a00000000ec45326b2f3f8d5175bf81e9ecaafa9e43006cc301c22f944d07e06f571e09b1e23eba49ffff001d365fb871","010000009afdeb7756a384963d7fcac3cc48eac9498c251161aa60fe90069a2f000000001b5285c966f27bde4e19a04b805a98716facf4465c089ebf0a93fe16356d4f423c40ba49ffff001d1fe4ffa9","0100000034f0388a81373c1ebe792a0d5757f37e91755669b4afbd2d3f2aded10000000007a0ecfe95aa6f159fc062a50f6b90e5983960245993c474395a36d242f01f0b5343ba49ffff001d2ff442ec","0100000032946042e857086315dc759abdc0c16c083fa8add15829618c455bc600000000e79bf60b02703c54e5c32124248bb45deb7ecae6ce094f6d3101000204d1ee588245ba49ffff001d099ae62b","01000000ba8df37056a9ce3fa9e9e315659a2bddf9b4bd1a901b20364757a00c00000000e3d4d3472e2078616c4fd0574f33ae0a7fd8ad701351906bd3013b2d1c03e04f9048ba49ffff001d2c20f726","01000000f87540ff2b453e3fc9ba9d06585797f73e4dc2e2725427ceeab17d920000000068f21828d87870b3b9036c179699b01da0a170b66498cfff70236ac2e3475510784eba49ffff001d1cab32a0","01000000f47f7317f77e9aefa217f915287f37357c0c7304f4aa9ed4647193540000000057c5c9a84633059e459a545632250f6ebbd3b94e507aba5b13cebf6fe505bfd3ea51ba49ffff001d36167b94","0100000083efbb061312fc37974948252e921b95be3940b6a3ce251300f9168a000000000c2177abe8eebb530e3b7d5010d7b2a9ac192d3ec2abd38680263af2fbb624cfbe54ba49ffff001d3162e112","01000000350026c1bbe7c87927ac36195a63bce56adf748cd3d8c1038b35e714000000003c1da1cbeca528528bcf8b7e109a89665b83ebc7749c981db382a960fac82c29dc56ba49ffff001d3e3f2e0a","01000000449bcb642b0e44d6504cb7a90871a3b758db0b618ab7106c3bdd404600000000097af7d98c1f949515197c593f22f25e25c2e89968f2ff49edf3973e2de05c312857ba49ffff001d2a0befad","010000001044860ae3bd9c79d92ad77aa318d07844d107497e4482f96546ae33000000002cfd7c90b0f0b1238f2e46b31aa8af42a9c049013f197c2a2b20739b3f14964f0a5aba49ffff001d253864fd","01000000da3f258c81560f61380656680e63d12a1e6e6b12ad9af41fae514f1f000000007de5ab9b3313d0044ed783c06cae7f69e06075aa9b7b1045646f1321e7fb3b2d195dba49ffff001d7b021706","010000004dbff535b4c4d85e8f7bd5f4b4de26d9fbbf4e557962a08e0c51172f000000007f2608fce9a2426d7042338de61687c4451bed2570dd0e2fd5a929cb725aded77d5dba49ffff001d19b976b0","01000000c625b1ce981f7104dff19cced6ebf7aa3930064d6c48553d4748dbdd00000000e28cc760f49354603a8df0f81deab53366fcc8ef87dbb87b769759a982f65be2e060ba49ffff001d03505602","0100000063a1794321207ea357804af444ec59a18210563f3c4da60b663027e20000000061c37354fe4e16bc29bd8efe6abdedae6e62c509c7ce0fd0315f64334036c42ad162ba49ffff001d07d86b94","010000006484caefa774bd57092c2a3a304da1dca013452da61d10f1959f427d0000000070e17844e0a04a567342a114caf913af53f0650d3968b9fa004afd82b7b8f6061e64ba49ffff001d1e8b4106","01000000d1c9187d775f4c41cd4f6b18571c8f14d8fc12644c895903ac1e9c1a000000007961081f2b073d4c62e63dfd3e95b680eef5d1632047ff1baa080a1a01c29a147564ba49ffff001d1ba9afd7","01000000646e0a2debe353017877b235afbdd0eb8c43e1986deecd99d3ce69e600000000c7861d0297daa95b033e940017993b1b416b30f84b0ecabb1964b676d0cd2d22b867ba49ffff001d1aaac9b1","01000000c19cc2f43db9583904d3c3b4ad720762a4a5be7b10cbf8d512e0d70100000000c4cab184009193d2cf607ffbed2094364951db052083c01a5cbcda318df03644076dba49ffff001d1a379614","01000000428572dc6d22400137a158b30cd4babbf95792f9eff3f4ec48ec3ce400000000ea80bcd9d7151d81b28841b943130369c3e478ff8b3407fa21b309a4b00d8f92bb6dba49ffff001d24450a5a","01000000ecbf6018099dfc36b0972aea8b6680897603e48cdcbdbc08f7cc699300000000a595e38ffdc242de53604125ddd2aef2997c126457011850d3cc56f4add4fe8aaf73ba49ffff001d349aea29","01000000e7dff85d0570fa46a299e9bdf410015e1106a6ee6706df7fcf021def00000000a0aebd0d5574013212db844c4c4ece4904e6d0f49ebd8d49381c7be6b416dffd2376ba49ffff001d2aa5ab06","0100000001c67436c202a46540f9b54a99d016e81de2122b1d2ead31995ad5b500000000552dc49f1d8c24c0ec2e9ee4fb11925131813ce453fbbe94c91b1d50e1741d39ef77ba49ffff001d209b6541","01000000e8d94127f99ef55a09155749b8c21f320939c9bad7e0304c39a7c016000000007126094df5c4fd2110af033cf97f4981fa38201771c897204be4f53434915d3d447dba49ffff001d07b7b024","010000008b0f45b67803b56b28bcb0578c3e9f210be43b9d3fcb0d6842b7b45a00000000a83b83555500e6cbe5a505532d675c6d4365635cbd008444c7da14e6ed9a0fd76b82ba49ffff001d38f15f59","01000000b0aecd8925e16e448ab06bb3bacc3abb094ac634e028acf681efedbe000000002707216a939759477559a888f633ef91ffd905f82141417a510546f7acf3466a1f84ba49ffff001d01c27bb1","0100000084eb7cd9137140c8668fac3e908a8e55dd30b0947b1230dbf7ea3236000000003e4e2fc0f2e1004cd7a95e63c0faa84a426b5756dc8bd72d8a2b252913bbd76b7b87ba49ffff001dcd326c10","010000009895168816a1cee81adc9e5ede90ea94bfd146b9314945f75aada4e60000000004f1f13697ba3680402722d9f7ddc7e0232df132428698aa7ab9de050129d871d487ba49ffff001d1b5f3898","0100000051ea06d745685945b3b03ae877ba4b35938e49b5c8c9722a57ddbbe00000000095e1c4aa5229e8cd190d5b74f8821dac1c4fe4239b359ba346bacb1c4083f48a7e89ba49ffff001d93d76602","0100000028ae189cc7fe9a6042fc99ed01b226636061332b992dc74b4b76261300000000bc137f8010627973b9c52ce5c480f2ff02f5fa738877030aa0d35857ee82252c558cba49ffff001d02e7d8d5","010000008b5cc6a1b84fdc17268e43c061e7b9a56cb381f61872bd10cc896a3100000000107b216cc56bc1d0ccfdbaa8485ab09321da3db33c9dfeebbcd0b4b6fda892befc8dba49ffff001d29445860","01000000bbdfc9946babf86aa6932c571824b079cf45baa8eb8ad724b3c0b17100000000aceee18d8e36bb60003c75025c5564f6e3f173c98b08cb6896d828b693464b18d38eba49ffff001d1b8fe700","010000008f671b1a4d8102c399879e4cfbc466908f3a15d4d75f17dadd897674000000005e83ccbc232cd76ecd64dd9aba32da8ef76fa1b9b46f70ffe65ad532fd265c55aa93ba49ffff001d19bfbdd7","01000000f44469d3e63a86e0af51b984d7dc3f71496b68b79bc8da33c1aa4da1000000006389ddce84dbcc94d416d7903f0f30d17901ba6897bd8cd8bea2218085bb3e883395ba49ffff001d34405a02","01000000be5e8b81d8666f1e36d9c82b5b713174056d91ffe7609e413f484d350000000093b1e231795bf9959b305be67ff9bd45b9ef7db4b25fe0c027c4cee31a5f7dd16b98ba49ffff001d339f2f59","010000006f86e931a1486dee3ae9df1cd23858d83ecd718a2f3f7cfa35cb41c00000000002bb98bd1e209d85d3c7ad1055706b46a2908087c1d6215341eca76015af1183369bba49ffff001d2837d5ca","01000000bce78c410a644d6ceaba63970ec070958f3c5a8711986034ca8ab0d40000000042508f86f461e0d260d9eb703c764dd949299a312d74623aa231c60d29a85c86af9eba49ffff001d02584193","01000000a69546e2be51c32f979adac021893625b51be1f838e5f892085fba360000000033189ac18d77be8e8b38d6010962dbd5c03ec8fb6e2e8f5c032cee3ef625dc56dda2ba49ffff001d3a931261","010000009b9f2941bf87e2d69e9b00ab6145931299f7fbedaa2c1a35df1ffa51000000008d27c2c0279cfcd22ca909a9dcae26881422c2ad8af6e16313d853a3f8ce903e40a8ba49ffff001d15c23ae6","0100000021408e99de7fe1a5a7d41bfcc0ff41259f3be3318dca6d75e07762fc0000000002be0ad075e70cdc89cb0ac86b57eae42cec30cc934f51decb7abea15604c837edacba49ffff001d207b7224","01000000f038841d06b7a3efadb4715d490eaae93a211c62469ec7a438d108ae00000000f8dbd6c0e67041fab9fe178b7cb3fa66a0fb7d4314589700f6473e0f563f03f1b5aeba49ffff001d097d8128","010000008bf9c8041dbc3bb48afed0802f04ced80e758a6c50af339ff405f58b00000000a47b5b4b1cb92f0c686d3b74c8ee944ccaea635e9a9e338b6bb2949be1e19c58d3b2ba49ffff001d345ecd05","01000000f43b3dc6603e8d68cda0d94067acb25de8528e00657ea2e3ca38cbe100000000f1e5fd1d623e8755cc9c75f5c4cf500b5ba4a7fc5524d7614f19d5492877547cccb5ba49ffff001d2ad0e0c2","0100000002e719f68c4a98c38c3be90caa3e14685f7b2e45a504afd4c57a488a00000000a0908afba31fe19c14024fb54d69d203ea9d9d7883ac3be326b56f5e97d9b2ee97b8ba49ffff001d480d8801","0100000087915c62a1e86b09a10e0c29be34683ccf9210ceb1cf8ef1082ae44a00000000ccbb0c3f20c6236bcca74934e57af67769ea3f8fe99395ea3918d58fd2707ca283b8ba49ffff001d50412001","01000000d60a3b8445e07c40e502adc711e2bd63de65db2c8f06bef59dc4c613000000004fdb562d2d0952ed83852c482fe6fb5f4899f03442ee780a23cf489537011ace68baba49ffff001d35956475","010000000a3a8bde512efef006916ad629e31552fd436f2af31eb7bfc1138a180000000023113a1040f4812dcf80e666cd362ad8de37634f680b2d92c68d59f584a5d39fd1beba49ffff001d37196586","0100000003fefe21437bc7801ca61f48d9811719a3c14d2143473770f20fa0c200000000b05730dd76a804182cf937f45131bcd495059b67c3e6424739bf0fb490592f958cc0ba49ffff001d2817e95e","01000000c09ef3055ab0fbee8e8b1972058e89ad84fab57b8d895005e11871c8000000009a523fa8c207d894565dc9bc20de3ccec3a924fc3a67099fbf84c9e9d7560363f2c4ba49ffff001d06579db3","01000000243ac0251decdefeceeec484661bcfde1c0d2dc9cb606105c426640c00000000b73b25d37fee19de0b7b2ad07627a1e256253d27978c0efe3deef1721fac26cc64c6ba49ffff001d3361ca88","010000000c8db8ed31dacf6d070b709dc984110f7b2b2c21e03dd766e98bf6020000000077e3360d4e34990ac7273e2ea2d4f91cb1db46ef2bae571ed89a992a9f519faf2ec9ba49ffff001d08b92e82","01000000b16555b7c0ac9e6a5fc0c27a0a6cb05e553aa7917db214ba381595f900000000e62ce80ce7040454bb2c7150674a3a25e6b16644f2881bd0e1b4402aca0e53e34eccba49ffff001d24f57b64","01000000bc0b17d864aa32a24761a7f083c8f40d295cbbc632decccaed9e714400000000310f86de599b4b19784b86902e7eaa5e7247c76deb8d435903997738a59b846fa8ccba49ffff001d00536700","010000002589990cd535c3ac441c61e602ad0367b8682e929fa92364bcde547b00000000b35b7e152d418435131cec2f1185310e091e7c8fb2c91d57f0a9d8d1126657f9f9ceba49ffff001d1de9566f","0100000026830bf04efb4d142c50152ea1484ace71464e54f377cefdacff81030000000006a576f7365ed08be2b976c16dfdfad29fbb7c3e2117fe1b10673433c44346dde1d0ba49ffff001d1b8bef36","010000004d2958624c403b84641ffec3a8916b4c41b0857f6282af3782485e10000000004f9ce1974a51b017fe4a6b4c55e80d28a726250a27fda1fb6d026b9aa10e9debb0d2ba49ffff001d1e093413","01000000a5eb226ad1770623f22d2460876bd073224e6ee1ea44d6603a4649a20000000037c0257631d79de6a19528b879f6ae37bc8d37b7b1ccabc0652db3a17502ad31dad6ba49ffff001d362730de","010000001ec5c569c2892804393f8c5c89958d9c7272a62504f0b2e0d17b0d6c00000000346cb0a33eb6042078b8a77c8efbb786ad5a290630afe0720dc6d1cc624b866bb3dbba49ffff001d069375d6","01000000e92f9b00c4906549c0dfc5b4b7e6377dac676f6f0edeaa9b60d21da70000000079d2b815a6ea43c1044f9c326c36d9accb75446ab705e0df9ae493a5387a9ebe8fddba49ffff001d21657a11","01000000933efacb1e9767f71fdb4028813ac13bbd30f149575efc8fcd6771df000000006d9356f5a6969d41b1fb29e0c812b56f009d98658ac1a9f86de704580b78b72cf3dfba49ffff001d2d7db005","01000000b57d69cb22149d6e53047368eead7e0dcc33ac373cf18c05f374d9be000000002da340dcf4ec7c54fb68c4b54e864d51cfaedbab26ae4a47d621766a0a5c0b135ce1ba49ffff001d33bbfa12","01000000e090487a983bbe5fb3a92acd2e066cb777749aab8f5d525abf5d8276000000005613b21cadf40e9cc5702677997831737224802ad58dfe761ce3458acc62479181e4ba49ffff001d34522115","010000002953115033ef4f6f3ed50d48033fbf4ced59e199846d8664b6024b89000000006339ab40ced19b26455bbc022991e834db9108fd481168d65ae4c7b5a52bbf1e27e9ba49ffff001dae28a514","010000006a30cdf9aacc6758c0bdaade0eac0c1edd6841290bbb56cb2cf4b2aa000000000a5b13cac22f00e1578886e0ebaec5c4911a597ba884a9b8b6ace69b6f638421a5e9ba49ffff001d04168927","01000000a7439909e2ac2c8e58dd37ad78020c9628ff005a42016fdafa9d2c33000000005d04c299d2533a2cc1356bb5db0daa1a88d088466d494d7ff964a90541553ea7f3ebba49ffff001d025ca995","01000000059c72227b594dc049bd02ded0dd10b03f43aa954085cd8835089b7a0000000069f7a0cac301649943cc017704f5e4aaa100ffcdc6b10874aefb9d15ef90c96cdbecba49ffff001d77b10304","010000001d777cf39e123a34ac871d98ff0f8d126a1906110110c8cfe68e1cbf000000007eeaa61c75c99de1cebf05f8ebbc5c359fcc14534b6d55312a005361e9624860f7f0ba49ffff001d1b0e5f3b","010000001f87fa9e4f3e159125a371bf60fb1d69aff4a25649d6c0d6ed301d7f000000001a1b59558072b8087a17f47bfeb30ae007a94f8943ab40c397295de730aa1ed5e0f2ba49ffff001d8162e605","01000000f7f7184c25c5a091b4bc3d93f8235926a208eca3c196cbd59791e22d0000000066a1d8a6cf0c076d44e7a83d871b09609ef213a9c155170abbc2bb1509d743869af6ba49ffff001d316eb8da","01000000df166ad7826103944cc35d8994a298dfdde3833fa0ede3b395e77a97000000006f494baa0e11e996b642ff98bb157f9f43bdb50259db668b42e63cf62bd57fa30bf8ba49ffff001d3a41211d","01000000d48798c447d5eaccd4f789a86e261c3987aecc2b036ac735d398e0a2000000004d1952d6bec0cfaab9944519415126089a40cee3de904aafaafbe05d040a7e2748f8ba49ffff001da1b77b00","0100000023770b1e11d2fd56bda9a5aac2cee75542b830bde220eceb2a4a98c5000000001ac9a47a2f18cb171224b9e9ff0a8ee540dfd9eb3e8b3934ea5b4cc440dd57dd0cfeba49ffff001d08670682","01000000461c8471182256d5f335aadee8f46da15d1dca6eac97270ac80628a90000000043197d98f3a11c1d08e5787dbd763dec6f0344e6dbbb05432ef36a875c1332260d03bb49ffff001d1782c0a2","01000000f42e80dbfbf2c7c8326894e67952860b646f17129133150ade564e3a00000000ef6ace06eb2b1ecb5341508de7be2ce563997ba836c45689fc8de1c0c6bf05a77c06bb49ffff001d24d3ce41","010000006ecec2ba4dd58bc8034f123f68d1d8f1c58d3d672e62137fa2739d5a000000008921c8935ede2dc04fabef1bbb6ba765888d0ba73a3ede7aa423422f3b64771ecc0bbb49ffff001d34e9b2d2","01000000c93be2bc5b08e824fbc81ff0200e8543b5d1d25c0f0fddadd8d94b6b000000005fabf1dece2a61e2f4cc2fff0878380bfac538330b075fce5abc300867670ab5e80bbb49ffff001d6e8a3400","010000002e78f0268208f014c656650680df814e5329f309f0811d21450b968d00000000a7239f05ad34f47aa4effe4eff3462a1e91ca766869c5c06c0c98d27cf06908e8010bb49ffff001d385b63ae","010000007165837c379b2f7ce19ff673871a36ddfd9ecbb7d0af6aa36bcb4c0400000000a87cbda70eba5cdb52adc00ad5b385514bd347caaca6bdcaae4452466a0801da6811bb49ffff001d3a16e903","010000009a22c762fcdf83d32b42af4679ba4bfb87c324158f534a49cbb783dc000000006cbfa01e72f360e3ee251d4362d23a4d312faf578c63a3b2974a8b214f44144d2916bb49ffff001d21f47569","010000003af08265825784228157f8761c47de696f402f556ce5f075c816c066000000001d9f790093eea527bb108a519cc234a153aad1fb98bfe363d378a3a8881d45261b17bb49ffff001df0a83402","010000001167bd8c762870ef0c0f966e85c1399fb4dae39a4026af9c61da620500000000401f7e9693ba83f8e62733d48175c55f59bc36858fd07f76671b90b5dcc32037ef18bb49ffff001d2dc883a6","01000000d561043da7bfce31210cbbc7d6eba78cd0e013788a4c8b5990ebb95e00000000db3de35c14e63a9a2809547ac10fc11bd5a65a3ffd74d59fc37b813a31e27add041cbb49ffff001d2c65b1ec","010000004ff48ba1ea72d687507db3e8645e4ff9d65091e6c543012200f2684c00000000c35d1caae6f5645244038cde454c20396a563b78e8c27d9f427cd68a6b8a16051721bb49ffff001d340c0d6e","01000000d8f508b89ebe06756f558a1f0e96b02fc6aeb570324f81f03772f16a0000000045aa2230ec0ab27ceff500ed989908351b998c11b5272b38e26dc09490eea17f7f23bb49ffff001d1aa0b594","01000000e863bda6cb31b2b059a55bc1c18dd85d0a4e38698576d4557961506800000000bfb789cbb630f5e0578b9464a7713d388b313ad5c38f6547726e25dee989405e7928bb49ffff001d36acf76d","01000000dc9b1ff1e3b35d917b67f99b7cbe2ea2bca2bf490793a5fa192de9d2000000007bb8cc42a885389a5c983e4844a05e75d0683de6181379d90ed92966adf181e0382abb49ffff001d1591d5e2","0100000085ad1fb4d185f49a888b399e99223a9b2d7aee69bb3eb1f33285ed7500000000d36527344e9af2b7019b83f790c503b20f691dd7364987d4fa76d17294b58d1a4030bb49ffff001d3a18ca91","01000000c68d85bb824bc7ba6c0f88ed2161e727615f21cb918c97076d99400300000000b3f1d30bb46a05232c6eef019e1cc8a121418d35bde909945907ec0008dbc9412032bb49ffff001da58c6e09","010000008b2a8e7cd295d642071856a7698d6d3140840373b54a977c20cfc52500000000989d689df7dd5d34d5f1ba2937d79bf8c9370e0b5ef9d255f40d8fd87030e63fc232bb49ffff001d2120f402","010000003c65d355630c4a96abd99a16c5238d7dd80299b1d4274d1e428a7e71000000001b9f89d09c989d17f98943e1127aa82fa7e98f34beabf0f44a84f84e1c08fda2b936bb49ffff001d22a4462b","01000000576d8059ed8fba0cdc662261f89f49b0b4ca49a2ede32afbbf0eb8ca00000000212203085f446f24df82e08985bf8c1d42f5c9c81abc15f6a0166daa706cc8d07c39bb49ffff001d34732441","0100000089d6714975c64253a4a60ee586e66704ec4ddb4fb1556c4f539fe1c5000000005a175c40c0f3ffbf332e7cafdc5e2ac2948d480842b4db952c75b66383578e213a3cbb49ffff001d8772720d","010000009c830c21fc72c5e89178950b13b5fd1e58cb6723de8e12906092650300000000fa310b47ce80c61d716175a9f01314d5778152cd73ef87f7751927fa4257e28fdc3cbb49ffff001d215869c6","0100000039dc25d307cb8d09400ea6ad1475387db9b4792c7070e7757bafe1f30000000018256bb0bd10daab5e27dde84a74323233fb7eb941960d2e7ebefbbe841d8ee9c542bb49ffff001d1fd89609","01000000661a54c6160339d1d4b7ed72b1398532e09e6d10e65e00a5d6292b91000000002471e8d1f811d65fc5c164466d3854d204669d692636b0651117107ea48089ee1545bb49ffff001de26b3506","010000007248d465decd0660d7ed683c2bfe886a1a721c3c8b13962d31d1ec22000000003c14ac34c34700391fa3ba24dbe596ba287131ed55bc45692e6b26f8f5a91b088d45bb49ffff001d2cec06b4","01000000d7bd12d3311e8ec52e448cf4322ac285e22e6d06eca142e85af33c3a0000000099b23ee06354350a69de2949292e8cd4c1bd572ce35fb649cc077320055d548ba34abb49ffff001d29e6ef84","0100000006844e993a82ce076428d9847c3c18f74bc4549c6e391f2e5757455200000000ac4eb5f9b150bf5dcfe992abfe32557b0c9949542ffe9b1639ba8245391bf86a034fbb49ffff001d38e7d067","010000001c42517e0233f54c0e057e67627b38766dd13907f02210b654e7caf700000000cff71fbb13105436216aaa7b5f73ccc7900b8d31aed90ef70c5101e87e5d25e5c451bb49ffff001d335345bc","010000006bf42c51a57a8790dc54de576ed63fd0cd13e20b7cc7bcddff13030300000000a5d00af305e679c6bae7e81dde4e327fc23fa60e524f3fbc01fa27584fda79944055bb49ffff001d37cf6d67","010000005f22dedfab422d6197c6afd5c00e3d175124637622eb49e3766ce5f7000000001f4c1fb23659c6ef5799fc05fe39d39cbe4bec9b8da4379bf1826db24c296f089e5abb49ffff001d33d50db8","010000000508f11698d56d290377cfea8cb2f8bf01aea695f47d57e8b277be540000000081da09b2e0f1b5eba85148eadf49826eb642ef2bb8efeb3576fc2a4a01db1d213860bb49ffff001d33ca9eca","01000000228129dbbbeebbf3b34ee641dceee30525e76d0e5faa38faa1abf98d00000000462157a5fc391bc3333fef277f27874e360f92c4acba13624e0c4fdd40a3a31f4164bb49ffff001d2995db08","01000000a36fa8290e1616d3c417da5d849e7c1cc3056ad2ce54e5336d307a7500000000382ded7a55b66644068f11a1698af26d5ba995c4a0d25201f352d8ca8093c22d6c64bb49ffff001d04ee6ee1","01000000dec64bed7837e1a23abd78e3717c931778444821ffaf84e242c0f4cb00000000eff65fc5186beb45d28664ee31774188a73fb807e6c553e135d66975dffe4e06b269bb49ffff001d36d38669","01000000095a55b26394c5c1fbd3d782a4e907f3b03a81fe0d99000c3016b69e00000000cde8373252a37340863ef8c322942191833849d0096da0e915b6371220710b06a76cbb49ffff001d36dc56a7","01000000f4057c7941ee5b425326c5bfef5f438f9c3db2288b64f071cd24edbb000000009f1fd0fb800d05290274fb650b778ab8c862c1a09a7279d40a257af67af0b1f67c70bb49ffff001d1b66044c","01000000bb897486b9109bf2bfa1ae4a7d5deea985b3649f8f255fab909e983900000000dc7d4897c896a168a2935f6f1ac03bfc2e66e47d457700a2b749748a8feef2c42276bb49ffff001d3339da15","010000002ed203fdcdad451f97f8278a2d205fd1fc0ae067fe2d620685e0dbb2000000000ea5d867a5b95e3085f402bec432c52f79b19e59127bdd7afd0ea0200e7f5006cb7abb49ffff001d1c0ae869","01000000dbc3b16869f2222b071192abdfed5934b4b6ed90716703306b5d3eee00000000f99ba3ca18e7580314ebd51a061dbac8843ce0521dffb04115c0d2fbbeb733f36a7ebb49ffff001d023bc83d","0100000078aebedddb4b6b2575bd862b36734d030d6e63c16e33601dc7dc2b7f00000000aecdb5aae78599bc60423164d71fb40163835bcb8df009174400e86dfc55652cab7ebb49ffff001dcfa89f00","01000000b670737d4230f78693014a1bda82b4c02133797f991ba0e389e8edfa00000000de7ed99f0560f2f3688bde3d592e14925db27e12ec71ca67ead979051c0a3ecd2281bb49ffff001dd3cfaf05","0100000048925eb236d3165222e1b772ca11a38ae4a01e8bd30eb07c9d50f590000000004321a26cae0cfdd4d2f9846db82668f6ad9e011078079d7d6354bc39811a95171882bb49ffff001d02e1224c","01000000384b01cb1b0c97e80a5c33eb59d9c5ade42e1ea20b3f19922d06218d00000000192dc4d2e743b50a153d989659cbfcf6e05ace9e20f2e3a3ae1cc168fe0ec26dbe83bb49ffff001d2bcdb01a","01000000140c790c6d8764594164ac4d84ff71ca22add7483f9e0b2053f5570a00000000d6a4f870c85c1d99eb8c8a0ef253305329eadeeb41e37ceca03ce66531eb06238489bb49ffff001d338aa001","01000000e0e3ecf9565fe81e3f225fcf98ac16f00a8ec7e322251aab4c855b400000000076d1dbc07a75efd24f9b25200c9f6c38f1eff54ce676c29293e42db3d1802b7b558ebb49ffff001d15ea30a0","01000000eb8385b1624234674de7692efb9038e9a8368290a1a7ab8371a7c4cc000000003a0aa13daf9d82be37ea78053b1d9f6f7c9ac0c8bc15d9238757d1bd74d90172a291bb49ffff001d084bd5cf","01000000e5e16000cf93fca273824ef9e9a1856db91afc461b8c8ca159d487f900000000eb629e364f10e558bb89effc702b3d28c35a764dcb2cdcc02c1451fde9b8288b3b93bb49ffff001d0951d48d","01000000c4025dce17b0c9390712bc2c905c606dab4b097323843d01da1368ce0000000025d36b00affd2658c10329243c70c3215486be27bd1bcd657d0a21b9dbcebab05a95bb49ffff001d01d37151","01000000a8da019290f097587eaaefd809f024b57419a50716b65f1fa8ad1af100000000cd8b1b74ea0e7a918768b1af3557a80ff415986f9fec93d0e3e49d13343b865ac296bb49ffff001d06aed34b","010000001db0bc89a518b326f7470aae17ab657b7b3fcb0b8bcac7a4cd7781f900000000da71a63bd0ab04abee560a0ffcca08a266edc4397942cab83122e29e17f737023a9bbb49ffff001d081586df","010000003b7f53c0e0b276e71a63549680f490fa8955ebda5723bc2d5b8e55390000000033f95fef514c1836a0cdcc5a886e2535071c59c78887eed74ac29bc3bfda1507419ebb49ffff001d5c60a20e","01000000697747632ecfd9bbacb2d7bf9ab01e3363514e316269721f404dfb7f000000009e5b15a0c3aec841edcb4d20112561410c447cca81d6e8c7f75bb2b518ddfa65d39ebb49ffff001d045874e1","01000000c6d85a117f34a7f35eb0c7be737952312bc1a7e9ed3316c2d662fcb7000000003952ea4c57bb67574ab334d90d4a14ed5d04ad2a1b430504d19785c1c8bca259e6a2bb49ffff001d27b33103","010000006a5fb4ff3932568738e13456dd234066800f53d7d8aa7775c9da42b4000000002a7b6c515fbac99ac5b806914d6aaa3bf5a408db87593349e1a64565d0c2dc63d1a4bb49ffff001d025710ba","01000000ebd14d8701a1b10585fcc9e3e88f364d75a4232f608db025fc2570f800000000734cdd009750aa27e908cbb1518be642d3ff708f3ee09527692efbb6bd80eb0b1aa7bb49ffff001d33bc969c","01000000229ddd472e3333c2d9b2491dd9c7d50886ddc7f10a1d5dbcf54c8259000000000c236bc6642200a981e2044fa90f1b8d5926e4d7363a05c05baa0ff2162fde2d86acbb49ffff001d01f6ca21","01000000c9df5dca61b63cc7b11107281171fd67c36aaf188ec6923b0996d3e600000000e98ebc8a54529521ea2c3ab1fbd1f163d9de02d6aeebd20a878bd6909596f802eaadbb49ffff001d22b98128","01000000e6d9b12ac7b4ceac003301b077a870500e2940a0d59210317eaaf226000000007b31ed247946df8f617f06e4325cd7b45682a27a5d6a0cb2bd5240ab4f6c718577b3bb49ffff001d2a02c04e","01000000b04c72bf89e0f65151427fd6785d741b250b82d66e97acf8a7b8ef9700000000b2f53089c088f6b28f86b66c26990d1c7eb4f80224294da5fcb6ee8dab71bbed5ab6bb49ffff001d1b554f5a","01000000b6a4d02cd0ede4ae6f7e819c535388ca755b2d074a2748f2ed2962fc0000000088b62e03ca4d52c91357081b0fb099a9fd10ba9bfdbc6c8a83c0b2ed3cbc8c4c00b8bb49ffff001de876ec07","01000000aae75a60652347ff6ea790b12da5bb4217f521448def9995da8f44c900000000eb7895bda5025cbd91c658e2e043ba63f99943b37b31e02cf3e87b496cd7702e37bcbb49ffff001d01c62fab","01000000f8badbe77c7ca74f63007adef50d602fcbfe186d962a2f4cdeb8d9e0000000002f0050de07d530d4a2b39091e8d5ce384756aa3a4075a685919ce57a18ab6c8d2fbfbb49ffff001d1a211eb6","01000000ce30bf68356b67cbae1af1aaf47798f9700cda9e64a7531167a96bd900000000590f8b66f9df578cff86459221d4b2019245874ffb0ac5ffeec006eb628809a19fbfbb49ffff001de4c6d401","0100000069ab2306648728575404bbc714d96b6d4d1798306be0c709368c685d000000008156baac8852067095958270b6b633facc1fb0c9430076ef4f859b346021a84765c1bb49ffff001d27958caf","0100000097e9fdec93782169ffc4cad1cfdda162e0fdf06fd772e8c9f9f3995100000000cac6191db581c018ef538f049d635782f8c46687ab187606b9baa0cfd12a8c5b05c4bb49ffff001d328afdf5","0100000074b742361f125a3bc6ad0e85befc68785e3027a43063c1cfdf508ad50000000089d0f3429001dc202599777bc29a126af4296c6099584486d5a65a0a4b767dff6dc9bb49ffff001d23920089","010000009fa8e21042d4bb3895191d41669775cb7eda5e0975a635614a27924c00000000eecaab100383d11ddd60d5d699d9a85cda8e67c2c1b3e3f747a6e4cafd429b90d1ccbb49ffff001d20da617c","01000000bff322f81e4d7e0734cc244819cd78dc8edac435f90399cb81c5ae950000000072381bb512d79a0941a0c9789175e12edeb61228f4b2c3f52555a060e818b9618ccebb49ffff001d058f8f03","01000000d21a6ead7e1cb8afc0c18c4dbcdaf90f8e6b16a8511b335cde9cde9c0000000027f8eca1553e7074811d968002c61a3115d25e54dd127d56d5aa1feed23ac4f89ccfbb49ffff001da8e6ad04","010000008098cb0ae3fe3e55d39c02a129799040a2872353a01b443ac1c3dd5a00000000dd0a7b4ee4550efc739ffff2f88a469c40193efb3c79b2d2e793625975b8bf7d55d2bb49ffff001d37485b60","01000000c666a984c022f81179ae791e3531dfdc684ea97193efbd7635cdbd1200000000276e4473b564a79b0101e82d4f9babb0da9dc3a865cfef0aad8db52b81d39e5133d8bb49ffff001d19dc61d3","010000003054386740bc143f80c529a5a97542d846bf58faa0029a2cb671a9f100000000b51477c8413eb62b432fe9d078864053e5f01d65ad4e88a8421f4c146cbf8bc9d7dbbb49ffff001d2416f480","01000000bca50e8bbab2e1a20184353cec24a0279b2c1d3d557dd2e874bc0be100000000a4cbe06cbeeae96bf9a0df4ee39102b076e5da2760f5979708f8bf23bd21ccd5c8ddbb49ffff001d183f70b5","010000003b0797fa7cec9a5aaa664b2822565789a2bdd8a06a52036caaaa08cb00000000bfedcc226605504bfc8be345a8af736ca3e96193149b72d1303c8b842ddb3d1de8e0bb49ffff001d2a0492f6","01000000ed6ae4d8d68bff6ace8b63756827f8e657897111868578d1e839803400000000427be4f47f25a25d8ff125033f88ad4b21867b40f112bec4a00b41f1e9384d2594e5bb49ffff001d1a100c9b","0100000022eae9f70113a898a205a67ac1ecd6422071a97a634b599bfc57de8700000000de175b8fd620b9f30cba7a3e42c8ae1b9be6faef6ba250ba41567b8e1ce2454a59e6bb49ffff001d0eb37b03","01000000ae687b9c2c47d81a0f0f42ee20d96b4b68b6111e59939413aa6f8abb00000000179d83b05156fd182cfb73f8b4d672e49c3056197fa0f177b8e06d332660e8a370e9bb49ffff001d19a9da0e","01000000c2d89b374da069fcd1da873d306b48d9da05ba28cdddd98e6a07522f00000000db3cfa5e2e7b2c1b69e521bbacb33c998dfbd0bf13ca0bd5ff09e3bf37408ee2a6ebbb49ffff001d245ab066","01000000301ec0266536ca59309589abec02691ab206afcfe4cdf346caa6268e000000005fa6f22b355993946abb1726b4145a4d1d75e3ed2a618506bd4221f85a61f525d6eebb49ffff001d2920b2f8","01000000cc07210c33f62e395b0aa8027cf227d11a361cd85e6de8e751ceaca70000000079ea6fe63fdcaa78eb927fc4e00b5bfbd18cd2f33581adea46f41109a8e66dbb46efbb49ffff001de0adfa01","0100000082aa8599a12c7e821bfaad314f8aca7a1809adaa4e4244b2fd05b66c000000004caabdd9c48e7363a68702c2427fb9afdb6e7e9ea8c4058771d9d87154958ea1f9f0bb49ffff001df1cd8d05","010000008ba95ba12c025508e05b69a75d1bf4363cc8066cbca3980bc3cdfc8800000000361d0996319f9ea1cd82b78594411b7808251c8a9a7be6f06ba32773db978c4213f2bb49ffff001d329fd4e7","010000008ab3e538042c3581bd15fdebe1017bc66e6f7015882c4c53252c56540000000014f10fcc6fc414029f0a98f47adf37d84879da168407744e455304af4324b1ddf7ffbb49ffff001d1785e1e5","01000000035e35442d9f65397b2caee12e9c05cd7d5b7bbcd52dbecd84f6826100000000fc7b0d78e6b86ee0fb5974c0c517603d5397d6fe60eba1d411e78674f793a199ea01bc49ffff001d2a784c27","01000000598baa9798dd59b342ca89174d27ece10d8bb5d9d66b9ac66b08015400000000c9768b09c16d5ab72c7cd5a2b3be15fdf53693e8fe55c707822ea1e106c0b899a704bc49ffff001d223c3944","0100000010a86f1fe51d3d63799309e9b7705337b685a0e368fb72f5532d2b0f000000004b9f58c0f341949d63588e0a18fa6492ef5f88983e9bb77cb008acd266a414e4cf07bc49ffff001d20a0aa7e","01000000992236d7fb93f1135ae55c77ac0ba7ec8bef62146f9c073f85bbea700000000013c359275dc0202fee0ba1274bc3f9e50f60d5d5a74b327e36b92db33cfed70f5c0bbc49ffff001d052e8172","01000000da308cef4eac0d18e1dfe53b4f5bcaeefbc8d783faa9137238ac887900000000ba91e32acc805f61ae596706bc8ebde105dd9229acd4627353bbcb3d3dfdf1fe0f10bc49ffff001d21c200d1","01000000aed7bbbbe2119e01902b19f817fa0f37a547d5618cbabb944f6da465000000005f20cd7daa2dbf827c78c95dfe56c5efec3a904a4be460c7c78234705f2c61614112bc49ffff001db25bc00b","01000000c404d0b76fc3210c113dc9fb9fb4a1effc59492656f4b2911e8122aa00000000ac8dba44aa26b87bc9d17e8cf593907e7d11cecc8007071a566befcfd4a6a52fe514bc49ffff001d2a9f5f76","01000000c3252f801fd316c670ca000363f3c99937bd4439ae57ba5398065dc900000000a19c9254ce84a28a7891ec4984495ab4af23dc2874c5c25307ac2b6ccf84e3eb7818bc49ffff001d264dcb40","0100000056c9a93071746dca8a4bfc5c6f4cdec4dabdd5fad192bdbc7295cd10000000009f824207acb837bf4fc214b8eaf2c822da698f5b774852b51becc5edc106b4a54b1ebc49ffff001d289c28ed","01000000269c5d8c68b57597b3640e3d956004ba2f1441f13e05f271cc3550620000000034691c400ad8b2444461945a956a56a44777f56f4bdf58ba209908c155a579580624bc49ffff001d028d314f","010000002ee97e330ac5d8e4bd256ae1c4e3476802741c50f95682540666abb800000000dd52585355b8e1b11965eb9e42607f0fcf2d7abb05ce4f72e71af0a557e34ee6cf23bc49ffff001db7f94900","0100000004666e02cde3cd23cda0a855309dd70dc1f11cea43f93064be42023400000000f753b093d9379233892bd734cc5903933428865a16f631fe683747808a735eae3626bc49ffff001d23962294","01000000c5ae2db5bfc69b495cd25b8f97c44ad2face025420744366418a455100000000fca7b3518536515ecbdca4e15125a13ca3372ebff54135e8dfb000e20fef0e063c29bc49ffff001d0099d804","01000000006c73e8bbc56c914629e6cf4841f6f04f86114255713fbf57ad87e500000000378e156300f3cd6c13f0efded372c59c4ea652e0b57ef01c5434003c274e25d7ab2bbc49ffff001d27df9755","01000000bfcb07d7a0b12cd25498a47293ce75627790a1f9b38f6330fb3f2406000000005e01b701398dd0d06457c982000246303c47bd0eedb11be2391922904123f8a0162ebc49ffff001d1572147f","010000007d56fde83c262ec04c1608487f1c8b812adb9163a6cb88be5a06ab3b000000003456b9d9b44618a02d9627d05d8920e0a41af86d930565ca4af658801e47f9660a32bc49ffff001d2ba430ad","010000009d1c55c0fce9b95941502475ad7eaa27b6fa4d99dc331f4e2ee81543000000005318e80f11b7e96cd843f4c43233f56e6a65f804c601c98379d3de0980ba991a3034bc49ffff001d6cad3005","0100000013c39fe49b4ed99bc125f8536242a44e5313a483645968ec73574b6a0000000003ca9f5e030a33ed380c1239071421054d6dd0bc28e77f0086233da0f93969d6b636bc49ffff001d37d020bb","010000000e9c2fe93bd9c7a478b3b8e165d02c3bea31aabe10c6d643d7793f5f00000000af0caf0ec6b54db2ee105a4916e4f36b141b6bc40d1cda69dfa4aa82531f247da239bc49ffff001d1ec69398","01000000be027df70e4f7c036233e084c734949b81b9e6a224cc0b06f2b5e91d000000008cf91a4901b402662a4ffb516f108caaf28a3901679ab154069bb3cf9e844034c23bbc49ffff001d6be5dd0b","01000000ad211bdcf7335efbd4df5556bf7f18927c387b5b634d584644163c7300000000df7c6d74bcf76b679298e4c352d1496936d99f91c48108d11109adce426b18edb93dbc49ffff001d1ec02ba6","01000000567763b346d7eea9f995ccbf6b98b383ea6658817a2e52c76f497fa700000000b42e2ec1302eae6913b3b93cb5e215821ce98f1876f260c6e30398694b2691a20e3fbc49ffff001d05ffc401","010000009193a7940f8e242630cf1b91eb2f47a316defd269e5a266498ae639500000000ad93c8c77885036ecd89458b12637dc5ca180b8d02ddc3d119e440ceba8a7f660f41bc49ffff001d2ebe0ea5","01000000892a1f7ab8e27c138be8b2fc1588cb6fa5ad1730ca147737358d069000000000b51d85138f84c375783a02bf0bb3c8d85fda4700e8c19bf1f58472d249fc5f59de43bc49ffff001d36b6af53","010000001d9470cd3cfcc7c64b2702b733d67b6735c306d86866fb62c95d1b4b00000000ebd67f84bc56d1e8209abc2347ba2b377170188ccd8b86e86420e7caf5f6eea3bf48bc49ffff001d2a613b82","010000001577efd45b2c26f614d6089eafab971643d59838119bb0e0074359d300000000132523550982a6afad07bc79e6c3ddc0afb673bb3f865522d87eb8693fff76af0e4bbc49ffff001d27ace71d","01000000aa15adc2a9b9a33e75879f0277e76ca6fd80165b32a0ef96368fe72d000000005b4b57f831d7d7e024fc0fc8a7de3ab46283cc22640de24e40e54ddd509eeb96774cbc49ffff001d2fe38ef7","01000000c9c6a18774af2343a389988560b815f394932932918db55a2f80023e00000000236a75329235db76323f353499f94a1903145b9318a823d0b4b673d6636f6c15c84ebc49ffff001d36b1dd8f","01000000e8bf5036b69e5f93447c5b058bba76223cfdaab8ddd5d1b48430f342000000007f949cba9b3860953e06cbc92fdf0b898003c03815b9ac7f96aba062edf4db856050bc49ffff001d2ac82b09","010000007a6212e8374674ae40f9fa8aca1bd07dca3db3b6266ad8a491ba4a6c0000000005448165ced748f214ef9b859eb1b4ba46c1499a83ff0d5a2dc8a7086d5fc0960753bc49ffff001d212569f6","01000000e4e5023df8fbed1a599fb3af5251331fc39d9394ec08e4ebb8a4a49400000000335137802d54e2535cea23d3d278a1ee02d26facbc64384cae5cbf64100f42bed455bc49ffff001d0831d5eb","01000000e13b5115f1345c9a43a681d3e59f2d5890945eef49defb3deda5003900000000e3249dd61071d94f51ca73f1a42d012bd0fb91ffb6f6eb5baabb42554e4b2ee5dc58bc49ffff001dcde06804","010000004e82a229facca73fd71113758ceedf63beebbf8d07538d4322c291e40000000043633138773d5c5deb0635cfb0de2ba51d40110f12e11052dd87297959a3fe652c59bc49ffff001db81fbc00","010000002119818cd81f49e10c3342b2c50413ec4cca55de8c79d882f6fe8774000000003f02bf5f475af477040d52b77767ae0b99c55120b676ed66f6c6d2fb0eb1b1eb925abc49ffff001d34923cca","010000009951e4769e180568a2d166d1f8db6c1ed7d73ca82d7abfc66c27af1900000000bde53f68caaf9403f967bd48f3b6421d29ec36e4e7fe81f0edf36049afa7b81b5a5ebc49ffff001d203d7c03","01000000d23fd251c45ccaac25de917269c70a964f3278bd64f0d6584fd8522500000000d38da6a264bd79c29e49e12b482b459ed2c7c63730d7d19c8ae24debfb49079f8e60bc49ffff001d2828fb40","010000004308e6782b3ab181a2a8936c8a9a003dde76a225f2a63cf8e0f4f323000000004c4e043d35a6547608e5306ae2a0340ef863ba0d38e37906326600b6da786464e861bc49ffff001d38a0d0e4","0100000026831c81ab3d053223c86125f23a4064c82edd638cde8e0008342e7e0000000066344395571047f3df3941dc3a08c72c7de3515d1c6fbb3d304b7b1da29f2fb7bf64bc49ffff001d2ec81b07","010000008eef32b091e24965d024612fce519f19787a40574bd471fb4c3aeee200000000de078fa7bd2491abab7d7a1a87ea850ef79e60d01713f810d5d009189f64474d2568bc49ffff001d5d683302","010000005997fcde922ee0705c2085dcfc8cf1001ae4998ef493ae4407ded55b00000000864a66411015ac12a078a6d8270e4e4f7b0ed2928d71add6f3f9b71db257f3e91669bc49ffff001d2cf352a1","01000000954ef46f78c585bdc451a7f0d1f76a358f312d8652674918c1b09b6c00000000e04722c483015e38652727d3953086b8f96c7f169e00985173a123718acbd524b76abc49ffff001d3423a7b4","0100000041d36aa8bf073321034da361a21358bde3fd9edb46d998b621d65b0a0000000030834e505c2a6b3b1f0b034f26103273a01e1e3c09049f7a1631f443f3978e4c2470bc49ffff001d2d313f73","01000000a0f212fad005e5bfe2e4f043d77df0036196c16887c2ebe6392abe560000000021421f55d8b979741a6d7391a8467771571e30d1013373a58a452646aa74dccb3371bc49ffff001d67352304","01000000ee8d27bce8c753ad529d1a4591179fee2d704a94d4d14cc6913a359e0000000052efff67303ca507575cab73890186367a2209305751b928f283fd74378558a87f74bc49ffff001d36fd7bef","01000000d1bc6853ba76171d6981e1ed248dbb4e33515a556d950f47ab67fdfe000000002ba36a3420123c683e68151b1e8d5c990dc56ad22d821d6667d8c80844aa8fb60178bc49ffff001d087f0b64","01000000b6e3283c06cc264fc22d2c201e7fbd69b31b8f3c65e71d6396800b2d0000000073ac533e5d9537dff0de4ff2b9a7bf000224a696f7e8af7641772bfd41aadc8f4d7cbc49ffff001d2754550b","010000006caf5d8424fc845125d7bd145d0a788b70be83a18ff545b549217a270000000005da1b4ab5942f351af8a85fbcea45eb6b55a2dd3ab69dd5b494b0aadb6a7a3fb581bc49ffff001d13aed1fb","010000007885479f3ac714c5a8b2527c38f53e9b4525721c122e982416bed08f00000000dec87f7678241f11b871e66b3cddc3aba96dc0f98e40a03b886275896228b07a3286bc49ffff001d1644f0fa","01000000f5fb4b84e9fd92f4b8adfd92be450b0a71cf7ea4eb97ccfef20ca1ac0000000002187eda587d4befb3d847d02e1e5208b732c8e800b276a12856cdcf78017624dd87bc49ffff001d2c7a488c","010000008994ff2dadd69d7bcdd398e18292a2fc1995f0462651a3e27e29b595000000000856873ff1283acd16af6b3818caecd0f85276e904b3fc200c58b0091b0e83f4f989bc49ffff001d3163630b","0100000016e824d304c6a3cab0fbc533ad37b5c97cfe97dc00340a9e1bb549c100000000ccb3d669f8ea90dd68a3136ea78aa85073ee624722409f998d071f10d2b03ae1ed8bbc49ffff001d2207c966","010000002b6025c38169cd82b1dedaad6ce8d336512182ffda3512199de7ea7a0000000005fc36b7b997595565bf8104c9776729355d21e6e9f9a73d6c28de594bff943f6791bc49ffff001d22100ecb","01000000fdaca465c626e240657783a917ae08319c99e477cf35ba5c7a73d02e000000009c1cc427559ef26b6bafe17b760b9db543b1b63bb7ef49c34fdbe87bf004ac46d795bc49ffff001d15d85243","01000000f92b0af2a2c9cedad262cdac6eb251ca4ca33692915e2edd6bd41a3b0000000007eec71712459a61078745ce6aef979ee83db7f6f903d16e675a603b61f504097f98bc49ffff001d71900e0e","010000000ced87e8671e81302ad3845b1c05f6bc81bd91006d3f859c08c720b100000000f36e3ce27ba67c98be18313c3504e38a273b0151cd6f64ad5169cc2827d8df7cc499bc49ffff001d046ca241","01000000cae0ad2c7d31c5ed199f3606d6f9cd22cd12d49768e2c3cd7ebfd2ce00000000078c378cdef3547f0fc50c7926be2115ee94a065afa15ebacbafbbff3f6e11dfb29fbc49ffff001d1afabe8a","010000005d09de297465de193a3478d9a815d44e19cf0407685491e4318bc60e00000000fdd229c32feb7527d8d6b5f54729e804244732b69300ba06a9c132a965df7a9c16a2bc49ffff001d06e0dce4","010000006ddf1f348c2eef5bd9af6ad6fa066f90ab96fb51b65ef99601a44291000000000874b78c8e0b07f983abde8579d414e3280b6b27c51b28bad77983d7c280ab3724a3bc49ffff001d80d91a04","0100000023116db59f2082106fae995cf303653dd409ea22ae2dfeebd00191c70000000044e6f30a73ab0efccda281fa647ad4fad8a6c6985b9ca0a37fb100221a74ec7a20a4bc49ffff001d18f5fa4c","0100000063bec9f74156261f581c633ac1d4e3555bb87a4bd36115273919312e00000000346dd2a227acebd5d7c368e8e3ef6bb17d7685875dc3adb0a5b00777969fadd9dda5bc49ffff001d04f72a76","01000000cbd36f8044f2359c115a822cbbfb4ce474c9c0f9ca0927ffd2414817000000000cbb1e403ae3c31b5d4d43569c6be3dbd6d3f257d9276061f3e485a7db0fc43f16aabc49ffff001d36b804f1","01000000a56cf14965deaa7f80643e0bf87e45b5a7883d3e28ca244cfe428c0700000000538f3edf725383c987ac1c321acbbd05082d886e8b41e9efeb8667a5aebf2bad4facbc49ffff001d35afb72e","01000000459217fcf27361a682c61e384a6f8accd2d54d165267a8076d706b0e0000000067236b30fb0135114a34333ee1a264552bed7c50356dcee629bfffd4f818e53c47adbc49ffff001dfec8e805","0100000035cd3c0d90f1e12c6e5008071f01fbafa73792a0d0b217da035f0ee300000000e915861ce071e1fd350de3d7f3649c257020541b69b13f4661ddd92053c9dc1a3eaebc49ffff001df2c65902","01000000f3b1f249365f5f00d90f4521a5b5ea87b30d8d0dff8f54969393b31300000000aa32fb4fdfe5cff74ee099a4d5662cd62467c3362b933b431b207110b3437d8ee1b0bc49ffff001d225dab8b","010000000cfe87b567ca1c9e135cdba2002be7be1d3442c5b69d6a3257ff771000000000ef696ba8cfdce2021d7835da7432f29755378764596a736e50a4900bc09aeefdbab4bc49ffff001d2024712f","01000000e7f7429c50b895f62db4765eeeb0b29bec94e2ec7b4adff20dab7dd20000000037ea65cf6d83a255524a169e502405fbb7212ec633454d205af020084c35d54a38b8bc49ffff001df35bab12","01000000fef28af3485d01d6bf2a12a9053cefa1ae40abbd19c0cd18afffa63200000000b7ef8ae3a98920fd189bb148aa20049a4f9531776fd3d670d7c53006d1f9e43a71babc49ffff001d2c6e0905","01000000b3a4dd8eb256b85e25b68d7c354785a385d3c50e3f54e1492747e8ed000000006279d3688634c91670c9c237c1fce71e8d874e96643bd2d5e2e3db68c4407636e6bebc49ffff001df6a47d17","010000006d4e038dc60cc97e8fc0d996783236502292058c4e2217b0f6b4c4c1000000004968ac66d64257da826ef93bc5f58a482adf42bae90bbf1aada781ab433b0d2e08bfbc49ffff001d7af27e00","01000000698eca88026b319e608975ce3d89938d10fe622e0921f6d6b29306f4000000006c856319742a1da76599a86b29ab0a605e2bd830f5019c699e00984d1ece1dd9efbfbc49ffff001d18bfd401","01000000c86c5722f755a2dd5498257f07f54068cb7bdb5a84699ecc78cb4496000000007a4d47cae9687c66785c843c6a88aaffbfb808a43f8deb09d7940b23527366bbbbc5bc49ffff001d15388a8e","01000000a3f6e2047673414eb5566d05009731ac87a262c28f8607752b810ef600000000787393c41445a7f9b89e10b684a4a039a1fb5e23b3ce8fee1ee82e76056ac6dcc8c9bc49ffff001d1a714476","01000000db7e994f73faa70545deb4bed8493193b20f4925de5e16d57ae3911f00000000e3fdcc2869cdbd0d175a14ab4601c1f80471b694585a8d1eb446bee88694361abbccbc49ffff001d305adc24","01000000ddc8cedd71cd8b33c7f4e0f6ae410cedd2a4369a62b48e123f033d2800000000858188257ad2aefe610886a4e2f9ef5516753cee044f269c4905ccd156fb14f2e0d0bc49ffff001d23e22c49","01000000493d2bbd537e94af77701f891a240b5f8a32e7621441414ca656786b000000008c31318d67c6e155372d8bd050b3eb2dd70c71e19448051e3f8476f6ac27df09f6d2bc49ffff001d3a133440","01000000f9c1b4920b90114a951c4d945831c1bb601f198a2fe2d14303097f10000000000546674a0113cbba4c72f81d6104dec36e597b9bca2c67e5cc52fd47ff21378629d8bc49ffff001d245e1802","01000000d74eaa4dce5678fb13f6985c311cc21c4faab1b7875593f62a928cd50000000017aa483a0fc06fcaaf950fa7c67e2852043d59507ecdafd0de955d4863c0560e8bdbbc49ffff001d3505deb0","010000008737f475c126f6e3cdb22e7432f645022cddb382b3052bca6925baac000000001340ec3eccac17966d082b243c012d4f431f581433da4b84b83e103ec83738e38ddbbc49ffff001d0d004a01","01000000cb7e3e8c6a4afa80d454f6302b75c0f1f9567381c78851b70d721e9b00000000e692f5cbd5e1f7309a1f27336026051172cbc7b68fd5e280a791230a324c2e6809dfbc49ffff001d39af97bb","01000000d7a9c8474b9f7ca2e5bc6fa459bc99a7a6004808b3356cf198a0c3740000000081997cff30b9894f866c1e446ceeb4e76775b4cd9e5b201148b202eca478bfe542e4bc49ffff001d06dc7d34","01000000c1c4479d0514a6992d51f7d854147c4ce8f2b3ce841fc47ee84f291400000000e1bd9e888ea2cfb3aa6ace533c6994dd8f1e560d880a1fb25761aebc0904ea838ae6bc49ffff001d0823fdfb","010000001e17190d539ffae1a2490a6fb1f2753d40680e7cb58ef402ec90546000000000ca59b28b2a67e5da051252907c10fcf05a3187df5c154b00bbc29f2fdaca92772cecbc49ffff001d365ddd7a","0100000027d546559d4d80f2bc36b330011915a66c26cd707a0a60def3ca0a46000000004b6f6cead1bd6adcb6c316ae36828a022ad284629467304adad998b26cc282e137f1bc49ffff001d31f97d50","010000009d32e5e9b10b0a4c0605aeea64587a26814ff7560cac7ea87a150e4b00000000d13f06e4a2e443329657f0755e71f9c4af807beec0ae5506adebfe3e2cf8558fa9f7bc49ffff001d0832905a","0100000054cd071f5995ebb8142bc4d3c0b9e893f2f4c139c0fde9117437034600000000936667305f89fe2ea60f06056f1e31944afa9c4125745e7a06dc9c17d9078ac90bfdbc49ffff001d338d0a4e","01000000f9b923c337961643475f9fff67710d2be778c4bdae0598a1c6415b74000000001151db89b7dba8f204e8115cb290864f8ecd56da99831fc6fb64056ad96f1bcc5bffbc49ffff001d2014963a","01000000b89554b65730edd1a4c83c99b10722902e3359934ae28e5d1b5f5b5000000000d31b8a1924ee641da5fade6cbdda68a4bacd83ea2309520766423db713a1c3d1a003bd49ffff001d2db626f1","01000000d200d48378a37e7cd9cbfb548f75064cba955bf8a331e241a971bffb00000000ed80fba0c3aadebfd8e397ca4ac4e3e78d49cf4ac545adfefcdbec78e9ec38074d07bd49ffff001da289fd09","010000008381eb2a5fc53f9363dceafebe850ea50855adbeff924f4fcc4831be00000000abf40f8297c0c4909f651e77070163b623a43bccc35fc8bfbc2dddba856d4f576707bd49ffff001d3773b6be","0100000004036ba06c4e3c29b1eb5294a78294cd13732f7172459364e7582ce7000000006287e54a87b57b607869d720e16979f67bc6448eea50b96591c8c466c53923010f09bd49ffff001da9b08d09","0100000025dee9302abf4c82f2602c5758b3450cafcaad9d8b2404912a69e1be0000000053851473ebc3006c3259de5dd9d5f5e98bf991c17fd8d5b976e2e47b982546488a0bbd49ffff001d087c8f9a","010000008708872f2a4cbaf1ff8f2cc67137fc5698ee5ac63632cfc4c402da3700000000d9852d253d00137882dbd9251e545270b01f3130e5b7ac891fe0aa905691df3bd40dbd49ffff001d04971f62","010000007f8be5d1e8887b21bcb40df01f4850f4a08f4fcce9f28df01c9280900000000064fef1cf11070fcfa615179c227213fe35163a5f9e5526050edcc2eb9422ec882411bd49ffff001d2397b123","01000000f6e8cc4f2ccd11f15f6f0a4829e4575ac3ded4a24890a4098d01928a000000005bb87e93db761e6978a6a83703391590f423c8c39bf0277bbf1e0da4cd7c29ff2b11bd49ffff001d3ee86200","01000000643123ebe72507eeb0c4cb9ea6a7c112c35c6be0fb4783a5b0f1043b0000000031213dc082496fbfac37515e64f97756eb8e2aaf865d0fd952b17f3936f8cdb1a212bd49ffff001d36a4efb5","0100000046660380dd401b18f33dac04e8d54018c09f679ed9bc0c3be8463b76000000002376e6d04ed9c628c2060bf35bb43ac77a35c76b8c292f3bb48a72dc52c63ae93418bd49ffff001d02b01c98","01000000de36f550ea0d3b5e68e08ff3283ee65486a4aebf1af2074d9d000dd700000000a023ea7b680daea9596a7fd027a05b3886783b0a402f44a537b87aaa160a1e4eab1cbd49ffff001d182b2fc5","010000008f8cf3e9dec148f680551949131b8b4924fb4105aff913d5e008beba00000000bec0161cbd0946921f743dd3789c456aff74052d5b07585e12b9d16216d17b008f20bd49ffff001d3092d34c","0100000076fe88e05b76e7fac70282b51e9440f267134f8b5c43492caabc1683000000001a19bd2de1f5b41ea20e030a3964fef815aece5ae68bae8b73e0b6c9e3d63d796624bd49ffff001d20fb9ef7","010000002660446cafa27b46e77d682310dc794ed5c8588b748270baa607d67a00000000f728995705783253ce9e2e92d8e97a085e45f2188aab3b1708ec9a6dc863b1a22826bd49ffff001def73eb06","010000002650e644e904769244435157b9c816c9ebd8409f3062eae33376b1be00000000bbbec3d47b8400b3ac9b166a6705db25b0528be20e652e5c52d2ff96181725d56a27bd49ffff001d2336a809","01000000851c04775c07f940f7acc9edabcdf6a5caf265749ba2618af0f8265e00000000691c79864e0636552be2b295e67e615ffc0d1033b4a988f24965e737da6680026e2abd49ffff001d1e14ecff","0100000002d23cbe0933c70bbdd969723ef678f06fbb1f8de3cb367130e48499000000003bbee6b5398ad2b535dd4c4c14046c96b98467a905b912ce7d0ef74579ac446d6c2cbd49ffff001d25231af1","01000000f060cf37e56895bad2b99ad592aaa7c937828404e462c297a567442b00000000477664eef8370ef164af32dbd689fc9cafe44e5488717370a78d720018cecaa1ca2ebd49ffff001d0913a215","010000000fba6724196d73234d1970d3af2984cfad36bdf2bea876e1052084570000000081c0abad0013866aa96f88bceb2944697bc63e29a027550c4510c7380afe9c60bf34bd49ffff001d2d080f55","010000000553a21b9cda457ecb42518897c26fdbbe654494f5fd853caedea2b700000000f70558c3562ff7207b52158e2b965caf7d485ecfbce9116c749ca02d9f21dd138936bd49ffff001d16994c1d","0100000034d957d9a1283447ca290a38bf3993a4f1a5df886155f48a25e477c6000000000190a205f50b7ac5d33e47e34f5691ab469a86d7d04546b26504fa1c0227cae4bd3abd49ffff001d2a43ec3e","01000000041b2e7dfc14798039c0a788e1d1297e1b0075712ecfd5b9a38c350900000000c561a9f30b048c5cbe6351b50eca759839aa17960b4e79c2dad5ed90d68d41feb73fbd49ffff001dc65b2419","010000004904c2b6a5e69c396d7b66a2d42df4444498b276b744cc10dbb64f4900000000eb003c90b4d23c575f6d74c76d18234958be766edd428b167e5aba1eb604eed87743bd49ffff001d09194415","0100000018a7b3117d186dec82cf870b51b8b0950ebfe7000632b82c3924bfb100000000d60f37be95739faa1c00420ed7162eb9aac07e2f1a7bf0e0085a4e77c573059bc846bd49ffff001d2fcdfd78","01000000449e604be2fa80432f03f432f30c9d6c38047dcde0142199d59d32b200000000eff1090ceece3e92a520ded89a2d1124a8e7dbb63419f79c6ab3bfd10c49eb3de547bd49ffff001d17469006","01000000547bb39def44f31720bbb252e682bdad21ee8a051c3b8566617a525e000000001ef1928898525023dad839c3ac0b9313e38a6af19a9f288f8e63d17a92b824fc5b4cbd49ffff001d3082bdb0","01000000af7673e814d0bf127a07edeba389098fb39fdc57ecfc0bb849ec56240000000077690a2d2fad5d583e556a27136f9b9e82bd80f08023c34d93151025d9a167efe24dbd49ffff001d3804cd78","010000005e704f8fa4732db055d3d3a7b09e023d600bd9997721ccc391a9074d0000000059ebb6f87f1d20c656f1bdafa39d9fee2a2d7fbc6f38e0594424c28c633e7c180e52bd49ffff001d1c1a9c0e","01000000ad51bbb53d3bce6da42f5bdaf89827e9b7ea02ea0bc3c8b0d2e64f35000000003ff3c5e60dd31fd4f7de619392f39ad7767d3dcd17a348b16722e8aa5da54614c753bd49ffff001d010a962b","010000003827d7421e5dc021c4e236083346887097e34d43c9e7422476305f7000000000f2b1c75a466a7ce4cb4fc3346b5a31568a9b8e3b972806a844b3bc1589cfdce48855bd49ffff001dffa2b009","010000001499f2fb3ada1b79358a0daa1adcf7db3e2267c49f2153482f7fbea800000000b1ab68e611446f89ccc382b6f0a367c1ca3275ad6f896f9b58a72cc45213e217e256bd49ffff001d350ef2fa","01000000a479c36eca11b8644b4a01f8b93281aacf8450da33c522b5b1bc950f00000000deabca79c36e32797ef542aabccdf4fbf6663de751e6168a687ddab74e2f22d7ad59bd49ffff001d032c1355","010000006342e9b39e686a0539f645076e1a504027703e166aea8060969a75fd00000000b2c2c4307300952d48ddcd922cc4ff7df6a0e9ab353ec0b60939b0583d23b0098a5fbd49ffff001d2af484d6","01000000746d8654979e957daf93877f3c2a9234f7ea30f88459ea10f4beb69f00000000c85da7a251d1f13805a4fea59153b846a002f57e7a7d8f89d4f07478a3df335e3f60bd49ffff001d7852ab02","01000000facf299456e1e5d2867cbd4d6d0506feef3bf9764c9472ff03bb930100000000a8ef3e2eed5147ab75e3339cff148e01c91e3aad716ced51fc38b1600f5707827460bd49ffff001decb09a02","0100000037e785345a4654b708f3bbc7c10e6302a8c0259313103b9cfd595f950000000052a86e10af5bd6775bc9e04907c4c386aaa46c3dbd0f378c9216bb7e0dc4cb044e62bd49ffff001d034d6bd6","0100000077c087f9786cc99516cea404f698842070831a9e7f874d93e6b1f6ea00000000d9f4be6e4401e4ad9229c08737b347153629c441b7a218eb2e31afaa747c7ece7663bd49ffff001d1270c406","010000002ba87ee954d8e052c16002345c53b72b614ce2a4c9db81cf6bd024fc0000000029c12ee109c1f7a11eb32af7a3c8b81b6e111161aa4032ce08fa3a58554b247a1c64bd49ffff001d528be600","010000004b2f32d1dc6f9c0d49ad9b1a6310f3a74a8f061b3fea774d5177643f000000009cf14de361daacaf434bdc7f287f516ead47b9d85d8a4a409ededd38add087188c65bd49ffff001d34c34e13","010000002c2417fbfa1584fb9269cc8b62b7546058b1141c19042016c705fb3e0000000038f452c190e5ba2703c6e65ce467e0d757e6dc486fe8da610ea2efc41db1b0cb2e66bd49ffff001db6a14c04","01000000b97ba8d470c3228c2a6f274325c3887703511329eb2604eb93594bc20000000078678b04d226d6ec8248d8e0f46ae3b6fa9e781a904cc0b1583a10307f1538adc067bd49ffff001d14ab82c2","01000000771d589bc4f2d3dcaa121064b28496a6ebe6916434fc53847f07827600000000ce822bda5fedb4cf332d9f1d88816fbf80a5e108cdf86fd91a7cec6d51ad7efa9968bd49ffff001d22582701","01000000cb0ab481509f43496ec26523979321faa50516f1014e1c3a0621a12c00000000e82b3c3e1a1c68d5de8d94f781fb613a8d703d487d28ef21aeaa7d2f61bcb1adcb69bd49ffff001d1f7da491","01000000e5c7b4bfcd632349a9b3a65983d339df8452ae14d558be949a29be9000000000c0524a1ce7d77f7e07e6526b4f7785113f36006415bfb951a2cc1fce432d48fdf869bd49ffff001dc68c3c02","01000000ecc800967d2bdb355cc0123dc3cc582b7871eb0cea1a9e4e6305397e000000008fb491053cc26a87bd3c5b3f924f3b071abebafaebb6390fe5a2c6c62c13227fbc6ebd49ffff001d2d935757","01000000e7a7655748650707220c8b51340a356b64d2119b3f30e6bb49b64c02000000001111153f3f15137cec03bba7250baa2649291e0971688563b62dc846a2151de10c71bd49ffff001d14834d27","0100000028bcf2ecd316484ce458ba2256db6352e1761cfcc0802ec4c150f19500000000c1d2896b2907768a84348e58bdde8087248bf1167c891d4059eed313425f77d75676bd49ffff001d0896780e","0100000075d4edc6d8b93cba609a4d67f0864f81795651082851e853e6e9346a000000002288f072bb82a10ab06dd6d22de0e807003cf84ca2d1f8d75de4dfa39d8758a8e876bd49ffff001d2ed3a2e5","0100000076045e0c89a0d26440572de6a813b3504c2e5a796f1d744b7658c84b000000004ed9790b826ae275d10fe6d3c2b3c49fccddabe83057bbebcccc81f7481726bfc479bd49ffff001df538c307","010000005ff6fe04021d34eb27225fa13727608afb4751fa0dfa2f79e18132f1000000007c488c1128e942bd453499635052b1e0c6ffaca999ba865c35025ca382fa58f6427bbd49ffff001d1e6e18b1","0100000015e922229df6aa6f05071b47989825cc3d7bd892e0f0fb6790f8c23500000000c0f9ff6db862a40c4b5c24d8b3d9b76874d83300d4305cab671e4d59b7a05a77a47bbd49ffff001de9984903","01000000aaca7bdf36c5ceab0e46da1d6e7ee327add6f48cb5c01f9476fba7f9000000009ae3e0b67c7056001e1f253943e39187377e383c2a808532ffd606d1ff90bc9a6c7cbd49ffff001d00bd9203","010000006e1f7e476dd7bb8e47b6cb7c8f78569ebb851df7be2ec8bc01abd6a300000000eae0a5882d7fe676a57ebeba136dbf037aeb0466d8059d35cc72e8ea96920de75e7dbd49ffff001d16aba80a","010000005ff3cc28173f06184f8fd64f52ff39619248964682f881022f3f611600000000e1bc821f86f9a3c53ce7db27a46ef7f3fd4e5e2e6277c1bb3daae338f0dbff059d81bd49ffff001d278486d0","010000002f4c1c2626fed6fa3f24a80a610bb1d3bc6697bf5761bc25e88f30de000000006beb036252cedba5474884e3d38a30844140b73edd5b943fe6f38c3031ed7c1bcb86bd49ffff001d1db171af","010000003d707df61a80fc5ece7382165c1e89951fb562bbe3a0f26cd547fc5d00000000033626542548979a16b69bda76555f1c552167a375c266e6d111fad40e30f225ba88bd49ffff001d2b6fdb85","01000000bc8741b8f13bf373c59ac328c7993b389a10ab2297939dc09a9b4a30000000008b915bf6ec38951664fb6c5a0694fb0e3df55d64457f6ef96c3c4a96cff624087489bd49ffff001dd3b40e05","01000000fbc968ae5ef59cfa4bed3fb715faebe9becf4d0631654fad4aabc31f0000000044abd41bbaf6f9984d2d2931615c454931a2888ef04984e259102b6434186add5c8cbd49ffff001d06428f77","01000000158d1673a404d72f1e90e635c2ed7623fc6681703c1601e75be3bab800000000d00f3522a61f578a680213f7455f0f89285f02fe0d5c4762d647bb73f0e882989091bd49ffff001d281410ac","010000004b628342d0668df2fb750ea8447f8b8a7120b35c204dc8f98cf4ca9c00000000c333eee454fcda6a46c048b939db368919ca7b1fdb0f6ff6f6e6d76b31961a998e95bd49ffff001d3574cc65","01000000b6cb456ab9df70ece66d81079afcdeb08c54c4c1d8c0f67cb8a9fc84000000005a56dd1e7f6c8de0b3424e294dbc08e80984f83b7d43558466a48e43c3a57f04a397bd49ffff001d04f37511","010000003e83af704e7a7d91a19eb6a96c488f139d4ab18387b07f79df0443fb000000006f42d63da8b5be8806dc3b005d3903425c97b327df6d8e116cec24c654c428bd6c9cbd49ffff001d01d17516","01000000e906fadcfd93acd509286376ce19c06a0f1fee9cd81f8d2d0220f31200000000219c3fae6d8dc3dfe40e4d7ee984c7820273538b35b753004eb3ed1865c334fd769ebd49ffff001d2928aba8","01000000cb6e283838f18c2f23ad691f8dbcd065bc8f9776011d5adc13a5b05c000000007db1530500b9de5cf4c87d0bc8bf28a8b5d7f73965e3162a9d2f5e2fd4284240b0a1bd49ffff001d309d28ee","01000000f3891e0fb56bc5b1f6440c510aae07d6b29ceb46457f8dbcf2f3427f000000003ce88eb6bcc9d5ac43f4e2dc5dbbcef905df10dde34fabd0f395667ee6e244ed4aa5bd49ffff001d15117f7b","01000000336c4d648ddbca092bc2b4901ecc8075ff6d398abe334ee79e41316800000000aec92d46cc65aa1eaf1e9cfebd4debbdbddd5fe39341bfda593adc644115a9f437abbd49ffff001d148ed69c","01000000a744cabbfafd5f7287f2493858f22e64df8db247483cb5ad892cedf0000000007288f2a484e6d5cb6ce4261c2d8878682a8e83d1956fa5157675239e46444dab87aebd49ffff001d2bd98670","01000000beec242cdfa0b552cebc2de6ac244c5c7f0b9abf7177d1bf68caadb9000000000e94506624bf253c55f81927d5a2472eeed4070877843de7bd5986f193d63e74a7b1bd49ffff001d33020ce8","01000000b1a3626c649cd11d3106a81086ee5b3f3032bb2189dcea3361ad4ce300000000f9e36a8745df1e9626050cdeed445113aa2ad959321bf5ed7261413cf008dea181b3bd49ffff001d2971e832","01000000df763dd6d5c3c9c12650c76d89889628055454e7a7c43055c8f36d97000000008059030a329f5e79ab8ea79efd71f338136661cdcbb2f52c57283ddf258470b257b5bd49ffff001d2c5e5207","0100000004f1be50ba72f17d307b42430d3facb284d093e51bfc2a68d71d89c800000000c4532a7430419e3fb3456f28f1d0624c6c457e71b45266f34b5fab6b1bfe90eb44b9bd49ffff001d28c2e991","01000000af09438265d9122eb23b2692ec95ef7ae977a9e4d36c5daa2282ac4c00000000f9ec8dac165bce944383d1035a59eb88acfc0d5d2320ca76d61477ad9a1a2dbe5ebcbd49ffff001d39902f30","0100000099d1dbeafb51113c6a803815ad600b479edb616f830fb55e375106a500000000810367095ddf7d0d60ff3167132ec6e63b43d36f54adb32b8612d0ae56031d3d30bfbd49ffff001d37c0fc9a","010000001a41b20aa08fe26c88a2cd25facbc24d79c60c5e603fec4bf6c24d88000000009ccc82e3f767ef79753ecef048da6fa6a52e3070081d2c4e98dbbbfabb689ec106c1bd49ffff001d1d871cd0","01000000b4aa7340c9c2cdebbaf7d90ec1c6df402ce31b1b42305a09fcd7ec2a00000000ae4375cec1ec644459a72de18738d7cddcd964cfa2304872a01fe972345cb0d26ec5bd49ffff001d13c1b996","010000001670976b591995c2b3f4afd2764f4b64d5fcfd2eb4ae3442a329942700000000c0acac6c698063a5c21c2b95883571970a93d95201b26ba946bd411b00dec106d5c7bd49ffff001db5a79a09","01000000f7842053fe4b7261d7b63e068ebd78411ba70e2bd484c2e2d6fdd5ab0000000048c445b15f4e108733bba83d2ac0704ec441f5eea01ac83652d903b04ff593253bc9bd49ffff001d000df272","01000000d252545e9ae70f66a22310afc43b798eb3ee3a4916e80caf288c7ede00000000ac60387b725177a887a3a7a68df116c296d50c331460be61ac2d7ed95df922b93bcabd49ffff001d69f59f03","01000000413afc32a3c03ea28c78547e7c2221b642d1ec01601689a1875a45e600000000d4ab1298fe94b61cef0528a8000d653d1a778775dbecde879ecbbfaa30b79d726bcabd49ffff001d0f3f5402","01000000cbb249fc75f1eed133a6ebf00114fdce5047f7b22754bd6df2b7b9c600000000e638f2c6e8313d9107de3fbed214a9e95852a8dc11b489603c4449789baf8994c1cebd49ffff001d28154a8f","01000000fee2f572eecc2b1d6dec874acef8b86e3213e739e82046c49eb6aaa200000000279234bf5d071e81a8db189e70a0393d6a37b96d503431a1200d8e8e60982cc9f2d0bd49ffff001dfebd3008","010000005a191307527cadf83d67be28844aab8c74b9bcde01e1b01d51b68d7f000000003a2a4bf07e0600851600ecb356de59d52079af588f5b6dcaf5f5fb74006f6a1d18d2bd49ffff001d2fa91b7f","010000000130a8cc2cc7ffdc4cdc3b28e4a1c9d205ef727b049d80090d43a768000000005658184d81161656cce91e7c31e21090a0b90d2ec166320964002fb786b691fbbad4bd49ffff001d6fe7e409","01000000018790fa8f01c9569b0f0aba93c814dca623c9779d9d5b17a3e422a400000000a304fb95bbcabf0fb26c47be74e01a67c6e047d71e6cc3a4d71d23c618b63fd747d7bd49ffff001d2be9bd17","0100000065cacd7761c9b5c3c17a66183864137023061b35c713663e7da3369b000000001ac98e96f218f2a16e4af30bb6b035a7a753539316bf0d8983e4e5daef6e7445fadcbd49ffff001d2e128e4a","010000001b04ef797abee02f36f31ae44057bc515ca609973597c45546da55ae000000002456246a4eaf9bf384366cd62cc6e89006bee71228d10151cf4a8e0880d36a1434dfbd49ffff001d2c94a9bb","010000004447063750a9960784a900e1c55fe65781e80d468e2b730191ff23e600000000a8d0fb1cbc09429c83cdc7f00be1d3a13e7ae1bd4210743f422a6ef3be4f91e915e0bd49ffff001d3d07bc05","01000000e2561944d98fcfb85e1f654df76f1903d52f0c73e29766dbf572b2cb00000000ca845f8d4671f1da1acf6b20a7280ba025dcbec57b0a679574154e1953e8b94687e1bd49ffff001d013ed9d6","01000000fd87d2d3653e316b3d0c8b2175133ddb8419fd1259770588ad0d88ab00000000c9516110c1a2de5ca8da8210d09a375a9b7819bb7f71833441ffe67ec92d473f77e6bd49ffff001d2af36694","0100000005fee1e4a48262611d30e5a36ba1ba7a4093660fc3eb10082993339700000000ce172242a6321a3e67fccf06274c18c766aa3cf45f5a4813ed00300ef6714b9508ecbd49ffff001d381ed79b","01000000082dbe364ed5c291bb01bfea9337a1b775bf9dbba79cdd35d5d63e90000000007b1a7d44365a847e4dff780786ea2075af4f56c9106bc08f6983267c063fbaf4e0eebd49ffff001d4618ef0e","01000000e1d70ea75e229f074ede85eb20fb2caf144d2251711137889e9d677d000000005a48e49f8d05bb708330b48dcde021f0c6b942883b35242d95554609e2caab03ddf1bd49ffff001d152efc80","01000000f8c2e6de244013f2ed76994a5a7364cd8e53be976aad7f993ca72ae300000000497add2e573601b0502598a3b7243ceac450da4ca1de1c20cf72eab2e2010be29ef5bd49ffff001d2a3de1cf","01000000f5d14d34b468519b8a03f51bbda838e51dbc07e842683cb314b7eb110000000027c962673e5f22ebf84e61c1a86b81631daaa6075ad6d4adb2b6d78bc73e9c64fff8bd49ffff001d45b9990d","01000000d0f0db56f751348154d130aa60d1454326e60007594e7a671e322eb2000000009d88cf2a285aeb6d21f6161072b383ce375af71a4c2c2d46186fab1ac5fdb35262fbbd49ffff001d623c6803","01000000a19a4fcc54fe9a1dd48ea392dabd3687e00398098c8c6db9defc3779000000007e8033e097f5fc762b3b9861f16f1ece97772125dba8db60652742c5b9808e4742fcbd49ffff001d3efba903","01000000e8678c9fbd166df9325c47e5a0b221b5768275e1bb403fae71079fde00000000b08381fd98afcec3bd8cb31a3cf2ee75396bd79e5caf23768bb0f17ca7ed977c0300be49ffff001decfb8b13","01000000ee23298afe24bb218db5a3f16f051c48a44a1d1079dbe7cc78a856a5000000002467c7d1e4e64b3b0344cbeca79096cdcd4ef07cdf2ab2a651804352b7d01275a600be49ffff001d2d153d27","01000000ef5e2d8d21a46cfd68a1a0a4bcdddeaa8390b0e5f0bffedfad7d62cf0000000091db23b7571b42094fbd5fa644dfec64ad3bc99045a62114e21767317c5676e96804be49ffff001d1e378ce1","01000000c6f73e4b2c6262d509cc08e1a0a2770072bb12a10d1047314d6b3b4e00000000d081f5e8c222ec57bda9462805d779d8c2154fe001340669bd67a6d05aecc25d0205be49ffff001d51d84202","0100000078e537c43da1212074c44305bd5b8ab1ed3cbbba9869161614dfb1f0000000004440d9a8dbd9f1cd8ca59239cb2dc335a6a1b0dc331bed0472872150090389778308be49ffff001d2189fac7","010000003a244855a2baca67da72c345d85a4f3c584aef4346c177b5a5b63944000000000e1fb66d8cce27885cdbe579190e4171bcf0bcf6861851235219d76063d583328208be49ffff001dc2c23f01","01000000f2dd2b4660598d6017e792a9a01b5d7b37da9e370e75b459909ee18500000000db9d5060fbbbfef2eff7959c2dc1a31c650722f96584e595f29c2f67496c84a4070cbe49ffff001d2a2118fb","01000000d964655ac889016cbaa1089eded64d83a1baf28abfca3649c17671ec00000000c8aa6500fa726e9f9c68c1149ea51102290e8fb5f5f8af974b773a459325fdb5710ebe49ffff001d082734a3","010000003742ddbe1ffef366a78b8b0a5edf4c28e42e009e8952f64f9dfd0c1d000000008c0da6df0fda9f9a9991c5b2bcea639308f28f0fde9da17ffa80ceb0b4803f1dd10ebe49ffff001d0209cf00","01000000cb41c470c8ad7d6a86ae22c392a4f21799b426affead649e545d3ae000000000752a20744db99ee45c26f95601cb976b18ce9157c380fc570108f35c0e1ef3932f11be49ffff001d22b2494f","01000000bdd1f3d63dfe337ecbeefdbccf3f7f430b421b35aaf3c9650ed2808300000000609cfb99aa9da562d260148c1325823b988a31884a77738807bf000a8af3ba6d0b15be49ffff001d2217f262","0100000011999193c8067f4c5a32f9c8d0e4e90a1f7cab0d558f058a6780c3e10000000061b599b3c64d87537e00091ae6933d0af59df63fda3fbfa2e33b59ed609886964018be49ffff001d24ec1e7b","0100000085987ae27a2fc9353c26729525609d69200eba2b43d7bbaefcfa99070000000057908abf02cfa69f30af5741457d4aab88c383ee257ff3be1fc97ae98c827de40c1abe49ffff001d30167a04","0100000068e8b66cae4fe5eb7617367b64badbfda126d975b2ff38e92a9c006600000000901784a4a3d65ba261577a77683ba7ad7251e7b6f5267ebbd8033912ffc949fd351fbe49ffff001d03239396","0100000000027aadffda0a046e2bc8bd60ba80ed52330b89e47eea71c94cbf5000000000b33f37ead6d142c891001719c8ee53b661a3d62e2f20101af7c754ef6bc0fb3a3522be49ffff001d2a83d766","010000004a64899ec8cb08e5870c3202b86ee4ce2209233517b937ac1533b21000000000181f850b9d66a2ebe1a922d94b345a786fc4e5275f594fcfeb2b581d0b961d250725be49ffff001da6a44306","01000000c29e933a0be076b6023ebd7938a49fcd1bae2d7aa5efae72031c117c00000000cab1aea5e10ae8f42a0846be085ffb4cc3f2a23486b0feedb643b281ca27e95ca726be49ffff001d32e600b8","010000009c6e910922d93ea51672835534679c4e0284ff348f83d2871904b0e800000000de71214c75d4a0de9cced6b55963e609a680060a849935615c0fa4f4d8e15946ae28be49ffff001d3796acab","01000000cd7e59dcea61a495a7583443e37d7138b00718217e4582fb4534a26d00000000dee99e323d9bb7710aca7fc495fc35adaac7cbb04dbe29c73538a59e2f0b0a4eed2bbe49ffff001d3a5ab492","01000000da4c08864307516f481f97c74f50339f91e89a7f1d5f465608775b3c00000000f3d87759eadbad583ffa832d120c913e01048c1df08e56cb317b4eea10f550943930be49ffff001d2199becc","01000000bbd540df22d06b9040718bb93563bdfe9ded15f513868a6413cdf71c000000006b65a93f0a64e2a13e260062582eb1fe7c69d0306f11678b6f22c2cca0a045768c34be49ffff001d2dedd593","01000000cf1f2c459f743e185c05ecf80d758396351eee934954a23aaa059a1400000000bb63853d56e932846bcee09ac1e9563304a47a35ac20d36e90b956568744bd8a8a35be49ffff001da83a9102","0100000034c62164e2e9953def0a3a641962fbd7d6626a29f62ee9f2fea868f900000000868fbb265f7d206f2a164ef34cc7fb2f0621b097df80ba9a7960ebb56b87d856a838be49ffff001d1d5b58d4","010000007035bf732477477633aaa76366682ccd0cdd12433bccd699c3bde5b50000000026ad436860121bd0f1f5074ac713fdede5985d8608ceb89b71c5dd9ea7f2b7ca2e39be49ffff001dfceda600","0100000041e3fa85cc2fecb7a3b7329f38064dfd055be1df6acaf9500356f400000000001c7ff7742d83f8237e96f88bc19f4a0d0ebaa793afe07530a5b19b4b202eaaf7b539be49ffff001d4a634f04","01000000894fcb7e46a30024a83e8e37e8bd39d0f41ca01337757172a255600c00000000dc3d5b7e9839eaddacf4f8837c244b9a43991530639f6b774d4567d6d450d47d463bbe49ffff001d22fa6461","01000000c33e0ef5cc2234b866a7977e592b13ccf5438bf394c88581bc4caef5000000006a73ca44a7b51203966dc7092a0b779e20b80139437c944af3478a1cbf773a0bfe3fbe49ffff001dcfde370a","0100000048434e8a7d76dd781d72bfddd5fd10ff56a4d2d438f13067060a70a1000000006e3cadc5629464baff73e62f92f4847d30042daa8acd3792c31cdbf0ad62b47a0541be49ffff001d1770e063","01000000cbb5d3287f5125dff632a021592286f6bd9c1906842d47b6add7f24d00000000692e8d7069a90cfccbb62bc547f792434962aef4e87943bb291a1ac8d599ce168846be49ffff001d2510d35d","01000000d3faa11fd36c5a6b0d1a0ef2fb9d993546d8285be42267e437f7a4a200000000afd9a25bc36c52e3629da1c28e6d9da0b3a6bb2ae0eeaf1bbc10f66bba4a67cde94bbe49ffff001d27cc3ce9","010000002019a6cc93648058a94a3462ed0b067642e07002c060f8bbbfef8df6000000009bf92d888b900643c931368933fa093da3af026503242c6732dbcdbe2ed1b8dd3350be49ffff001d1d63f2d9","010000009737ec06c4b4a9c6535b1dfb7e4f07025acadd71e0f83ac8d4d231d4000000009c17e96856c039cc266c257b1c08f6ad3ee59a3c2441660c0f9e9f182d7dd39e7d52be49ffff001d09509127","01000000ee59c94d1b17782382a92f34498a19daf0aa03b1e0ea050a550a2132000000007427454d0da567e36bbc3b524a9b061cdd656e4c6a20667f9fce76b081b93dfc1f55be49ffff001d85c4c303","01000000a3281fa2c037cf0dc11e56cb535678d3e702fb609f65894f3da7360e0000000053d78859375f2f416e9be4d92e09ec4314904c56179db954b2ded2bab6d4205aa356be49ffff001d04b697e5","01000000319d842db6982103d69486feb58733ed69a64f007222955131386c0e000000000234b49dda7625e83aa69405a9400ddde12e4170b96f9f58125570e8fa6af49a4b58be49ffff001d2dd0064f","01000000d61ee6af38b4e16377b16601ba4af42bbf0822ffc442e6e7c44195ad00000000966ba47834be537b455c7ec7d87d7b3fa053ca70c68cde9cf52aad7ca87aca49c35dbe49ffff001d66c3821b","01000000d571fc631e0464daa302be484eb5a5bb5f387ed9b228a77aff8d1f8400000000c71f45251408bbe663840e82c0db65f2179773ec14d74dc397c9863f072680d3235ebe49ffff001d372a2532","010000000d71b9e4f9fef694b2c04403ac41d5d15d235f540e2660291d1d37610000000073327d48925e31350111a2b6b0b4666e4267604299552276eaa0e288cf972d574262be49ffff001d209a1e55","0100000097ddefcc1bacf8f278feedb2ab83600528afd707d26e81d38fd98388000000006e301ddc4e280750cc458ec911fc0e10f911efe04ef9bb06101f721778ec0fc73364be49ffff001d044e9418","01000000403a5676c482ff4de88b02b576d489de35a7ace3d9c2a514ce5519eb0000000070c32c6130d605fd62e5af6a1ef7c2cd28885e47ff2728722f4c7a3b234199fd2c67be49ffff001d0139f26c","01000000817c49c2db20d8c2a7c5a7187a4493e0943140c40f997907bd4c90410000000015b2015d80955caec1a073f8d2049fff4e324149d1095874dabd8a28630b75bb176abe49ffff001dcd863e0b","01000000aef096c8ed8010a75d61ffc36c22dadfe1e1e1e4619718e549d02aaa0000000041bfee82616f4295b48c211ea7ad5629ffbda0d5cb104ee3b89d64790f99808cb26bbe49ffff001d1c2c472e","01000000475a88c6e1b40c65a08aa52a852567c27a2357b41df290f422da78cd000000009b2da062e786d42d9231674f3b72543f08e6a78e16115e02143d864c8f28ee7b376ebe49ffff001d34f6620a","01000000a279a8db1ac4867ef375ec1743abb049216104a7ece09f4aa3280fff00000000771067b2ff675f7ce998fab73721613eb8f0f629d0ae520f5c7028fb64ade772d273be49ffff001d097c94c6","01000000f3ccb354e0a35c7390916ce1cba8b8f7f8a4d61cd8825cbde5cdef1500000000b99d0f5186780e0f4d5da642cb08bf3e83830d9efd09e6d076d6c8d08d44d706d975be49ffff001d308caae4","01000000e55c88799a18d176fdd8b23f9c21ac45efb4c9a6fb65d5317a57929700000000db595de1eda7f77b4156bd7d8eb2fa7e83b7c1e5596fdbe1a3ae2e92ef22f1b7f579be49ffff001d3358d632","010000007adf23ea0971831ffeb3840585edaf2aa3d82fe60f8d0d59e2113a4300000000ba36ce0362ad2c79cb12b25c4bbb5201b07daecdfb092479bd9b2979f5e07328e77abe49ffff001dec5a0406","01000000562b98eb556931bcba4ecba54e803223c855e47bb52c99a9dcf9293800000000fb05c379135affeec51e7cd8c9433490b2bb74308865c0baf44d5cd4866f5d5fc87dbe49ffff001d8db01b0e","010000007f092cec00d8e1523b588367ac9e508b19b794f0c94d562d9586a7010000000032321f6494387f10f9abc2b33b70b5bc68d8775620c2d98b8b3de1e07843ba46427fbe49ffff001d366b62de","010000004c5ae1da8c2f193ff3cf5f7465e13032c67b1f817e29bffa12c5f97a0000000057387291ae156233d8b89bf6f267619d1e6575ce4cf85260bc0d4c960f18c4a4ef80be49ffff001d00168b80","010000000d3ca8da86d12aa66ea7603cb2965b1ad63ce4545e721a9077fbc69d00000000ad3ffa0a7f6928f38778ddb31fd0251c796a36915b69fb6968d6b13470915d4c6784be49ffff001d32380da0","0100000073b3ddfeb3561331b3f819e81c402246f18e7dde917a112e9ca0c05400000000acb26f55e2a0258fcfff3b803e4336bf4db2696f465fec12ed583abde5834e229188be49ffff001d1f066e55","010000008f54cdca91dfe4e6d8dfffe1ad65a3c4432cfd7dc04c75f27198227b00000000c7a1fccfa95ef5e0e49a5b35a527e4672a982b0ad63c8286a95cec2b7c74f3e0a78abe49ffff001d0590ec9e","01000000250613f05ad4797b3cbb5d43e9e17ed4838f80c2afa1b6fce30d96d4000000008d346b2fbaf8ffd8ef4c3ca88b714df1c515114160116f29f69bfba9452f15a2478cbe49ffff001dd9636b09","0100000012cb03bd3fa8944d02f7111bde108bfa8de056efb0664b7e1822a1db00000000f77d8f665c3402bee3589926c032c866251f5701cc1d2abc5532d79708d0a93e1b8dbe49ffff001d07a6b62a","010000001cadf772461490f85039493cd224c86b5a6ea8bdcae8590765ad8c2d0000000063686c5e71843139b1786011d6c2c7912089baddca66ea169d5da4a49432ee64ae90be49ffff001d26e14be8","01000000ae0c5adce4d1d20d353348d6bb966c35c314a751d408fb463d256dac00000000d0fb5691c5dae7d17d5eb8d462ed8de53f043c7838d158c7c9e29a81aefac0fe1a95be49ffff001d388b4de6","01000000f27670c3121d9862638b217d852b9747fa20d57c030dfebd3fc6949a0000000085c8cbfb20fde681511d41f826a288213ce51c00294ed59ebad9946ab160042d7e97be49ffff001d09462ff6","010000008b3a35d647340bd66755bfa0f39192243c45901b216db19dae94830300000000eb3cce932516d1eadda64117c7992eea9915aea75ccb38efc9d6e567044a705e289cbe49ffff001d362bb810","01000000e1f4639fb1b5188c12fb8ae994159457b71d20cf8c0dd8a6a5001e9200000000d56da526bbd24b2961fa341371f6d096e1aa09f10ea7c069071b2dc500def8eb2a9ebe49ffff001d146f4314","010000007db275557ddafdd9c20d977c6ffac77c17db56c2adcb863b893d87f6000000005c9108e8798e8608353723634f38df6c0f6e9855a76fbed8d48ec5337c3273c4e7a0be49ffff001d1b625f7c","010000005b5558f6f975e9fc67bbae799e0f06e97aba6140389c6753048671d7000000006f9d6c3dcf0b360411c4d815b1ca840834693ab563e7b9ad079d4b2a4dca6f371ca5be49ffff001d2c8adc59","010000002930c915bf55e1d00de9871791e1574144b91e57f532314b1886970c000000002e63c6486b4e7df13818de68697b1d543f9782adcdd3259c23efa21d9fded49708abbe49ffff001d304a1509","0100000072442f699488422eb34a5ed43e145b2d0c9e89646d0f781779a21f4b0000000011f99e8738dae7cbe5541322b9499e9373f81634ff9feb35febffd336448d13a65aebe49ffff001d28472773","010000001e20592ab09ba71d572a38d8e0e7726c5898737d44ef35249e4c80fc000000004c5acd098127bcde33bdacf67c9483439f11ba660ac650e4aad2526ef34bef0ea4b2be49ffff001d28cc0238","010000004265f3869bc4282d5a586ebec33f2c7acbd9cc5eddc40063a29bce7800000000310867f18ec5f159668e41bff43aa79f99673a3a686c49293395ebc0d0e612beb4b6be49ffff001d228a2751","01000000e43bef12a823e382fc3ac60b9a68b3eb88dfc1e92ec152f4a8c1ec8e000000001942a0006b152d8da9471bdf48fff8f907a6dc8596bdaba2ddf5cfc1650511cefab9be49ffff001d23de0d64","0100000057b7cce9a8a8410a27438997df87fb8ddd30d142fa0a3dd4c666009700000000ed0f36ed9699f0b06e76063378e22619c60f2efd8c905d0036c837e1256d3adf4fbbbe49ffff001dde7ecc01","0100000077b73f228ae32ec8865e49e43570448f69b545f560e29bc0cb8781ab00000000752afe7bf05c26865e7bf0a9d596e4a704a193545ccfcbd4c03dc73eef007648e2bebe49ffff001d1e45f642","01000000c614abda333e33d69063bddbda0730b6d52bf7e2f85e34868d433dd1000000003d5e018d48fadf1bccaf0f4688756e4898ee530dbe3d7cbbbcdf4b3bc8df7b5d41bfbe49ffff001dc9d1fc02","0100000002543538daf762eb18ebeb08904bdc1d3ce28440c8ddec830df45d1c000000008ae297de05e984d1996272864c04fced55b427ff6c1b2aea078fb4d12a87bbddc7c0be49ffff001d29ad7f17","0100000087d99c769103b694c18060b1afe0171088c137b1e54a108bfe3104ca000000002f7cd5f7f217e2c8a62c5a07f363f3b5d93e44f22b38b58ff05204a87cc2ac3f96c2be49ffff001d2d6a51d1","01000000ac9bb041637814e98879a12a31b6d8478edef69e75f0a0e6993675970000000003f1f6dd60be319b8ec2ab4f72628c76c7b245a152d8306e7fa3797757505d39bcc5be49ffff001d1dd6b631","0100000069f5e215908f1d1b8266615cf8ba74c0c60b730928e7b1384e99392400000000c6ca956cc53c91d039b454ebfa5f18621802a1b0e7433adc8e34b74ee012e594b4cabe49ffff001db4a8e415","01000000604fa1250f0c3a3e1f3bba809bfe9ebcb401a19bab902ffa279e5b1b00000000b0f439902a504df9832e6243716a03e06ba3bc9d9fc9168f97bab3d33942fe2fd0cbbe49ffff001d01a944a7","0100000030090bcc7d610a723f7d7611f37025c45026bbbeea2796b5937b3dc4000000005b33d715067a6f66315dbe5af11d8a80fa121dade818785da36b770e1206ca4f67cebe49ffff001dc1c7120d","01000000f3ef0df55bd1bfbd99e8b8782a41a2f956cb08b3be4230dad5ffdcf300000000697c5b0b991184fa1faa8b7100166b4203bea34f9fb552dac8ed1271c50d8b4e8cd0be49ffff001d399e3e6e","01000000c83028e93f571404407fed50b78dfa9d9e84bcfce3f8aa4b42492a3e0000000008e94e168a114c4ada00a75651abee386a7a45691e8bd40db9c1313548747c6de1d3be49ffff001d2d9ee057","01000000f870df9109e5ba3c920ffce34ae6f0a4e5e6ad3aa7482b452698ffa300000000de423bc0d4c223530183ebca8aed55d73cca9a8e02f4db550b5a5a731050e29c16d5be49ffff001d2b350106","0100000094090cdcc101518e626de182ed9704e13cb0bc48dd15d4a572bab8ca00000000a0a4b91840b0f3fa22aaec3bf65bb29af01e6e178132016d82bf290526a54033d3d5be49ffff001d3b700903","010000009f7064bee51d120fb43cc4e3c88c83e61133624d31798f00498ce20a000000001bb02221f00d1cf0eb8f14d1bd42671a58f51b77370fb3265f4cb4e4fd1bebede2d7be49ffff001d3668cfc7","01000000bc9fb2739956fea0b9febe102ac2cba18e7593d33d23486449d6512b00000000c6bf96a72bca762e915dabf5ba236145402fb419d65e54d50efa324b3cec506db1d9be49ffff001dde762d0a","010000008bfc49316f9c7c2b198e0ba6ab81724f2cfd7c1ec1e373dfea12065000000000a5fe1dec2d430a2bb20b06067487251542ed9f4a517e2b23fe6bc36c3e0174b363dabe49ffff001d200fdee0","01000000614e928f8311cd1ff951d7c698cf721e0fcdf903139004939dd510bd00000000f56e11bdd84c02cfc55b56e4c2b9428522648b2bf98c629d5c0eabace80d239d55e0be49ffff001d22e9d960","0100000032df64936e55ba768fa303cede975d66f766257a5de91777483e782f000000001180c5cc8407442da10b76d6f6c483acfabc5449d14c35aa0165dced151de389fbe4be49ffff001d221899f9","01000000798bddaf961bf54de4f79269a8cc151778974b01082d162ca1b3c6a10000000070c98f7ce8ed1225c2479ec325a97c4246347b7074d530d22c1f39dc76fc6fd088eabe49ffff001d22f1aebb","010000001759833b4561cf28b66dcbbe9f15dbc93dc8bc834d001964a1ddc9570000000088603c41fcb0f9d94acd7e0432c804c6c604f598777b6c5ba5f2151dab084abaf7edbe49ffff001d036703f4","010000008ab06979633b11b7afbbda314e80d86ffd314757ea2494cc1665c04000000000805a9f5753dbd7c8101c9e55d6098272770a60e835437177aa3e0603c75ab82b12f3be49ffff001d279c7b95","01000000338b50cf480bfc594d9bd81ab81683cd90b013823db1e525a17258da000000003579dbff0f4d6ef11faa78781f034af9a6fcd3ceceb75b2ad0e93c80924876aea9f4be49ffff001d7bd0a403","010000003bbfdb56ab2cd0f7376ecaca577ce3840b8dbc28333a0491e52897bd00000000f2dfd181a7a58b661f62f76fdfe6f9fc1c1b450814b9ba73ac88f26e8fa423ae92f7be49ffff001d2458bf00","0100000082eca9b70aeb6ec7c4233dc51e1184e1dea7528b6d10a43eb35f3c0c000000001004e6edcd61632811e66a43dc8fb882420a811d240760653d3b0b7745cafb832bfcbe49ffff001d0438bf02","0100000097726241f74a90fe923c0c4a9242952634d18f50d4c61c4d4c9862090000000007d85bfe2b90abfc3c6c939d1ff33226d3e35222ea794a243c2995e53f27a50953fdbe49ffff001d3411f902","01000000df6a9faeceb7fc3f7773a55f3ea7477bf1494b2b6a40f1d99e96aa2400000000e7bf85ec7dd71021ac2f16a4912e3f84bbd4eabe51787bb3e030cec24110c6a200febe49ffff001d079563b5","01000000f90e88e443b9362771da41427f7f9cf2ca122fb9ae1bd7cfd8c94a09000000003de04458cb6dd99cd9deec85f1e645a209a68bc7a7effee0552bff9650ac25848effbe49ffff001d0237b107","01000000740810fb64d3c5abd32addc3a24e28a0dd3a2877f97466ddfc80a5f900000000c7599061343f8348b759eebd57b0018770b1e1340436dec615f95d3dffedaa337e05bf49ffff001d006f6de5","0100000012d5ea463bfd2ae664198198de43e2b74dd55c2f50d47911a4bd78c400000000107269dfea6a3098c21f219d1ff4f9bbe7abdc3c4dd70f4cb0be53e0520a36db5407bf49ffff001d2c0d3db5","0100000082254c044844085de215b32e519f542fbd786f26ea7b7eb857b9d9d60000000005392bb2dab064ec9d815e4ad2adf3990d4a15951441ae6e06982c3f7cbf64826407bf49ffff001d13feb600","01000000f6bee4b93a1e7a9230e0b342deebf962f72154afa9a3e106fb304bf300000000e1bec29f1ae4f75324686090cf1f80e0285f13b9ab21272acf517b417a0d44180c0dbf49ffff001d07e61dca","0100000066537339ec47562dffc2113b4abc53f79483b995125e1370c8027fb60000000017cc79692d159e5190f92199023bdd5024d0c1115e85b8f217240f03a0c6e73eb90fbf49ffff001d2b6f524b","01000000049f12eaeafd7010b5d8c154d7efe65e0165e3278397ce562b46a524000000008f72df23cab7210bc4d23b444bf4b1982b5e2303750f1a54e64a7bb044405eb5c711bf49ffff001da7468304","010000000592c81fc0ddbac30db87f33b63ce15d734e2ba8be1bc3eb87bee22f000000000f34674eeaa76ddb9fe46361e708d7a32a608cbc728d6dd5fe6544fb85842f508712bf49ffff001d204772b8","010000006015f9831dc3fb6548f5bbb3273658f0be239a62be23605fb5bccb6600000000b5b64ae98f8dca42ed78daabb104dcc11a69b5b96323c54072ba408dd7487180f017bf49ffff001d1d086368","01000000c6b7717b295e9a33f026607f776b6d2e127d868639b17fab39bc354000000000dd4af08e630f609dddd36f4ca8b6f47b4194ed5399fad2ff2269c0a6add467eb841abf49ffff001d1d4efc82","01000000b7bd0eaa0a868a1f373d8e36118edcabda1fc2844a4a0aa1c1fdfb2b00000000df19c04ba1314b48343ba5eb5ad5d27864a806235daea1557255a4dbab4a22d2a120bf49ffff001d060764a4","010000006377f2264f2e61ea72e109c3ee786c210e00c3087f71e9985d16a9440000000078bb98d395d52dd9576b0b955b845bcee9226564c4767207fd8151356f567640b124bf49ffff001d198e4cf5","01000000f3ba340ea238f4feb5cdb0ed5fe48f46f210bf6825f666cbbba18d3e000000009ac164b1419e1019c3a1a0650e970f7a3f1521adb4efb34dd21cf63141ce9e854327bf49ffff001d06a6803e","0100000080994f85559e1dd15915df833c50bc66226992d9a5698553defc610400000000857650cf9b3586fb03a5b8729675239011d8bfe5826bbffeb791b425326370d3a029bf49ffff001d17970da9","01000000c7ef5e55d5097d6d2eca965bdf4bc96b15e7df45f2c82b384569cad900000000330d5997c41d439ace7ff549a6a7557e941b6c071b67d0a1b04c717fa1ce9e54a72ebf49ffff001d26461b27","010000001b3de8340a3bd82413f6ac4b05b8f925cbdb7ee556b3526df6ac7a070000000082a25f56cddc8cbd7c57cef3d5c78ad1cd36bec6d3add1fc2affca14adf76e01dd2ebf49ffff001d64ffb600","010000007d23f6314fa0eabaea97e7388350a161481edf4fb15700980efc463400000000c35fa32539a4e3dd7a27f1dbdaf4c2b3959a090dfda40e9607bca7f4c452e7d5f533bf49ffff001d03cd26fe","01000000777706a4c4a59fa4f2d9ef352585d04da1ad968d41393efaaf95c849000000006bb15cbf59a933cb8b82c55527f6a6081591e76f7412b1ef7b4295e6ce15adec4136bf49ffff001d19080c69","01000000608fa450a7102edec644b7d56418183f0ae6c5d848e592a21ee45e3d000000006306debd012bffa090a97f4543ce792dd1a349f5e9298c0ed90616562bc34592033abf49ffff001d28e26c7e","01000000ce10e79bcccbdc63de80b519677be3b2e7ca775717fea68a987c100900000000997f1ef547c02b7e823f225860eb6c6e7f5793a2b1fd3c74caba25c043cd24c9c63fbf49ffff001d35e3646d","01000000b7b06651dcee266d8d6497e85732c7bb96e7ad0ae8150e793d15511700000000c9cf53c8400896b84c90c4c382c4994d95bb44b231cc5b31ddfaf088115f12f29a41bf49ffff001d1c4dcd9d","01000000bb2e6ffff331f855e20f052dde7ae6edc9ebf5a29ff506c62555bc35000000006ceab497101ea697a7e002e9febae0e7bfd2a594ee7594331119b3bcd684c8231e45bf49ffff001d15bf5c17","01000000ceb6d9b12f89740c98d4559fca8153651259d76dd92219bd646778160000000043b91b8df968365857bf655ba5732021d3a463f260c2d219420ff427415694f48048bf49ffff001d276cce08","010000004adf7342586cccf9ab1bd78e11d424833c04f3132bdfb770ad72e3bb00000000d0400aa6f1e0de17b3a29a646fbeeea11a5a761063f90ea59f5bd7bba8ce40fcb94abf49ffff001d3598390f","010000007c9a7d95afebfcaeb02c1b34609287fc56387d4f79fbd5548f89bad4000000004f047f92dc74eb0b36b47697a8b38e0df836f8d44204f1be0ef1273cf6351271dc4cbf49ffff001dde5eb205","01000000c5141212e11b0653ad869f2182f741341004855e48232d9a754ef4cb000000009826ec9b1ba1273ed95988e2b3d89cceb2a84959848ba1c8abd3ad7091cbfa8e374dbf49ffff001d2d8d81de","010000001f032b04fac7efad73f23296ba66c3a4d964bcce1bb1443cb5660736000000008be7f5744e42a5bcbe63b7b40d733c93ae1f0a9279eb779133e2bb7da0a52ddbf051bf49ffff001d326aa6dc","01000000724255ce9cc9fa8610d106c46a266a955de342ea62efdd0ebaa6be7f0000000065a21a3ec4725bacce9e83570cb3f344f45a68b483002b0b8ad16aec4499aab37052bf49ffff001d1a1cee00","01000000f79fdd613b7cdf546a6a7152c2df2a772288862f53021bb8b12dfde100000000006534bfd638e1a32fd77378d5aa4aa0e7343403a097981256716377e9998abc8057bf49ffff001d2d9496d1","0100000016d29b77954da267bf7d8f00e51137a43dbf0358399cccb82196022c00000000773013846723bbd1b07a2c943688a538127a474e5dd4a5fe00ebd088f1af638deb59bf49ffff001d39a1c66d","01000000a4d9bef9d24a69f3437a842005332eca54738a7e227cf0294d675f5600000000c61fcf78570f53133087a12d02361bb6f05393dbb845085abfa8860b8d5b5ea7d75bbf49ffff001dda132308","0100000085ebda11d63a20786d853a29ba80aa1f8be0df7c1cffc421c3c37a7e00000000c574e517f6c3880bac80fa7e0b691afa1b0bdb6ae36a2dd93e28facb9872d573ff5cbf49ffff001d01712cf7","01000000f19d7b4d98b002b70fd0d9574eea3c6b0b39b34fee5319fac2c05c6700000000172c80a6ccb98128cabf40d205d155d9db571c90e9b1d35e59c3e35aa36dfcaf345fbf49ffff001d062c7f18","01000000d6484a6c239f203cc44d79f4b296a890e3e715c1696d2a48125646ce00000000ef7f7432af748b1f8a118690e1bab8dd8dca1e0d940211dcf74a70d94efbe1ac2b61bf49ffff001d2a29bcd0","01000000e6383d6acccd88081fbc4118eac9e6acce0713b74ee04d81b6940cbd000000005bedc23698476ae92b6737686bb52babbb3d34e261c9d5bc94fdabed25f0933fad65bf49ffff001d077b201a","01000000d2684b78cd8916e792f5ecf0ac13a22c9327723645bfd069ee470a2b0000000035eb777e04525bbd2af7a598fabb7b9d5b6325327f7d34df2ff51ce21a4e0a193a67bf49ffff001dc0fea408","0100000097154540e05ecc88fcc7cddb1ec661ecd7b71b81fe4cfa25d1463a030000000001a17d0005cdde1fc17611f495efa54ca38cf54c41094a796d64c787714ce5a31e68bf49ffff001d311fd533","01000000606f5fba3409eed53c954012d8225b47e65a91bab7d1811ab121aaa2000000004d85000f6ca921e86371cf03c3a3798a5c172530524d69dc872a2db048fae7d3a469bf49ffff001d318f76dc","010000005810bf4caeb32f5a83dd2d187ff4c47826e1293ccaf82c5f94d3b52b0000000031bc03285d5100297caff3b5cf41c45b316f8c74c8492b45e1afbe4557e26f802a6fbf49ffff001d13f09826","0100000037c0e6fa0141419d0d0c68633a3d97501230369233a3f9d40e6a949800000000e40955b1dc81585046fbe6ee5e4b96e0102ebb17698811ff7fe79c6e1c2dc5060874bf49ffff001d3421902e","010000002c07d6849f1241f7222e5c319153e54fad38b86e8aff4d75a8b15b64000000007c1adfe246d0bd038da8bb30ec2bc4ea8c92c11e844f9b844574d7c285569040d378bf49ffff001d33fcd912","0100000027d22f0d29aadaf603ba299257d5f929edb23302e7b17490f64971d7000000000dd442defcfc715610529cac483bbc654e012fdb1366c7df7e086af35cfadfb1d97abf49ffff001d213d1c92","01000000a0f3cd9c946d7333119d51718d79157c1040643671549434f47d195800000000cba76bfe74f65297315e60fcdb01e75d25159d2f0afd158102c20570d44b19f0ad80bf49ffff001d16d0777d","0100000063c2edc3fbaa5b1c403d1e787779e8cd94b87e97679223e3304e64450000000061f5dc3b273a2b5f4f896dc48f82f7b1fcf6886a8aba67c4d3de662230fc7b43c983bf49ffff001d1805143b","01000000fce5039c6865deebd39713428b56e264515591968950ca3e7424b78000000000fb2b00c11e54adb65b8aa4eb9c9cdec576231e49e6ae58d4f6a0dc37bacde6465188bf49ffff001d1b2099bb","010000008ddae01fdec0685adde64663099ad7c0f8a9723d1f6e801fbbae5e5e00000000207d7c4ba6edde21fbe5585004d1e264df698ae768674e2c522b4f4a2d8902c99d8bbf49ffff001d1780c2ea","01000000c64d909b27f359ddc9cc5b09321d732a5ecde248704342721d6393b200000000adf1eb19965286c323fcc533a56cdfd73e37ac452fd19ca08f7336e7946ae32b4b8ebf49ffff001d1ed3fc88","010000003b7ee8c9b00be97fe66e83743577ead359c79826a2b619cb580215c800000000921fbfd2b9cf2d35bcd66d7fe0982b3459df5673e883c06a4c2e4208caeed5726c90bf49ffff001d38f3dd7e","0100000014c112c64285a548482f2606f34fa2eff14e650301853eaabfdb8afb0000000017aba95fc280e944b473a0bfe4ea488a1fb2cc6bcae724fa0d1b0e64f5c457305f94bf49ffff001d2f438ae8","0100000018b7f716f7dfb9c0691cc13c645498fd20f7ae21a33ba247c3aa27fc00000000f42ec68707a8e915004f42820ab710ecf6bf578a6c790e874f7e20bc45417908c197bf49ffff001d1e67fc32","01000000e1f305dbd15b4c6751f3514bb4bc606bb246da9649a7f7d0b516f0d0000000004ba06fb62447c612575dc3aa6a24d18d460063cc348e8a07f769d89ac201a985ff9cbf49ffff001d47db3f1a","01000000e34ed06dec8dfdcb73a5c71c098c8d849b3fc54fc19f16f460f6e3f7000000007b176a43d968cba72383d858a45f0475a79d8936fa945f550c518135c430aa5e3b9dbf49ffff001d6b341701","01000000001516974441ea925a49e153f3afc046af787fd8534243379e48c7ee000000009de3f036cdae53ad11c4ee87499b00f8820e66bb249a3a5dd06fd0b6eee219e0b19dbf49ffff001d27391d28","010000005ced53a506bcc4bdf8f8e4d7031a8c5088feecc826383866ecfc589d0000000041bf0d681df7754b5cd7f53df365bc8eb0ab97570eddc621564c4f9e0fdbb865b09ebf49ffff001dc8120506","010000002433b0647a4c9c30c7d36961e2fc3892a1887058d3c555c90d835a6f00000000bd01c90b94dbcf3a3a5010cf8ffb10c38d5532d96fa0a85f64b20d1ed53a26a44da1bf49ffff001d32991539","01000000d272aaf40e306b5c3606a7fe7f79d7f783a1d81d0b97cdd6e0ea3b9d00000000bdc736d7b7a1033f3a21e3f93443da0b0a6a951e078bd8ad5039a3f1a58b0d66f1a1bf49ffff001d99bc6002","01000000972fd75068380810e74d8c709b3d451421ed32023ee6f3db89a9b9b1000000005ae8d8400ddfe26b39aa63f84e96e4c2909d040546ba7735534497b0440f948af8a3bf49ffff001d055c0d2b","010000008fba5933fa1a26166f481bf045f5d1e72f2e53285522be4e3cd3855700000000d20e2ca819e6070fae391efdee5d7710646281030851a5a99e0b481ca2867a859ba7bf49ffff001d2650e122","0100000009a43b3841605a5f9e10c3f0ee69e48995c4ed14be107ec9c7e5b37400000000d8f9030cc8abaa4e43477e144ac0519daf415ac1364ffc10c64020266418ac2724aabf49ffff001d246f942a","01000000cbf228b2508fc79dc3a05c70f84c02e59dfd2b17d604737503b4857b0000000046a157aede45626b5cf14a1804dcd6023ffd50de234348c1a444261eb5aa5a1ec1acbf49ffff001d2788d6e0","01000000fc8684d6eaed9ca166b7a240822d92bc4ce08fc4bfc5303c2cc2acca00000000a00fa78da6cda903b1e2feccf3b7ae37c668d5b5a47e6698c94427b52d694c5744aebf49ffff001d00a02a02","01000000f38e866c53002dd8130316d5dc4c9209e32fe5dc6ee3b60ac93f12510000000075417ce2a9280ac9762938af5d5cb7f8ac325ef32ff71b647d9f9627b3c73efc23b1bf49ffff001d208c42b4","0100000032dc1737e5f2e513f184abf1fe2a2b480583022e24d55dad9f5f2f2b000000009305cafe0b5a06aeebd03f4b25b377756ee5c5cd8c475caecd2ad87726744f1b09b6bf49ffff001d33c79a3b","01000000385c6a1fd68a7337d87aa89df832d7feca4feac5bae9c933b0e25703000000003c49afbe997d799be48ec24c10bdadf3e97e1bde896ab8a5d9831b08af76c35420b9bf49ffff001de8d04704","0100000040504be14022ad4640dcfc05aa0a12289e542a584ecdd85613f1bac100000000ed238e87fe0230d114587a47b480241861490935dddb0fa669e53c76d34a7ca0dab9bf49ffff001dcd29c602","0100000034ffe6e809914f1f08d619c7d4ce9e4d5accfe5d89d2aafe86d1a13a00000000183733d8088ba89e1fe496eeed0925ed3c38105e393e99bc7ff96da56a976654d7bbbf49ffff001d2f44e71f","010000003e7f48af2f1dc458edec0ced7f5e26ad27939ad0b33666241353ac7c00000000376537b6f83d50c85434603f16c5a1387476e4a9d902bd74dbfe2478cb7db78f9cbdbf49ffff001de6b21307","01000000bedb196421363f0641c70caee78076dc24bb6dfc5dac00bebf795467000000005689a7da573a9953de9cbe3f81a5d066e772090a5de36d23506897cb8a866b3504bebf49ffff001d1f6e172a","01000000c177b108f0b33b892a44e0521bd423c19b09e76482f0a68c8fc1841e000000000d0297a81cea60b983cb9e845706d51fb37269accd11d0f7c0a4d1223522b89120c0bf49ffff001d159a22e6","01000000bc9946c1a8abaae0ecdf669b3b5ef020b786f4b12e3f6d408a98df37000000009d7541972771e926d3051f0671db4b9d628779e455f8ead65373af60bdfc301ac1c1bf49ffff001d991bb606","0100000091ee160e5dafbc39aeb5e27acf37f38eb3be5801cd30837043cd24ec00000000f2606fc296fd090d96e262d03523645380f9eebf2aca2290f6aa883e470b92cdf1c5bf49ffff001d34c0be36","010000003be0d3be0e8ec97d774c312705f63f13d06cb9980fa0695b23f7bf2300000000273cf28a3f9e91c7ac4159f723c81da42ecaf0018cc8706d83a2d491cae978b2a6cbbf49ffff001d1a1f421e","01000000700fe4985f960ec71e5c0aaecc0f1f1bf92eebe77fb9614d280f83aa00000000f43ebc18ca0b0ab6f046012751ce92076d06b9b503d4303e5ad86c29a8c97ca598d1bf49ffff001d1bd02825","010000004bf3bb2d036baf2b81bbd53f5a0a1a0969caf95c346670f8f956733d000000005f5351a5687c15ed690d46f9476a5b949eef1620d7c76329e693823b444f5af286d6bf49ffff001d2c2e447c","01000000035e299b4e842ec5a05d46f29b83193b06758b4567681135439ee61e0000000019f5564a0677a66ebaefabc0f303856b99e2db92ea0891384fbeab7b6dc19c8f84d8bf49ffff001d17d0ca8a","01000000b4dd9d77e709e0f90115895095ea1d7ab5c3c30c41c65b7c432e36f200000000695cde1dfa8699d778919a97f3f33c0533052615e83e62ea5106a909d35421dc59dabf49ffff001d3a825e81","01000000eb2f878f840268019586b050454ba608f0fc9042fa3d6463be98415100000000c8d26883c030f1021380027d9a969ae5cd3218684a56819e13a49829d38d5b3589debf49ffff001d31bb0130","01000000c3d0e30b24b0da757792d0697bfd3c1aa57a95dbe34e39a4c2e277b20000000079bd0a720747a826aeb68a5964d5bf077d87a921c8426474aa5bfc0b251b6e018ae0bf49ffff001d020f6087","01000000011eed808bc12332b60d66b678c0870c21493da8857d2b504edf6ba9000000009256bd8020ac04b8d2da834fae46c6c45a6011e8ed7d77c4f93bd2d27c0ef03bece6bf49ffff001d01d2d793","01000000dd7b811798867bb0d160881573b0bddbafd2f084de41eb0c3908cb7d00000000ee28be78cb03fbd880b6efb48bed27c9fd146f6d708dc0983c4404d34d2c5e5ffde8bf49ffff001d3203faa1","0100000000460e650eb638cda77cbfd239c185659b194e53a1118291e562043800000000865132f82529048078048ba6b011849d447f4282a6c4d526b83c8be7af8f4d8f6eeabf49ffff001d034a0801","01000000d2dfb0a5f111b954bbb16d33e23b7c1ec054a1f551ba18145d977c54000000001f0ddfe16abcc2dce7237dcc909f9ec93f80c031d89fb59e7bc6939b930a6fd7d9eebf49ffff001d21f7d12a","0100000027cd2e993638130009e7f6f8083c52238fb6b2b6e525c08f9799767c00000000aa0fbcb4870aa0259d892ebaf968dde8741182f67fec7f7b8c38dbf1d413abe670f0bf49ffff001d08e8e68f","010000001c3a903f58b5da2079d247576ad80fef98737cbc679c529177b183a70000000090928f6d51ca435ff6e0235cdb4102f2d9361a2e085d1c589308fa273c92b1aeddf1bf49ffff001dacc08108","0100000060df029db8ca04e2a96f2d3a1ed0231bb67fbe9ea099e90ac958b59800000000d50c6d895556575c913aa43c7f4436ec5e1dbcb03fff8ae0296eb030062d838110f3bf49ffff001d2bd84e09","01000000cf38b2089d39d8446aadfd6300f6213b8ac4be19ff5c12ab711e7d4c000000007d4b05b85436c13b7c83d0e35190a9620382a71682355c6993da002169d845c031f8bf49ffff001d1c0af1d4","01000000be525b576900672b75747d2a3207c42d75ee4818c280985b2dfdfed70000000026a1221792ab1f239107983e2f5fa134e597c3d7abaa821391134a38f44431a89efbbf49ffff001d6911100e","010000004f258d677429ea282b0c081f03d7ad7bfac4b979e43c7c8c964f37bc000000003f4e47b2905f1fd926de9d9d7c39b025686832ea534ca62336097462af310ece0ffdbf49ffff001d31f28f35","01000000edd816415d0dc38fbd145601a938aadcefdc34692ad25223b5a36c5400000000130b50daf2dc0a0cc5e7f5ec32f12e4e3658e739772185a771b0561d1b1bab4d0500c049ffff001d078f2087","01000000d7432a1e8e1f3b7b9d31f47d450e7b0900938027c8e28b48185c660f00000000a15131cd973b0870cfe55b9b6455f3fe3f1369ed5f22b0ca6e1c0b5b966401fd7b04c049ffff001d138f93a9","010000008dcae420399aa53c07ac0f85cc305a2657d69702c33d09c88a463b0b00000000028b08ab1fb505d459240c5d68f397608e13cf2da1628dfa123701ca8c5a3d310105c049ffff001dd5dcca02","010000006f36a925597f830db5c066295606b5fcdbb44f59fadc0671400d53c60000000013a0ee9b8c364d70bfd8a163b3849532256fa2bea1618ab614e411f77ce055283e0ac049ffff001d1389827f","010000001d45e1bcce263cefd650494277271118a8120d06c0923840d75c829a00000000501357b5e19aacca4838dd38f340cd2423b99807a9c3233992c15d1f4b81dce9b10dc049ffff001d3e21eb03","010000003ebdeeb6f181cb916df247ee794a2d1a8a562433b5a3ee4a21ce97cd000000003a3250ce957aa44ff2b1477b62cb1b51a46171ab83ffc04147fe1a2cd3b79bfa9b0fc049ffff001d09573601","0100000044700bed99992d0af5c6e961b1e79c697e02de444693d1a90549b68a00000000609988dd970f416b7a392707309846e4344d35720b3ffe5d93e50ad1a4461d924510c049ffff001d1e559f41","01000000f84a137859cea538b79804e746654b38e0d98efaa92e957c7fc60ae300000000ef21ccc02cf67811619126cd29546b5127eaf1e83c8233fdeb919633836f54600215c049ffff001d1635601d","01000000718ab69bf1298d6c7dec5718d67ce929843bd63a02796fe0917b5e180000000061a4e99d3eb7845eb38aa812a2c9edcea314f05aa6534fc95acdff831a10625fe01ac049ffff001d28a7bd43","0100000078da98f54f6c5920b815f660fa131fd0b81d50b6927dae8b21b5db7b0000000094c7534e7d183a5d29b1f9c55e1756f27e15cc3510666d836597c05cf0955d160820c049ffff001d30a0526d","01000000954f508c3f547e427cff8c244fc69d709ab5706c0c5801142a478e09000000003104b469a905765b98879bcc9dc37014ccdead3757ad4f6ba230340a2c1cbf6df023c049ffff001d9dd1a614","010000004fd0b29449ab73f7c4aed2b9402702bf0e7575641d87b97c13c4e6b0000000006f8fb4e5ac102344ee5e0ca3520c3c5fded27f1c6a05cbe3c87e3aaed5d9740a4428c049ffff001db0315715","010000004e05dc2e275051f30c2999087c389c11a185837ef0d47b7d6736a1c800000000fdf92171c298c578e925d72e1804435dffbaa305ef0d11eb5ba168e417b6b8f1ed28c049ffff001d15ec835a","010000006258aa0dfe2bd7d844a5524e3dfc4748741f47e6f0369a66b74a597000000000e3f74e06fd0aaa0ac28dfcebf7a5454db67e9127cd213b7fe8408ca85353a391392ac049ffff001d25961555","01000000b5dd4b08a806b1231ba6ad2d1ef1ec0c9e387b27c6a48b47795e0d3100000000f63abdb70c0c865c8943bfd1a94491460652e99920d0a580f75ccabbdaefbf25a72dc049ffff001d3916c5a3","01000000cf317d521b52c7abd92248d38d206017421821e0c7a97171a3ad0b49000000004626ab2084de691bae3abc0861d2ccb87a881b29be2c187636d73ca1d3ccf67db232c049ffff001d035f5b90","01000000ef8d4f02ed2d8aeb7f7f3076b8e08c58a3ef646c5d1efc46106f4aa00000000097b22aa3c0de8fcd16e6bdea8dbfdaa50feab6cdc8e7de069362e82b4d7e18ecd034c049ffff001d1bb0765b","0100000031475c1dc07b792da255bdb0a5d9df5a96f978ee8209aeb98297f372000000004b5574edcc159d69aae86227e10bb28ef2c953fd2a6edb969bbefe7157c371d76b38c049ffff001d25d89e40","01000000aa0fb6dddffa575d45f059f95b8654c1c2a7ebae7a88c86b6bbeaeaa000000008253a00642e4c771e6ee2ab9786a14a9c45fe728b98d142931b8a99f5b1891497f3dc049ffff001d29b7b2bc","0100000036f541fb4b00eab030eda55395f2a429e905910eea38d535e627f3a20000000050570bf9c59fb76eb3f9c08a178d9c938d7b3097e1afbce7d9a39e1053ffca2dcc3ec049ffff001db19b7303","0100000026728e758bad11a4c0e392409ca8183e7a6611adaef7c76660ee517a000000009227a7d5e08bb153cc1c61525fa60f4280ec854da1dee7fc76b21776d11fb619a43fc049ffff001d1e9aff96","010000000d475b807333a6a51eda3aa7abe58aa0eb3129deaf519b54ab1a874100000000f51cdde8027c14bcb7f98fb65ed53fe3f050cd3dd11320244e4cc1fc6e54fd836241c049ffff001d24d3f4f5","01000000b9baa038616c90a16799b9bc08a14c39edd91af2219d5577fdb2bec300000000bb498902b610ee6676e9ad1ab4230a918678bbd92e4585c66253d543df3fa56fa642c049ffff001d85ad5905","010000007f3e72a99042e81456d906a0f52accb89f72d6e463eca8d7fe546e5b0000000054b09ea65673c39e93e0aa3ad4212e8d497e49c58a4c03a51cfe049d886eea258d44c049ffff001d1b102313","01000000262abafc12ed53fc2643e1dec42b35c1f4a81d41dc67da14c4410ef900000000f3060346de644db81679d62b3e2da5d723f74b249e9095528f208fe61b2ba8cdf246c049ffff001d3072c65d","01000000c1878931ab334ae1477a5d78d53e2be1bff52362d22749e9df650ac700000000a524c2f6d5ecd54fc05d92670f4856cb17298961f411fed0db73bdd694b0484da649c049ffff001d2ee7707b","010000008d26ad338806bbc763f124fcd258ad036b946668731d0ea120e58981000000004ba63d983b9eee051bacc880d34d8b46e9e4f86b5d4c7d7822d4026743fafc0f594cc049ffff001d01dc1856","010000009991cf3cf9b71ba5a6080fe0ff0e912eaf1e3b22dbd82b3611ec2a1e000000000e8c2afaa3bb495dd5d80acecf2a672484d1b51f2ff86ad5e0e3d03cf59f0f825a51c049ffff001d1ac8db3a","01000000a6ea53c1952c07dd419d110c0c026487ec6d562940bfbfe2c5782c2b000000007cc5f0b3a4ff897b33648e40ea83a02474a80130c583eab3b88a8a7049ef59f81157c049ffff001d00f576ce","01000000923a88103ec92cebb65d7c1e40f87093431e2c0050d47cb661c23dfa0000000011f41d84c700780629f064e8294b6067346694b0156a9b76ba22bfde6c67515c865ac049ffff001d084db26a","010000009acdf1ccaa1992763f45439f5d4a38ac9cb0284875b995df74525308000000003180d5f767b308f27d9c3b44ad5ee9815ecd4bafd30815bd57481a54614abf7a235dc049ffff001d009072b8","0100000002c119556772539c6727513a430b02a76eca7a8ec50b9fe58a7baacc0000000048776e8f7c82ebb162957d5eb4896e5a8c47bca7ea843cbbd812dd2fb7ff225cd05ec049ffff001d09478a6c","0100000043d7eb074650e58042f452aa919921c84329e4f31758ef6eded7aacf00000000864baefa55362ff83f164929a88b14e9681350752ce743f6add530fdbcd1d3080564c049ffff001d2a6a584d","010000004f6c2d1628925b8ce9a27f96ed153eaa5c121d5b6dc9577e9f10e71e00000000f93a2fe0257e85e8f36d051f611a4da8e5cedae6da0ff52fb646bf1827e57eaed369c049ffff001d175caae8","01000000161b27e488bdf4214d42740f03ab1844517bc95a9085bbb999d47aeb00000000b50ffb17e5fae2616dad68ec6e7c3d61e5cdcc6e78c0f2364f498c13807b3280a96bc049ffff001d84bd920a","01000000041a2cc80089cb67cf08978568c50046487e210d01caad08a7c459e0000000006b0478bbd740cc4b45fca85629135bf18402cc3233e77a5d10389028721bc2598f6ec049ffff001d8b20a703","01000000b53ac4e453925b6a2903df2a6ca50555c527611fce8c008aa03fce4200000000e111739a759ff57cf7105c5849ecd7108c8e7cf19c20ed4d7d56d6a75ca99bc7066fc049ffff001d39dbdcc3","0100000027543f730ca6957d7cdf25441b94ce3333cd2b972b6c7188ec313708000000002d50238693be8a7b978e6db9bf943dcfb73d95059023e865f42dd05a31003a7adc70c049ffff001d059acb38","010000000c03feba78c271b2fe4cd25a041f5bdfd657c9216007350b7acd0ef50000000038f99ea74a1d5e6c54ffcf98ce9114f70891e86ced7c55633ee1665a66cab53dbe72c049ffff001d370cd292","0100000013e8e9c94fb3fe6c90acccacf98df0dd12aeda4736eefe235c6ff695000000000571dc589366263a032cae527556e3c3fc3dcd8728337fd1caef85c8f181badae574c049ffff001d260b4faf","010000003fe86266305a7150ad70269bb0ea67ca949f202d32ed2e34e217cd930000000068d7678ef12f996fefa072cf0674fdf3c610fa42c67ad5b3b799bc3963a8dde1aa76c049ffff001d3583d129","01000000e783215f820349bc9225dc29dc16231d9c7b67cd898df9c2b52fd3d900000000e92918f12ec20599c5d2bf1118e81b38450af352414b3e495b7a4e10abccf0438a7ac049ffff001d250741c3","01000000801e463345abbbb6f41e4d6f0d7d1798d45ce9c853338723704f56b100000000f2affc9404ae848673bcbf49ba09d491aa9fa1648b1f75f4a7fe6ef53bb32c290b7cc049ffff001d21a2246c","010000008570b3e0184effbd2864e266c33a4f60fdb86c7859d2a9851b3cc971000000001dd1e8d4518fde59f505876d186e5593d67914cfd7ca1ef793a971a71fde56426c7dc049ffff001d24fe7f04","010000009aa297907d53d9e3ee4fce8dcd58dbe0850c4721f76c0bc2746d1d5500000000acc222f0c57a38a283b780b0c8c675ac2102bcf3a57e794142d7fbefad3c4bf10d7ec049ffff001d1bf87f70","0100000082ee2b1e4fe3ef26914179122e64a753e469b310dc2148feb10bb205000000008ab96d991164dba718f199a79a67fc2c9b603814d549ed7c330987e9f60216520184c049ffff001d046a8887","010000003c695c990ae05ae8446ab9bae4a203bc3efe0f965b879d5e703f6b6000000000884e489c7ba18843699d877af99e41bb90dd713a67314ee11e88bc12cb6595720f89c049ffff001d33dcb57c","010000002ff50b36bd282cba9e8252340e2fae40d3ce4a098b4f541ea86cf61400000000f55388b90095af05a2adcb94a72dc8a1de89456417177b42a49c8c99194fd1cdf08ac049ffff001d07f5c9ab","010000004a1bf8021b0ab3c3708fe3fa5c0c3afbb1b36c120650323d7460bac5000000008fa934273116e852766c310312fc52b34fce283d4491fb598e11c5bad2dce1c7378fc049ffff001d1dc33597","01000000164da6cf20d35c84e0b95d525d1f1c574b21508e5913361d2dc5bbd10000000054f616058a9db173c18ac914f979e9a8a7b0123c82876cce8f6f9b8a21da874cff90c049ffff001d36154d21","010000006c539742478a95a358ded80309929261de86d81156d0da5a90e443ff000000008999681dc61202247fbf68d1eb9a936b51e95505578afb892611ba7dca1616de8f93c049ffff001d195c53bc","01000000340059e7b33b71ef924e3391708bef4fa520e34ceebf4072e46e3d9900000000f772cafbd9b0aaff06395212b5d0a6bd9446eeafaa09e586ec082ab445c93d55be98c049ffff001d21e76c4c","01000000aad546132f80a8a1d61a2d65665db6d3fafbbf6a8577d59da03183ab00000000fb026e6bb54175793dcf4f4eba12dddd33644d033db6c069632c13c73ac32ad68d9ac049ffff001d1f8cd5df","0100000016be75dd155e0b8b34469494fc19ad05ad812e274d59f06e5b4be62600000000e6ce9e43a625f01b29220dbb79f1a8554895110836b9a88dd44d3b42356a76a6b89fc049ffff001d2c053803","01000000f664554da8813a489f14800b43bd4ae48db4a1e8398a20de3e3855e0000000008573b3d71dedc7240892dd9476ef8791c962f4d85499ef0ef65f4537cb0887d100a5c049ffff001d2b41b67c","01000000f47aaaaaf430e9c3b8d500c9443d389a82b13b90d6b2671e6bbe3dc500000000066ea618a081d8aad3c99478ea609689db7c51cfa81b0d6175134af28765527648a7c049ffff001d1db25763","01000000ee02db6145712a24db693f30bf08b359be8563a1b56ed717c50bc9b700000000edc5571f28f059e18b2bc3b56cb2c43acf52ec898b80d9559efa66aeb951fd62e9a9c049ffff001d37b14538","0100000094f5d0d3c41a87a692adf21b6a854027f2b656a5d9de67fc00f9bd2000000000637feee7fab4f3516a751a6f8d6a22e7579bf7ee9af64fdfc3f8a18a4553f0c73eaec049ffff001d178a0d30","010000004bc12cb428037f493115b7fd6181a7b2c70651a5926f5ee94dcd9eaf00000000353f1eaab5ef5c56b96deaabaecbfa0eb0e7eb7850b78deb80406cbfabd6b7f82bb3c049ffff001d034083d3","010000006cc28c1dc6703a10f111c80b5095ade808cae502c7cfe9d150888e2300000000b82cf15dd1bd56a36dfebad1a1f14e9b9969aecb9432b4f1c76c57b6eeb2f685e0b4c049ffff001d2a564ebb","0100000005e7894a21378fb060e5dbd91ffd9bfb5f7cf95f072f51e302f9313e000000000610baaa699b7ae07b404d123062728df863456cbe8c80ec88e1cdc6bd62b0e845b9c049ffff001d8f7ee10b","010000004eff48a118ca6fc4e3b3f3fd3196f250f963c1500c6f482383822a5000000000b06debb8cd5bfa80955bacd0ff227c56af65fe7d898e6bd0ec594ce8639f9109a7b9c049ffff001d150aa5ad","0100000077178e739dc4967907ff118f2e9ccdfa485039e8b2c24477fba4fbb7000000007e5cb94116da5b66707eff487f9688030bb7fc62eb2f2d74cf7e577f3fd56c2e2ebec049ffff001d355bd21a","010000007f000e25ad66a7d0a9fc463a1bea62146e3ccc5928c74b2072180fd900000000b1e53d145d1b29bfb2de12167d7bf0f80740924a6749b0aa824faa264ebfc81b9fc3c049ffff001d1447972b","0100000024634f5d76060de87103d42dd9745f5344bcafaaddefac5afb185c5f00000000084614a15cf6b39a9e81f001185b5324018f46337c1961ae829acd5c169c5822e5c7c049ffff001d303552dd","01000000a7229d0b64b2ef753c3a2377f21ffa7466da705522aec9d8f423ce9b000000001a48c6838ee908a4ed9c633083cc92d07537c582b2c25f506c030a22ac1a793baacdc049ffff001d3797292c","010000009a6e03856e402bc0a3d3f2c56f55cf604f1dcf9ed2ecd57b5ee710c100000000a6c6317ae0e16bdd8f3283d20cd4d2f72412ea1f88427e8fdf74be8403d33665afd1c049ffff001d05b1b176","010000003bb1d4ae76db9bfa81172c0c37b9cd747d6ba7aca89a14dee3493d900000000005886e24e5a121e657dcd0198e1128cae84e9a8a174ed062521ce55eea751a2717d7c049ffff001d285697cf","01000000b1f363b55d2ccd2bb4426683c544f1bc07ca7817bf1b1b49cfbbe4260000000043d8c89f61b7d45f0c1526864bb442dadb653a1f9f75cdc218a3991de07b66c641dac049ffff001d654e830d","01000000e50c39030662a9826a8a9afab9b03bcf1c827ce45e619e2db3195ea400000000d8e9480b1833715a6406fccc964010998f7c4793185a9db04f1a0ac1ca91da43acdac049ffff001d3401e071","01000000692e5426a50092d026a5929ad23afa8748c8a08c2207e2fb082c71f200000000fdc32bc45987118cb95a6664e97d89e427dbe30b23b62ea6e309c42325f153a310dfc049ffff001d265dd4b8","01000000bf8241173de6b31b6a83a6b18f3e98366365ede871a31c4c637e489800000000eba6d5023ceb4b482eab970c15dfee9f91b820357069b73496dbd4f4e75fb61b14e4c049ffff001d38414606","0100000049f0831b47ef0d1f00b44aef146003abe2fa6df990c30894adeb485600000000ca12845c2a3375bb3a8f025eed969679dde425b96f453bf16d9660d326ac10d6a0e4c049ffff001d27985901","01000000af0dc895f0a811c9f3be5b8520b6b56d07149e74b4e2537f0bfebdab00000000d9bbe77dd100c9e99a08dcadb65c848eb4e59ef65ab2af78f1fca5afb62e12bebfe7c049ffff001d1a512bd9","01000000aadbcb5da7f7e5a84f2f429c32836e98b4a1483ecfc9f2eb3e5216cb000000002563c00166ea76a38ba7999da2b67d95ebc764c64415364374845d8a6a5237a6aeedc049ffff001d1ee0377a","010000008433b6b178e83e5ece0d9659a610e89a9084ecb2e2ed90eed694a18500000000089001d4a2fd72d75e458e9d34ad7e94f0d81d80376b709bdae9a3caf20baf269feec049ffff001dee9c1303","010000006aa674608d64e550e33ef177c69e6e855bd8eb1423d9e35f478e9004000000003c14a914249fff8b3a78544fb4f2935ca24a1626e71befb0d6e87c23c6a2b64a17f0c049ffff001d45538801","01000000e165729f0c151418689c204a9bb5d19d0673b07f9e4d525d29488ed300000000d468b4e1912df1a9864980bb3d012f6e96453c5ec5ae60e60bc69fd118d402a569f2c049ffff001df128f009","010000009edde0374a74c9c9e17ffd633c3c8ae6964832d46397852b79336bac0000000029007c1611ff82ff8974afebca10a82d053ddc5c549c76931876687d20decd6cf9f2c049ffff001d09954fe4","01000000ccaf562dada26fdd2da450a481d1733561be872a4099a75c256e00f800000000591dbf0dd29a7c60441a5d119e0d26feb88a5aff243cb4278787bb7a435730412ef4c049ffff001d6a9bc304","01000000981ae948faaf5f5c00195b361880fa9f11bb35d784f9cf1a60f28bf70000000063a9c6af90065eeb8005c1b2a647dd152dbe9d3644cc8e4e7452c354b7d38c74aff6c049ffff001d1b8ac7ef","01000000454b5f6cbe93bd9a7f0602b672ac103e3a5afd81d5fd2cfa13c2e00500000000880772228e9a4d550f942f132d09d30044b44d0d88acab17b34c93441fb12a6db2f9c049ffff001d2050f338","01000000d14301cca1c0f1bcb6da78d487982f1f82588b57aad3ec8affd36b3900000000a25d3de5758ba4a94070c69490e9d8d3d66508f98ad3b80ddc7f893bdf5f30b40afdc049ffff001dc909db0d","01000000162b3b2ff61fc0b26f02cb7dcc073ff8913304decdb007443e56aaec0000000041ccfac89063a944214f5905fb91644b89e4310bfa66a0362d75d9739144ddf996fec049ffff001d17b09340","01000000b7989f27c780673083271e12c95e8e7bd5391ba04d9cbd8af5f3304d00000000f169bdcc0b2c4e81ed75e3d5e4897b67ebbc57b6532543df760dd151e600e7fb8403c149ffff001d34d805fd","01000000ff88d65f64f605cd2b8a8e6207b63695db49be144404ada1dc5c7b2000000000379d040d46c8ccd047da979fe946da23ef032e28a4c089d90949ce55d73efbfe2708c149ffff001d18d05d01","01000000b8285a8abdeb6bab8cd9a4c6a4fe769d8880f031de2e70ffce80d98700000000beaa74ace8bb93436570ab3603b91a9333536ebdc9c814a0442c9370aa7f332e170ac149ffff001d25f57daa","0100000078829cb81ce0dd5e6441db6ed30349340b3a00104609613dd1310ca900000000b3b52a9ecaa2f96a866f3aeb29c7019f3bc91195910f7743d6d260dbcb7c650e630dc149ffff001d02f2b8a8","01000000a1660e0885d7064ac5e617d126f45f5c997b9967ab8ddbcfd279d7a800000000ac94ff7fbed201248a1e3a9685b47c59a2bf9b256030412b3ce005c084fe6984f711c149ffff001d36943273","01000000ce5bc6fba616788bb3240faf5e425bf5427efd52466208d60db58002000000006d6588862d91c7246f4fee5a95a71fb2db3d83d1e1c394c58a06c51bd252702cdb13c149ffff001d2d804dfb","01000000f3b418bc915c32fe90c221b2a1133f96d403d84b2e6900221911e04b000000003b8600c4102d1662d8a9317717f0f167a14d25aeeebc346388f8d60f2cf711134c15c149ffff001d0402a001","01000000b3c58d5e210118aadf8dfeed1858743da8da9904b3ecf7c8a67b0311000000005bc39d673648eeaa86b6ad21bbd632f657882d78426876bfac8bddad4008c8ce0f19c149ffff001d09ae43c9","01000000f2e235107159d11139678015c3a5de91ddce035deec7ce722e4e51b50000000012f3779f076aa2aab5afcfc15fc74307cd336527c78bf2d128ae1e49cd60c790fc1ac149ffff001d295c3314","0100000086f0837084da29364fa43005b60daf2b5f46743075978b6b238072b0000000005a69e459249bf8d729da7785d28cf2ce429b4f4b8d7326c8ba57ef36cdbc44e32b20c149ffff001d21b39c7d","010000003d395b32990192ae0803ee1b0525df5ad87d3a69bff7242c4ce443a200000000aba427e76a0d0d8bf6f579454df446efcd03b8c66502ab8a753442f1b3a199feb925c149ffff001d2387b099","0100000033c2364f14288fb38d55b9067d4e1c73811183d07a63119c776f09a800000000355d9fd638d083c82ba37c371f8bf50e618b5ba82b0fd260ab82dd98da614439652ac149ffff001d388ad019","01000000b35822951061be57138780f73ad3b1475469f64c3722ce3fb31ce8ef00000000ee105d0a9e15566697d333e399b43b658a61373f297a91406438636dc52a9c64182ec149ffff001d1fa60931","01000000d3a7d64e80f88028d9856509f6828e62d73116acc1726daaf3c162e800000000d7f843f5f8bc62840826f92fe1fb0ae17efa9281b9a986ee1974f9f5b76b8d20b82fc149ffff001d28a8c65e","01000000d76ac8ffcfe514f856a33f54181f51d504529d6f4c71d8fdeabda3a200000000bec6a4d71daf283d3f653e7bbb121729e6f1d77cf03bdfe48c98f00f01296b391736c149ffff001d30876937","01000000d270de475d937079c7753dfceb999b91710624501abf7f0a0365cadb000000000d65126e058e4eb1d491464fd2da7ad3c3c9505908309b9773cb0579c20f4e56d836c149ffff001dfc69c502","0100000066d9164126f654774c6be9730b161e6b754ee2877cd18debebdf07be0000000046b8ddbb19381d3fe79174a869ceae75f7312330a297e1b042ae90bcad4deec8123ac149ffff001d0055d63e","010000006125bd567cda55adaf46ea1ac89cefaa57d9db179d1a7b5a3e35bb5000000000979a7222ae5072d36b9aa4b985f3abeab293cf2d8081a251b0fa1bbd74d77185753cc149ffff001d07988bd2","010000003cf583d303f3fd1f9b1e3a89703279e0ad617fe2d969638d0c41e765000000007ea8d15ccac7beaddedeaee80df566a6af79e3f1ef2a2a58607af7898919ad3c2a41c149ffff001d1f8bda4d","01000000f7fef407e5b0fb392654a9620fc8164d99384e08d1510e2bb4f9914a00000000c574b1f641fcdbc721e251f0deffa67b6b1393f3191370c56868df0d21ae0b575741c149ffff001dc8aaa900","0100000091fb6144dd6735803b73cd1b5c0c09f60ae1a30e5aaa2ab2ba49516b0000000030529b364108510249092d91b4e22877ea97428f6149d341e1cab5d5f3f1c5be8942c149ffff001d06970592","01000000d8e69e3b21b2c5b935194a3d05e8d7f1f1f907947fa365f7acc1770c000000001557f9e20803bc99017147c1c4fad9352ada70a908ef007c4ce86289269ee2265046c149ffff001d09382211","01000000963c007cb92576c602a525cf54356628288d84ae09d3db81eb8c7027000000000f7257e8afd58434523675bd27037b01f9379c3f96e440cff88700679d5e2380fb46c149ffff001df354a501","01000000265c2cdab6c79399005d3660abac9592c7394dc7d3082ac8e45cb2a400000000ed2b2cb422a6c09c010e26bff08109dc7f8ed90a440333b24e7c3e30f9f5d2752048c149ffff001d2c02a104","01000000c64229052938ed44a4ff58bc43d443afed1b0121dd03fc8715467ad700000000a136bdb10883bb10c660a2ab457e173ec6860aaf7824a5483bb4ddcd31a1e97d9d4ac149ffff001d270c230c","0100000061ff12a2853d452c13828dd65c72fc29b4da9041423cc86079f22b120000000053bf3571d625fc9a8301a4e25f7180a3ff30612232f1c5a52d0482a563af6992f94ec149ffff001d1c0b8133","0100000090bb5b62f17ef40a32e5bb914ad3d054db6eeaba2c748f8bd985b2f000000000f0bdbabb65589d9fe3cd3f9f8a5e92502d87c6474ee36469a22d753934a411abd552c149ffff001d342fbabb","01000000b497b3667729a262bf17532faa23cfce66cf7657ab0d13ba85c1de0d000000007ad48f6b2dd6981b02a536ecbff1090bb5e4e319d24cd995b28033f1c36f955ff754c149ffff001d26ab1327","010000000f8516905286e4bef8b86eab5993ac2c460c46ba9fd86e659270c08e00000000fcb817e0cdf24f633aad85eeeeaa12b08dd7e5503679587f3a7a1e334f06efda465bc149ffff001d02ec59ad","0100000067cdbdd99083b08d188c353223426be3d089708261a29b87173f105900000000e9db813353d2788de0d174764c792d2cdde887b6e7187c014aaa34fa2cdf2883db5dc149ffff001d27a4dcdd","0100000065067b26aba7af4d5c709545e6bce9216cc3fe2db00e55c83f11a7b900000000691831dba584ebef23d8d360a5c7052e0dd64eb50941fe480f279ef2520e11202e5fc149ffff001d1436eb05","01000000c6732d4bec992ebfc694e98e8f9eb49baea1288f0c71ff8d4532ba4600000000e9388aee0029308617e6b240f411200e3b21cbd0d4f8e75e0c520414396b749ff061c149ffff001d05f51801","01000000c68cb70235807070bfcc93a3faf77f6f48e250621897656b8c4c5c98000000002e7c9ee9fb61a427bc0c18238d87966430a1ce3991731972cc94b620a25d11e0c463c149ffff001d3296c851","0100000050f8544ad4e5ca5f7f48dc45540c5cb0756775c72526d5c61426d45a00000000321321f8022f761f5e7e21a953023cab0670ee86a6d8bfdc276943d74cec43f3b368c149ffff001d18745ece","01000000bddf2418b4c58299f9517c735d5faa6531a1efdad61480f34cd8a294000000009be74cf4ae69bdb9667a638d78085a1b67a6db01ff80f281e22709af9278a415736ec149ffff001d010c1762","0100000008317c98c1171a5a4e575396f88b9d57c27deae8c5f4553b16ab877600000000cf76d03b63d48b64176a2e92c31d8193c3e5b40a2c0ae55f95e8464ec5f64a13b271c149ffff001dcd28950c","010000006bc5dd016f6e46448b07a86825b5561270edd214941cad694adf21850000000041cbb608cc90b339b36cb42886842188fe87a06b867d181a68d7c12043e768cb5172c149ffff001d051aa58c","01000000d4f1816083801f368be187d994be54d5890c37d7a9d5d97dbecd90030000000053e3e87073461d1e232d5872de122d31da495b2addce90333735bae20b37933c6a72c149ffff001d90074c00","01000000244c86842959db7b0875325ade1311e706d0c8cf4fdb938dec62466500000000a7042ae9195188a6ed7a68906c4bae6be59e31cc1d9b63df9751c20c8d4efeacc373c149ffff001d0846e257","01000000f1fbbaa88e313b311e501bd243eb32079a067246278bb4704fa5f0c5000000005abf14f56d967184f81829f1f18f78a91bfd4108acd87d5f1cc7f181118653035474c149ffff001de8771902","010000000aa2bd164da2286cc06de179eaca9dd3f724406f02f11a2a39bd9f550000000050963c9e5dc1643472dd395f639c8309828f6a1a8a8888812e32d4e7e3290f594676c149ffff001d06c66956","01000000aa14d9fda1c7487c54e46a74c50d6f67afdedba70107b2ded9f27b2700000000a901136c4d0b20769bc0f1bb9f7b8ed13b8ad75c4c9103de5fff3edd8f5729f49a78c149ffff001d46db4309","010000001594eb0d50470e76cb849d7ac11cc644c09379f13985a444b74f90f600000000bf82c5a69d59e04750aeee407b57b466ccbc1077b904ea8ef71efdac87365485e579c149ffff001d166e7c63","010000006e30b45228b139e7e4d604e03201c6bcb249e41b6580108e57513007000000005e969d600ecc61ce9a39fcedb774a4635c614110036e65c802ab4cc3c7debdd1377ec149ffff001d25bb8f9c","0100000026dfd156fd9164fc90dc2ab8cf6cbb397d4b15c0a711898d165baf7b000000003d44b8b94734fb0b9fe96e530cc0957ac54bc62c1ce0134b7fde4a1dd051e3d28980c149ffff001d05315c5f","01000000af6b7c70f488b8d186ea438e5dda93fc1c5c2ff2a76431b390ab8d2400000000ef654b161235e4298b8c11ed13f37eafee7ea2a7cefa14af5b5f6b8b6f75b8d90b84c149ffff001d281bfa80","010000006a327d792ba0c166df0f16efea42c1cdf8890f54fb5b604cf7dae8440000000020ad0e588fcd297b6fbd9fe2d769f2b86a2a0e5d48a812d365d6f0c47b2a58ede885c149ffff001d2f3c994a","01000000f928ab8058e94f39ee0406f7777885be59b15a7ad6e7446e593b88d6000000004f3133dc11e6ca92cbd0ba66e3794405a6e887a0ed2e8e2177be899a1c394089fc89c149ffff001d38af54c1","0100000076a8d7d04658782e5577ab14ee08bad31aa599ebd6629be84099256300000000cc7785f1ef88c88eaaa6063dc947048268ab36e36d30653f674f4027018612b4f28cc149ffff001d3932773d","01000000dc158ac89164ca6dc76625fd9ba55cc3c4a8acb46442041923e047b100000000bb7b63e3f69960e3ce2f3e91e4ad254d617c146f371098fe3f23c153597d56520890c149ffff001d3748d35d","0100000037c4b71bb54605e43cf60ccc5423be5e35391e0bbcdc20f2f625b8ec000000001309351fc1da33b1a4c637c419dd893f134a5cc76a5f38acdffb9afbebd68c804891c149ffff001d15365802","0100000097982f78c42f860939e67c07b8696f3c5bdd4b0a4dc14d51eb99995800000000b51f91b00a23d6f242454268bc4ec0590c18e302e8763cbed1c44554bdcfbdd5bd95c149ffff001d1b1421f3","010000001428755c2a2e3df0f4128c8a56d340953ca52de42780c5cadeb1d32100000000507a987f54db28052a0baa63f1cb2dd48260c7fc4f45ba5c1f2900a24d6935a87596c149ffff001da36c1103","010000007f8eb5fd7175f6e02e8138d49a6fcbdc7836a12d4f0891f9955ad621000000008aea871a3273eb2d2484135bc5957bf1603380c6f56f5dde69179b042b7d4e455097c149ffff001d341dcb01","010000003adf43bde17ce0d062825b127e9e76f48d7380f22693fb978f7ea12f0000000064221252f67b1c45004ea9a8ade8f8f67438b464d1529f477b53db899a1ad2616b99c149ffff001d1e96171f","0100000082c9c8e5d1789d5710ce807dfd69b293821cdcdd81af7a252a8d7a8800000000f8eaf41cf240d94156f33dbf22746a07d688d3c0c91cac0e7e30c24eb4d65c2ffa9ec149ffff001d06054c14","01000000e991904b9de7bcb11f5416a576f9aa7edea9e85befbcb28d7da89dfa000000000977a435201194c20010393e3b807703a0b04dd648b8b08f94aeb925e9e62b5e1e9fc149ffff001d9da85500","01000000d5fcfede5914e8d0f09ecb6fc3d4f0ad9800c2c5ae4654d2877c291d00000000b3d8216afdb0b691572ab2a7569096f27f96b2b45544c471328cb5e47b9693475fa4c149ffff001d2e06f67e","010000000dbd862c497f3f6cb0721315a64c0ddd00c3edb6944a6b5899664ab2000000004e3ab2d376314f3e236a0d50d5044afd6bebb8302535e65e52561d7afb156f555fa8c149ffff001d167fe544","010000000c7df018718086ecf677ebe88d73af0e21ca1cd454457c838e66593300000000efc8bd99e48c587a86f2fbb79eda192930894b0389534d6da66076d4cf6c8a05f9a8c149ffff001dce4e1203","01000000fbd20a83dece4a7656714b474d7a2e8b2c212b444f0b9b64d5002b07000000002e2ba8e1ad7fc58755cbe952879430dc16567f7897ac0a7b042aab34e56357d114acc149ffff001d324ba3b4","010000005b011e2a7fa6b2766b8534ad2ef8489e48fdf70db0fa2088a4eaed6500000000b2968ecae8736648d16d93d595a53a454e31ad9c6b0f8d9b8a329ead1146fb9352aec149ffff001d38f46879","01000000495e9910a53c2fd962af9fa7b493520fdbb1c5222615d5ac3e5eddbe000000008e4e207deb359838f3569124cb70568e0b79f16e9ef30ffd732698a4f78392d377b2c149ffff001d37fab5bc","01000000386cd9f5894084691fd1d89db5170ecd9a818eb7fc9b30ea2f3a28ac00000000dc4d3e652501977739a5202ff3d562398499207356025a3d921499a2d9c3e8771ab5c149ffff001d2332c5f4","010000009c73cf3bbc257a04ffe6297f1d7f086ed90ffa11eda6a2512d31626f00000000d612c8dfcea8669d5c262dc45a73375f89722e1d3d28edb8e5507518b9d4b5ea7cb6c149ffff001d0614731b","0100000082208b27065ac57107ce2ccd99f10680e31022bfaf00240d1723918f000000008ad22367655f3ce546bd25447b995242018cbab2c13de374091bd87c9b082225e6b7c149ffff001d286c9725","01000000838c6dff6ce0e1523e7fa3b7cc588c3eac722bc86e4260f0f1d00a650000000077cc479228d4a69e1fedb866427660f9cc8d7e9ea0d9af92e40f03c82e09ae6cbbbdc149ffff001d39f82bf0","010000008a3f838efd83e15e9da1db8170243984497782e8121c43f04b378b0e00000000a466a3da646af488175ed94b9f7606fb44c7d97faa4405c58237756bae49e901ecc0c149ffff001d25266054","0100000044f3c4c41a9dd0a857d98e70a540d9a74b628158bf634b4a7d83fd8400000000baced9df8999fc2c9e41f4abd9da9123aeaf9601a36ce708fd42832df6f443eb5ec3c149ffff001d1cece579","010000008eb6e515ad036f07b6611ec8c3de64ad2986d558c53513e2d32a870600000000c62daec5475188c91defd4fca050d9083a90352c326b6b671d5ed82a34e6a47c2bc9c149ffff001d28dda589","0100000019cbe95a5a035c211db239debdc9f47694566c435e6098131ff2328400000000d1d0abe7f4a6722704f61efa035be9863006b6c8196eec3e600cf62734ddc4c4edc9c149ffff001d69364a05","01000000ff45c690375c70b54453b4a749e0c59b0234efc6fb3889d26554f9fe000000007fc19acc4690417e36860c9ab776358e6162adc76a7f9f805236e8d8649c6f6353cac149ffff001d2c82f601","01000000cb3299ccfa4ec1607cd2cfd2a69716aea442d7c76d9468048cca49e300000000c35a9d9359797b710a155d0bdab35024ea4f5b8d64d5cdf247dd93fd4253370249cbc149ffff001d01fc1d85","010000001800db39efdb38efb22e21c2d23243772931ac196f9e499f61970ed000000000ddab3e63ea0d03057e71768ecf49261db833ba596a9ba72dde83cd439fcaa18fd5cfc149ffff001d0406fe85","01000000a396164450eb43d2d9f831f1d16546c0872be18d38caa8139590fd59000000006e13c9ba3e11c662eea08884430cc956298316074b223af5cebcefc2874a0f75fdd1c149ffff001d03368281","0100000056e7c21099da8eadd6e299c1de9892202229fcf0d4e54752b6517eb2000000000686f2b4195b69671d9d768db223c2f809ac25489639c003595e097867c7b0cfc3d7c149ffff001d0068b488","010000000f4feacfe138b157d7e19c955d16a1837f26ad021a35fa1c0c8f51ef0000000067d787a99954031a6829a2b1a9df497d5193720796de0ef3fcec2384b74d95794fdcc149ffff001d17dd547a","01000000c41d9a5ade921d87a8f6011b35efb04e94a5380504d796a0ef756aff000000007825eae18bffe3d8411c79630217ce311044fa5a65c3ab5ba328ce8251590241c6ddc149ffff001d39506c06","01000000f9683f576abbe3fff526852b507d612b444f76e7871ee143cef3911e00000000da5143ff5a7ebbe2217edd0a16699b85568d1a2bbb1607f2035c63c6e4c56846c4dfc149ffff001d3352c372","0100000040326d009801b18afed5747170a0863b7f59a72058cd002e4532e53b000000003bc786add5df2c3be2e0d47d73b7801ddfbcf0d93a606817627ddde940234a1683e2c149ffff001d3a1041cc","01000000a68f12705ca40b57509ac8a0a1a32480a31b3cdb9e4dd19bfff998c000000000c52feff876f0633e7980f171b887aed28b45b0f30e89da35df4bdee742117ea997e5c149ffff001d209e0cb6","010000008dc5ed0a324aa36349b33935ba1160e27c776d0ed6763f66239c7c6900000000c924996955e4f763e6088fae50246e4427e658cce6242bad417e8e13bf2fcc1c80e9c149ffff001d350710b5","01000000716af74719e786854b889c39c0ebb58f7aa81c7aac7b5c97c9de24cf00000000e6ae6d4915b848881e31bd02e34f9f444d53cbb4cda80aac72348b3f4225b466b5ebc149ffff001d2e8969a1","01000000c3f0ce87467394d2a9f67387c3a56fd23de7296ecbbdd89e26e9c0d9000000002d923801fdf17610d63f24b2f3ef3a736b94735449fe4267f50640aaa28ed8ae11ecc149ffff001d217b7201","010000002bdc066c65ae81878fa78f5096567b772a7b437fe4d94316a3b68e7d000000001fe1386ebfee0149e0b52738436389e5e28dd365217448ede2c63dc8279b0d1235edc149ffff001dcf553e07","010000002378216209b130d6365f6d0781faccf432cd09cb9891b6f773239d22000000006f9e7c25b2b7a0470dec1b2415dae30148f92a3635d52dd49f958bbfc1259dce27efc149ffff001dbb6adf03","01000000429c78cfef42a1bdf1cb305a7f99f598524a08cde2f5ce471764d9a700000000a6117e02d7e94ca346f049a471ec2fa60227eff7a3f31d953457b0fbe3c1daa573f1c149ffff001d212ec033","010000006faeb002f8753da327df16f00f5872255ca33229a4e1bee5785187d100000000e58c1ac92949bc822ff5323b2152de67d62d9ec6dd3ea1d4c0e15ce10cf42414b5f3c149ffff001d1428ec50","010000002970a3188bbc4c7ed4dda828fcec413368ef614f9351216bd6f0a0bf0000000056b2240a0d244b6480221f7472d8415e2d48d870bb482a41597241c59bf1f2c813f6c149ffff001d04f9b475","01000000fb1e882068bfa50cd949045ad96a1ff85dc68aef715b8dcdc01e711500000000f722d12204de4931ddbebe1185bd3d3eb694a33f899437519cf8c444815df406b6f9c149ffff001d1d598ea8","0100000073b0145377c792ff200f86b42a861c0cd78cf159ccd39f09e36a931c0000000064eb02fb6b585a903c7456dd2076e6106ce6ab4c7fd5025a0d607a48f4cc571da1fdc149ffff001d1c39c7ea","010000006ca60681ee5c10e6b62be1e8d4118d6664d86ac341cb4e3a19087caa00000000275f31f2c2ea37878e9478913960187612efe412af2f2cd212a04f6e5aa2079172ffc149ffff001d263aa45a","01000000c519686da84d5e24ea3db0e72a49f277a2dbce3155e58e618855a2290000000013af09c3c1a719311724783634be30d3e8c8774d0473dc5c25299c92b7228b3bbe02c249ffff001d286edead","01000000f4ddec64293cfe9a069db477bf1395d547466c1201b28e196f15206700000000ccc638b40ce63d831454e113d7644644094b557757abd70894ef35b70a36022aef06c249ffff001d251d5300","01000000d6372a730b9d0f953502148e1922d658b1e0994a07a4322091bb434b00000000bb501c219ab72f571c262a4a3b1422cce07964b0b54f94813a57674266c29d00ba0bc249ffff001d0870d469","01000000cb3b5d2d3bd73c8b77053fbc7174ef94e853257bd2a93fa642c8c7c6000000006eeac777400342be78f28050bab451c4dd5381170dce3a2eaf2627e0ae7146d4e50dc249ffff001d190415b5","0100000083914f2e1d39c837a97f7f13eea40269a876fad2a4c9cdd0b7e91c62000000003a029145b12ac2e152638468470b61c2b572d6c8aa5ace9022d34054eea9323b530ec249ffff001d558e7002","0100000084c4862ab52f3ca0380a8e052f0aa564306b6e01371bc539d9b900ba000000002d15a954afa9e192e0b7373eefe89ece1fc7926c0e8ffb8c4a41accf31a5876e4313c249ffff001d3a91268b","010000005527e784325787da3657ad3ac7ac672dfd91e94fb2f5e2c387094fe30000000080a8909f64ded9861d16b0b9ba0f802ab090001a9fe7a5406935cc30124ca2a42119c249ffff001d01013a8c","01000000af59d09c6ac2702e77de1e630d62b89fb7e20764bea1eb9cb19d69d80000000086e429921e1ab85299ffd7f8c19c3807a6cd2e2b332c7831517e65da09cc47544d1cc249ffff001d35fd5af3","0100000076cd053c6deecce931d3645a8616fe95d179ed77bbdac1b7f63ebef9000000005a9905ac0bb2e3f78b0caca8b31d3eb4a5a2adb803de50f2a7036e3531ac09089e1ec249ffff001d35d5bd08","010000001648d0dd58033c3dd4166dcd9bf9957ed16f9f7574437c0d0a3d4e5a00000000ea214f75f7971f6dc3f23aec246cfd79f94543f2317451511f559e7fe3fb8e379f23c249ffff001d0235f9bf","0100000044f91d261696e007967f37acb6caf38c004dd0ba8173e0357224bbeb00000000e3861af34f9eeb661a1863205a82be8385af903ead539d83a5a5093740dd55910a24c249ffff001d1e728703","01000000e5cb21a15eba6441d54aaecb32e6124b5ac209ff8885436f34b98a2a00000000a861f93081e3676f9e32f56901e6b90d07d5755a4ae0779376b90029bbf457733027c249ffff001db5c26b0e","01000000c253944efbb1646362ab8f3e7b12f2957a852e189740b42609e283b5000000002e411bffc6b0fa09a8ea7171d6b993141bd340f7c023e3210eea590e387bb63f8427c249ffff001d077d9a01","01000000920af6f3877079f5c74de1a68ed9186518fb44eba8a7693f559e17e50000000084d0b359ecd0456ee7006a30f35f9110c7d89eeb53b76397451584446b0089147728c249ffff001d09bac245","01000000990a72f77fe74c92091f0f8996c2c1f65b6ccf7c246f443bd538bb5900000000d319e92d995c299107296dda4db48733e917faa7e36cad85030be022a9d013757628c249ffff001d2bb43700","010000003179b356ba8a935fc851a5ac96b118fbbd505c88bd7ec519533a053b000000005ed80910e01ba55a462a552937b24f7f975739c6f7021a22dd6b4eae5892a5460a29c249ffff001d18010904","01000000d927fc96fb8a814aa737ae69c258a22205004798ea5ac0fedfacfb9400000000b7ff97648b5473d153f78da8c3452de86c46a9efa809e8e02c953e8d9a498c1b7e2ac249ffff001d026ec079","010000002c248d014a80621f4e534d02154e0daa74a25931b1431673d111e072000000002d3de88ad6189a94438db947fbf8090b220d02e11d997c4e070649d6b434573cf22ec249ffff001dcc36fe02","010000005aecbb0663ba02f75af75dededf312728cf62e4f5e98790151e77ee4000000007dc0f7246750844fea758f074d9dc5b5edf8f8632d34a3501c51893d83e6d7607230c249ffff001d0631fc07","01000000869644d0ff4beb18c096f036ef1f34700883919f4d477e2b0f4d5ef70000000028264d8170f06562589a7b0642a3e436af7156b0683eb3892eb06afde3aca743c830c249ffff001d1fb3014e","01000000e9431c861e1c28777d1c2dadb26c78dfffc81475f161688b77580e6700000000739d2f0a79ee2da7460759884a7fb4eb5c4413a613cd47b0174696cbf5ce7db1d735c249ffff001d2676b560","0100000064eca656d1c16b9098c47f18e7bbde1c50e10889bc77e0e989afeea2000000005df1ac979564d81a439c711a884d9829ad3f5da9de472a9b998d35566307cf05ce36c249ffff001d9e854006","010000008c7dfd747c4d8c6a1df73111abb4fd175dcc44227905c4700826a438000000004b260d12494f57106dabee351bd3fce90003bae0f938f75fe9d1b05fb61f9d539039c249ffff001d30d4b473","01000000e74a35562118e85c6a262e5f792440df9a16bf15649b73e4c3201ab5000000003f8015d777b5e45ac9ff4afa46f14dbdd04d6f8bb885d407a03b0907433e8319ee3cc249ffff001d08a621e1","010000002f5399ce72e078b029feb78b154b12ba0422612252c16e446c1e9ec20000000019e59194d1aac700c9c067d827b7929fdf27a5a654511877f3acfd5b9a1bc34ae43dc249ffff001d43c94306","010000007d6e6d4223e51de6bc09053e281ca4311c963eaaf702991e44b948df000000006acc3597b3097bb7fb0c6341575092c9c0b84ca510c0dee47cbc74b9d5bcf9b5fd42c249ffff001d2db05923","010000003ad46a3455777b3793f56c249f34b20cba76cb2e4f9ea17e64d3889c0000000020d61e77ad37637bdd75f892f12c116a477dfc7ad0dd3496266fff2e7842cf815247c249ffff001d2949764e","010000008ef415658df8a3cb566bd1786e4192eb2d799ab800d4ecdbb118116f000000008f7561bc99ecc6b8e76712238bb4cd6cd8d797593a331a3faa034c6480a041afec4dc249ffff001d3474e207","0100000079d768b4ff71facb95cb5aa48e7c67452de27044294bd0f3a492993800000000ef0482ee2f5b2420bb530472c9b5249101a98ca53501366d6d9c60545e884521f152c249ffff001d1ed4de79","01000000aee20840235265f0bf8975c0299c00092fda7dcb387e092f7bdc2f1300000000b036722d39cc415f34d8d9dac0422a61e0d4d337f878487832aeee4a3b07c7b53f54c249ffff001d21f9dad1","01000000b336600808fbac2d130f44a6c987df891658164e309ee8b737ca8c8c000000009677be4145dd5df62aa3ffd53693b157ff38cb4672d67c5f0b0673342e8cdd986a59c249ffff001d3891a175","01000000d5ba06678379d71435d0f7c01a2f4bbcaba4b280c94ca0f1b7384c8c00000000a734b0c844ce1e040570937816d7c8edf32650d1f3800197f0ff083ef1450127a35ec249ffff001d27e1651a","01000000269d56b5e322d073adb3639559f1c82b96ae59bea93f6f417b070e0700000000c55d2b21006d0e71358e91db16bf4d6eb6e2e30c7ee68316edb698b474263be6ba5ec249ffff001d856e9d00","01000000b2d1947d811233c103992271032c801f0e3e7244735443205a41db7a000000006c34ee51dec99e227cf0dc870112bbc7d3f7b672bfbb15e84b5bf711bceb08d43161c249ffff001d170aeec2","010000005c6a97dce35a0e75c17a12be49bee7267c13d1ef3421a022fd9e3f82000000008704e01f5eb8669870a619e4198782ee6f4cca77d08fd2c3c7e066701cfa471a4d62c249ffff001dcb853b04","0100000011741b0c913ef03dab2d0035c9e8fb32f133c41dd7badbf607a15c4d00000000cdb859067dc8985437a6555e7e3aa04d8d500f0bc81ca1a09862f4c3629ad2f9c865c249ffff001d397b212f","010000002405db98ec1a8bf251998b978a0c95270c731acbb26c35a284cbac40000000008e8fbd04e5c505305589625e467a4294df12fe2d14d534b35d80cb2d92aca6138668c249ffff001d00703d32","01000000df639cada4aa5955b0258a9453ebd30e96f8f3df1fa83f71982756040000000033b7f0a304ed8abc40f725fd8b294fec6cd7886be47f5fd38dc443d335487e01af6dc249ffff001d1c11b637","01000000c417b12fbd9c1145e5618fa2570f2716b2c4ce5fbcb9bb770fd200cd00000000f2d7773183298b140f523ce41a184ab8822862ccf1c4407b01ca5244b133de0dc06fc249ffff001d1ec8835f","0100000085708bd769b500981761e086c20c7bf48bd7e083600d334ac63f03520000000034af1dafaeaf8139d36ec25a4684945b940e36d4c15e2c74577c381872391ae06274c249ffff001d17408786","0100000013f5d4414b72a86c549dd41c98453b3c5e789f8ad304f231c2d54d460000000097d4ce476ce3ad2510d60f74b77c3fc5ecfaab2c20a067122bd067ce958c31e03175c249ffff001d280e3803","01000000128b4dd9948762b850ce81bd8cbd8b682d7ef658e410581a3d6949c300000000e3d070ad6e7bc67d4eec65478350412f85b3f6232dfb19f7730fa41ee3a87334fa79c249ffff001d3530de64","010000001c4355ae9cef1f317938ab974a565ffeaba9d55274f4b876afc1d31800000000fc54e42fded1ee3d56328ca51664608586b69101248c8556f49fab1def2d6b22627fc249ffff001d39dd567d","01000000cc5a508df2f7c5e3f82bcad2354d0901ec35e6e08fdc8cb2421703b40000000054308dbd96126f4a4d83da5b77fba7ec8a63b3dfee93aeb744b759eb3cfadd358181c249ffff001dff266909","010000000d18d6f2acac9f77d6a87344e7b5fd17997f3021e43d89265f92539900000000f9dc47bf61529f792c32c07a66ff29ae42cf7dc4e2ee039ccf24481aac5f8e973a83c249ffff001d1a1d5006","01000000d73748c32e9a3b4e34456dcc96cd53403aec48ddd3706835876868b600000000e02c541f24e530761ab9f90f0cc11f8f254831e37ea247e668fea6da147229965a85c249ffff001d218238b5","0100000072606100020f1734bab7067c0901e997d4df6197fb60b4e520b872600000000054304d748d0e57851bf386e3a8e4e31a6085afce5430c64292715a1ba02aefc1a48ac249ffff001d2bd71ca9","010000009b1a3bbc0a34f6a037978e21a7533448c6b0ca794151f7536f8e68c9000000006d43ca4c78988c407824c0026196c81a2e9cfeaa830aa7605f06094927ddec253a8cc249ffff001d2697ca31","0100000074cd0a839213d04a70a5e360bb0bc6b6fb3d7bb4b6a2414e3840fb94000000004c0c0d87c041aa219c341d68e81aa3eb29065b4391f43215e5d01b3774f63ef7668fc249ffff001d171a2740","01000000af084d8f4614f557f24eba9acad4e1370ef3980b702a24eee08edd4c00000000dd7e661672b457b6133b46ee035e776510475fac229b617cf277bf2c00d10290db90c249ffff001dd996be08","010000008dd34d7c92407cb85e61fadc50325da18c6db39e7940381479f1cafe000000002df91c9ac634a0a8fc558200fec0e9933fb92338419df6edaf9b340b3cb289fd8f93c249ffff001d19bf10c9","01000000adac4c99a542b0f9ee0c23b92327472966b18674b6e6021e6409b35c0000000049061f8b166cf2bedf0bc644aafc9553e1679459f5361a698ae5308c83d1f85a1996c249ffff001d1baac153","010000003033faee59d73effe2250928a1c0ea5fedc94cc0c22396339a7973b6000000001e4b715fe8da5ce17fdc3991ca09420e88c0663ef3cb806e071426cb3549e1ca2397c249ffff001d95e0b306","01000000aa7d8d6f045a5d3ac1b5c75a4a7b3fdf7ad3e47b2e89060261ad78cc000000004f5de037b3c8c996effb39c882340c28bbade55c472d1b10f0acd9f1ac32a16bd697c249ffff001d22021351","01000000e08a1d5fec946359148c886d62b978011ce6ad8135cedfbc4cdbba8400000000461cc12b401eacd377b91a09f5080d305590382158580dcccb94ec83db364ee1a899c249ffff001d14777030","01000000d44e7ee6798334783c233567c78bf38c0067c43b0d73b7fd9927a23200000000fdf9a86534e023093b2d0dd7b114d1546823e8e7285199de794e501fae3069aa8899c249ffff001d91150600","01000000086534b36039d88a8c855b7faf87d0dfcefd05efdb742876dff4101b0000000017b1ec9ea69beeb235f5c376c66cb36eed00cc6be32ffcc35e531e7ce954b3401e9ac249ffff001deaebfd01","010000005063526d35a371e8b23bb4296563a1c03a20dbf645e46ce61f34111600000000d9fbab6b64620a1da995b83abcf93e17f1d7585fb0af30983cdb5300da578a521e9cc249ffff001d39e9853c","010000000610ac6df99c1132093f1df55941bd96c12f2f0a144d144dc8e12a310000000094e4fa6a1ca389f5b45aac7cbf7da39502f55e7074f64c93d497f5fe17fcb833879ec249ffff001d359bc464","01000000e6fc4d554d5ca44d8ef227161a08068ae4506e88fc1812a42a8834dd0000000093fbb3314ac1f08728e834c3bb914d517f15f9fecac437472a76bbc989b5ff0028a1c249ffff001d3595782c","01000000facac7323664938783ceb0ebfb969a016ff28b95ccbad19d8335ed88000000000560d7435ff5f53ba5497aa111e2450f8c987dc8612c94555adf5acad92dad5db6a2c249ffff001dfa443806","010000006275b8bab37df776c53e95dbb74cef8a8d3081b8cbc21386d91c312300000000e42d4039701556a086b6c84de716aca0ca8d373c906743e33033960159592cc16fa5c249ffff001df3ff9a0e","01000000bd985476509d28a33a2abc5cfa5471bed0d8d169957c296b2d0a9cca00000000afc62f690352b17cfc7825ccb0e9ec6d5a400af3146416bdbb6d1796800dd93b90aec249ffff001d1fb28e2e","01000000b046bb88de1e2b4e66bcb98985f582f926740db87672b5e014f1b36f00000000d33b163ec7bc1ce3a190661f787279ea070e46776b053aec60fdd9d32127ccfb8bb3c249ffff001d256b0450","01000000def25785a3da4af3858b5d59130552107fb9cdb98d6df296b7cd69bc000000002d93003d77a653ea629e54eacb8ce87b91e49a03a4a2ca9330ea2e4d2cea8d96fab5c249ffff001d072edf5c","01000000e69a5044108743fce355ed7428891400802f15a14ecbbacc411c70ef0000000081a21fc8958b2db121709bd064dbd2117321a60e09d46638dac65c4bae3f7af1aab8c249ffff001d2e1298c7","010000004adc35476297c0c8e7e0076230ce48fd5c7ef21fbeaaa154625111320000000004db691482f0a66ddb1331c9b1fb38d22b8d5824f452652351aedc285fec19b9a3bbc249ffff001da2939a0b","01000000094b4699bfc216c8061818766f3ceea4ba2be4f486e429c6d9065ab900000000347c957a0c0439e82d84125d6c25a208d289528cb0b32c89aaf9fab10187066cd4bbc249ffff001d31e59aeb","0100000001ea65c4969aa37a58105d64e5c40d6452693e7d658801836efe270a0000000024cc784c0f89a45dffc44ac59b3ccf4cb342c9f5f339b2228f1fa024d3575beb6cc2c249ffff001d34e40190","01000000787e46d05476a24bb7eba52c9654f24d5462decc6da19ad3fa56766700000000b1185968dde0b3cc84e476339837c03ffe60aab0e62bc60fcf1a86b49aba11a436c5c249ffff001d20a834b5","010000002114cc06b84aa44d2b1539ce5222860824b9851ccf651bda9a6327f8000000000f51d4465b88cd0ac664289e679dbacbf5201b1cf0e014f73206b3067bd1630625c8c249ffff001d23680cac","010000007673ad83b49b1fe533727cd73653da2557e7688e5de487dbbdfdffad0000000039e38dfcdd2a277a14cd35251de735b80ab3163b1b9719af06f52156365c382367ccc249ffff001d37f85382","01000000613a36c819338fb2437f2f7c3f843f89bd0fa6717be12bb537b0f8b6000000001db01c7b3700284611e668861ba2f2ec7835edaf320371d82dffb35ed528f0142dcfc249ffff001d2d0eb15b","0100000062d4479852c6a84d09a7297d282fee55eac6f3b3f392aebae92793a30000000041d1afb407e27069ad6ded2c9e7d71145ea22897e09d6657370e35f2be43c4da73d4c249ffff001d26badacf","01000000759223dc09e90f469ee1c5158f90c6e042f7b5f4f3581b4aef0c1e2b00000000ac33da04a2f0bde7898f93d8a4d617f8b3e2f23ca69fe2a1be51183e777ff4c0fdd5c249ffff001d248e812f","01000000a3a8d268d35319c041494bfcc63b4f25257d733c4bfede96007fc57300000000276b6570796fb739ae11b78385b069968046b6d84b541514c2ec3b5b740844e1c0d7c249ffff001d34d97e8f","01000000f6ef68f711a40a2c9acc8670c1844649ae5d9be64554a2b350e496bc00000000a39ea5e9a96584a4fdafedf3d12d3741efbdb1b37176d8cca67d727d493c0c8f4dd8c249ffff001d23ce2904","010000009922814835057a03d5e0c6132a4eaa1d1eb921c73a11a844e6c2f10f00000000ae15e858f281b328e49f023784aa26941650b175e90f6b4e7959df4db85f1d0b88dac249ffff001d2c1e9249","01000000b378cd451389d0189874a6e7eaa11205277c18be477f10aeeb9ae58900000000e95ec6b1f1ae2302d17b8a451c7ceb6f4d64c12d243a80b65ed6bff2196b5cb448ddc249ffff001d04a32d53","010000001c60bd4d22d965beb5fcd7e2ee02aeaa21da17aeb5220512de98325600000000abade1586ef6fef59b2b9e940e19a8ede43f8793baa6feb8b404f3e0b18df921b2e2c249ffff001d29160ee3","010000002cb946b66a9f0d90989f2569b0980650774dad5b778584032fae1e1c0000000034887cf07b930f9c345054ff4d68e77074ae1df6ccdaefc0bf2031c85be081214ee4c249ffff001d2065988b","01000000e07bf28758e86a4cf99920e87fb28107a6ee1cf5a0d428e875090c9b00000000d5df254d0f464de6699294c8deed154a2fe79445ef47a0e3ea76501b4bcc86bacfe7c249ffff001da878d912","01000000f2a3736928482620077ef2e4e5334b837bcca5610f9e020ef893cfb500000000b003d77a5c65df3c46fbb2f174167d168fad83cb096ecab95f1c3fe2fe69da5985e8c249ffff001d13c8ddc6","010000007f4b72054e984c153feea4994ce1e71294c290544b27af16bc92121d00000000d04e51ceb8c7602169003eba58acb21c5dd8103171a88f82da3b1f895e86511356eec249ffff001d2f2cf1f1","010000006c01a43365a24bec96411464b4ce5419b01a89df26e23f922aa2375200000000667d106f5de396439500568cb801c050c6bc65a643d03c05f70ac230851565e858f0c249ffff001d32b0d272","010000006eeb196cf6877e99ef72193d31a1e3a8e29f71a0822fe14573311ca3000000000360d473cbdb73c1312cdec55f9fb6c6e1274294d8a334d479fe4968231a1fd385f2c249ffff001d340ebca6","01000000b76df6e05c3b68930ce8c9002fb44f1742cc287b25abd8b8f8d5b9a40000000093dc0218fc369d97abaa7565ac6370f2695020937f708bfa75cf4dcf50ba8307bdf4c249ffff001d07d12a3f","010000002c859294576e95d523edbdeb57ebe84ad89ec7ba54aa956b5ac19c4c0000000084e22cb957ee74b08e3e7aeab3c264cf346ad8e58e4ac97e53b072e53cd53607cbf5c249ffff001da5dfb106","01000000ca4c7f5f31f4eb026aa48b3eace01e5e439cc314ac9e0f3492cd9c5400000000b95f35fc5a9f06d65ccbd54063b71ebe8541ebe52411820b32c81c504dd8420866f7c249ffff001d24f34ef5","01000000a1654306e1fd7138b8d6cb3869f0e8b37a3292a2ea58c26cf802efd000000000d7ac2fb4d175d44b519fe0f9122ba7e99b5947a735ed2a0975bca03208a86367b5f7c249ffff001d5ca7f400","010000003c11ea48656ddd1ed2058532446510f5d97a654f32fcd5f362657a6b000000002ec388f7407a3fc50661bbe9d5d306c2e1660617bbccfca8114f903c9658b5b43cf8c249ffff001ddab99701","0100000099debd4e2ab5f9f180f2c4561d2e9d0981c540b1e1927a8ec8ba42c70000000025ded7b0323d2a43dc5629668e2f88ed11f9147e2d235d1e60616d43b9823a140ef9c249ffff001d04082bd7","01000000f575e6c9cfae409dc6548d1c39e77c7266b31e71a75431e03b799d8900000000f52b8125e208108df4e217af9c75ea2705d3b0a66097c4cbb0684dbd5872a655abfbc249ffff001d11e9420b","01000000c4c0c78c9b21c83697c2046d912022ebfca5be2bb6764142af51b1c40000000006bbdcf475eda2cff58480ca66b2cce2b76a8c06aa89a97ebbaf85d8ac5e8d3434fec249ffff001d39d6a1f4","01000000af6da8f28dd6bca3fa0b87ab0417ce1ce066a9d2ba2280b3ca682a8100000000367f6c63100c9802780c98ab370002720f0100f857976be1afd805446d0090cf9a00c349ffff001d25623739","0100000005513250521cec3d0925c297c1dce9de7fa1038e9e52d797ab38d84c0000000069121e75f0bbeedf57d8eca4dada6cc5ecfe845ea5f1c192d7c5b9f8bf753638f802c349ffff001d159200ce","01000000b999608a252ba156718a827757ab6b043d82724bf10c6d7c0a38a1f800000000d394b41f316071b3c304ecfd3d7033fe2cb7d49ebfd064c2ffd1870702adef46cb05c349ffff001d76577a0f","01000000174b62d65faf1315b137c15ef753c31af677693ee921e9e63d6ad2ac0000000059993ec26d51e169bca01a61f79e6eae9153c6bde49f994a30d585fdb712eb07f907c349ffff001d27c03f22","01000000bd4def5eca3349d1437b37c374331c2f911c99bf1e4be976e7f3c18000000000f14997e1f0f2fa3347254cb0cb26caf5bfe7ddceac5ee402a5e660919b4df901ad0dc349ffff001d31170508","010000007908b39561c3e2369e017088d7393d5f38d0148b0d7a4c08de2fca8100000000fe0db4bdd907451e9c300be4d69d004dad25bed484b843dfa670fe2a88ed0117260fc349ffff001d05bd1cbe","010000003dbcfb2b7155878c9d32871f62b70b6409d38a12de319e01e906bdf9000000001317fb382f521bb49bf0cdf121081a2d75b9ef2c975f26ece7177589b64e29f3a410c349ffff001d1fc3adb8","0100000053ade07c5f28bc03db46580709e73a942eec606ab249f8bb324e9d2b0000000074253ad9f76ac06523a5ada0c415be28eb3bf178425e7130eea3e33275500dec2511c349ffff001d6288be01","010000002a2293aad90454d8d421b97dc831c0ec6f47b9583d14c7adc496c06a000000006fe5b6ba874eb812a93184755493b3d25dfa1c5a8de223622096a193652fde14cf14c349ffff001d33cf3d0d","01000000d716832a29ba5273c874bf976ba804fdaf374a4fce0c4b1cf651832700000000aaf04bf8033939344664458aea95d5095da8eb3c76515579a90618439bcae63a9917c349ffff001dcce0aa04","010000000dcc065949bc1e60ed389970e586fc78a27e8b9e1e9b27a4ff9d801d000000001b894f6420a0dcbeec0f44aee4c44d662c78f76f5bb4ace439fde6df2fb918dbef19c349ffff001df9d66e05","010000007f0bccd7e5db3f84977f36303b7f56fc1e371ac32c977d03f298e4380000000094e2291580055dadb4bccb6167a861748d7facec9f9dfe5f40d579b106d45ee0071ac349ffff001d06587158","01000000e1f7ed0e2dffe79121044ad9bc0a9a08e24943d77f55024b96fde6160000000004a5600f64f8534493aa707946023d3afbafa07f8274023a29ddbcbb74013219ca1fc349ffff001d36784116","01000000bed7cef8c22c9ebc259ea2287ed2448f1dd008b5d80e6be94953506200000000dd842f398337dd5e5009856f5e22995a570b2bd7ce4cc48f3afff68e500de8d30e25c349ffff001d05a0e09a","010000002c6d2d14ed47da6135edb06d1d6c5b1f3f49650d93372f4a0fbd968400000000ae35dd4b7ea28f430d86c90abcdc01679263a425bad9aef63f59b0dcc00a168bf928c349ffff001d2b408aa3","01000000d09e4a9d7b2a63ad857091dd1a09e598a42c506efef38ed134a879e900000000407e8b76c96b44c5ade6d1552e05eef5408ea24009516a80248d7e71bf626bf6e42bc349ffff001d220c56c6","01000000b1d9185d2583107a23483f4b09760eedce10eec90b2f68e66dc7f1d300000000c88535a256affd4bd7ad29853f47e7ac2c2acd936d639717357ed25efdfbfa54442fc349ffff001dea7c0a04","01000000422999bbebe586e2e9c787999444ab672ad4a7d8ae6bcb2b1f2198a80000000087bcfd0fee02150ff1d923acbd7f7be361575acb98e2499d433e3232e3bb04ffd82fc349ffff001d0582611d","01000000a67b45e13b46bf6360b346a85805761a52c2f733f3bf49bec4059e18000000003b00fb96307e620c49c719e6b3409f2e34596d6853dacd166734f42e58a888a71c32c349ffff001d1d1ad1ab","010000000f3848680d17c504da0462ecb0749269d66caed8abd286c84b04cf6c000000002c7f3923d2934a33549f0b3deabb07219385ded539623fa72b39d6f235a8fa94d733c349ffff001de7a7120a","010000001ff2d59cfc7c7769e21c32c33c1acdc94cd2118a90048c2915d9520e000000000eb43fccfeb48ace8bdae08a18736f34523fac27d257f3c1e68578697c3370e93937c349ffff001d23f17d86","01000000b0dbdcbfd92792cbf7a7f03c70622dcd015e3d6c160caba21a8e50170000000092f197478cb741cb894523bb471c03434ff0fb3b16cf5d8ee4fcb1d7c7a53a77c13cc349ffff001d0503d846","01000000820082cc77909cc0fcb6b85dbe93483cdb03c90b244cdebe78ca79190000000021f48241303170781bf9367fdf2bf86564576f3bc8151190d16705615f8596f0fb40c349ffff001d22f98e50","010000007b51a0962604a510d30430c167e7b3714a5e3aa1f2cd3942845fdcb800000000cbdf8e7317126a552512e97f0be9f44eb6e718fa33747e56758aa5967d556ec25a44c349ffff001d086d3912","0100000059ac58c2b6b9e3248ce421422272b31ae1d6f956d6f6ad1949e3d56800000000a33514231fcd1fc73828cdd626946f4e306bd67ee8c5ed99a5c16e453c76df6ff944c349ffff001d2e0a7d00","01000000fed588691337a2b865372987fd192971f95a53ed9a21415dbaa48df00000000014a2de914e47975c97c45cbbee3d5100f1673a72de3319488afcaeb826cfeee58249c349ffff001d18f1e00e","0100000042d38daf4c67850f63d20390645721b70d080c40dc4b00322944f19c000000005b38475fcfafed266f4c269a64180dfe735ca805f647502be7f44f1e3aa9d238ff4bc349ffff001d1a230c7c","010000005db0349b6bce8b0fb4c9b9939010530023f58b2f74cfc326383a7e11000000005dfc280317b9dea5e792bef43a3b6d6157866901b95883c35d96e1844ec09a4e5e4dc349ffff001d24624ca2","01000000dcdbff39275b28a4e03ba74b8ad71ce9be7d5432ca7e122eb7f79412000000003e3aa2cb052795dd0e6fd82116c1444cda4aba44579e3d2b052835f0a3e2bf084052c349ffff001d2ee57f16","01000000c5f96bcb237bd1e7d47db7fe79a4442ffce2bc9921793afd711ca58f0000000070fb8e1cef515d413ec1d52ba6e546b6ac702a04b79ca78ec27937c9b808f9794d52c349ffff001da8059001","01000000598dbca2ccd711450c282b24d50dc070d9e3e4b555e30f2288ee67ca0000000068475b2be30433dd30494712a10fddd6d0ffd9921bf91e1da760d05bd429769b1355c349ffff001d1d826f83","0100000072bc1d87bb4c4a26aa0ae7cefd05407c5c1debe61e558794a513db320000000000b98a72984ac25baefaf8d88903e70026fcbe5850e95ac4388901f16fc591f00959c349ffff001d2735dc2f","010000005b97af9222b25cbec0d9b844b0e3956a44b960614f8fe021551c09ce00000000694d79af2653c789b047fbdcf8e7cdf1acf29f2919f58f05ee3596518b5b7cba875ac349ffff001d3468dcd4","01000000ee8bec44088a701bdd732877fb7981b09ab3e096fbbb9552f8f63d910000000029050b9fc20677112b6a2e8412f15a383d85702c35ffb50a6b4fa91e95f0751d125cc349ffff001d20adb7cf","010000007b381da097543ed1fbe025d33da8ed451a3258140a1fa99d0143dcce00000000f00bdb8c12c8344ee52042eb6582c036fc3fd2bca4a52f105cde1ba2f78115b9b35ec349ffff001d8287650a","01000000966368d0a38377a6ea13b7cf219c62da6d38dff1a1aef2760ea4c7670000000044cabd0419f5e60513ffc09d9aea785e0f28a23daae2b8a132f7e71728a655b4d160c349ffff001d331d0210","010000003176de8265eb0252cd4aa18359100241dca6af233bdcf9c0b344ccb500000000c2c9ab14b1e1b50a2afbf35ee8c038a50cf83938ec8c30632ecdc5689f1b86877361c349ffff001d2b749104","010000008eb573f846c2bd1859fe689bc3e4dcc26e09b260486127493b1906d9000000005f0b83169ed33d8c446c1fe4e3913b8629fe742772eb1eab4a51510a0dcef2858964c349ffff001d23cb2d80","010000007c030e785aea40aec032177705407c7eb785e809a1f15e1caa75a7dc000000003369739ea8857b7ba1d8f0e6d19cc36d5c0542b8727f29a456fd0c7c4713a730166ac349ffff001d353ced45","0100000080209b72b5e74e9bde918abe07078dac4c40ee58b15f2a436805199e000000002ba8b3e4b20d2cf08a864bcff9eb303f95d853e2cfcda81bff4833d3a9debf74a46fc349ffff001d034d97ba","010000003f851e5f5ae5a53ba7a77b1c16075eb98b21558cd04e96fefa2a22da00000000d5113ec88da45d344538da4cf1824c9180c7cb83cbfa7aab4f3fba2f0629fbf9d275c349ffff001d39934ffc","010000006201458bef08fb02c324234c01a7c35fc273d18a05d49b34c4985417000000002dde9d39be45e8e3ba733d8aaab2f3aff2b803043270fd084cb3cb47501d3943d079c349ffff001d1c2a44df","0100000078d4b400c9acb71cd04a129b975d2c7cdb40109a171f4f12cf43b016000000008b26b3372715362022973fbcfcb2baf1d4bd12f763ee8b143f57c313b2016993187bc349ffff001d60683003","010000008d86997caeffb33aad6525568ac4cea5e9d6e2f6c0cad39464b1f19000000000740fdee86c5cb3d61a49511b05c15b6352a2117e85fdccc130f2c80c2cff53994a7fc349ffff001d1b64b34b","010000003812d45df0ee0d25445eb0ccb33607c6ea71f4c948e79e9ced8e66fa00000000627a93fdebbd619104f3d71aafdc16c04db11112c17424f8679763e9a99dd0edf881c349ffff001d2738e153","0100000055b1a0856a9c768ff2c359afc02528367359f29d9cfacd337f9b731000000000d9523b118f13cd5d25c7cca7bc28ff682b3a0d6e9ba258b8dbf16ccd66d77edd6084c349ffff001d2d666a37","010000009a23c4c8645e19779797cadda69b6907d3190a6c477bc24256d80bd60000000049caf0c269cfe57bc80350117b45a04d85986ddbe0f6fc85255ec034131ded34668ac349ffff001d1a78cfc2","010000004d625aa086b08faaa29db970ac5e4fc2557d315b7b1bfe26ae7d895300000000c61f4f182ac470d83e6c8e41542a61e71ecc161a273a3db0e8cd932187a891aadc8cc349ffff001d232d59cb","010000000c272cdc08fec32a055de0d3ab9cce6557b8eb6179a74b78cbcc9dea000000002de7c2eb82df69c59618857c0ca2e8884e0c4a20ec9dfcda2410116b0eb5605c6691c349ffff001d024e017e","01000000302fa136029c5057dd4d133c7d093210350cb4e26f01281a65190375000000001f6c58df42ef62cf51a5b86bb681016235a28a45e1e3aa82f2a207445920faf5f091c349ffff001d1ee9ff00","01000000c0830f2844530ad9febda72342cc1b567839eacde8a1fbf4885159de00000000445f6bd28b82603360ccfa3fea008cda52d202942bf66a8ac0d044cd2d1cfbc48294c349ffff001d894c9208","0100000047e5c4782e61cc40dd97aaaa2ecdf400e7d263448a7773d606d554f500000000a54a3ad4e608b0f98ffba9833c41ea84619ef272e90d25e2fadd7b3291a1b7e84c97c349ffff001d003588da","010000002683f060659d90b34f63a313556b55c7f8aa650da2dcb030bcdff68e00000000c2c728bb257b4080f1f47cd6eb5884bc9730f6df8b057eaf067864a368128c2c8299c349ffff001d14baa721","010000006947caca05912ace5d4a272a50bd0b1f6d373c76ecfb5bd92b0c8ea5000000009a65f09fa9221b6cf60fd7f63f8c69e1368b7957a1b19a12263fcfb9d32b63d8319cc349ffff001d3062255f","0100000059f8c31c92f62a1e037e9d002b4d30988644312c4c9c00dafc8742cd00000000636df4911dda1b66ac2a3ac545422d5f3732fecd99eab552f8f704e33dc4c98064a0c349ffff001d1769aa1c","0100000028f971e1e12b977cf8f83cca258d7b49084b60580ee45f23301aefe90000000023b3cf0492b9b0808e6bcd15e99ca9550a16fa59ce92242eb1b70f94335251fca1a4c349ffff001d1824090c","01000000aba228ba6a6583353f7ab022e72c3b3d00ece2d7b03a06b03c16b45e0000000090b0f5a590bf12a31ccf542cb4207fe2a10dd768439a63fda6497b888271b194d3a8c349ffff001d232c3eba","01000000e7bda2271d93b0fed8bf57c92477e445b0d90a0f42a299ce14335dce00000000dd3efabf94515c4ee4a6a91e18a39c307b191c05c6311b9b0898d5033d0e462dd8adc349ffff001d0618c86b","01000000cc3fdd1b847d5007b7e2b506fde71e70ab606fb6caeba20e3e00332000000000f904156349d7c5e98a2013d1c434c8b3b3e60af1ee9dc6c80715eaaa0019687a43b0c349ffff001d19ba3b5b","0100000030cf1c298da05d2bd2f783b6345ae001003abfb133052089d6d34cf900000000b525248c952eefc4cab0cb6f8b1ae507c74d89eb18b3a870202dedf72f1c5676f8b2c349ffff001ddd12f50a","010000001a44df3bc3e91ef310308b564ba90f2d2d7462d6a180a73ba13abc1c00000000efabf0b38a9ee80c03841fd1c71830ce02d1e521cdc517b1e2fb66835b81dc0320b5c349ffff001d162b8686","01000000116114c9b1d07aaf8f10233518bc1a7f3ca32c8984e40146942d9942000000009469e66a94a4a425558515c31360447b2df886ffda6356b9bbd82b123ead0ac609bac349ffff001d2abbbb9c","01000000fb6bf44bae8812665cc4ed5500682c4c4d334ea16b612a1454c9b57300000000ccc51028a515f49edabf460f192fe29ffbd79fd6d30109b493ae06a04869b16709bfc349ffff001d261a2363","0100000083d4a23d8a4dfea40ee34222bc20fa507947187ee5a12565aa43ef0c000000005b15d6ff281362936ee7448b56ab89d980a55f940cf4c8c752fe1ed14d3f045564c4c349ffff001d38d583cc","01000000acfca93ec3231496b4f7428ae652d8a44283cfb38b5216ea5f5b485e000000000900433b4f95a6a23d15e1c1c58290afba04389d32d3ccaed1ee9b06219dc1c7d1c9c349ffff001d371dd3f3","010000007c98c3ffe417c5ac585c59b699a6d44cc8293378b151240742a12d1300000000355279db60ca6a3fc21d20c82e90b973382b3a354b8b10fed86bc3ca29b9e42929cdc349ffff001d295739e2","01000000ac9a58f429028d0f274a25fe1a5d4a368a0d6c45eb2dc53e33bd73150000000014319346c717b04f8dd3db1a73aa4e487fa2970a65085c60fc01bc7ec59c58ff54cec349ffff001dd607d204","010000002b61f47e7a4a3a4e51d48f662a4609b17be5e621166c24529460e1a500000000639e29202b4b06e043e0fae9c32e902bce93587a5a8ef63c4abafc4adb9b7db05fd0c349ffff001d1fadac1e","01000000639dff71eaaa0326d01749380d985a2f34707e909d1dca91b5f2b1a400000000ca968e8c6ed8020dd1791ce49d549afdf0edd1d2331d87b757a36c040d6dc6d714d6c349ffff001d1b77bf82","01000000e79edc6b47e620efef88b55b1e24102b102899d8b0297009222c616d000000006e168844a228ad64ab06e96868c78ac25df3d96709ae2cddc4a4263349ccb07898dac349ffff001d2363fd19","01000000d2db4d44b2cd40271b60ad47777dee767e795a0c4ef36402dff80b0600000000c3036f859b324e3f1933610d45cb4198fe5d4103dab05dd8bd3e8ff07d064af8c5dcc349ffff001d2901b5a1","01000000e694333927861841696dc35efcab6d8d2c903b26b67377dbb3d9d7fa0000000002b58d919f4529b840bbaad9b1a3f06447a8681935a44e468bfda2307b205374a0e1c349ffff001d00190164","0100000065cfad828f5b05cea907f14a001fa6f0304d69e7d934ab1d742820a70000000078de05cd5a4a55674d97f81376ab909dda7eedfc24bf9dc49fd5f64801ce2ebb6fe4c349ffff001d0677190c","01000000856291adf3c5219b719053edc8cbcfa7100e264ec0764b9193b25b9600000000aa8690a4e463e3e37b412689dc6b1a28027faf985cb7c5a92d714313b0fa8d41f9e4c349ffff001d01005e32","01000000c9428e3fdbe0e2b6ad2becb222be4f45699af6b05b3aae34e953f54800000000388f515b41ed1b46d793b3a63cb18ffcc7e478ae3291421b9e20611df84aab9833e7c349ffff001d05f26b0c","01000000a2b8c447196367ca00db9d57a5f2c52482d172366a0b1766c597c161000000008b66a19552b772a587d3e797386d22c4fdea1de96a0b87b019d91588ef4c12cd2be8c349ffff001d22529b4a","01000000ceda9a8461ea222e1eab1122062308ec8a6b067f8dc33d4d6467f2520000000073ab33d21ec642a9bbdc1ed0eb76a6fd662dacd811b547c9ad37cd671993a426f2e9c349ffff001d30a73f5d","01000000b12ff4700f26114822b892ef4140c680756682f4658dc867211511b600000000c64d7b526896cebdc5554e942bd96d7105faec82f4afdf759733ff8bdda749a088eac349ffff001d5a736002","010000004386989b4b2cf728ca0fe129afe95df80e5248cebf401749b8ec0b4a00000000b1ca56a8654d2221f7b7e656916646fe1b665a51965da691064adaa22749d6a582edc349ffff001d3a31b948","0100000029dd14335c65846356f834e842c4974f472cd6daa37971f33e9b7305000000009a0ed8bc677e15a9ba172680c155637971845f12a6f80eccab43b378d268c75f78efc349ffff001d04ab30de","01000000698b4c54640cf4920b255ab3c00095b4120778a21f714e34c6c203a5000000000a0d8d931453d9d5f98a4f7d86b74684be549e7699a85ceb0e793999b009cbc663f1c349ffff001d2b05a701","01000000a326ec0f26a7175545d779f81d88bb3d11b9e4f6e2dfd1888e59e13c00000000df838bf5fbd064e612bbf7a543addce21624da456f9fcdfc8bcbb0908290e2aea2f2c349ffff001d37c5d516","01000000d8ac582ef2b1824026b71af6f7a7c8ecc8f0a7e774d215a4349b159100000000c72633c92a6986ce2ac2b8a0ed874a3288ebb63d2be1526bf789d785f69eb62d74f5c349ffff001d226fd90d","01000000740b88ccc19a7f09a74bccb24ae5dee460d5b32e637d8c2f52e172d000000000387e81e4fe9a5e0319deea6b71f77ec2df55242b7b5501211801ec530c1bff859efac349ffff001d2fbc8352","010000001068926d851371e427065b59eef831274a9851cfbde232b6d861707200000000b83a96ab3b3e2a5b8b15d2a5eb078af6aa539a852d08eef8ee099d49723afa612efcc349ffff001d39ce1b45","01000000b7aa6a6efcecbf64829eaa48fb79fe14c9c4eab34e966c617253b7920000000009e62a10fe268a2b910aa14245faf5ed39f9409db3a399e677a6f04899e44ead51ffc349ffff001d3a883e82","01000000e310153172ba6f4ee5718d1e2da397186a2f3bb605cb3733c3a18d8500000000c900ed945ef3329eb9ac8db86b215e648ab05f9731f4f7ef277b43a923770046ff04c449ffff001d30aa87d7","01000000740fd010443470eb7bbe612f5a2f0bdb22a63a34c0001b4eff0ce31d00000000e09cf75075ff67169a3c8283c72b6825806530cf89f23f4d0dfcef32082812439107c449ffff001dba1e250e","01000000624edef9e6167fd6b63cb86afa5608a786fa1dffc31eedc498f779ba0000000004b8897d6668d3ea41536b65a48e24a8f82e89a5ccc4c2a42233a99574a11384a309c449ffff001d238d827a","01000000830551bf4ab4057535e9b27b70a6a4903d5a5e46d6f0f10c426f5a8300000000127626946e9f20a8622acd5973e97f93bb9663f334f67abf81f22c0b3651bd64aa0ec449ffff001deb681515","01000000dd703f2abfa7719f3a86d25dac55ae5596ffdc62bc5353fc3fe1f7d20000000078c520517f12f23bbcf16b8d332e3cfcc7888a0f02d1bac095f67d27cb196d7fd90ec449ffff001d093244ac","01000000fdd54250702b4093b2de22819b802aa0a8a86e1d5f57930d8a6a3f3800000000d9d1d928de88f36315f410fda385e51da5225b31deffbf2130188025ed8918185212c449ffff001d25b63126","010000004c093524a7e36a03c9711365a515103c9dbe834ccb32d967d80aa199000000007dd5fe44f90c2b5432af0d03232edf19ff0a09b67430e8a94ab33a7f764ea29c8e14c449ffff001d30f1fda6","01000000680ce1ebb66f0598198a1ab2ee8d4fb8db5dced1e9a871dc1d94ec2f000000008b7dbd0d8c8b3e323034726ff9c43b1a41fdc59222ddb684698e9734f0637ec9c214c449ffff001dab8a9600","010000007f827ae053ec33a4eb322a2051090608c3ded75e9b2218526c600375000000000488b5024b5c6198ab8a142c971b352489f2f7b7288b2b12fccfa2e14df21cd07615c449ffff001db5a91903","010000002e8a517809a7ae8df3001b4053e3e253daa33a2df4e9ba8eb1f48966000000002164a40c2e2fad827a9adc2ff4f5b4f2fe89acb037f08c430dc1f8f998efd1161919c449ffff001d1d962846","01000000e38fc6599a5f71cca7e54fe7069f84ee35fd95dfe2c2b272d882d5ab000000004472fde937095ec8f809789f4f84fbf8cc8abb33af7bcf12690e53d870103548771bc449ffff001d2df157f6","010000007b57d65755d5e2ea122e5e41d0a949d2b9ad6318bad2cba63c56f162000000007254b480fb27d927c17abbec20bd3f95a411ca6e3ada9a0aa757ad9d11032bc92821c449ffff001d227b5ee4","01000000124f7af38282559b5e83670906d849c68d25023003d263b1dbf38a1a0000000055c452d7fce037192b7e87fcdce044fa69d19c9a81bbf321bb448c0b4bb1f3188b23c449ffff001dff934206","0100000094f3e8425212b454098c6ff14df2ef229cb7689234b2c7e2d1901d5e00000000601a1c2169ee6b02247c6834a70ab3c89757400e165c8102d15830550ca1c2a6e225c449ffff001d24c067da","01000000ecf15377947a872a57f38cca40107679b2ff8b4b32bc8d09b382973500000000ccdf8d0fe6a348a7fe9c5012e248954a7fd2e270dd2e3a31c9e91e87ff8a4c020928c449ffff001df587170c","010000006813efaa6d2e60a56c92be39ffa27d04ee681c7940f2e805308651f300000000e1cc143d47bc1b6463b0da90f10188a191f995ec08962a8797268532e06afd442a2ac449ffff001d2cd4536a","010000009f0cc51c19f9621f7a009b843f25dde4854738ec296cf8a4ddfdfeee00000000c9df9e3fafcec69c9df536570af8a179a0aed605215db99cbd6c7a1c394868fc6a2fc449ffff001d37247884","010000005a3f8c1ef3bfbc4a339b45b304389e7308e6ec219e280ac0a8d9561b000000004c28cf3e395dafc8dd0cc2233fda6b6cad5cca2ffd572b4f71ffd5b7e570988bfb30c449ffff001d1fb8c997","010000007421d0febba3c7f7301855d6ab40e03fbe42b91acf30fb7be5ed85f900000000bf8e4c7451bab349cdedc9fa1dedc57f15de8885d7bf8ba78a8760c3327fb4570034c449ffff001dca60cb06","010000007758559e195f2043967f88f76a2586386f973598380489acb28402600000000073fab4fa87d24e72044c3d178857bb5ecbf88fb5950f26477353ca67d6e55c8f0435c449ffff001d540b6803","01000000ea91c4e1cce4a6be90a3956d7688d450e18967942e3b4b2aad6155aa00000000e89c6fa42ba74255948e6b2c050c6eac56edeb93921b31ef20260c4aa0d7ee9e3235c449ffff001d000ddf26","010000004e9defdb88c38c797842084116f1207616b6f1c3f9984f32c32a2b310000000059c1cfe81c8b6f5dcc79ee9840df1a6180f281e3ceff87ddb4008342f59598c2c239c449ffff001d066b5632","01000000fcc76cf678ae8a4cb0ac71c410ad26efab531351cf6f75df53e4e105000000007595f7f86400bdb4e234888386ae2ff915c236218a08d4f27573280352f319b3013cc449ffff001df6ae9a0c","01000000075a2901f0b1b21f6130a2c0dc32ee8f9968438045217843ef53d55d00000000bcbe75dc0fb04d7b62c93584dae7368826a0fdfc675a8163ca2a0c083d6b86619f3dc449ffff001d22f04726","0100000003f11cb7041ecd0846de68ca5bd81f20b9009d4539d9b128066b9d5000000000f862e553ed4fcb13ce4aedaed01e44d3760400dedac692515b9eb0f92bb675e0ee41c449ffff001d04d31105","010000003ec99ea6381eb9fcf5652c8b580bcf81b7b2ab65256ffc874de955bc000000001b16522379eeb636ca5dd48479653f65714d03c46c426fe2567eca248dc04a8a9542c449ffff001d209143b9","01000000fed37dc6c13c27bffe75e236f8aa538454819797a97bbff953a5362100000000dabb123e3b1110c912f3b2896e72602c685dcf439d9d24622f5a5d9220337d032d46c449ffff001d16ecad42","0100000066ff0149b9dabeee76624f1028fd7c7d23434c8321712a59d568867b000000007093a4344e9341dbba4ac24c2211dad9b7bf2f181635f5208227a302e961d7d95f4ac449ffff001d48764816","0100000091299f81edbdf1d12153ef2be8cd536878bcc7f7aeba4821d3812f800000000048717445a860aa0307f68cd8cb40b3da9681a3d1c49badaf2b60290c98dc27c00e4bc449ffff001d0c194b01","0100000066771dc3353421476321d8910ccffaf5ff2e83863645edd411f2061b0000000086e6b0ea5f13656b6f4ede3dbdcad825bf8b20f5ce854af83f00dbf45a270157914bc449ffff001d08218c9f","01000000c6b6b6718cba392b04c97c58173bd541c2a80e25f2c965f3e3624c6b000000005c7159329eeef7540ab49d3eee7d8b6c220cb813ff89f3f690ce354a85ef23db834fc449ffff001d2f2f13b3","01000000558d9e2b9dcb2a9c25fd302ff07a3d2fd5259ca354222a612940869f00000000e09cbbc44dd7f1ae68adb3a4ff3a67074ce4aff62fd9fd2123d1618cc0f39ad06354c449ffff001d074dd0e4","01000000deb778d645219fbcb55ef92bd013acd08de8f92c961f1dfef93bc8e00000000064a912e542b7044509e0aef1adaaf1a07a46a633df41db9f19006dd1a3159e24cc58c449ffff001d1ae6eb99","010000000cf26bfd539664434cc3ec268cd1478ffac8834aeb91057e7064b03e0000000095416af5b993d24c7b97480526f0fc3b70b6e590e08376276e2771e7b8987c54a05ac449ffff001d29d351ca","0100000090a1c8a71618f9c5b2508563250b612d2a20670d95bf3a8f21ada66400000000cb850b7af27344ba3769d336b5d9adb3483f57888fce66b093e32a516df2ab67b05dc449ffff001d53ddbe03","0100000000f19b748f9b9a5adf83711f2890d9f57958e4957bd68e0b7f03760500000000fc5265957702ad35267c2f0e7422ea3bc5f885a693d4cc0e7d6080dca2924a991e5fc449ffff001d1e41b1b9","01000000661b705a546f459e3a3500c079acce52d7aee3e940b3b95cc7c845130000000073120c3ac2e13d9cdd61b278eda317d6a33f3806a0ffa878656d2e3fb22b6750ab61c449ffff001d21065c2d","010000001734b1bfd33b12cecae97d48ebb47ff6147681c42ca8b42252bda84c000000009442da5cc585e7b51556a94a6bbfd6e0115b27c49f1ccfd359767ab5b5598645a863c449ffff001d205be6da","01000000cf65213b67b50d201b3b175e2bf3f3869bfaf52a25b6cde5b1b6076b0000000066f111aa043c5fd26217f07541f7e5bef00ce9b33aff1508a89a1f7e55d748a8b365c449ffff001d9c4b9f04","01000000a3568c093e77cc38969b4ac1756eace1dc691f0750392ded44a0c07d00000000cdc22c8492e0ec175b8997192cf7a7aba81ba7cab77f2410097987f364656caffd67c449ffff001d25cb86ac","0100000083f123cd26d441db612310e36e89c3a903abd212ccd3f7315b1b86eb00000000585f0846b25e4435cfcf7b6fc50e5c83587e9222db999164d76778291f6e37b8e869c449ffff001d7cb69302","01000000223b3ea8938020b7b6d44acad8a45637519b04953c7b5b8b2e3a52a80000000032f71054c884079f838091b2fea170c4b61bb3223e987ec5a84fe9de88e3c137016bc449ffff001d3c5a8804","010000001cf996a535b0d8136475dd9913944873ef56d2944b9f198eb10e255c00000000aef1905cfe64257cbb2fb0cb625af9e026bff8c0b21bad1eb1590c225aa24e1d4c6bc449ffff001d316ea46a","01000000c1da8911d8fd49b75e4cfca4b3bb9ac87737f2ce21ee22e7ae38871d00000000520edb15593d42622b17f7523aefa06de0209ea3e5a15b0c8c9bc74b1870b319c56ec449ffff001d1b20d541","0100000049594b2941ac3053d55e96035bb42c89081999a4e84ad1393a3567ed00000000f97471d389538f4b0f2ec28933c90dd89fd1e58befe85979512a6ba7ecff1e8d4e74c449ffff001d00616de3","01000000a70c6f8ef9c1b5df9bfe18e708c987388605f92baf70eaf084d2516a000000001d6938acf148cbbfb021959fb574de395397440a971e82923d62037eda47ea53b075c449ffff001d3336f500","01000000f7bb2dfbff0beb2e7ddd06fbf4f6e05c97d87b171c7121051e0b4186000000008efcc74f0aa27f0115054ac42cb5c2610b0fa89b7965a2ba0192deb8f50d2cda63a2c449ffff001dc5d1bddf","01000000f2c60ae5a14dca3073474c7a1678de06b2bdccad8f3cd8f1bfd54ed10000000019f3762aadca358ab531cc88afef5d302d4a0d90b4789bedb2357b291a17bff974a6c449ffff001db3e06e10","010000005652d1f8c3295863c9ff6d8135e57ca904dd5b2bbb82e0e6218e1d5200000000ab5f618da8d7f7d3ab087f1cd31b497d152f6da4f8147fddff8ad803ae91d0e193aac449ffff001d0c29f915","010000000caeba595af0188b7155f17a0698e94ce951e3b4e6e08a6370609e20000000001722b0e652fe651f1963f6d3513f354f0e6faa30c43da63b4f977027f2f805d6cab2c449ffff001d503db817","0100000005a15da1018fb7085c0494cf80a7f6c01c5bfc48daedcb9ba4e04ded000000007b2b892cb027084c58a07f1ee4933eb46d9630b31f1398190aaff240b373e93262b5c449ffff001d3f7e210a","0100000029b4724c544d624d93ddaaedbb53df3aae5a618ff70b68f9618955da000000008771cd1a794aea37b7f98859adef278d02a88bf49d3d4b27e9b5a61566d5cc1feac8c449ffff001db1cb5256","0100000077c56ca94c7fab140bd4479807526796cdf3175d295f74bea50def79000000000251da722c5f52282293c547c56b65073b7c0786fd7a1e0e323dfd5a89106b50e8cbc449ffff001d3d546b02","01000000b413a9e6bec91364e1f993ed9ce85f3a54a84d3933dfc09ddf04f3240000000076495f1862e170c8c6ccb3cfe5b53df743ad67d55382a3cb9a0b8bc75ee105225eccc449ffff001d16140102","0100000022c791089ba6743a53f70f861ad16be8b484298dd5a4159ecc286b3600000000ef0c46f5bb15dae9539e9976d6de39b86f3da0e3a93c5131cdb4bca89a997381efd6c449ffff001d5db67107","01000000219bfa52960aee92b1e9bbf7a63d99473f931be68fff8fd14f59d71500000000b838d94097aba7a3548fcafc853fbe9e0c341e1180740f0870899326c29a25e2f3dec449ffff001d825bbb21","01000000937fe3ff929a4d2c7f20c68668bdc8bb9d1f2ed5826a8f37dca01c980000000069fd61546d0d649dae82a586dc275484808dc53290d6aa30a57a7eb232827736e5e1c449ffff001d002a1010","01000000279156409f31dd692b695bb40a58b5b9d433623301e8f581a3a601ff00000000c70858ced4bfbe1f231d2563f4353050bbf6b66e41a179b6bfaa17525d6e478daee4c449ffff001d6e00b206","010000000fa68efbd55566fd92e055c8455d565dfa19c4aba836a76cbfdcdce1000000001d93992c3d3c934c9e783010db806434dcb142af9b00fdf02eb65d5aecbf46e1c3fdc449ffff001db37f666d","010000000143cde5dbbf79db28cc65beb40c4801787415ff8e3bdb69e7f15ce100000000192db1cdd54b8e7a420dd95e9aa4d1290aa0d97bb9c765a7e633148d5e1c733a27fec449ffff001da8707900","01000000f2369b1e37d501e7b198561a15da1051d8ebe68f1af038deb3d5c7090000000075177b83a9694551980c80771ba09e61342f0270e67796bb80fcd060176df8ccdffec449ffff001d3eea5403","01000000038753657c24bd218923722390071884c42c516bb67a7b8c9eef963400000000cfb6430dadd2f871c65cb232d6b6b9bfad109c8bd96d77fb34c8ab7a98dd75c0ec27c549ffff001d3ebc98cd","010000005b40af80b3dc75cad7692bbc97383e609810d718857de3ebf098091d000000006395c73810691fea87a954e651f31ed8d4cd93a68e92353698904b5a37e4e8871340c549ffff001db5d8955f","01000000efd85e5eac38229936b1d8f254e5686e45d32a7328f99a81bcabec2f00000000ddaba09ccbe24a1c6c2266245d94a8db99180a75715e0e289a9579f2f5aacf5fb042c549ffff001dfbd4870e","01000000077d148449bb876173962466156d1e607673f76d1ab238ea2d787eda00000000b725a1088ff538af775b45f8274488d591ee5505258d0725c21d085041756f613656c549ffff001d377edd34","01000000d5bc8cb936b33c87b8b70bfd7cc245b90689a582050f1b9d7ea3265d00000000ce7206508d9038caec2dca2f988eb9cad5b9e9f83e59e3eb8668f9fd4a4f96c30b5ac549ffff001de14d930a","0100000047cb88c7b5571507257bc1da1c114323638c1bd15bb2b29eba2fe0ac00000000e097d2aeb4aa6e07cab5ef565eee54bef8502e5d6566d231b117569137e0699f5b8cc549ffff001d639296bc","01000000a45c7e641f5247854eda681a06cefc9af1e1c52250736a593c43ac81000000005b7da57986143f558c3dde874db853bc3f480d7a528e9309488a17488113f2be0390c549ffff001d2ceb6c8e","01000000837e4d0effa5bf36d7b374c110ca27253b2ebc441e7db1e69983d977000000001eda170ee91bc68928712d866387169154b8f10a7afff660212953cbe083881f5395c549ffff001d00b48fa9","01000000a9b5b15b1b7d7ed8feefc20192912e278d21d3207dd36852d802f61e00000000131bf4d4c5358cdfd33eece7cf8d2f480d1f56c20403f1fbf9d314609db2fb38da9ac549ffff001d316b840f","01000000b133fcd99218daab1477d907ad39df1783fc902191da3ab3fa5ecfc500000000e28b2e14e8aa0d4396979c36887ac5bda0e4fe16a3e971c1e6ff249cdf45223dc99bc549ffff001d12099904","010000001d4a03011ffa7f588057f1f4c2e42d2cd4e3bb4502957860059afc0e00000000cafc7ff6417ca8d373ca8def2a1a64e028388496fddd0c3ce522fd35aa32ca1e189ec549ffff001d4716d20b","0100000019f24b42b400f7a64ab7567476fff3e50a373c0677873c7e874ba54c00000000b34ec81ee88f35c7211919e464f210c0134cbbd818b1338f5fdf471959bb4bf360a0c549ffff001d02fd78b7","01000000eae6f11f442dfc8ba644022d2a9a73ce92b9e465e372bf1b17af29ae0000000014206b73e896eca2484ae23db527959cc6b8b25e3417c6360b615fc8fc87394022a3c549ffff001d58f7df0b","0100000020f03996ec3a3affabbb6b6cf8db4157606bdf8577c2203bad3938300000000069c80c62a30a8140026ba5407bdbf9a22c324432d4af2f5c6269d5d25da08b407fa5c549ffff001d2866f5d7","010000007ce83c0baa3ca99774e2cc1709a93ed28b902b2be0e0becccf4c8487000000003fbad8b583807adf563f4413e0edfb73a541768641ca8eff90e64be2b788a1b27ba5c549ffff001db8e91e00","0100000053e2399995c2a229e68dc24d870f9fc105ba7aeb223cb2b4ba699a7600000000f5909fa74c24bc7b0694995f0e24661e5d75c79e2e6b6c9b63700626a141864cfda9c549ffff001d23098774","01000000df7205cb355b467a62d60a48ebb1c32a03445423716a83b08cca26c8000000005ac2da86202556c49d231cd63cf6aee6ac44a9ac79bcaee682a359751e81482e4bacc549ffff001d03a9d4a8","010000009bc6ee228ac506ca6215c21da5bfb2f73247f2bf8a34a8c1805a457800000000b8d1d57fe37d854a047d327c1f7aa964a46818d0f233f730b0a427339a3e3e4f46aec549ffff001d2c318709","0100000079f984ad5cdfbd230f3f994ddbfa256146ca5ad86379a6e0fd74e1eb0000000004689d3c6187b5840f850e51f4c5fc5799b13cc6c3d0f60553920b4353931eaa6caec549ffff001d32fda66d","01000000f3f8fdb2e1af29b16b31b983996cf357e19964caae6ced38d87a828f00000000c4056d5a4f2fe65fcfc71b1f700dcc81a9ad6f29fc8b463a776f05d053a767a41fafc549ffff001d65778a01","01000000223bb468501b981c53b81f2940afee7c91325819340e07842a1204b600000000890bd1a803578d5332d23acf689041101b8544f65cd11b9b3a5b3a82cb03a9d4eab2c549ffff001d1f0fc93e","01000000602494949bc82e89e5ef8d93cb5646437bb436f9900c624d8954ac9500000000a866474094a2f27fa52023fa5b639810584808060a627a76bfe14554f7150dede4b8c549ffff001d18e159ad","010000009997764c7440cdd824de9872541f49b87ab4e9cc45af545890eb0feb000000006b0ecdef1912214cb751ee9a853707965fe3004a8bff673bf2e5b0cc7584daabddbdc549ffff001d1eebe0c2","0100000047c4b858f13f4b13c3b1019eb8ee7d2ef88bf0e5894c0052053d31a500000000b6e97057a92603f4348e2749595c7d81fcf4de9cb6bce10e5d87fb4506192a1f17c1c549ffff001d1c97b47f","01000000ce5ac6229f89295489796a5649f790fb478d60e6cfd05369a57099990000000050efc621220c74935a77eb562985ca9502969e7b111e3406a9d911386bdd84c3f8c5c549ffff001d312da649","0100000062036c4e7d157ad4858dd129838706952dbb11421a36b04b7921603a0000000003bf96ed900ee57c054a1d6ce491e6514fbbd1ef9910ab991471634d2761664361c6c549ffff001dcc2b6703","01000000d610e7af176c02b70362fb8eca575881f0ff4b10bb756b1199e8c657000000002203ecf1a4283bc58928178c6a271bfe57d475d424c53ce77327ffe992848ae00ac9c549ffff001d0d94470a","010000003b7f1bfab2ddf651ce4a64d5ab2dfc4842c210e9df21e405e9f6db0b000000000327f1d0e6514405b0f66bc591d82b78a78236c8ba8bdd34b06fd522f0a721dcbfcbc549ffff001d00c30241","01000000ce0685823f00c8b3e56fec98064ff101cf13140c57b2e6c5bb1df74c0000000030fcae2338869f49a5c89a6f689c728b5200391064e6f20d3fd3e55f07093d2261cdc549ffff001d243fbbfc","01000000644bf5c9bb7b47f204a6d062f9b755d67af3ddcbb3f113ece0242d680000000049e2763ad82abad45298702570d4dc104d60ace5ce90d24a7cafebf676d587f5c1cec549ffff001ddc357d06","0100000070979819b366b9f166666601cad50722566a14bac89562de215bf78d00000000e54e3daca41343a7da5e0feef0fd94ecc917d904bad0201bc4d2ee4c12abaaeafcd1c549ffff001dd7b23c0d","01000000687ec3e05ccfeb7df95ad9bbbe437191953f605e4c37a6d16f209a5b000000009fa378628c967d782984ffa6a11da75ef87ce90de881d6f12c815e1e4d117c5ce3d2c549ffff001d147c787f","01000000441fdeec71ac89d1084a9c58e105c077852cfcfe215d95002015d8ba0000000043150f8bc9c1aa95dac66a23dea16d9689cd8898fed08d9a501555f37195c20c5fd5c549ffff001d386d3940","01000000fa3e95c815d0bf60602407b2f12d05c4198a4220e019dafc4aa78bd600000000fce61665f3471686de597dafb8d1af3b8f7b89074900541c8bbdf30755b8de507cd9c549ffff001d0622cddd","010000009abbd55077a0e2a32d30254c8662531ce0e62d7bc6b719e620cdeb9600000000727fc0a60bb4bcda57cc0a1776567049e25623883f6c4c299d74d7f35e4950f618dfc549ffff001d013ddf93","01000000c0725903bc6e9199924b5f78d8dc8e6fb9cd9c4c3ccb93ee89fdecf200000000639da67f3e676e6b22012cac1680ec4bcf71ec389a8962e2878da0781d315e07b2e0c549ffff001d38b679c4","010000005d6257009568f5539eebfe7309e02933099fb5628191371c77e59c7d00000000f0c951c2f47839b5faceb75fa93b274b2979ce5801b7edebe000d3ef277ada5544e6c549ffff001d2f3df5d5","01000000c6e34deee2fdcbb8ce87fae737fe24f4270b60c79fd040990882382c000000007b2444da416dadded754431ed1edb2220719678dea59fbf5a344b78d57718e4d1de9c549ffff001d14bc88e5","01000000bc7a2af785c6f1f301f87d16eec61a108f3aa64d582b0d8f63aa871300000000ea5bbc248925f6d78a35c4844102b71a5aba0ea7646db97ecce6336476f7838cebeac549ffff001d1dcc7217","01000000dd1ba483a4084116a89f50cbddff28a1b28cd47e428e2b68be8897eb00000000bf056fc1038ceebf01b468be48624ce978e7e80e885d855a8570bab5e8720e2e6cefc549ffff001d19ecd906","01000000a7e44fa62490cba819a3284309d5ef546eddf3f37ae2c2c780dbbc6e0000000055f33bbc4a14121254a1f5320f72f68b1acf2319da9c13d1822b4de36c3b7adb1cf3c549ffff001d179a6173","01000000c87f597ef5b51505d01be28e439f7ad8dd335380f164c4c967d40f4d00000000150d96372e65733a8d5327acb9a3bd26dd8279df265f27a59f5ec83536c5c205d6f7c549ffff001d3095cb8e","01000000c5d5adcef83b3b7e968ceb5b40e7bdba9b30b8e1d55be588546bbdea00000000f1761739bca991620eea849cbed426e4a68f232725ee87f2da90a8dafd97d93308fbc549ffff001d0536694f","0100000033026a2b60a2e47cd388de83f217140709ac84c3d61e9083672e3d16000000006201dc98fcf52766bde0c7437c04ebec691228292b773c9df15c60d95f4ec7c552fec549ffff001d38e00798","01000000cc147c7175bb7b14f7b8aaa89d533b6fffabfd2e0e620fd4f400fddf000000008932a6ab8251ee2549fc5e547237200c8359024adc8221a9aa88118d65149fdd9f03c649ffff001d1bb63e2d","0100000027953d6043aaefe182daa6656d406d1ce7260b406cc9992ec54972ff000000000573351b018bef67b1ccb107a0deb1468e2258819d17499dbc6a7b29317c0d376505c649ffff001d153c6af3","01000000498ef5aa9e0f84d34fc4dfd6f3a840e40080d57902149ed8c022efcd0000000076e6a6ccdaa758efffd2e1284f8847239d345b612a435acaebb5d5d54a14aac1e506c649ffff001d2ea1de01","010000003740a9ecb1dc001324c41c74d29b34003e07f54b763de145da50f41f00000000b6a185307d4dd4231338be0044e8119122acf5be085f153b4e979eb5e0fa02c8a607c649ffff001d061fbe6d","01000000552e79af0dd710d496d0671334ee1fbb32e714bfd159051fdd2bde5500000000ca94c3767b74936bdc116f17d1bd56f0de9ba92f2d1437426508ae97e38cb0e13a0ac649ffff001de5a6600b","0100000086c5f4e1cee9584bcdf5479ab8dd909951cb14800fe42c48cdb42c5200000000102e2456f44a5d30130f30bdbe8989fb624d56a011abb90cdd2320bed1dfeb767b0dc649ffff001d1b9d70b2","01000000f180c46fb6a277477c9e73262776cc175f1157b03592c41d6b707c4200000000b91ccb352855dd40b13b7cf6782d669226096d87a5a420de0093f8351ed33c6c5c0fc649ffff001d4b73a702","010000006330f32dbb6c60f9887466f14c631f84f28d143d76debb0ffbed058f000000007bff0eba689d9258116568c8c0dc12f9e368fce4d8e8ba1426cc7616ec92fefd8812c649ffff001d13ef74b3","01000000636c78e3f08ffd061c3bf49d69803198767ad58d38e1acafeee59810000000006674eeb36578913ef9f06a0e195729c9fcf2da59d3d5d93ebeca1648565d28c9e614c649ffff001d2b300f30","01000000deaf426fa6204b5a160498c13e9c884ca0deeeebd4d83af5bbe6ba8c00000000f97c7f54a075d3bc0af0ef20a4eff5e1443705aed2ca9672b27600819902044cc714c649ffff001dc2074d00","01000000f514459ba0b39cc00b6974e7784b878b82f99cb877d262935d25f7fe00000000598851dddb7bfc728ae36147d4c6a1d2843df2107e3c350eee43bc6892fa742fe717c649ffff001d2578263d","01000000c086ef3011e0bfbd627dce127cfe7297988ac8266793a0d4e0e3440f0000000044d3d4f9bb8d088eb312be2a3c80f7df91b98d2d4dade2cc7a38c148ae03277d031bc649ffff001d341e288a","0100000097e1cd203d548b762cf0a41c115fdb9b06bc09f0b0127d6c5ea4c10b0000000040600e3f9fc8145556b0c0fd3411412a3b277d07a6422939d8704106e37b1424b51dc649ffff001dc8d4e60b","0100000094bba456e8ab9f7870b0081a0af8cf8a1023707b499ebf7b35436133000000009b24d528be4415e7822afdad727b023ffff16cd88e023efde5ff072cba0d254c661ec649ffff001d050cfb14","010000002d3e626de526f3e0008dc9e2ef24fc6cce25f3eef9135bc155faca9300000000e3b837a67a24882526d1181dcabecab963333796d62eee551290ccffe47c50852d22c649ffff001d2a409829","01000000249ad98302fc4cf26508a1d48ff64d69e75919195ca2da94a65b27a500000000c7319b9f10a4a519ad596848ad12dfbc2c6d8d165967084e1d5b6f9a420d1e1b3423c649ffff001df5a8fe04","010000008c0aa9da54aaa74e808cf285d0d9af52c2c4531682916cd16c454b6b0000000067d8c21296ed16e964dc43b0b57c8770ead5e95130da5ae37aa28a77a62c717f1424c649ffff001d05882122","01000000f739ec217280b2f016acc229c2a0a651fd8deccda120b8f65354fc70000000003f43dc406908caaad30804d9ceac0bc1862873fd1e12e67245f5f3f55ea415b07827c649ffff001d267d37fb","010000008fb8bd26f20c1fd8abd3db05268496802e61aa4eb20526530b6446f100000000c21de4d4a48a3e5c21b8c1c740ec5fb5ed22205c816e8cdc9722c8656f8af7266d2bc649ffff001d1366e110","01000000486a8cacd320c494c0f48121314242fddb8f4ddab6819b276abc73d9000000004b3987ab7ef6e2bcc88d6e8d5d4694273cf098e443e6af0af30caa6d28408ce4a82bc649ffff001d30750423","010000009004a91bd265f32ac7f2aa54da6c92bbd41e00e3f2bbe276df6b66e900000000b13ea82a2a60fddf211727e410322d3870e3f4eda9461bde286e9e68723b665a502cc649ffff001d28d3c203","01000000de84282d2ed0815acba206403fdb2d74d635e3cfb7d523e20be6a0ca00000000993b33e07cf1a11bd574642d468bc7876eda8e2351db76bb21e6ba1e745f04f52a2dc649ffff001d7481ca04","010000001d81a2ec4c316c51790cc861c7cb34b737744fd9670aa1f39786b56000000000b1513dfecaf26db7b14b883c4d99be0ec8f4adcd04642c7f0aadb37395aa7b6ba72ec649ffff001df8828c01","010000001edf46e5e16ab2b821a084dd1115f3d0d7cae6f23258de8b8977612d00000000fa4e7248aa356f91f197668e9c8d7ce145e4552777d88942ab8052b1d045231f082fc649ffff001d280169e6","010000007486e2a6cdb8d2cb2c43fe14844546623e12983ec6c87638fdeb9b2200000000ce715949d731896bf092bb54e7241850ab3aea70ac925b16eaee81899839e28e1835c649ffff001d3974abeb","0100000070760c60ab9bfd7907e7efb66f8dbd011f29e922a2cd58a7e344652700000000653db2a6e4c2cece1afe26beb02b001af496140f37bac77c1407617cba40ebc51938c649ffff001d5d10b510","01000000357c3901d25e71b517d474463427287f44c3803e8580e7395e7f054d000000009e1e37651217c74d9e7adbe62f7a2fdd4d83844090a282a1aaaa5ef9666080ada839c649ffff001d266e471b","010000000e9b6641adbc78200856a88d241e5f89ac3fd2f814d99137b869d6f4000000004e7736db3ac39c6ced99cc0e9317758fb1d040d5a82d6ce1916a93d9605c361c753dc649ffff001d0d214414","01000000ddf029f09f56cb2c4d03fa6d4230a95c86177df948f5b101c0429fa90000000046a9659a530267a14f8e0759e4f4abee2c5f97b66200d300a8123d1cf8b5f04af43dc649ffff001d17cabe63","01000000ae8b3e9cafd524443bfc913e5e0cbdbf11567b716ca270e080934a8100000000d427f314279b0a4debcc113e603e7fce5f1aad93e31a1d9361d9f7c0e7d8573f3142c649ffff001d339e4812","0100000071e094558919dd01f3fd4c8a9d49631452c6c8b38207d5620cb455cd00000000cdff7e37edf29a5d88cfefbc50c5dbe5eb65e372291d69a80ca4d64cf6dbdecf1543c649ffff001d38f59a87","01000000b3d17fded4aeec629847527146349e710693d75e49f995e36cbcf21a000000000968263eb49278cc8f8d4d48b97781e16e18258b51f84aba8f58d45e2f1b2cf05646c649ffff001d1bad160e","010000007799753aa8c8fdff5039fbd508c8e9d332f02f20a072ef8ff3d9511700000000353e219599b61539812294d205d4b880d7c5290e58c95fe233fed2960b39498e3848c649ffff001d2c1e13bc","01000000ecaeda08673916aafa5f91d5c85871ac2b5646b0a4549eee5cf1b3050000000047e31f00de5d092918cb15148caf649de3c01a9f7ef9c6de40d9e801065b3573144ac649ffff001d282e9f2d","010000006998153fef03d3bf727d4cc459dfe2774d925c50221508b7aae0693a00000000e3d2843edd0831c851caeafdbeaf536d3765f2923d80b27b17c695ff38c161357d4fc649ffff001d29f1e253","0100000072988f46b8c3616b966547d8013f052883cdfca3e882541a5f5fcb26000000000bb6df378bb007eb8ee2e4801d1146a0d4d838c6f3ea18a17ef57ae71de1d32fa24fc649ffff001d6ecf2702","010000009921defb52c28bb04f2a4e4bd6208a87120421df1ad1a9c47c1548870000000024e971b821b9253712af06d23c6f83c3a32856ff6f0a4117a50c1e41921121988d53c649ffff001d1e71ae57","01000000a12268530138b577f2e267c13fd032b858a9dfe0bb61dcd1b1c78a4b00000000990dedd35403fe76f0ef7d923a2dd81c087a3e99cd981dd26d57a391b411e0a7fd57c649ffff001d2b78e0d6","010000000a7a478a62483b6679f52eed3e414d6d8a8892b08d8877f2274c1703000000001b9ecd09ee23223591d59b662091e4f74e2150e04d5c3cbf1fea7cbbe44a12217958c649ffff001d76eacc02","01000000e41a652ed676274a9f8caa55a6996706dcc420a922a1f0fccf4198c7000000009ed288c35560dbea102177d1abfe5b233b1600a963632d22e0260425777413a7cc59c649ffff001d30ccca39","010000006e7ec2f4e432dbd04707dbce054d218afae350a4156077e1d1a0d5560000000074bf549bd581f0bf27ac962de3dff0914f93dc1bcd150a2a03daaaaef73d0660b65cc649ffff001d3640478b","010000008fefa85e90c1f09fecd4b08d4878aceb28a4d4e1ccdb3c06e76e9287000000009b4520c189e63c2ee2a3922b6db36700dbaeb73e01900e5b612f25bea2bd2f88445ec649ffff001d340a9a43","01000000c02a8ddb3225a6498078190767ecd117788af081ec41554161980fa300000000a14bebd9c14d571a3760cb480647f74a056023a8a81a1e5074f44205c1d278ed4d61c649ffff001d1677f0e7","010000005a6d909639eea97327fade84c98980d556610d3725e8db7ac28846e000000000e8933d7412de832393cb4f26753039e40d8dc6874d86c5a44f6ab73c1a5b856dd061c649ffff001dbeb12c02","01000000c185f3d1b8026638286f3119a34f2dff90f7d42ce45914b802bbd18500000000f13f9683ece22f32647cfc01a63fd3dd50f9bf54de1a56ada5ee944802343abdba64c649ffff001d2523c782","01000000674624ca7211d08249912f6beff4ac384663632610445fc74b019b9100000000bd38d9b99908438b50190bf040860ae58cd1866c033e2803328365e49676ca08da67c649ffff001d0f6a6c01","0100000010574316f755b523d51cff5ecc4744c35f680f8d91f73526a66b25f200000000b5df4bedc738082711c3e07c7d6e4271e971d3c8f260ee3819395bc970aee5ff0869c649ffff001d36d27cf8","0100000021cff392e4d37a561db0e39e566f3f8155922c5b255b5d5dd3f5a72700000000c6b446e2e1e4fe9deca3c0a69e7b6e6126405ca97d07257a9b71af24fbf99dceea6ac649ffff001db5842b08","0100000061ac1e144038c96061fc0f49b5776f599c5c63a4638b06feb5cb306c00000000909f4767571f37179927bb9e8b5a878beaaea29da6cb1ca28046bcfa4ad56dbd7b6ec649ffff001d3a82d6cf","010000002e5eca46ed5693c2cc307c8515cb1d13dc836bd7d7768118906e24a30000000070e174b31116112e53952862e78fbef6dcf7ee16ef913dfced91ee56501c3cefda73c649ffff001d316232e5","01000000c2db3f2d86245a471ae6694beeaa33ce72f2f84582fcae6008dfc31700000000f808dcf4170e02a531aa8fe198636ea66fa2eded7b8cf33c639af6b726fda891ed77c649ffff001d2788a335","010000005c41d8d1c6dee8545294922690225ef1ad494ba3c6eabbc0ca6761d90000000048c4c28b0c8d3654a7a5bbeec3fd11c3470c5afee7c7cd5a38810570bcc6bf23457bc649ffff001d25fb6a33","01000000635f5818d258ad5ec340bb6fa88e14e1da1c7bec4e7fa5c14b1260fa0000000088b236440bec3f8b7a3d1e7ad17410ed641f0d6f009e1c9c636cac3f7cd1735b3480c649ffff001d03ee06ed","01000000f853bb1461a695a33f5bec5f7b111040c8980cbaa01124e199a95e390000000073e38f8739589b8a87e8fbcce08ef864a66262e347937da0acf3ecd43fc0b0524484c649ffff001da7059a15","01000000c3d890d807b6d20fc6c179d14480feb9de033069adb27a845c7fa6ce00000000755256a119405b113965c45e22613de25d32e0097a814cab6e240ad5540c88da1685c649ffff001d05c39a7e","0100000089fb218584a3185eea1be0a43ce9e9bd89a50313fd27ce829d4ba48b0000000066e56dc2c510ac2964a166cef587ed031f30fc8734ccc056b2d12c51a2c8a11a328bc649ffff001d06bad515","01000000bae30e5381d477560299eb7f28c56e730510833447888b271b1a8afd000000005f3d0876f89fc0b94b52345565445e469aa9eb101a673498b18eed821c4f065b638dc649ffff001d43f7120a","0100000070428b6c1a5478969167119accf142f3e5b2a3a60cd26ffe6ede49ec000000005a31829a92ff0fb92cffdd1b8751e9088f184bf652b5192ed14a99432badb2883291c649ffff001d1fff6d0e","01000000c062584ce6cb776745f4c31c9609dd1bb202d76c9f1574bdaa3ca51400000000799e4143b7f03f107250e9996ca2b766e9ed7f8d6cbd57f1c9606a2e8748d46a2696c649ffff001de1b70708","01000000dfa6beaabe3497b06354d33925df4ac0d08644a0a272194558ee4d24000000001ed7f7701ba7ceb40f1a2dbb6b39fcb7f45f785f74af60f7cea5424fbbb266723697c649ffff001d1afd844b","0100000053b61435bacfa8cc8772d98ceaffe586d2698cd7c6d267160e0469200000000069750037c75489757edc997d9b91ac74e910eba3008d68c631671a9c27ee0dce789bc649ffff001d22219283","01000000dc51d8c478529efc536cfc1d75dde4659139ab9bfb777be839e77e100000000095a83eb660be23cc506e2d4b766e29b199a50ba73fc22670d3d736cf48739403f79fc649ffff001d374d1d82","01000000bfb0b7f2314750f67c26f3d3676b5a847abe57e487d21455433cce6d00000000432d2ddf18b04b55184bb5877e43a58687cfe284ea0fa8ca0a4fbb025171ffac02a3c649ffff001d1af95c0d","01000000c51c973432239afef8d4aa7224bdb84d96fc337fffd8cfb9fda15f1400000000f864bc769a008eecef7614e173ca119897adab3da3d7fa6cbfb224d59614baab2fa6c649ffff001d9295ee0d","0100000080d73f189298f850f1f66d81de9efdd3f62994ef7cafaeceb34d8ec000000000a86b3e516e58756962d9e2e08894680edc337fe6972e888a9bcd157593a6a22e10a7c649ffff001d1c35d932","0100000063d930249f7556d5018b4ae4fe820630791aecb8bc331efdc40119f600000000e9d675ad2df4b999ccccd576a2952559b00a15026eb5ecd905d32a976d376ec0cba9c649ffff001d35f4e966","01000000fbf44b88548c1d9c028ec9b96a22d3e5d5c3fd734544bbec3b8cdb2700000000d83a1eae3c59b4789b97784db612750605f2cf4a09def7a2bfe49c6a8a78deeb57adc649ffff001d2e5b72b1","01000000c3b87e904f6b057706444d6f8d46acc3ab3366284d66315df5750a2a0000000044579b4922b33fbf0109d1f5048075b8dc3928cffd563b223a69ed14182f77883fb3c649ffff001d2f26fcbe","010000008dd1f4bf792a094ffd1381b1236ef3b5ef06d00a2eee48a426c9047b00000000da93a0217c0a53a69172dbf19480cea8f809d4e26a64a8f5f101eb4213e7f15338b3c649ffff001d6f00bb00","010000006a65b17d61ff935c4e3a83826bde20afc7c8db0e3311862d2daad77000000000b0bdf844b5f1af7a4334d20107292b166a029c3e9e5bd25e1554c346578b4e3f9bb3c649ffff001dc2a3fc01","01000000a5b304176592beddf82e91044064a21f178fdda80057cda6c2fb63d100000000ba2d758ab479805a25f61b2b239236f3f90294186743a1c012242a5500e4cf56dab4c649ffff001d1e44729c","0100000007bfaa803dab1b901e1deeb015170318824936d4ca9bc96879d34dcc000000002ea216aaf3624a0c3a4d7733dfe73ee69519c7e7868e5db880f9959a2ee61de94fb7c649ffff001d1edaae0d","01000000d465cc72c7d5e0e0596c118fc484393c442c4f065b9a39a49e5e035600000000fe73d5fad8676e60fe8aebef2940883a3c65c466c267103d3d03bee73fbfeef3bbb7c649ffff001d377d360a","010000004610b3be2c318ef414462e5bdf17d0257679a18113cba3e1a0d9e241000000008da79c358b483580641b53872a85476fa214bd5bedf10cf8f85a81e9db11bad695b9c649ffff001d1d411efc","0100000019800ac3807621c97c87f26a76483f86e986842366a1d5a9da5a5eb5000000004a463ad437d45b62df83b4622823f70086e8115417235afbf6be15243d5b003b52bdc649ffff001d37297969","01000000964444a877246f6a55654eb9709e5c04e22ffda1fd342c414d2605ca000000007233518212017a5b004ee47dcd01b2ffe33feba3b58a349f78681ff31d02f7c819c1c649ffff001d15a8b3d9","01000000f743b63919519cba1ddfc4270a403fe416cc4867b5e6c81e8514a54500000000d6886acf1869f10098cf3e93eeaa2cabcbde66a08cde45ae96b0f7a680a949d067c3c649ffff001d2e67f3c9","0100000043b42cd526820496a311fc599fd80e4801e8422100ece2519f5d62a900000000c84aca1f840f2a021de58935aac81d71100c8341cb42735e7e2ffdc96e3002338ac5c649ffff001d20178429","01000000c5f05c8fdf3e3370e9476c552060c6807fcd5616fb174dd833fbe3b500000000cef6876e214f11504f9f6e8a7f6c69feb2a2e308e945ee370ffabb17388c15446bc8c649ffff001d285224ce","01000000e37d6e52855d7b72ecd6ea7df2eaf2d9921cc6a5a396199e86512e0200000000615db8a715da18560ee6b1e39a8dd9a3a6a5171f00db91813c150a6b03d724c62fcec649ffff001d26909333","010000008f828922b66a88692e4229cd9779a285487fbbb3da61d4c4afb5c80e000000006d3d85048e1ad468948651f5d418d325f971be0ff41b19a50480ece7b04293bb79d2c649ffff001d0684a5a7","010000007e501bc08929b2b9101268ad94825b2a06118a06e3e2321ff9ed5513000000008240421eec9919470905a8268c03672358291c60a5d86fc236e12ac7ea61dec11ed6c649ffff001d15a3f508","0100000055b79cd8cc36f137a7f907e083c420fa8d8a3047f23ca5582ba017ba0000000080fe4a8a0764ff747509172d0f8f14e3a5540f1432926c4c786d1aba0ffbeb8a90d8c649ffff001d05b0b710","01000000bd81705550e5193389565b9186c04594ef6e2296748ae5030a5ce105000000002326863226510dc057b91c138fad7cd553da90cc4c0d0ce200e2280c79f02ac89fdec649ffff001d1afae1d5","010000001308daffa65eb8ece7d1744a5926e04991623e719efc6876792f410100000000d79b8608380ae5209e22ac9cbd76d16c37dff12063f14f3d4dedb2de08fd651452e4c649ffff001d02fa14f9","01000000416f45da37a2eb66ef10175ed346e09ae787be1b0fedbd8f6596284e0000000004962baa7fdd54c0980029a820452d12ad5083a41e6a5361c4c5a855d1090769abe6c649ffff001d30b35efe","01000000a040062ca016d371ecf17d74af459ad720745fbfdbec9f30d6ffde7900000000f91f3a80c76011467c82da334774a70a4bd99d108ee0a509fe3a519c03533eec93e7c649ffff001ddf00bc03","01000000f7b07c440894df2937a2f68735fb23fe2202076730feed038587ad0700000000265390142a0d300e731da12f1e0e04be3a6aa2981a8eae54eb0659ccc1cfeeb971e7c649ffff001dbee5da00","010000006bf86c14b8646eb81fdf945c43ad6a660bbdb88b9d2f9e01331f624000000000f7c33e73b4e08429813688fafeee6a4d4afd201370d7a11c484be8e7d176bea87fe7c649ffff001d32624200","01000000121ff92c9863150a80a2db29260ea0170f5d657f14fe65ebd69ca780000000007e366a1a6e40c49db5ce72fae9535a938886d583370d947b0ee172df3673057104eac649ffff001d0662608c","010000007eecfa5b6bb8e354dc717fe3b1409b80c7b5a3abcb5794b084169257000000001819e72d4c217f9bd700c313700199f3d84e79ac7c0e20bca14d51b71575993657edc649ffff001d22be5740","010000007968c14a53740d937273399668e457cac7106f53e6cdc31031090ad50000000006a6ad881ef894398b83e379d0b2e5e91c8ed6df17ddc05b9b358c85e8614565c7eec649ffff001d2e28e35b","01000000dfb97f4e123df2c8c24374ad6a2d726e23d94f2868caf321faee1e9d000000001ef2ba2011f5b4db7e791a143817a52319f83ec56db53008fac63298c44a223fb1f3c649ffff001d384d6d50","01000000194c6032d538fe4a9b4a60992356951ec9c93a2ae2ec112c4737b38a0000000045ca9a4195b92173c8f98f266522c3ae7811adaadf78a2a50818965dccd9448754f4c649ffff001d4bd27401","01000000197acc16869a86de6c43f2bfcb96f785053be8b2d6895e0ee431aab40000000022d2e07b3dcd2c5b500dcbb4899695e2a998756466b0a7b508dad768edd5fcf22bf8c649ffff001d1bfb62c5","010000007af5bca065483319474c06f5aef56fd6cfdf69ecfb29b0491223118b00000000a6c56cb11f8067b01402637e26f5368221da9d33cc333ca0d5474fdbd0bfc9e8a8fdc649ffff001d1cca1d21","0100000073b12317368da1b5c7596574250900238b1407521cb3249b421e8f3c000000009e2ab2b73aa898980cee8630ec306085169760fb9ae4625724424188e5dc0b870f00c749ffff001d3753d41e","0100000082bc9107114f7914368647a8423213d633c1215ae4f81cd1fe5aa18d000000000570de56b50f0255546a5f0e86700ce44043df0c9a7b9b0a85f5f2c2700e0c4e3401c749ffff001d8fec8905","01000000cc9776bfaf027bb5212fa324b33a796ef1cbd361196623395a036bdd000000001e389e212490ae332b8a9a107e4d6f3383cc79c201bf8585879bbe115e02c0d7b903c749ffff001d8fe22f0b","01000000fbc68a12a12d0cc2e14743606783811f5500c8b93cb66b1f03dc8e7400000000483f19e42fc7dadf307633b8ce2aaa1f901619e5eaf5049486f3c6998abca9fe5904c749ffff001d33f5d8b4","01000000d2adfed4b5ef5a50802002d2f9fb8f0f1574e35fd8ad89ae185a0b0600000000d60a258d8ea53de230e76cb380135b09c18ff92538dd26b05f62fc6b4f4566735505c749ffff001d7622af04","010000008e89a5658e279fbdb5308866503ae81891add13abce504ee34b53ea200000000a17ba8600f337b5758d90735efccca163e74fbf64fee71d5348973f80b617cb57f06c749ffff001dd30d3a02","0100000060bbbbcddfe1b2146aec40b936c39e6aefe5780b0d1761f1e4d4f487000000005865aea3dff449838fcd351e2ad465de2014e26c5e5280b9fe5d07a6c9c0b8421507c749ffff001d1af4dbd6","01000000d30f073c7c45d01d983eca2d217f81672e7f7a1f84d6f6aecc25ef3b00000000371cf72805caebf7f18fc6b5e03d82b821a8214fd48f936486b4edd84b7c070b7008c749ffff001d1c7cc8e8","01000000d699fe3b96802df6b4f6c23162e3d850b62edb2f77f0de0b75319e2a000000006a756c1c637e41287e35074f87069d684ea9b3ca1719198f94bec6278cc6287f740cc749ffff001d3670b640","010000000cea0b1a656d04b3c0276bc55187fdc315db2094786e8ca03c81b9b300000000e4c806da0426390e6b22c0ef72f6671a49414d2df9fb2fe6bad7912482314f61240ec749ffff001d1ae749b6","01000000d23631a1d56e3e2142cde177376bdf2111668b48ce65034d57068f21000000003106f724b1d2a50f5e3869250b6b0c5713096b263f7c2ce612edf29d951cc38c2a12c749ffff001d31476237","0100000025ef42e2383e5ba2a2d8b8abbfe6fa5da1e5bfce4d887e4199de6e9c000000002e9b4b84051e42d480f8b0f95044c3238d48b1077ce580b5729cf11ec71e2f673c16c749ffff001d29b529c1","01000000ee35153b2730a5d6b346ac20889e65e1c40471efa6cb5df7fdb931e5000000006325ff07df5dd988e1b1325bd0aede90e587a72ab11503a57489f35b9332765bf818c749ffff001d199ec1ad","0100000024646377a7647581d7fa9b5bc86284b35246d1db5e9e22542e1478cc00000000ba53be4075bc97d4924fefdf87d75acd362abf53a1bbffffa35b327f3ac20280471ec749ffff001d1f038a5b","010000004c91729496a52ff8c8fbd3972b50415d468fe3672f39a6572e23890f00000000ffaf020bd9aa716b1e7536f98ef8886892e1425dbb9e16f4639470b6478fdafeda1fc749ffff001d2285702b","01000000599e1e7e42ff030ebe7e52ef422d9939cd2f16deea74601b35c4917900000000b608ed3b86f6d4a862643c18b5915fe8de8ff734d0b5aa063832376b4c8232849423c749ffff001d073aa535","010000005b065faaed4f83ed9baf35bfdac1d64f037ac0fd1dd870f7e85fc9eb000000002158da67c1b4be435e68df8df3c46402469b2d246438b3f442f21e953b78a34d6f29c749ffff001d32179b38","01000000152ecdbbcd2e1479a70f751846fd96c00c9f53d88ab8351b5df66f1500000000068d6f20b8ae4736c63cf3429ceae80ff4a9b53912d245de165cd31060657ac0ad29c749ffff001d81327d02","0100000099e75e18bba78cabb0a185b2a5a8718ab9c920eac081614690e9fc6400000000171685eff8c19a73e9587f418ef8e619c3eedb53ae5353251f5e99cbc03fc0824b2dc749ffff001d18f7741c","01000000de3418716afa013c5c4ae47d55e1e4d644de9e142607766be8bfe155000000008a034633cc26b8f872603a949bd64e2d928da6ed98060f9451c2cb5f90fb9453502fc749ffff001d028f65c7","0100000030a5190a5483919027357d1d2095677dfc564406fb146adc9c234fa1000000003a0426f6590a7e8acd4607b89b068ff9a76df480049f1220112f5a251252d0a89e31c749ffff001d31b3922d","01000000486ffc309c87c4c4b3d666a9b7a30bbb8958a537460560330ed1bbfb0000000090a0184b5606f0184a3eea3ceaac40f7236f091f804d5191fc137f76059dc3769a36c749ffff001d3750081a","01000000d9642ee262d2f3272db0b2532fa9648095d12aa36b98a42d50c5310c00000000b39ec550d9e9cb2a47b82c5c4ddc50ae44347c2aba05b0d9592464b13056fc9aa839c749ffff001d3340cccf","0100000046489796c19a738c5087a0ec71955ef8f7fd5e0c9346808b5c7fe9f50000000030abf5664756028162859a6fd3664a274467c9733e78fa303b455b89a6823e4b313dc749ffff001d070c89d1","01000000880345791538e54286383c9b686ed035951534db064ec9ff0ee27f0b000000001adee5c6bf9b8b0967f4e51286f5678610d51ca4f005331397645d15fd9441193341c749ffff001ddae29e14","010000001d5215f436a8a1efdfeb800f7bde06957322f960c6f178b92f255f1c000000005d785548b6ca7b70d8a62df969e6d7a13f3034670cceb0692bbcf3c44c9cd5b96e42c749ffff001d2786080d","01000000f338bb62f38a30161711d155ff2adefb3643fdd5b2f084af4c6229d5000000005546b3d9171be63b9b30eef65f0286b29eebddb2ca44ffb3ebc2422ad561cc84e242c749ffff001df81bb902","01000000a52fb02f8e0493a06d23357e7b9a71a2a95bc046a4f8a9913abf82cf000000003fd933cc2b333d3cf0be38ecfe9adb7c4f4bb76c8d466044cb8e2c153ff5ad5d0c45c749ffff001d1efcec2f","010000008baf02044b5be9a4431230c5fce64ccc60694c020ad003f15427eb87000000003e6a4937f2d6c8304e270cf68a31fca8fc28eaf35477107f89bdf155137812e2be46c749ffff001d32c4a36d","01000000c73e9e79c2200d6f5cc827c676f063223ef6636ecdf6d1b93dbf8c9f00000000504578ef85300371506e5a9505f68199aa5b6e83f8eced5daa214ebec9b21e23fd48c749ffff001d2c8ae901","010000009f4e9e6e3cd146f80a656aa7b89e65d86146f2a37a08ae23a7fba74c00000000ca780d37e9734499daeb20450598e4f3d60e98f5f270f5f7b08d5ebc7f71befd754dc749ffff001d281faf56","01000000a4f9c73fb5b7619ad98836dc1c97468c67e93e1073682989e8f83338000000007a176007e7da834b8fca13b63683df8aae267cd3c76a100f3ff88679b3668be2f44ec749ffff001d1e2cde03","01000000d9880d3f56a8f5cd3d51f7a705d353f7d2e8bf18f462c3cdc46b079800000000906e9ce6a33bf4b22359f1c92528d9ba1fa83378571b973915eefb4f49468ae82b4fc749ffff001d0995952f","01000000e906c0dc3873e7711dde37a5d99ca60e94f2a46350164fae21107f0500000000c78be4b583eabab957aabb8e6096ac75b32601917c5fb286e436183781f25d731151c749ffff001d05bf4456","01000000d17cf521c5957f521100c9492fe6f838eb5503ba1dae65d854014f8b00000000fa532d2f5408c9f27d90fa0e3449da048c44c69c1777daafb2d18b82ff04e4d7fe52c749ffff001d390c1125","01000000d7871347ea98d22ecac92ecfbf2cd96b9df3316f82f74c5dfa8b7c2900000000cd26805e4870edd9d5fcd5b17e4ecc7aa82e225ef1480041a311ba554f314eecba53c749ffff001dfe9fe303","010000009284f86d70346832e13f61673c0f7ce77c18e9f46cd9997f7c82beb000000000c02f3a9c92f37d1f5ec3083b993db079c94afce581ee6d86392ab4b35986e4920055c749ffff001d25735f04","01000000ee37f9cacd14fbc5c61b558c860bc07bee2422562f904bec8c13ede1000000001c4ad06f52a715e17e9a631e4f9d6d5b36e9af78c12fcd1056843108a83e5549ef56c749ffff001d2eebc605","01000000dd76b6125173aff2b7687d4f22c432516f65dec3304f2bb492917583000000009fb0b5ba55565f0f66a3e0e826d8c0ff5a14654128341030b5ca64363fa4fee54359c749ffff001d2d84bcc9","01000000b11ecfab8e7eac015a8392f16027b9830ee80503b0b119256bff917a00000000639df425ead90743f7aac97755e19649fed17327eed0201fc3bae0ed6da32c0fe65bc749ffff001d3801b112","010000007d02c00ef254a64e68036215d0aff1596d2aef330306992f49ddcb3500000000835fcf529f84ee890068e1394444ed5bc038d3f7868b6c9584794a87f1e804b8285fc749ffff001d1a80eb53","010000005214c3af9d6169b8c65fb76b6c1777c9f9b828741ce0766bc2fde25a000000003a20020cf42c2a8adab1bb066abdab3393554b20dfc10d8a7f8b373a972766f0fe61c749ffff001d38fbb1a6","01000000adf594d721e663ab0562daa730b610fb305ce1c5205cd56b9ffc6a9b0000000019bef12a5bd1acd5bbf49019127bac8451bc752fdc62e18bdca96fc82679d035db65c749ffff001d2f0ef4f1","01000000781a6c3a34369e904962c57e02cbb36dff6654ba698434d278251283000000009b17bd984e03948b8ab0e5c3a52c7e7b55c099a468046c81083d27213ea6e4793c69c749ffff001d016c80e6","0100000049def58cbd670d5fa741bc92a0da99716216c35f1e53cfb6c6309a5c00000000874d2c610da0bd44e6301ec239ab391c591d83805e400b97f5420c67139fec129d6ec749ffff001d005ceb72","010000005517f2af9ed9ad82bbc1949c014767d12071b42020c2087d6c11736300000000f60d17c5531e44493650f79e94d57fada4cb0504a350476e480d2d960f716f5f8d70c749ffff001d02b9421c","01000000474512085aac2e89f3583604118abd1dce71317d10f9660fda4c77400000000068f39728c9e6e897adb5bd8ebd70887b3078dc150923f2ad76ed00d3849e804feb72c749ffff001d0733dd98","0100000021c5ec07db40ea037365583c08763fe1f732e38673652470cc83e23700000000e8f3b08ee47e87657d81244f3818ab324d16f951b2bdf932cc0154165a801d62c177c749ffff001d206bcb17","01000000792a030589e430a73549b23416ad330b12c021e69f2e82e534e966ab0000000096d1e47a62b36cd08dd850882ce25318c52d1ea6558230ee7c45aa7e45ccba87d378c749ffff001ddf4b4905","01000000e475fbf391b5a34b0941e3549c97e53e05b6b66da24aee75138e46fc0000000044cc33b35334f589c85a75563a955a2734825af8059cdc954902e454696a3cc8037dc749ffff001d5a4f570b","01000000abae3bf30a10beb6336820d98f46e681941ab75f67eaaa1307be100e00000000cc73120bfc1c0faf9b3a52b0470c384ed757ef42f9ff010e86069e4a82680356647dc749ffff001d38a610b7","01000000746b62e7d04e3318758b5b7a4d857fa965a2d7f81f0e8f0335ce737600000000fe1a6abd8123e1b6deac11185b399e62d56a5dc7f154b8acb6a8cc0349f20fc1087ec749ffff001d9fdca302","0100000078872c0505d1ec0c78c8fb509bb59a6e4b3df1c07425f228e649592e000000002795d5144f72ed500cc378568cb4e9d542aaf725a6b94dfdcc351c89e9fc95ad7080c749ffff001d18edeefa","010000001ac13ce8fd08cdd2b1d6905670d38c49562fa8debfe21e455dca16fb000000008663a833d71d8eacf1165892c0679a198d2eefd23011d610661fe93ec097a98b4782c749ffff001d22168db7","01000000209f936e6156b101cd731be7b598d858b3fd93d902ad862392d6962e00000000054135f9ff7f1e350d3cf5547de84d20b218abea6e1dd738a61c0e901faf19ebd483c749ffff001d393e0ebf","01000000b97da5442cc11c03b110e1f1e729f3126bbf86dbf15575d8b00fa63200000000a75bf1866e21fc757792d3d586e485a7ecb45a08f0910e64d4bb7bf2dd0024511886c749ffff001d297ba9cb","01000000ecb08adeeccf996820f3379bf01697e98f01a4ed60d8f8ed831a104100000000fb6d1671b8d4e8bdb55a843a3fe50a99ff1491431692cd9227cca25b38e670b26488c749ffff001d3442ed82","010000008cb72e332825b5ab026f4a94c1bbc6d0977d285126c8537d83666e9900000000e94d7bb12f55308d38f468238e7f1bc45ffdb1e27602e5692db0f59a14a558fddb89c749ffff001d334f1107","01000000e0b1c22571d741070fc758bb8f5837ddf12f64b8bd21553eff0a798d0000000008ca1e3182afa15f4d3792d3853190e0575efe0575897fb0236ca91baa1c593ac88bc749ffff001d20f6c012","010000000e62dad93d73ffc2c8d34fdb3dfbaf62dc2381784428a19d2698c706000000003d2ec52e94ff52c831a845e1a7ab039ba580f625ba2e0fc0a39287521d4032ce908cc749ffff001daea3a703","01000000f045f2d041ae0206fee25b1752ae712cfb7b55888f78660029caeaae00000000bb27cf98cb919c0f2975f1e3b0d588a20fd5abb10a761a2af6157288b9ac2303f98cc749ffff001d0268f800","010000001887bb945726390c3980e89310dcd40e3082291b03b5c3405fd9d2c9000000000ad467a37864f886addbabc3316a0e7725b6a803ef3eb8aa5d80b7f2e771bceb8190c749ffff001d095cba11","010000001ff947378ddd4f77722861e62d840654b955ec928c6704419b5f2c26000000005b6fecc319894fd5d0c5cf12623ee2cb58c7b3c7ad26cb5ce297fe039cdfec299d90c749ffff001d09ae3547","01000000bad28df0a172254f3ce36650166b56c0984b72baaee4757cd26495300000000081cf36f3dce7545a3889a37aa1feb89ed17036e315f6f88f0dcef9924f3151b8a996c749ffff001d2eba6ac9","01000000636367d426bac902d4bd102dfe19055b93a7120740b7e5d06a68e0d80000000057812c12ab7b7b2044770d08ffe95a97f24c97a14c3ed42a3e52ad0757ad84cab796c749ffff001dbd650400","01000000519003fee190100c63796d8e5382b3dab9d4a18f1d75a5ee597794e60000000048f8410d9644d4eb769c36b16ddde57826132e4cced558ad7059c7bb436d211cd898c749ffff001d340d0c68","010000002f22915751d679acafe4844bcfb7cccdd743989a1326327fe73c0640000000004fc99e916b90928dfabd1a3d151dad1268acbd76903267e210d8068b99971e8ddd9ec749ffff001d1898f86a","01000000b489ebaf55e8e45bdd34c4e4609b8843d50f958767920237d673f539000000009f477dd1005efdc4fb50ac477205e407d77ac2c4547e5c2aeedd9ce815a73c9352a0c749ffff001d3c8b2c09","0100000020aa852949c31f525cdfa45d1b5adbca54a2502771cbdbb2279422ec000000004243fdee5c4c279db8e8fb6bddba7b29ee9c3ec6a1fa61dbe090a901ee25810456a3c749ffff001d2d27f688","01000000a477bf4050876556cab2badc626e8d30b86b74a800b38d709c041a110000000005fe8111e3943ab22da23286b5e5b05e6257ecc786564d5fa7d8f570a6d942406ca7c749ffff001d01aa64c3","01000000bdfe7051fcfea08e110f755806dc2ea446df80f9b0e0e1b0e80f94df00000000fed77e3029130c4c2dd9479f8f7691b767b4b9090cda2d291020b62fb53ac8b1ddaac749ffff001d340eaaf7","0100000044b5db9c66f1a62caaf189738f58fec67619f002c7445be41c4f7ef70000000080efaf2b38bf9e6669850f6ff0d2ba1ed2ad1e3b6af3f1893153829c597bc38c18acc749ffff001d37f8e505","0100000070be44f5ad8140c5480fd6501638bb939de050db536512d01559457e00000000a4bf1de1cd8616eb49b3614b867cb5c1d088396a8475cf0f19cedbf4895a987216adc749ffff001d081fb171","01000000203e135d4fb7b1245e849650f7f1754088cca4878aa31c0373ec05950000000042141c363596618f66274b63992e3bd5e00abef4a26474a09da0df72b934d7aea7b2c749ffff001d1836771a","01000000bec2abb6e1fd050c5787def925fd5bed40d8e0219d3f605b4808d73b00000000d512dbad5e688802d7082ccf16af9076bb3f8fe2b1b0f279b91735f8f0a0a3ee23b5c749ffff001d0660ba0d","010000008085f893ea7b412652898aaa9ea8d0ca9dc62696c35cadbcce36667300000000231b4facb673f7d0e156dc659a772e2b07a2558696649bf6d62cc03409f277fe41b7c749ffff001d289e848c","01000000a855f84aae07a30eb2cebcebe2280499855ab9869bb4b7303fa63fc30000000055653f56c3b37f4049a770d8337a2c20bec88d9073c47a65c7e08c24eb3a0c0fceb8c749ffff001d1d16a633","01000000f827042d1cef58347ebfacc481a7811c1fc648efba363564e65ff6c900000000c7c1d8c69bfe7b450e5dc751214b0b5399cbfbf7d4ea6d21989a1fb806f5c7f201bbc749ffff001d6e268808","0100000017b2f8687359fbe48b3517c5fb5885d402770b80452724a7da5a98ee000000007d8a2c539d177c38baf8eb13d3fdb7556ca331cb5fa8034bf917ef24e6174739a1bbc749ffff001d15421108","010000002b1ec7ab0affdc013d777e1d6cc5927f84d4ebd9d1c0194a5dd197f00000000039c8cb099d6f53af85c4151fe58cc0d020c91a678fbfc7eb8d4df299a05f5a7b71bdc749ffff001d3639e366","0100000083be5a3de65ded337afac69f392f51edd71e4068555982c23c5f01c3000000005a58af51857cf638ba2cbc98bd534632ae52a337ae2364203cd66a49093adc7d92c0c749ffff001d5ea3d611","01000000fe23f37c51bde3dded24566850aa2be4f7b239fcc9b61c8ea8429f470000000029f666ae4153baca92e6eebb47f53708d9fbf861fc593c991a8cd47eaed04289cec2c749ffff001d16d3defb","01000000a7076e49c90b75783de2e4919a3cc8a8dd5b6eaf6eeb05eede63582600000000d10c9263d73b2e4877547021f16dab5a79bdede76aaf0bf8da1905f9add2b44e29c3c749ffff001d2c9e7003","010000003fc52e17532e22318de0f9ac1891d993ff9ce72f2000a66f1d6228f300000000305fddba6c392cdadbd20513b85769f78875a490ba5ac78a4a7601d6b4ca5062bac6c749ffff001d37e5604a","010000004394d53e206a5c8a5240efb589dc7aa7f1969da238a3a041befe75800000000032882c4fabf96647bdbc546d1680602bd2b3a7feb60045745894d48423afecb121c8c749ffff001d0644abc0","0100000044024bc63493f8d96723cd193bcd8d888b64260061dd1d632e844ae7000000003f3664cda5b0e39b580a9ef37b8e6c718b3894885e69ed0be736d093cc2cdc5e30c8c749ffff001dbb8f0100","01000000c150ad77dae4cc62f083085a1c306233661d98f2cd1176ea2528b3cd000000001d4effb0fb9f9c3002089f5e5c156bd466931e0a1b3c6557ce4aaa0b5da6dfa199ccc749ffff001d3573308f","0100000023b07cc7e334b009ce3b9ee0ac11b98d8d667a231c4bcd878ff384ab00000000e5efba6648efe2196a382230179f06ecd1091e53b15a1df1901aae5ecebd0063a3d1c749ffff001d02bde274","010000002fa379cfad4fdd9927be362da75a7b6782fcf95d185c3883c6aadb960000000025f56b45acb19aa0352ec1b25267f7bb90f24474b51b4b949cf8ae12f39a1c7d44d4c749ffff001d214e6986","01000000a55838f3ed5250e195423f8e87fc83994891aed1a46b398f3fe0310000000000b4a91d3eaa95b2a49cbc688a6a5a67b22a5f1db0af89a7345f5d547fbc7a12bebcd7c749ffff001d23186c70","010000004569ef447ab7408a3eff4664ce78e7b2fc3658947a083157baff58c800000000c1e779d333359ccd46f8e53105d23e5d3fe4478977297c01e97df7ba1925845f59d9c749ffff001d2db45544","0100000006c8020a0e962b6d0562a6f5c8ac74e7241161a890e7a60c99f5a4eb000000003575f1d7439a1bd69fabb4a5ca6cb32685f6a49bf87c4d7e99c94f0dc8fe029f60ddc749ffff001d01f307c3","01000000712dfad154ccb295670caf1cfe59fda8e273f38fafc341290758f06e00000000d2ca41e9bc181474413b0a1c3f5585067ead82dacf7c153a050d4bd22772757ea5ddc749ffff001d4160ed02","0100000092604d129ca9d4e5456cb358c904b9e251ad853235f10f7c147d56af000000003beb6a2ba3ee033a2124e4b41716ec56b504d2213bceb261a602dff1df61004307e0c749ffff001d3531bce8","01000000719e8be4eab8ae36d6114e9f0e3298b7ee14fb242c03df9b154bc23000000000322c17c3d9f2b7b9d2221299bc50c15a45435d89d0fcd4472e0248371930cea9fae5c749ffff001d29d72277","01000000b9b7ac8b649814e9234e68be420a2b149f67295051e7d2a6aa1368d300000000641f07e13c0fc9ab7d3c637e891df02fa2c059f0b12f70e5e67e5312283c5f9e66e9c749ffff001d3a19e8e4","01000000ae20bb382c0e352cb0ea7c7a5357ac9c2f3ec286d9df0484354701f900000000f1fe379d901ec0adb29707cd5d70e0c8ff9b12bfdb456c343512e621483f124042edc749ffff001d2270300c","01000000a771c66343b3a4dd28ca6ff6584b3642ad5cd177cd873edaff0ed2fa0000000016d7f0ab3384a3841352e597e8dc8af30e1f8242741f3191ade8dda1c528f8f0e6f1c749ffff001d2dbb7240","01000000dad23138aafc504fe5c5cd1fd57e005b8428ff537e1490049c3817e0000000001837255419ca3b5c65896c2db0f599a699f1cf00108f6df3dc69da11b0c854cd80f3c749ffff001d3919be51","010000007e9bb4db01e9a8df1d429d8a10d6c6ad07629b3584d11f6806fc7e7c00000000b1ea5b445aafa5fc99b90d34328021ee2571410a25838823663f6885403bdb706bf7c749ffff001d241b0fd0","0100000031768a631ffddbae68d47d600798c0b494f2dfcb5473654a4c95ca4e00000000298da610007ea5df89b5030981b00a8a2bc0ff978f350deeede4e6fbcf4aaea639f9c749ffff001d0892a81a","01000000d957b418b97f2e2b4267c8e350259834a226de38904d6b6571ad37fe00000000ec9d52cc430952148fc5a6205e6b5f4d8dce44821529d3faad6b8938211eb1ddd3fcc749ffff001d0616fe9b","0100000058988b2ec9cada99617b153bcb8b970d11276444ecf83c1590ee4bea0000000028325928a84e5ddfff0c5c94c5fb6cb0311cfcf01bc02ea444cadc94623b56ca48fec749ffff001d3820344b","01000000dbbed4412b47604d30c3dde022a325ed6dd636acfea61f8868a60fc3000000001532d522a59bcec8b8158bec4c8521d4da64e59e6dc910048dbd20b147fb2dd47504c849ffff001d1ee0bb33","01000000344e0ee5c2b5c805091b82127c02efac8472173a9a0f0d18ac2416850000000046fea89a3efb47998997f201a206001e557ea871cc6e29a134e37338952e83703908c849ffff001d1c6c69c4","01000000b4bbf41464882caa79309a793ba66bba3128b673f210ce88b799c3a1000000008854b99ba914af972c5c533c036fdb19394655a46ac943b752a22b001369559c200ac849ffff001d150ba5bb","01000000a72b7ba7ae10f2351f6eb4043d893cb39790cc3cfe004caae803d25a000000006cd6ac65c9d49f443f983be3b835cf751e0e236f922d393184e1e88d6780f73b1e0cc849ffff001d8a79aa09","0100000090aaef55b5377c3f3f4585302d09a1480ded600c0b8772f1bd35a26000000000a7cd90691c5839f90b2862b134c02f9a079eb4109b6977e99a3db006a0cc95e8920cc849ffff001d19c1bff8","010000006b84dfec890b9fd966d61bb03bb58cc8a7f4907b21e378128b33779e000000005509e730b0aca5e303a3e565df75a14b4a132cc05e209de720a8da00c01716e4ed0fc849ffff001d35e2d30c","01000000343988a138b889c909f6627e8b0aad263635b342c0cfcfe336dea3c40000000047da8fbe4287f3efa3e7e65284984dc176a1eaba5d782067d8aaeb9803553868c513c849ffff001d15f92853","010000007c39389e2b037eee4c7016c1c104a77d01446b091da992a6ccefc11800000000530e4a077f77dd82e6851fa85d80859950f6556f399e4844077a1877856021359115c849ffff001d39c01f03","0100000005a30f67ab7cc54e95fdd079f5860b4da0ac3038b7038ef173b801ba0000000004c01b9ff92a8a6a3f05f863fab435a8d01323e681058c21daadf424c05b6c3dd01ac849ffff001d2418f488","01000000742ae27dbc2b9cf4b22bd7c1f07cb19d3979ceb448584eceac62e87500000000f1c9885a37dfab08cfc46fce2b1a4e53bae46da851a609814dedf6e10aa840ab881dc849ffff001d1a4851f2","010000007eae199b422c0e6423b7ba6fbbb622d7453e9c8f19fcc0b8248c7ec4000000003def44e32ae561c5d2b66dbee1a80e7dfde92271d43ce3f3f250b09a64ab59146022c849ffff001d2e40726a","0100000041606707bb1205e7cf2fbacacb02adcb6126bf917db2b577522e974100000000b275ef8c3e9395b5fbfdb49d0d042be4839fcefbdcc826d04b307fe12c65a718c827c849ffff001d238dd144","01000000b28dbc0ac54fb048736611cad40edd1dd68f2a001ad96c0483c6c66100000000071cd25af00ce2dbd3d1cdc2ad0cdd874d42fa6c678238ccd61ee1095a313a553c2ac849ffff001d27caa5ec","010000006be918f11c73770f07492dc650218e505d5e49f5581e51ad700fcfbb000000000ed23980cd48816b32d5b55b12e07ebf3b54c745770c3bfcdbd5fe26e3175b10f32ec849ffff001d028012c6","01000000d75e7b213663342598d7bfb890ce0af597ff05b2ad87b30950d9ec6600000000319d259da4e52c4dd25c4f1549e364cc262a83fbfc860e6a0663612a877832d10135c849ffff001d221f61b1","01000000ed18c89b861d86ce0a2b801513af8476346df4813efe09e4014e04bd0000000071e3e4de3dc7cf43d8515d07cc6f159cbb30e0654a49106bd9d224be891928d19f36c849ffff001d33a1e46f","0100000032cd6a934a010883f4dd9f6365d8a501f4bf2bdd78fdf76343458f5f00000000ad5cd562b8b87fb01de8cdbb432c2d5cab805fff0fb74b184a29e57bd535a8fa743cc849ffff001d215bff6e","01000000f7fba195afab9b3f092125bf49e39519fe8bc6ab5515d46891f62e870000000028a5a6bebd8ab75963944ba014774925bfaa32cbe1e57329fca06009f3113fe52b3fc849ffff001d284d6137","01000000f6ce240d9ca62fb9f8915b91253e1303a97ea5bae9dc243a68c200a10000000068a175eee8ca93dde9be76ab6bbda2080b9f48d1e2e0c5060f8b71ce7874572c1841c849ffff001d3215d2c5","01000000042ec8cee3138d826280c6c1bf15262b8c4a268f7392b6a613811f9b0000000029e2409ee348f4a382622f9fdb1ac01f5eec61e877db4632e74f2463786c79960042c849ffff001d2e11d501","010000005da0e02482bdc8e4db76cea906e126ddcbfbcf25603aa971671438cc0000000043d01d9751dc9d1414958fbf4832090cb8247f62729fadd3fad3cb0503f37d95f045c849ffff001d26c51485","0100000000d9ca346ce990e5f6b9acada14127d53eff27c21e460832e547735c00000000645f2617a886c14be9230509a052d6a278fd07447a9e6cf57dff9f07e1ab69907b4bc849ffff001d178c5e33","0100000026366ead892208b55f84b3cdd48221c854ae8d44cc7707beec36ff0600000000f4b4f41b9e1f71ba0b5512bf738f6b510e87bfc2c4b1316197cd5de8ba4f7f7f5e4fc849ffff001d2703ae60","01000000acfbcdba68e8744c1c28bcd8eeb25213c48b7ff2c6a94f8ba6bffd87000000002ce969efd85f4977eece9f9f172de82b44c18398bfe03c6ae20b91d54c37ce6be352c849ffff001d02e59701","01000000b570a1a53cc1d3bc1be963f999df0af22c3f07a9462fd5197e214d7100000000ec806d5fc5a4f454835423359cd5c49bd8b4732e76f9f86d8367cf5a038bbd6fc855c849ffff001d3c7f8106","010000005475960d3f128f013b67e6460f07de5515988dc38cb6164dcaa2d6ee000000005fcad8d8a9ffeaa933229cfc6ce0b8439a6a3576c02969b2241003d17c2108829958c849ffff001d2ea0d172","010000003163d7d6191a37b6811fd171b9b9223846a0f30fcf70574ead747c59000000005c34b06cf4dff1df2a2dc8e136c7abbc890f10ef82a8ba2638020771e7644f89285dc849ffff001d32b7222c","010000002a6887225e13486a6f03751fd417a4c7cae0b2392da05d3857305b83000000006132eed5fad06159d316bf6226ff6921383ca2a256d3bc6e107861cd13a2fa7da462c849ffff001d28cff00d","01000000367e431b9367265e4e3dfcd81261dfe12533237985af418f6789517000000000ed07cf0634ae0d0386eeeb7e991a9c5afd5e9a7467f033a9092b752417da8214b267c849ffff001d08456d71","01000000e16dc99f562c3df656f2b678b8377984a714a8ac2ab67f4dca6b6f740000000091176e4cd00b38eb1a533d80a2d4a62dde6fecf78f69b06966ee7589a142ffd7126cc849ffff001d179ac256","0100000025431d86f74fb96d5da1d55fab77b63882d7c5b4dea2a3017529db19000000007fbb6caa607683b2e6bf42dad79547ede2e4d8e70497a14a9a056cdccd684b17996ec849ffff001d2668713e","01000000e21a1b9ac6bd2063a51f4edc3d089565f2a4a2d78e4ecf30a93b2eda000000005f7b48e5944ac2ad2ab9ba87137718cc0dc48708e0501445a2a99b35e89758928e70c849ffff001d289876cf","010000002692f5ef6a973a7a6260223738c118b92ee7815403ac1f8220f7a1ab00000000273fdbbf1a34099b3c8d8af06b83e62372f60b4174856a451da2e8071c59cc499773c849ffff001d2ec12909","01000000bd0a3e8ecd2f3144c1ebef0ec4a02ba89b0e4a53f118f0e2f98b60e600000000a6be9096ab3d650ba56892180e07e5d6a50417410b7b6ebb8aca3a266c3d6a921576c849ffff001d0109bdaf","0100000056b089dbc5fbec85e417d419588a2cdeae956e9749d34f2274c8682800000000367a1934d0f82fc7bea09c622b2f7c0d5ed98f9b94b14aa7a2a228dea970124b1d79c849ffff001d143f61c7","01000000362a57c7fd27f6f7c04f557ad28e0f2e90f86921712497fdf9471b8800000000114833c869284f92f3eee730f5cf32e4c824c2c6fa1db8a1d2be6a6245c35772ce79c849ffff001d50bf4603","01000000118e32a9e3cd9f9ad48aa3bbd83650542f303d5b23fe76930c11f0c20000000013a60420deaffbe70d00a1ef957ce42c0bc870617668208ad69f8f60012b9c82cc7bc849ffff001d93a5d403","010000004b1cbff88fa586e9a50bb6045bfe136d07e7e530d3d87d230158cdd100000000366d1b25ee16b3722e9f57b0f162d1524a1575ca2741284d204651e612a84b5b227dc849ffff001d1958d44e","01000000e77bde4b9ffbd3f11b68d211a95a1b99a8f5b2420697d1dd2315a79800000000826c460196ce3702f4daf51dfb485d3b944f7a1a3a71b76035eaa46546c76a9cbc81c849ffff001d24db3395","01000000d5c821197d4f25923fe47207820d9338390d2811a6038831b8c3e2aa0000000040a7a5f5d043ff90064cb63c694cc51be2a8542354314b0733619025fd37e8266987c849ffff001d01ad714c","01000000ca857128a0ee40bad6a78e0e53492487341b7eded54f3d9725c43bda000000002111927110ca6fbb5f01bb73f7dd8db164f19eb9f0a7234c7fb10087c3825d45c189c849ffff001d3679d609","01000000fc363ee931a151657fe10d7382238690eeb70d2f08e626222e481ba500000000718244713db6459652e9802720fe6e9d0917d0ffa476768b53a6f9f86a2bf0de188dc849ffff001d20f31bf1","010000003fccf12abae6d9b0f0e3e40437461dfed97cd80fd08491b29267c9c800000000125fcaef2808396886e49aca9e2816a40b64aef22b6354a05bfe76d318364c710d8fc849ffff001d23d3ca62","01000000390dd657ed8314329c36ceb8a477658b587b3370036487d6d0424b7d000000007e9a3a224f854f29dcce9187fe7d59a20a614d30caa88482fc561210d97142e38e90c849ffff001d17a5e493","010000002351832bd1721887727b7a2cf32660bacde6a4eb5c4f687209a6a77f00000000b9d89a924309d99f3103a84235bb9f43957ce378a2265046865702983063e8c5ae92c849ffff001d3a6d200f","0100000059b67d9a292e8a3536f1c96a85a7a5928ac405205219c8aa0281628300000000f1b5a8ca7b47747fc8c53c2510e8347f3c7b55b7993166cbea09bd3757422ef12a94c849ffff001d2c828bd7","010000008f87e4f09014b9d9495cc37280446464a032fd50466067e452ef4eb8000000005e1b80371d9061e41a4f0e31cec9ab19f50d0a58b138fce4e90da544c42c3bc0239ac849ffff001d24585db6","010000008da57276e2c6b8a42be4ed3119cf9584273c1cf16adf3162bcb104b6000000000f7f48d31c3d8bc5a7a743353cd9af3e29fc87389a204fb0a92ccb5fbc446f445e9bc849ffff001d1671008e","01000000b21bff82e56921d29f80d2aa6327eb5cbf96465f1bbde460d61060e4000000003636a233be517a08b750beedf8583aefd3e5c9ab0d6d89d52f04819f66a22dc5c99ec849ffff001dfcb0cd10","010000001fd8fc6a5003627ffa33b75f0231a9bc03130b2a94245102e4cba8750000000008539f85970bb6da516493dc0f67fa60a8399ee98d1add313a2b0e0e99183f1a47a1c849ffff001d20be3045","01000000895fc2159dc8443090ef2c3becd948676c28dbf82201b5befd48062d00000000adf495ac85096bc1882fd28cfcae9352632d79c5757a519e6c46ab2349afb0bb55a6c849ffff001d324553d2","010000003cc6490d78b9ec73264854df315d6b423d563847c45a74ce14385e2c000000002d4bfa80ed6a345754fc0c7ebc90e19ac8cb58e9c38c82d79c33385c3f08c01d46acc849ffff001d2aab1e1a","0100000041f8c13d3a213a7a442a476964dea41e8388c4011d3026d788968ba600000000d2853baf3857abb009b8bf3fe1bbf1a0840b6882adf8c10dfba3140e3eced35528b2c849ffff001d2d105a29","010000001266f3fa3cb11d93353184a23f91cfc6dc66d77f85776a831dfcc86900000000dc7c1c829912980fee817f22f877c87e3b74948f39671bc890c0ff300de3050a07b5c849ffff001d090321f6","010000003ff439f1783705f596400d136af6557ef389b3fc8c0c24e54dcf88d6000000001f32c60b83b4a56777217e53307ba441fa6d3799f1694a49748edc5ca8af3e0950b8c849ffff001d08325e96","0100000034ed1ffbcd3cb0c8690c19eb35ce666fca5c2df1fec4c8a6f39403b4000000007781a54f0b2ca9eabf597f2453f8d6c6c689f6ce6ebaf66605a675d53ae965af98bcc849ffff001d2054722f","01000000862dc1a2317b104c59da1be32456d58520dfa42fd04c9e5215c167dd00000000c98d63b96e4d493fc1a757e185313b92641e6792efda873dbcba0beaf84e9f711cbec849ffff001d384601c3","010000001e3065d5cb95f650a858bd3d80be9da9deb0b80eda29950cb9e085580000000055c724df9e5564fd685edf1a235d2d8c9f89d73be597f64fd9d58906a48214769ac1c849ffff001d38eb596c","01000000b28cebe4f94d47ea2451c7798069d2b31d37148a84fac98674c4527f00000000c05d45625fa800a82a138b70e0073cd4cc6441ed86205c33c000cf99c711119739c5c849ffff001d35656d05","010000003fa504505423f5007a5d38f6b03bfc974ee609a1eb42d0c9925301a400000000d0d165a1874076545f20f62ff6d5d2c19b370e8fbaf80bd718d15d6d23d7d4fd70cac849ffff001d1a52b78f","010000004ae24235dabb36001df2e569f19f5d1b8e393485ed3c6044ff29efe800000000669f783b8f010590db6bb4e62b21d29425b5b21f6f5c99db174740a557b31e4334ccc849ffff001dce0d0503","010000009261bbacd5df72be4669a10a3ace020af1e63a1bc011b9d955a1f4f9000000008dbb93ebad95a5379013bbcea2023915099b691d01a86987e004968e60bfe0decdcec849ffff001d0ccefe03","010000007ab856b30e029ea9376833622445a8f564cb3673e8fc50e8eb7e0033000000002eba8cb6d0e2f96aff0956117b7bf0cde8822a21184edc18a43ea7f3556535791ed0c849ffff001d333e2cf7","0100000096e7fb26eac2d4530ce949b34dbf67f7a6f7885cee44dbf44c1e170c000000002c923d26ee1b2c3e03071f67a1196e27cd9d949b882b9e0ef6b08c7ad1ead1cc3ad2c849ffff001d1a139803","0100000014e433e85e688c9bb5de6635953138f5f7e7b1bd5c7253661744cfbe00000000c1631d8c8042cc65fa1c4ca015c71fceb527bb619e5d5db7ab44d768a388e3bfbad2c849ffff001d53d7ee00","010000003236d78e39978b7840cc45ca8380e042ba107db6a3dff93a158e608d000000007754c364f10a97c696cd37c042faf99e5408f2435ab26b8872c09da71aa14955b2d4c849ffff001d340cb21f","01000000dfbb4833d1ff49717cdc302536e07237a1a3a896d65abe267b3e89be000000006e2ddda106d79440d216b499d4f4cf6bea7c5140afc3da67404504f5ed93266921d7c849ffff001d001de668","0100000068b1457881d7220565a58db0bdd3a5db49ab09a5a636573b08a813f80000000000a6495bd19b0ae85c1cd9b2aa7121fda22a7e61eaf55ff524b7ff9f14f4cded84d9c849ffff001d093d0730","010000005db6af4fb00ca4b6107e08b89348aafe62d5e27cb03fdd6d1b4bae3b00000000223f46bdb6ee64e6f6cda6259ac1770243e24c58450b9de3d43072830f27dc9404dec849ffff001d38667b18","010000005568d175739c21fa673a7e79b8d3addf32eea93e69193ca5b89d646a000000005f8095f7bba74b6a779905286621dfcd1e98bbb6dd772a9af30f839b01e9a762b1dfc849ffff001d2b85167b","01000000b71bb28f6d1feaf2d09e4956fe1fd6e903d4417c0d8ac4c957e1f68e00000000083761821aad1add1d4e81a1996b1416e7337d22289c7fa1eaad1fe8bea9d321f1e1c849ffff001d26c6f11f","01000000fb94bd4d3f16787af7e4ca828b0d7f93843db4fea36daaec3eb562ed00000000e968dce1f8672f5dcdd23c32c144296dccccf8c7a5fe5ae6a343ad5ccd97551916e6c849ffff001d18c9a5ea","010000006610fd056424badfd9c50707a53bdc297b3ba1a249f77790ebfc1a9100000000b35bcc5e124c0477a57cb3d8b0cb9bec5fccbe87962fa546c0174d80ec71eceeb5e9c849ffff001d228ac8b4","010000001ca85648f7aa1def1cc6315da41d561ef63b66558d75bbcb4f083b47000000000ce188c65f33087e5ac993b80357277392bbdcbb5c5af100c11d77ad5e5e270155efc849ffff001d24ce1822","010000004a42f437ccb47a67c976d3a2253deeda96546cb1130d8cf817d41fa400000000c8bb34b5bed411e8cdf842cd186434c4a5a6f24c250ca3296d72ea8ec6b512b6a1f4c849ffff001d39a47097","0100000048feffe08d6ea390cc5e92e3899ecffb1d12f58bc059547c9023a41300000000d5af7599e003c274ac4daab7bc01aeb88b6227fce30c705289e9d69ce66870dae8f8c849ffff001d31fa5301","01000000018c03db8bcebf9d8d46edcab93f89cc9711621a4c9307a1c354861800000000ba2b13ac590b81b9092c4d35fa815f912c23076a0ca5cf439965b52c7366ae9a30fcc849ffff001d9bb62110","010000007ddc14779ba6e5ba70758dd8fbda768edb5dc755e4efa3961a40ac1100000000038289a0c2b7237488e21f3d324d88a403c5674bc1b38a32a3bda85319759586d7fec849ffff001d32485113","01000000e9290b6674ccc516c6bc301202926c28bbec30e3bc838edf2362b3220000000097d210296ae24a87335e51772552b115da520e3630d9d246bad1394dfc5a4f3dec01c949ffff001d396e9079","0100000044fefeb7e07d0cdfbcda6055f1d2876c9c779fce010c796d26793afd00000000a7f4732c3923791255fdbec2eaeb714930eff8e47146820a7f0092102dee05c85604c949ffff001d3177b7af","0100000066aa2807b0307dd09884817770dbe09f718101516f46e25496b9279500000000179cb0ee1a0ea8f2f02b8085b4f6ceaf2d019243daf395b37174d9097def709d7307c949ffff001d00aa019f","0100000090acc34654c1f5624cfa7f19b58b85313e84d78945751b86b433c0730000000016602fbf6e17527bd3a5ad7fca00b8e608bf54e0d5b054d980a8330c62e7b7f9b109c949ffff001d02102f8d","01000000f06a5574ea506773be7af55f1d62fa9c7b8263fb1aa57f43017998d10000000038efe2562f91452b04ad28ac8cdc7ed496848fa8f005e21d6ae9b677c902900c930ec949ffff001d0632ca3a","010000008495967fa1a7667bc8c6ac0cd767a3a656c4db807fa7405c1f234f5700000000dbf5bff0fd3e82fdb8bc4621a705b855316292d961e53825a3bcb171aa160ee40013c949ffff001d18e9072b","01000000601f0203712727ed0ad6319d3f58fa95a199c800e0607464b9c77a0100000000cb705c02ad7f1f16efb8d2e6b444429c247290bc09a227b603c054d5e540d03c0217c949ffff001d1478d6f4","01000000b6824984f157fe4c7adeb1561d26665b6c8887873ece091b3da8dd06000000009379b6869a947f9b731ec522871aab90221175177c29d7fd5bbac819549a55c59b1bc949ffff001d26ec6612","010000006fbcbab339bef5a4b33573bc75a6c956f6902a948faea67cfb8d3e010000000001d7263cb32c507326b6b8a93be5636845c071eab2de940c6fcebb405e467de5311cc949ffff001d080c1d61","01000000ff81472beaf2e0279622e8cced5f0736f2dc8484cec2c40a17adcb01000000000723edd2bce864af3dc4ec574203ebda696fc98a3d41a30b1adbaec61aa49a81241ec949ffff001d2a205a3f","010000004a4df02b33f27f882b0974e21b557982bc7c1393efcf3d0651bf74a7000000009a47dcc01e7d607a7537962da459682cf745c1b44f2b3109b6e88270440aa9ce5220c949ffff001d328e453e","01000000bad8a149c66e73a21020ba5202e8dde22adbc9b3b6b10d80657cbb1a000000005501fae05ca6732c893af550852d778c7fd0d81be46ab799e0f8419aea96cc2c6622c949ffff001d090f119e","01000000138f1e4538d01fb3951be20de74c32f844ad1cab09e1cea838e4850f00000000c3de123081eaaaeadeea19d52a45847e9e1560f288bf9d3f47a80f686abc92d03427c949ffff001d18658500","010000008ae500fcf804e76101a470369864c56614430b46cb7bb5a6d57f84a80000000046dbe5afce6f97d87b73d70c430932a5e99b970bf24146ec4b010cb2514fbf3dae28c949ffff001d2e535566","01000000d6a5cc319e1c0414b28f7d961141d7ee869e6f79ade9345252e951ad00000000ee46a888aa0b11fa93b0e10c73d2f5e7db4e6f5184803bd7b5466e43fbb1646ff42ac949ffff001d35f603a9","0100000025ada21981641f20453c9fbe6253203b415baf176cf4fcebea3e70b90000000023331d780130d4f74169d663f1ff9b50cecb506da74ac7de8e935f12dcc78cfe542cc949ffff001d0df66905","010000006655f0d7ff6662687876614d63e829a5cb3385cc53c0f3c7c2272fc800000000b1a40b3bbec6bbacfcd5eafc34a6f7f42f1008dd2b64a309e65e855478ca85f9892cc949ffff001d2e95a31a","0100000049adda69a51f1a39fa0e9abd0ebf6c8c4a6b2374ed191dfb66e72b4f000000006ae0351284457892dc40b729fc951139367199852d1f76e154d1841bfd000f138c32c949ffff001d30312980","0100000065e6562463f3d54f4838597ddc702651788d8127221cd8ee2024287d0000000051f90fd295bae5c37a9da2dd5e416f7da3117b9d128d070beff9f62c5b0b9d17bb36c949ffff001d097551da","0100000010d0b622f063c5849e60c5475d9519fe070efbb4c684325091dd13f800000000b24952e63f10fe379f430ce5b7349cad2ac606231d16583c28b6993d57f46ec17b3bc949ffff001d24ccbdd0","010000003684bad742562d0b8cf98da0ec03c9330935eecb0347eae87a9a4bb30000000096c8beb408d33407fc75cb075dc2b38a3b133da2f2745b501a516f688d1714137d3dc949ffff001d23e9dbc6","0100000073a207122da9c4738d3e15cc4c9a530e7405fb37e3fe7375ca3d23dd0000000016253c629f2137f4b7c34a7a2fb59828c429625c2337509aea44c08357ab54a4ec3fc949ffff001d0e270c0a","01000000e7cdd54eebe05cafbd7b3f19e9353bdd35b7c9bda80f97fe16664855000000006b152ca885d1f5b719bc2cd9c6e5788cbea3a239aba49579515068833225138d6941c949ffff001d2d1b8fc5","01000000cd02ce4d6c3ccc24574a0b4df1548f312c6b068b50addf0ca59b4c950000000057122bd84d3e64bcdca7410bc3845a1c8b55a13228de018b0276f0ea939f2ac97e44c949ffff001d00b44a30","010000001540b12dcab1ba51799578e861542ad015769d7241ad46a5b9992b1300000000ccc017a6c87c2b681f9ab093f511b6a38edda4cb8423bf1018e2f8e3634d63d55548c949ffff001d02b64fa4","0100000040c351368d90cdcf5e028235ecb0dff383006e379526a19477cd4bbc000000003157a07683f769ba5eadb45e95ef0ab98ce9feb44a42a189eefac31963a303988548c949ffff001d0a529100","01000000e850a0c1cc1c7428b7950158ec4539b41b67a597507a06dc92ce552000000000ef1ddf0a06db13465790a2448d1dc94b4bbade2278e2004503b7bdf71a785afbf14cc949ffff001d280b8a65","010000007f7f1824348879bc27a00ccb361df93d0f8d314c64761ab244a2f0a4000000002c83c9a5ce55bc609b69018ccd21b905e9451a6679d259d6dd0a9eda4705d7d89050c949ffff001d3281d1fb","010000006202282a4a5d3a6dff5a50a9d772e0b63bee0b712b14b178d15349e000000000fcf58d8a3e0a9a2b888843bc1b87da477c102215241e08ae0583a3b552769e6eb054c949ffff001d21f4a2e2","01000000b072ae50b384fd8cccde8655fd330ca2cb70c76ddb332b75d7c762680000000009849c4820cd45299d82325011794f59e1f8fd6654a590a435b51b9a3c998027e057c949ffff001d3384703f","010000000d1ec0720af1e8b5952b0abd8b7f3561e2462393d84c57631a59584b00000000cca3e0c06ca0559dc0bc6281b07fa9363e05c2962ded25e7616d458514aa362aeb5dc949ffff001d36428fde","010000007f8aa98546979ff30f1d07fc397e3ac3d60a981af0276b04c06f13b600000000f0bd7ce4a7ab4e847300d857d43ff4e55a075b379da92b2d6852820ed273993f795fc949ffff001d78761f07","01000000714366ded3a0a633aeead3efded8ba800635b2e22d23aad6d4cc32d5000000008be3788c9676d672b6dc0c6326bf51318933264fdf9d7a72414728ffb712b7861460c949ffff001d1da9b0b3","01000000bca730dd4a2a990aa9780724ceed7dbee257781d55aa7fd9b43599a80000000096a5d17de2646f66f829093c647fbbc56f516805ad633e52bc582532706a70c0e163c949ffff001d2880c84d","010000002bd9ef2b8d2ac8eb71bb3d3146774381b4fdf9058ad926cf20e93e4b00000000552611b6f2aa7961f79eefa5ea2087336409ca7374aafb8fd5f8ea3782fcb36ab967c949ffff001d36babd02","01000000f5901c3ceced6bc3e4044389826dc1828dd1ea9393becb0ad4df64ed0000000095442be38bd461e6da20d9383b90975454f5dde393ae4eb983031d1edbb9a784946cc949ffff001d173f7b91","01000000c2f82a0f61b8bc84e595420c23c0a1b01de2883f9817dc3ef45c483800000000f4a7940560133ca5041528a6d7767b2bacaf92d250d56ee58612de094fb200e52771c949ffff001d2ba14c6d","01000000acf9e6de6909be6a0e6d96792cddc40823ba57e43fa902904daefb0b00000000608b1d77270111dba7038114a09e2355dd61321b04185ac0c955d388332a6fce2b72c949ffff001d3ea6dc04","010000009abde4247d52b871e04cbbad300ac08cfeccf157614fa549e165849a00000000683644c69c4472fd4bd247ee41f0bc594cef96cb20308330709cb7d46f3784d86f74c949ffff001d2bee991b","0100000029c8deee5b240b6a6cbda993dfa98886e7194157290eb2c1b1225b5f00000000628cbaf99b9a90cd7832ee68e3b688fb38a2ff8884448d64cfeb9c478b525c0b3476c949ffff001d35596112","010000005101d655fd64cf3805545d3b87a7a326849ee7be53d74e2e753b0cc7000000000b0f1c5b9234f6d8da213eb57534f337cf8291079f31930ece5b104d2b8e65168078c949ffff001de9df310b","01000000be45e6ea714874d749607b2cb6f7cbb53c0d6177570bfc9d6c5868d2000000000086570430d4c2748e58e6e8a61d23d2fe99ca8a389e30547ae49aa92cd85a43157cc949ffff001d091d855a","010000004fbc0b92cf7e98989fcd57adc0ed7f38e25d4908930061c760d419b300000000a2cfa4d434676eddddab450f7772cd9bf73151fb294170642055be34d8d70a145e7dc949ffff001d2a65281c","0100000092f07bbaa8cab5c94f5d5c96bfb5cdafe891a7317c1f6161359aa6cf000000007c08515bbec27c9d0952c37e060b75027a125d2861ed8aea4911383f89c964484c83c949ffff001d2d55c2e7","0100000004c642d981b53f3c4384869af85f4c7ca56370a941a264cd61f9e77b00000000a6af8d1a0de597a5d16d02fefaac48f83ccb44c4f0903f236a446e378914e152bf88c949ffff001d2cc0d174","01000000977b387b934f48bbcb9ed91a665299d3cb8212a33a3e40d67798d29100000000d3d7669217e65a2be108ded44ecebc526ffe5e2b446cda848b86bf1f1c7f07bc408cc949ffff001d2ed85a6a","0100000031608096f85924f0cc37c90ae2acc31a6f496d969162c7168365a59100000000dbd8ff98cd3948acb86e4fa7809906a98ade41ad32d54169ef4d54997d3705de1b92c949ffff001d00aecb93","01000000c07afd897c753dde1abb3dc820cd5b91a6ee5377a15972885fb0d2a10000000073a4c3f7a39f1bbf6cbe9f361284747334456ceb8df4442891efcc8db9c75d994d92c949ffff001daeffce00","01000000dbb9c04f95de21c954cdaa407de150da8f1afed4256c3c0e24c64c38000000002942393fe6ff1b1a2c54cc49a2e4a17f15958cc14de4f09a943393e2544089553c95c949ffff001d3eb4920e","01000000064002ef92b741cc262a1120d7599538a1a5b09467c07c1cdfd3b5230000000052261c3541c5f52e1412d6b6b78d9dea0a70c850bfc5d3f61c2632108e8825a63796c949ffff001d2f90e33b","010000002a513edcd439d5d30b787b6cbf0a5648995291a21b593e112a45764800000000a8a95f0f675ae63f6bc849976a5f9288085b1eb57b86a7402f2e1765c1d5f01d3097c949ffff001d8d96ab04","01000000ccd557479bba440d8ea2eb3be76143d1ef408771e396da38d6a9a85a000000003f8b02f41dbc3c56c6921e6989eefbd535bc3ecb77acb70a7eff2e8ec9e9638ecd99c949ffff001d32a5ca74","01000000d7dc610acfa0cb5cd9424b392b7540f839ed5b12902fb744c91e7163000000006d9d7b77e5fc110d35d09d96b188881c7ab86855b2de444a1eb2b73abd99f1c2629cc949ffff001d186441b6","0100000083c3748a8a3d649a5446a8cc5e4a1128e54fe05d32efa468319c81490000000059d1c636422047347b5d8c6ac27a3b924de170845f7052a3de54e3efe17922bbe59fc949ffff001d27245494","01000000d37464c612c1196c429b34515c15059123f1b27ab531fb5f07fa2e3100000000eb88eecd3d8cbf0c9f53a20652f2206e365297492bd7e64cbc1f690fc62fa6e4b1a5c949ffff001d37b90ac4","010000000a5c4e2664c61194d7f99a0cd6f1bafe77e59055328f87446c984988000000006aad6a129ee28cc7da51fe8956be7f825ef0a7d6eba63a5fd868efc1776a763beca5c949ffff001d25907900","01000000b9c014e13995f8a68676e081a5bb4f9b62bcc480bf48e6dd07112f3700000000a339e3a9e682b7937eb4878896c11504a2e633aecfb2dc5a025af22b32a6041bada9c949ffff001d2ecd8b47","01000000a8d60d90d73639919e8f6dd0bc95f78da083b62a9c4e77f792c9ee3300000000c51f605f4de1d3dee8af317d18bf129a15de67ba7c3ab285c1ea0e60104bf95205abc949ffff001daf1b8506","01000000f335039ff5b004350fe11577ca07de76c67535ffd3237956dfeb18bf00000000aebfbbb806d5db9b6447b47e7759b7a8b388173e3185cc7e1d70d5af5079e7584cabc949ffff001d3213ef45","01000000ad6b90b9f2a3bb7a6c3008d79d73331c0b6fb15bc2470a83d626394800000000f8a7a6aa71f2479e41e10e5ef73fff2d49748053b30809a4df53f1684c9c4c1532adc949ffff001d17c4b7e5","01000000637e5cf6f99e29942e778f94d64c86317a85f9ebb258a7d7f59b4de900000000791de56f81a92f03931c448b88d09050bf4608f50fb42819c96701bc1a5ad570a7b0c949ffff001d06c86a30","010000006d1255f73bac07ab02aa75f4914113f5f8b03ce7534958d1462273b30000000089e07d8afb16a26bc2a8d33f205c1f8426427ab9192a635582ad4e856ec80ccb35b4c949ffff001d1a88d8fc","010000006047eda564ec434540c679e6cf32f4b258982e7c31c7f3caee154dbe000000001325f88d388befee11ecee0575903439e2ddd30ac7984aea0ceca271635bfcdfe1b6c949ffff001d37419e24","0100000013f5c360c39daa5305fa10c911d243aa8d775401de5106707c70bb2000000000aecd76f3869960cb2b592f73a6b0e1e2e8da43f5663b10d7b1c42e93615ffa713bb8c949ffff001d17026b4d","01000000d94b7246fd6c6ff1b6d3dcc539fab98a3ed7c04f3813d0ca652e2d82000000003e0d69994caa6cf8f17dc607c8f2100a56ef403cc9a1dab04fa9ae937c54f3403abbc949ffff001ddd6dca0c","0100000070b2f1623ec6fad29b20699a70f9318abfb801899f63c782465e37a90000000068ead34aa121042ead92b5309a4c428ed00792949472339574acd8ff76da483376bdc949ffff001d057ec545","01000000f616397befc282b1704261601a6ef25a01673d7acaa01e799779fd22000000002b79fb84acfc0f766b92319781b523fb3e05e6e832f7e994b427d7dc5a8f51de2cc1c949ffff001d164eb6b5","010000000df716a58cff708abf9ab7db1459b2b63a22f2c5634812213599cfb2000000009e2d71900be4761c55803653ee64396a18bf695fec770a68701cdbd653827861cec2c949ffff001d31a82a62","0100000040cc416a4c3252cb517dd32b5c2addde4f66ee555eb1e3904ef58787000000000824ee776b0a076d5e47c6717970234ace699e27a6624bf7305f8f550295b74971c4c949ffff001d3687f106","01000000d1e01d80c28155396bbfc0c0911e2e7e8adefacf97d951570a0b649d00000000d159a2b55c12dddafcc7278dfaf180268fd46dbb0fc078a39341552269cba1d407c6c949ffff001d37597166","01000000f1d048888bf939de5b6da8a59f2eb42590eda4df59c4724e8356afcd000000000b0a360b1b970ba751752a0b3d4e4226039312e57f430dd30dcfdc9720540149f5c9c949ffff001d09bfed8a","01000000ffe19e041d00b2a5d6570b49d5a2e7e5c91a91ad2827f982d15a715600000000849f6e85c5528faafa0fc8287ed43f59aa69324903612616b0f992b165188b5a5eccc949ffff001d2ad98180","0100000054a4c9c5a7c19e0f80f5699adc4cea36d9791cc64f34e76a52c47cb500000000c331151a39304a671cf31f8cb587f96300f08169b7f1bf03cdfcc9964b43320598d0c949ffff001d35f38023","01000000c2365f302ac18f713f38478ea2638c1615f24ccf1bf84334a4449dc100000000bb0ab05593cd52be825b9f77eae7c994bedfc1b2fb0c062b421bc14a3734dbc612d4c949ffff001d42dd6a07","01000000fbf3ae32b05e81135becf3d766625554cb6f42bf196314e631ce1fa2000000009902ba85900d1efaaa10ac97d731336da73d06c2af2539c4402dc950b37aaf14cad5c949ffff001d20ef0a2a","010000000135fb7a362774468c1576d57f40687d0f4c107cdbaa8111d7e1426b000000007dd48ec31d3c5cbdf25a8d792d95f0bfc9f0393d4f683636f296dffd5cc514f517d9c949ffff001d20d47f17","010000006d1645d65db4ca1a4828d64cde867229a672eb4acb39ba8d7c11f89b0000000065428e84e5ccdd0c879f89a87cc1dee852092d51dddc3b1739c9707470f21e75a3dbc949ffff001dfdfb4800","01000000155fd7e60e214d4ec980ce20d613606d43800d2e3b9b7e1cad25779b00000000f5569bacb7c377bb2c06a964301ed08de1e58065d78c89418089cb66bddda33191ddc949ffff001d1ae03908","01000000753fa542cb1ed0aab21bc3bcc8765e8eae9d1bcfea4e346a2a9a52aa000000006555f15a045cfd34fa703f6d5138c31a787d53289a32c7504bcacca5c0b66a9ff6dfc949ffff001d09424fb3","010000006ec8279d20f472e589426fe25ed1c906c1e0b26abe004d2ed893b2b100000000e3cc8b7545c48090ab2ac5650201bc84b3463577bf7629b099145556ba4ec67fd7dfc949ffff001d19745f00","0100000034358eb92cd36f46bcf6b02d7836726c6ee007d2185abcaf94bd06bd00000000b887771044b485d5291636fddf6950c850a12cedcdc8f8155204871cdfa27ae64ae2c949ffff001d0888a603","010000005a99108c40167efd5096304a6168ff335c9acf7dcf54e4709b965e0f00000000087a49ece69aeb7a9b83108635c31208853b5db3c5ec660f2ab74eb148fd2562f0e2c949ffff001d157e53ed","01000000d8e7fc7f61a7b8eba8f3df2a19a75366820302f161e5ca8f23eefcd100000000012f7eb8a77e1db0365086a7e87196f894e8e3b9f63e490142e3f72acd533d5f65e7c949ffff001d17f94c19","01000000abd92dfeac20e24101816449ec75f1ce2bfa2259c00dcd68cfb3c527000000007b8543728a19e912a15bf03648fa4db9fa8502e84f3ea0521b231e8a9c38656429eac949ffff001d18976b51","01000000358090984c96276e22a1dbbf9f72bdc0a7a9eef1ce79cfddf6a2b780000000001e9dcf77c0fc704e35fe4b068696f324ac2740009a8a8c4c8f8539d065c2e9e60eecc949ffff001d0435e12c","0100000063b658b38472a9f8307f2684ab021f81217a6abaf856127f2b1fbb9b000000000490dd3eee8e05b8fbb848fa246e03512083ea992f43a4d11d5e5750f6b10bcfd7edc949ffff001d07ac1b21","0100000047d4928094e1d3b331b9d301ad2a662b41068a6ed8c63bc3a12d5e5f000000005e69dd732c63681f7cd1ee6f72b3e586b7c3298596e3ec20d61899364ada95a5bdefc949ffff001d0cc14009","010000006cb9368523094561d4c5e8c7fe1277f44a32da86ee27aef7400089e10000000002bd2e900960573723fb1c8909ccf295c6fa72a595f31c8643864c9bebb29a2cc8f0c949ffff001d1b9d3fe5","0100000007762fff2c6054d60557ba835ea5c309f556d6860b891e0b79fb25fb00000000ee1b23923cf3efdf5841bb682f83962daf503a81606fe7c2dc1389d440b785a2bbf5c949ffff001d03483692","0100000090c12a8bb5b86cdd28c6cde3813bbd4a04be8002fa1c03b3f73a197c000000004da70e982f44664de1e3d736979736565b441913ee19ecfa748973ed82ea1aa90efbc949ffff001d00fb7efe","0100000038fd88b7a10618ec661b268b0fb1fbd6ba4bf557be3fd667029e634a0000000002bc88ec51af2b8d7d66f42447ed407d90424e09db025d9332f09b1de94bdda90dfcc949ffff001dd0fd2104","01000000174ece6161180c0b3c50327cb721dc0e9a5e1b1a231ca5574de4acae000000001454c4989289e977d178721aa99ebe0f8fb0bfb0b1a256b7ac0a148e768436a3e1fec949ffff001d3557feb3","010000006f15d314f9344143c802af5bec067f1846b0ac9e63ee4e7fcd3eed4a00000000a3074fc0ef17e6419ba523689fda018ecb1dc9f8aa8178303e0784bb691b66f34401ca49ffff001d2eadf37f","01000000da76309f67e25123dfafb90e677bfefbc290b70da1cc6ba0c7ca7d37000000002c13ac6ca046003bbd83f2ccf8fb95dd9cd9d8d29abe46985431c131b28765314505ca49ffff001d239867e1","01000000ddf8f6e3c3c785f016387befbcc0a825836f2af7412a5e7cd2d3b30700000000247ee0a65f432bf509a28b419c13a8620c761329cc3b40e0010c5f5f9b3d83958708ca49ffff001d2d5c8181","01000000392d3e305587b56e0847e8f253c69460fbf18ac185f736656c418a4200000000a8121ca4d9adc5e4dcd83edb612523f85d50765250703ee771e90e5fb426ff0d150cca49ffff001d1aeb749e","01000000c8368f8dd39c1e19b3dbe644fb9f22345735c25d23ca93407b7519380000000036d8671bd7862aed2339deabbe68cf395b4a3b7a9376d1a5215b574bf23478757e0fca49ffff001d08d182bc","010000002de66cc312b93d37166e573579657381b306b77e1087a7c391061a2800000000ff1fbfffeef773bf9cff1bc294d81e08c311965544f0b33ccfb5aafe5221f783d914ca49ffff001d28e190f1","010000007c2fc9a14eb4f1bd8eac02de9a92de8c7dab971a9b529b11b3614ec10000000058274a8dc51dbc250cbc35b512a849d9abbdc986104cd21e073d4e621a277654341cca49ffff001d1ab2ec13","01000000727872be3ea80e83ba4246eee0a1f6920f552461db1f7d936a3e7f7c000000004d0605eba4de5f343a62aa2fcdbcbf0ddef208a0bc29c03e23ff827f0b6114fa3e1dca49ffff001da8de6205","01000000a4a095d1e9080f07f072fb123767a97676777654ce43a12fb41de339000000005b70a1c9e37fc25ac4ff1aebd84318ed52a099fbe56bf645a32f3b955ee78eaabf1dca49ffff001df299c900","010000007b3108e108b24db9022607d2dd379f886ad00214aa7d5db5695d31120000000068f8c95420c76edcc8759f83d20e453ecc9f8d25f659ca1e7eb2e0f09a1ef9125320ca49ffff001da93ab208","0100000091a2c86b8823f47d8ee4cdadcb1d47d00d5aedfd294bc6758aa15776000000002072c83ba990fffc4cee8aaf40d64ef815f866803597bf949f40da0eedd06c2b0d28ca49ffff001d3642b86a","01000000d119a57fbde18cad30c7f4b866a1b5195adfbcefcd5362bfcbbc6a5b000000002fd1917810a9ba379f7056e3ca67348fc55ec89095ab28274c3968966af3eb2fac2dca49ffff001d396bdd70","01000000fc11822b40ede8726eb8bb7edf68e71cff81c8f82505c0821f5b10a000000000351a39fae8eac5d0a8eb644275407de0968f42fa3b3c418307978c7865b93595a330ca49ffff001d49014806","01000000a5364e5198f5362a11d88be3333f9766b1849c943aebd23f1830957b000000002f127561717b3e26eb8a9a047a81466cb04dcf6a09e7fd9a935078b1e1c043c64a31ca49ffff001d2e357737","01000000136ffe597ab3cf519b4d48bb6f6d67fda50311c8bb89e4abd693e75b00000000836218c9bde5cd37685958a354fdc053ffa0bada3602645b28d800b4dc07a658c533ca49ffff001d03d98834","01000000c14ffffd134b6d969712e8052dfc8fda0a9ef5f04c28d463598939fb000000005040bc64479d2854903b2038922be0aecc16769206e5def77ff0e9e5f69426f0b936ca49ffff001d6ca7ec07","0100000013e06ededc96eb9b173c08178c6379203e04f3ac10145eb8de8728fd00000000d93ca6ea92f02d168d05fd092bae4a112f82cd0e59a572e79228b45dd8b3924e6b37ca49ffff001d29ec1861","01000000bae9273bbc28fc769bdbf51e57b3a5e880ef8762b7bcd8bf2819351900000000eb28c3a6fe08f80a3a2f9534a38edd01a1cc7d431d243be57fa8ec58a710b7ef9e3aca49ffff001d1c8fdc5b","01000000e9596c5c68c0be615ee1c6385360dd5545f66b7d672ba508547035e1000000006d45539994ab60d97ba48cad52f7fb5692e77625e1eb2c21348250dc9e6d5c3cb93cca49ffff001d219826df","0100000083e88e9535a6802c37db1c600941ee100982704488e20a3b4ae7d0b300000000a00d463180ca2e3cadbcb6ddcc38c47ad1bfe28468c86c9f2dc04f67f0181b1d3a3fca49ffff001d361f4505","010000006057988a09654ed19710bb815a068a1d30c315c6d0df87f5ba840531000000000e4cb24cfd646acc95dc54126e956bfcf8662510325ec057e0b36e4b7c99e9830b45ca49ffff001d296e593a","01000000d146846b9e454e65193ce886a78948fe155193110b8075b741fe27f0000000001858fcbf0ec0099a27b17b063a18881f78c7bb4ac5d3a337678b12f4761783fad345ca49ffff001d32a5cf03","01000000aa66562ad3e34d64944743abb5d7f46b93f5cabb5a367a89c8877e8f0000000063d1596dc2159b3cbacd0e4fad46107836e67f2d3da9f473195838a20b7a1df99849ca49ffff001d32368a90","01000000192f9a02b9eb90d173311e7db42ca53ef5bc54581a394a5fc860ab9c000000001ad7c8609a068a1a6c1cc485df66bf1fb12c5b8ed642e82e4a4e2f9499bdc09dec4bca49ffff001d6879770b","01000000ccf9c0250ec7be116fb983f5fc87eeb6a5cbb61f4bfca0b03087f4bc000000002b859c0caf74c84c451e92078a269c73e734755004177b908ca265caac1ffe85254eca49ffff001d034a1d78","010000005cb375baf213771187076bced80fb6b7281f5e33103c7787045f739a00000000a2ad70b42b4978374c3c6d74477b4ecd97a0d3b5c1d12943c894b8981bc6e25d5a52ca49ffff001d36098aaf","01000000f4197e11c76583b31caca1e69f69a0d4e88d4a266c5c35a7862803b300000000c5df090ebede3a2e5fef285a277dd20dcc2052b60788646e13c5ef80fd861fc91e55ca49ffff001d2ced5789","010000002159a7c535372f6dad44c8c08c0b62e6395e88644971c6b3085da1cc000000004c6accc05d2ce60865f6030b742d19613ed1df509eada4282307d7c6d293cba2ca58ca49ffff001dc16d2c12","010000007727914654d9ede211b7269721a35228ac9984f5e0492980875b2c9600000000c823f882c71acb9348cac5f9762750dc7df6079451fc9ab0f3d585d1ae2830fbee58ca49ffff001d20456922","01000000f1bea710881b61eede66d81a1c4cf5c744a32905f425062769a75298000000000c6ae28878494791feca7d9956b6611938d736243f57a579a355c918efbe9605e95aca49ffff001d240df3a7","0100000033190e5971968b1c662f45a912d959a59c4ee82cefa6d01757e9352b000000003892b4341b28abb7f6f1fe9b20306b91f4c581df8dfef58f49dbc7688d6ade68755fca49ffff001d1c04135e","01000000477b093893051ba73440fbf37b1ef0cbada18e5a4c617a1d4e5edae500000000249eb7e6f9a801993cc420a7dc6f2bda9007d45654f2e5825e1122a9a3010cd5ad60ca49ffff001d1d6a7eaa","010000007b0becd3076399a403a7f0a1d8ec8bc393c68563179824cf6971e5db000000004b23714adb410da7582cb3128429df645e39134abb4b743e008bdbfc28108ae60963ca49ffff001d32017cda","01000000e72248f428059a7e96e9a20c256d6ef4ea6b64afe36eeadd76eb51b900000000089eca88392ece386d7a4ac837fea5ebb16a5dfd84f710416db119dff56a0149e867ca49ffff001d2e2c6cd0","01000000a4d426bc51210589b95b9f129389793c8d8897af89965c753adc33920000000090ea68051ec7f1f6e9ebd8a8668409f28b7c88727e4a75593a8ee738373059e5ff6cca49ffff001d24322524","0100000036eae25149d1bf7a1f66a890eb879c6eae2f8b4beaddd2023ad2fddd00000000ca52a35f6dbd33b60c12015908bded08dd79ba8b9870c24c782b7df166026ed1f871ca49ffff001d35ca0e35","010000002519a97a91f9327f6965dea77c503de173cf606b9afb3d0216dc497800000000e75e718c7f2a85ad6af507900c4e3b5998135cd4db3da6662104bd203a7763941b77ca49ffff001d2b5e3c7f","01000000854b3dfad58d9ef557794f5a73a4fbfa4600c9182df82eb4310484a5000000007e5b4ccb11c76d653cde1147ee1cb93111afcc01dc49f7538153d34ac29a47e8867cca49ffff001d22456f05","01000000d0fc9a001c77b117beb99f808e28d36ec838e34aae83e065481a997700000000fb5d97fa74f07347029874a0c1b108542eedef9bcea3750eae70d13547e202c59480ca49ffff001d1cabbe20","01000000245c14700a416b59469e017278594ead3dbe168da7bf0aa515f652ea0000000011c2904f3163acf99a86f9ecc8bd6179480a329ecacf02001d16596a10fff0b91484ca49ffff001d0849f742","01000000f9dfdd1ebc1284f8c5df68410b3bed5093b22990507f8d27fe612b110000000037fd13666a802808abd82d336c9762b2e66071d63ebaa356d9b22f74a7cec8454487ca49ffff001d1d6b6647","01000000dfa73e890f0eee93e7a45ae957d06421c57156533ace41f80ab9e99900000000d0d921a3114f0e52dadbeb790e99f3864e33bad9035c8d625cf3f183d39584b4178cca49ffff001d35226992","01000000409e561f4b4b3c275f8baef4f7874df0f699361c301bd8321116ff5800000000eaa6bc7bdf3b670c1c6e53950d2dbe17054311327fa5f973f7caeaaad34969625f91ca49ffff001d23ecb3a5","01000000c4603ccda2b4c336f93b360204c1ecc82a40392973cc82ac069f080800000000a51f3b974b398efce78942a19fbd378882a95f08b30d1706af4a0b359ba6932dd892ca49ffff001d1d2e6642","01000000e862ee5dddffd9e1a04806a9f18b87e52279239f842f4a6b476c847b00000000f2810723b82ccea071a2b5fa1f7fc8ae8e99b884f8c20dcb711513c5e0a3e8417298ca49ffff001d34057721","010000004abf2cf51a516d9c90eef0772fe9c724fa07269e71d74b9b0811291c000000007109fe3286d4a5ec0ed8124db97da246d64ad8baaf3ceb2016f39317cc68ed24f199ca49ffff001daa78de01","010000007898d818ca420aa91f3996020f62e19022334fffbabee4184196460d000000009955b74b427f28a508da4cf827c128dcc7ac1f4c802f16b2efb0faa009f39d57449bca49ffff001d23158bba","01000000f2ce8809f71bd999e2401e1eb67725a24a11edd2819d77206d47208800000000884b0a5802931a383d4fbd4647d123df6f1b292015a7d8df2390bfa019c472ef359fca49ffff001d064affbd","010000008a54c005300c825b57cf8f09b54d38e5ff554edf46d3ac777b41841a000000009f700c2ff73bb9936d5aff41758439b11147bed730a42af296b808fdae3496cbe2a1ca49ffff001d9d31fa0b","01000000e5f89779e7c2d99e77e3e0ee6aea033829d47eaba54e813dcfee0ecf00000000de471950f1f36a3fc05ac0708bda82e73181c0ae5c0be9309a674b972d05e4aab3a3ca49ffff001d074ce047","0100000023fe8db1915a93500e34c8c3d0f716d5fdfd15ea3ac2dc46991f13e4000000009b665bb98d88d315feb73bead6dbd15f101158d8a95201359733dec63b45500660a4ca49ffff001d7d004c03","01000000e810c472cc3890e6774d06b6cfa5ed7cb8f74e1376cdf32b43890b0c00000000c4375a07719664d549e852b6896c290efb5413ba30c170e5ff53cf0c3fd08ded64a6ca49ffff001d2916889a","0100000077206e196a8c7f449dbf71faf1bfa630c76582b6738570243c817f9a0000000027ccb4cf773d0a6e1f1448065448eccb27cab42601aee8ca7a30595671ce605665aaca49ffff001d26087db8","01000000811e0edd74c1f8c8bc0ab40e72a4c9df598712f9b8991e45afe86c7c00000000330cd98eb48d894443894bea6e346a89e9fdb8827865262d487cfca56ecfd23561acca49ffff001d00883d08","0100000035ba29794f84f24b9b10c43c6a22db2dbc72c4b317a63ec17bbf564600000000ea507811a8d362e26b205ddd4936e27835cf05127205a603876da0d6c674ced173aeca49ffff001d2d88168c","01000000c03765f2c51da9b51345c8b7ff55161095aab3a4c1afe99d0d69d14e0000000000e57b1a5699da019acf7a602332f5465fd5d210f7a47fa3ba0880229387f4b044b1ca49ffff001d2a104a05","01000000ee7c227f8bd23ae7a7a6b440f09897ca9465da9c0dc6475c1ae6a94800000000437864c2d27e278eb67db18ccad3235e0bff3bf65d5b317c110589a1b2c137f9a8b3ca49ffff001d1aad5e48","01000000616ae6fdadb1d736d2452cd4f51e7e0ac44c7304a0c010e0880e7bad00000000ba3f04000897cb2993831b7f648cd31c96c9936414478e664c78d62733b4ce371cb5ca49ffff001d1de72525","010000006360523e3f135557ce368351cad44942029c24dcc9c295b96e2354b70000000065b07749f0be667f3dfce47d4e3370a3228cce3c89f41397792e2afbaf1a9450c8b8ca49ffff001d25a33281","0100000085c7a95e8023159682ab4eeab1c5b323663c435fc40b84cafc82cbb700000000162c8c510e9aa7646079af7c7313f355bce251247aef000bdef324d40375c8bb35bcca49ffff001d631f2c07","01000000e9970e89df0c198a1b3295d6dca8da06d2780fdb9dd2706f518e7833000000005089612930d155841eaa7d72459bd3f01639c9dd1eb73177f0e8ffef77e1b291d1bcca49ffff001d0190ef38","010000008e57d95024d9c7bea2b9c279192b47e569d5901eae12d7747340fba9000000009032f30dc46f8479ebb659398375b014f68b51ee071efe2e31a1d36d76a4515654bfca49ffff001d4ff27205","010000001f2a31b78ca70ed470d39b059a010cc5d0d28906035d785e0368bc4100000000abfd5148f28aba73317c71f48e24a38100b590e643024140387bc8e17f00b849e8c0ca49ffff001d21970c53","0100000010edf5118c14caaa6ad5f6d9e59969081f662abab7f4f6cac82f7f7a00000000f791cad8dbe207078b953f0fbbea1c698a78411b78255d53f0009a701926d169dcc6ca49ffff001d3078a8db","01000000f082b3e13f73031b33eedd4a747c3299a202a52a9a7e8a8c5c164cd40000000033c980e9ac15ff73c13f44713767c23b354269f082345aa7f9c9fae4f883ab5eafcaca49ffff001d1406fb12","010000003f53af26970eb3529b84f992382d4a0115844fa0abc18a10fe8faaaa000000006c12a8cbaecb782e333e45a52147c319235d976f9f04b64b9731e35e2ae0c135b9cbca49ffff001d00a74308","01000000201751f35cc466c6188f48950ebb46a777eb9036a055db9f6b2abf23000000000dae94eded04f981a6412d806b43f74473dc0d5420cab917090249bf95b299ab61d0ca49ffff001d1aac2606","010000005df3e8c0968ab4a6de61d08e6f75e0ec3e76a62b451666b7886ea5b300000000b5b5a5d52d72ef8361ed04803421a82114d3669d1d7eb0624347ca4616c611e29dd2ca49ffff001d27ecab72","01000000f37544184434d5917c4fdd6e1c73246b2392841a9ece54c028b130b800000000e02dfebe74468b53e40e3276555714d9bc1a7123e80d105d58848eea1a50788d46d4ca49ffff001d1a26e706","010000004f65fed1ed6f6bca39309aed8de98640e392bfc2c931596a51bb0bbc000000004b5a6671b8ca4669e070e2df0304ec6b53e135336f3c585844d1b11c5f061aabafd5ca49ffff001d0e4ffc02","0100000041aa2d9f23db54732db65dc3a2bcb636733e65a2061bdef151d36ec70000000043483a8a9cf1f40cb3de2fae70115bbd24eb18fcca726238ac30267365bce1492ad6ca49ffff001df6f84d01","0100000038599e99f5ba3768ffdaaef6099e3080672e2943edac3089d03551e40000000029f7422c3076d5a558931db6159edc4ec17ce5fea6d181cf0d11778d9b3c3bd0f4daca49ffff001d162f64a0","01000000d27a0a57c11dab1532ddf3734d297c275d2ddc10cc15945e4ae1522200000000ea6e6a5d6c5d86427132b89d4fd9414d0e8a484c6652eeab2823c5aeb0059a3df4dbca49ffff001d6e8ce504","0100000098a04f67c6d538f9b4e3df81dcf1f3c3d572776f1ed4ee28bb4dee8f0000000098ed63858000d494d901018dff6ad5edb9f19be7479fd23f66693ce96c0b8d4660ddca49ffff001d012d4d9a","01000000bcf331d97b56440d2b94152d25ddc97d4a2d21a32f7e740a867934be00000000681fb825183cd2ba5c55b974f4db4bfa53ca0a237acb02cae094506f58bfeba9aadeca49ffff001d21f2885f","01000000b65c6d7d0788a8497d307e14c61f749650eb24ceea842e1acfcc496d00000000e9988b474bf77487509620d40fda054da9a88300d3753cfdfedc29eb2021043eaee0ca49ffff001d34209008","01000000471dac58df0841b3be180f9cbd06a48a4bb31e74da3515b1f375b2eb00000000eeeffb194fd5f378208995432904c8582b097bc3f2d32c50ad5a1b385cbb0b5786e2ca49ffff001d07f1e40a","01000000da7c1af53d3443f4a29ff5beb31615c0352ace6450e0d86b493e86fe0000000073ff6ad91e7ab3545d9286b4b2f0b6048ef6b67169fcaa60d3eaa22c8ddba76d47e6ca49ffff001d3feb7c10","01000000dda1f31b9019d1b26cf9394fdffc631e6c5aa5d52dd99a7f0ab09a1a0000000039d0307607d14750dc458b779ed2cf2c035d1c30d9736207d620441c410ce19257e8ca49ffff001d998fb607","01000000a6150b88b1ac0134f6cbde8d1edeedbfb752ec2a3143fc5ebed39030000000009af26368b38232d363246e01f91cf595fc38766858aa9f34a4a0c72e92c325ffd7e8ca49ffff001d165fc501","01000000713320640449251b97d4764a781fe08c2eaf7c271ae8fb662b78a25100000000a6d4c8287633c216c072af5d55203467af25ef5090b457383cd04033c9b3151c14edca49ffff001d26cbeda1","01000000671a9f890d94ee90fffec258c15042a2ea01b277db5a9691d77bf9c9000000002ea2025c117bc586871505573cc131a013097f5516dab1ab8988946c2473592dcef0ca49ffff001d1bd806b3","0100000072a9b55e47201148415b76a23a81a5b383c0bee826a90b865233e42200000000561d5f7eed71582a1ab06e7d8cb5419b0ef1f85db03ca714f3204c90414a457d14f5ca49ffff001dfe9eb508","01000000c3a846593f31b0de52b51803bbe034e75f618c4042a0fa6a1ca988ea000000000097567f71d6c1910e37d849ec1edb73b9e769c10c277197dad76edc827127c505f6ca49ffff001d2bd0666f","0100000052525622c9e462d9a28ebeef09412ddffb7dc3fea5baacd4e6183ae90000000046b12d9c668c5b6f477ed9ff0c6c1f1a4a1b6fa8b3fb041a4df98a7d0267b9828df7ca49ffff001d776a9a07","01000000683e2adb05141c7cea9d77aa33ac11ae66e7dd52b0f630cce973673700000000bf780c614c2da4abd7112fc5f41527b6d7f7d53dbc12e8ad1504e04274e10d75a6f9ca49ffff001d37fe8f97","01000000135f4fb9d90102c4b794ae82685216d7ddadd2e8991ed458a99cebb20000000002ccf2b799733e295757aae20c060b95ec35e2737c71123b80550dbf6766d791cafcca49ffff001d2e936008","010000003432d88983afe97226680a458ec43cead51400063cdcadca0e624ea2000000004d05312838f1817834810a1f85ef8cb87b0f17ea3d8077ec08030ce362514e0077ffca49ffff001d17e7ed73","010000001f293f587e482cd92b2d519bfeb342da404f85e1e6e9a296dcfd3b1c00000000cd0af075c38abb8af2fc7946e9df492df89e61cf7068bd5e180b92cae807a16e2b01cb49ffff001df1f17408","01000000236887d284873c855af09a68ba4a042e566665e63bc3e8c570e1f96600000000ed55528abc69aeb3ad19fe60264fe1f1685d896f858e240009d5cf6f326fffdf9c03cb49ffff001d02f564c9","01000000dce971aff7d58d73e03c16ca994b6686c9af72b9004e42aedb78caf7000000000cb24a4fb44ebbd4bccc3f58e7b551b2a6f5a78a3193529fb6ff405c495860e9ab09cb49ffff001d15a5b506","01000000974b5e9d918b6be8b226d7b5ec1c245af107168ecf29641e20eb0b5d0000000072df3a207a41cbcad2003fb94131467b067e2957115eb9c9748c8581b52c859d550bcb49ffff001d03ec882f","01000000fdd1b1e725f65c0030b9a112c0b825a3bf097b29b5cf0ef467c2c88f00000000ae00f318bda0f740942060e5fb469ec7ca72edd7f68898abe4bd78a79f07c96eca0bcb49ffff001d2ccaf702","010000008e8f0546e10b420de8fe9e89f88bf242d975cc0631055bebe5551d8600000000a5179b864b42ef1f1d2acc1f1565559ecb65eb171a635889be5aba82bd15e6be2d0fcb49ffff001d26336b0f","01000000910f895d9f489b83e37a2ec66099e25302f74701bde9cc744ec35ffd00000000d80c6b85576f3f8f386358ab2e3e427cfaec098fe793cadbd4d81afc7e954a08da14cb49ffff001d1ee0a1b4","01000000ca51768ea8860c3b750344d1e510060108fcc62b8af3b781671832f3000000003930f7c4ebea885726c99336918e2985633fdff85bfd87ed2ef59532d2a8e0fb5c17cb49ffff001d39865e66","010000002b3b5cf2e1ee6166ac0e95f45a6bb2c4c821d2ada171b2c8f1c911b1000000000911f78b740a36594924f63580bdd42aa04f8ad4c09853394af3819c4a6372e21b1dcb49ffff001d2f909776","01000000467e1ab80689eaf696fd89ae1c4b93f1c8033b34e1542424ec88f59b00000000efba9f4e51ee86f0db65c5a35278628e5f8fba4574aaf9256f78f6538d7b83d83b21cb49ffff001d05eed355","010000005fa34a8cc26996a61261e37b05ae51360ad1af19fa0fb0b539535d660000000087c0f43a5dccfd67a0f3dcd463c05388d9dc8504effb60d03dfbd3e86035d7923e23cb49ffff001d2a6a7fa3","01000000af97b33f27585ce1c98242389ab4398773aa9bc2617d08968a6035f4000000005ce56a0ccb8aa46870dcdec68565d91dd643c3c5cff3fc2e10294463b8af9c322425cb49ffff001d37d8fe2b","0100000070472350065de5aad4b3d2758a45b39ce7d99cecb2988d6b5d44dc260000000029697bb0b7816404b8469cd3698032b1b57e272633519053880a07336f7ab5655129cb49ffff001d27ea6699","01000000554a51c298e76dbfe0d41e15c848f33268f2cb2c95f603f157003305000000003aa25527d945f4cf344bfc2bc2b1cadf6fbad64e9e921125a3ddcdae5d704c13062bcb49ffff001d03f72393","0100000084fa64f9d6e07d0844136036fb1e36c52a33c5adb8d1b9dc7faf1844000000002dd0e20e55acd44a53a12890d46160aa03cc3b1bdcd16cecd76422783d1ffbb3042ecb49ffff001d4abf310d","01000000f6b528ac661e57957a310985ae05975f7ef282ab3a8c05e5b607e3d70000000090f0b17fab836dcd094acb8f78dd8ae30595e1e6dbcac7ab8089ff740c635ef1942ecb49ffff001d19c43ee7","010000008dbe5f578ca38b6ed26c0f03809c8d9d032e6cdddffbdeff801d7c07000000007b5c35284a9e68eb1289684bb28d57e98c5cbbfdca48bf6b61a81fbb5e5e49168533cb49ffff001d0852bd4b","0100000046969f2180305aedeba189c7b87d8dc21a7a550f33899a404b85e6df000000003e5b57baa593af11ecf77b5d661bc75b3255be32b43bd90015e6222bf1f80215b738cb49ffff001d040e1d06","01000000b09484fc595e8564845a441b01e4e03cc82c5cae18a628a68ffe3c1e00000000f722abd4cf798617a1a1f2a628b427f91196d0c9a5f951aa3cd853a39ecb19b3da3acb49ffff001d06b14f61","0100000080c1d4581e923f570d6a16fbe14103e260727d9b9ce0b7ef6f34e916000000002423c7d92d65185e4c0542a7709132a98b05741d5070c299a7408ce83967782d333fcb49ffff001d33519387","0100000058eb242e0c283a7e3c5c1e7e08b68273a16e5d34847a875eb4435b3000000000212dd052111c4d03e65bc9f101f78d6d1226c6891a842ab209253f83f66290623e41cb49ffff001d22744774","0100000024af8a5b83f6a5680cd202135dbbcaea1a83cecac286474423958c3c00000000f519c7a18e60a4a694f3134421166edda01fe6eaa1d2832b6114e1122633e0064d46cb49ffff001d3220413b","010000002542771faa1344f36cf4d1d7f5e2fba9e24ffb5131b3d72284d0ee590000000052fef789e3f0219c41fa1eb7de864f62bc58bc6e197b445b4fcb5475ed2e13409c49cb49ffff001d2cdc7469","01000000a3bdfd451ab4d3b2d7ddb239799fcf547b6e58732402af71112915df000000007a40b9e9d05a98bd972b61dbe5f0405aff35bf9eba2dcf77426458b43f5c20f21c4acb49ffff001dd51e7d02","010000006de3866bfa6ef47e8e91fe7581935d2e3f9f65ff240b74422e59cbff000000006bc76a05c48e5e7a0d1d37289f78b3ad76d9e0890df3828e4a06e8da1350f94e1a4bcb49ffff001d36700411","010000000cce8644b4f19b468bb63451ebb8a9a1e051df529c971be85e27e5e80000000036d64b32521fef2cbf2a3e5da61a153f18ef6efa091d322fcd53df1b29d54a18324fcb49ffff001d2a492015","010000006a7293d9850534263ce7485c7348427b8e67c874c994befc2b06be0500000000240789d0a5aaa088f081b1e72ebdca35284cc4082074f6fd4337c356a7c5585e1c54cb49ffff001d35c96d66","010000001c6153cbbe7c9e3a7bc9fc55fc35f7058998d38491249e15c440dea700000000d1ba8ae60b080256f232ef3a3c6f51de2fffb6fe9b8c1cb3cb8252d3c2646708cf59cb49ffff001d25d220fa","010000004e450ba9cd6dc242899d110aee3d647d9d7d99627d45a6bea6e5443e00000000f272dcc861066a2dc1059eb75d17882d8669488eb8629075d690678ebe00c920e45ecb49ffff001d1ec3069b","010000008c8c6e7d6777f8aece4d3a9d8b481ac1c53cd534d878b314e88795b600000000e3429264733f253b89ebb139134ade742db6464964c0aa200a9609661377888ac560cb49ffff001d2ae7ab6f","0100000059c50016959f8f30a45a1425f2fb63e6400200e4d27a953609d667b30000000091ecfe23921040d888691cbf56d972c99e0cae3635126f7992180069a96ae8fd9064cb49ffff001d1e6beabe","01000000ba7842fea127ed8af6c6ae3cbefc322031e800a3f8b9a6e5ab6012b0000000007fff063dcb1a25b51f503181668bef154c73e1da9db1f49c4480df58014ae9050e69cb49ffff001d1be70f7f","01000000506bce5e1948a56eebbff44d81ac53354428c48e27c0ac74abfd551e00000000d3ef7e2ef4bdcfc26ec944d347d990b20e708c16791fb33ea06d65c7df5bc991a66ecb49ffff001d3574979c","01000000e234034f9ac965ec2a7aab638c0c3676b4202efd3d25c887a7f4c598000000005e4d0ee7a5f964c3bf180a361160d1f73856ce76896d2edbf696e38ea3d151fa9c73cb49ffff001d007c0cbc","01000000ac2f25b1f5d40a3d256e637df68b352f7f36218183866c62d874bdab000000007c3c4b8822013f36c915067a97bb717998d598d87567fcc0cc63cff2be0de6377078cb49ffff001d363b82fc","010000006dcd687d58fcaec4ce00638602ba456c3a407cac1f16dbf33deb97570000000028f0b9cdf18520408b53cd695c3f6a03f42a7031e21b76a030eee7fdca7c7b2a337acb49ffff001d1d515693","01000000bf7d15f78f615dfb8c8f1d899ec68c3a099cbbe4bffbdba3fc6b98a900000000a4d92d648220200bb318471e31ae87b25f0ba370830c3779b1255c839397e6de737fcb49ffff001d14a6a837","01000000896002180b27c5ee88ae38b66c3ad6ea7889505e47f754bc5a6e149200000000e86b67c2d22ed739f56a5569a0fd4dbc3e24863aef814634286df83ee5a58222e47fcb49ffff001d1508dd00","01000000f7d1eecddb3b00f3ab12121986c256e18576c0b387a8ad6c460425ca0000000053a860e6546e0970a1e273def1d666e49e5f0e00175a75c48cc0f4d025b691446b82cb49ffff001df1f2da0c","010000006c6a306476c6e5a4c894507d199716679d64fc81deac0b252a7f22a30000000092c3e84d5f51cbf4c4db1798ff20a04f34e15a599b6b008f1ca3394c4996f1cdb283cb49ffff001d1450bc2b","01000000754c6a7af7ce669bfdc635650be5ac77cd4024e8f0453fa632ccdcaa00000000dcabfea1d71281aec267f0a3ef193fad8254a272492fc6b26ca7b2b564738903c886cb49ffff001de8d6590f","0100000083fb14ef6ef69b1598c3a1cd5dc426dcb6cf907907ccb6df3b3f1b2700000000243dc077df3e9386a5edd31677a543fa499bf1f8b96b84389c15dd287613af623d89cb49ffff001d1a30e9ca","010000005e7048a257ec810d6a603f18e5bff7366f4cfb8fd662aee93184a9fb0000000010801e2954668fad34156811ad8373f63598f6938b11660977730f8f226ac4bfeb8acb49ffff001d00f86abe","01000000e972423062a5b8677aa4d39202efd86107081f7829c165ee931e1558000000006f60c6ebd24d41e2717182f59c8daa53b7c8638f44d472d22bc162ef7d035a69ad8dcb49ffff001d03bd6fc2","01000000a0e60db044de5768f9e72359c6b106b8fca6ce1454d5619e1cd46e3700000000a12d76fb963b2b100fe684fa8c8c04ad678d96eeb236a7ef663082c60c107794e991cb49ffff001d243ede87","0100000096330e48b0ac1a76e3ae093737011ad50fa3dbc62b6a2dde52de610d000000008350dbdc225bc83bc7c02b4c1388673c166b0566e3078375764ed05788f3abde4494cb49ffff001d05de2b81","01000000c8a295e28526ecae88ded61b3bb11c9cd83e5f72f575556bd968fc630000000087b7a7d65396bdb1a0f79132ea71d60b75a489798f9432f2cc0d768a38d925c1f696cb49ffff001d04985b1d","0100000046dc151ed03149bc910a42137a097be569f2e4bd37f28d5ad864f5f400000000427abd0409e0b51267fde0fb38702e6fbd406be0689c3bcce964c0621802c91fdf9acb49ffff001d2397aeba","01000000d6a21ad409ccd0635bcfe25f0a08ea7b1ec026d11478cb701c3396a900000000adca2aa091330f1e92e4ddb105645f92ade472dd537563cba5c4bf405d830188869dcb49ffff001d2859b3ed","01000000d4555bf10fbc1379094bedf662a3bf3b0cec5d52cf305a53014a302c0000000027ebe9e90714be80ed0add7bb89ae4e33a2769c3677db6e6f26611cc4f501e9fdba2cb49ffff001d1f8d6519","01000000f1f92202519a9cbcfca1ea5400c2646c2ae58794cd78993db81c670e00000000e2969ccc44929498fd492ce9deb22e11cd87dc657411f7d1df214f457eb103e577a4cb49ffff001d2474f2bd","010000008db7114eb78bf633cfd7fc050aadff3727f1dbb9f14ea62760c7d896000000005aefcc665bdd1a5b33657365f180b180501032e8757e9f9ceabb996c09f2f71518aacb49ffff001d24acc602","01000000a14b72e02b3fffaa95550850b6bb96ae36f3cb83d65bbdcbdeea683e000000000391ea3d36b55e3765d1af20c21950336dd580b84e91c5eeab8eb86d9b8954502daecb49ffff001d018a6046","01000000abb6bfa0c8be5434199fd0eef5bef982ba5b180c8c926dfb1d2c987e00000000f32a1a28381858ee8136f13f804c88721f6a95f37140d9d4989efe98a3a4835830b1cb49ffff001d32eb3405","01000000a03c98308d38d32328936620ceb43885eaed167e104b26c9db84fe4000000000c5160e8797c2937e23cb2f133c7c94c679c7017912ff90ff164da7cd926285146ab2cb49ffff001d29f8e041","01000000105cf01893f88b994d305580694e313d01462054ea3ca99f9a04af65000000001b2e1beb2354e694d9c08f420f24f5883c92d7b3e1e11e18c372a69e37afd2b9cbb4cb49ffff001d1f453304","010000007e995d969d31960a0f4f888735eedd204fb8f571737a84339608f1dc0000000074d1c15d8975f76e7d7884c853eb9d6fada477cdd68630733d07ded58d6e771b88b7cb49ffff001d321b842d","010000000205acac8950c5b48f9c06a919537db5961571546756a703e5b0732100000000472aaf594afb0314635ef70d251dc599d9c462330af659670fc24bcd18ebecf447bacb49ffff001d4bc30e0c","010000004b9c06c8060028b9392436a0c46bd38092c47ec43337e8080b68e6e0000000003a1d9ecf8aab6fce032a985e2350205cc61e8a228f0ba0729ea71ba9e9f6594f7cbccb49ffff001d2d817eed","01000000efcab9c21b9c3f1fd8a1928e5d05c92088c2e4ec5c23ede574943e9c000000002d249f91b835baeb46b62f8d19c3e65315cce26ef20a0142c8505b67d2889df72fbfcb49ffff001d05d6c144","010000006fc9c0dc0e25834547e2bddd807e1fb7bbf620a6c35d4b5d64e1ecb70000000079ce689a6f545d3dcfe8be6d1925b07173a1a8a21fd4dba4158fc6606ae1e5258dc3cb49ffff001d1fdb0560","010000009d018d7281afe4d2c64a42f1542e8ce22018d38eef0d8700ad80f52700000000e2e7365b1e079c10d8575017d184426592455113c08dbfcc8a9219af928b65ab33c6cb49ffff001d2e5990ee","010000007fc868c94a73592858c41cbdcd8c628a97ff6f16408cab451b64f83e000000008cfc7c9597f30fbb384eda821adf2113c3409fa06cc8021b9c45369b6ea33d8b81cbcb49ffff001d0482d577","0100000025621171094c925c293f3ff7924f5ff6677f33abd935813acdfa114900000000242d5aae5a1c21b9a33b86b4244f425046bfa292148d8fb22ce460bc5e65abe8c9d1cb49ffff001d13fe47a1","010000000795de00ec777fc757317e94e671f7120a949f8acb05201063402f5f00000000c64371facfad180f4eb1e4ccbcbd9cf51401d305f6344d66bb22e3b660326a738dd5cb49ffff001d1a7d7442","01000000a19fa58a8c8a165b160ed2de00cbe444585ef40370e7a77d516fe6fc00000000e8359be2cb3e73af31264b3897795ee8477f5fdd37a9b6f9a38befc3542169b953d8cb49ffff001d099e7e8c","0100000007cd694ce7126d21c3b4d64f267a85e5983a7047f4873a01e8b8c66500000000e25a4dd8e0ae7dca523b3f613e8445c75dbff0b07b23d7ad4078283d2c925cce36dacb49ffff001d142d7ea0","0100000034bf3e683477cd7fe00359afc4c257c2d433d6879714aa5f9f2b1db500000000896d4caf76e5c96f319671c037f4b457a98c982d43f4f5abdf87356cee5f4327e8dbcb49ffff001d90f36708","010000004d6e7e752890b7fab0e34f7452af86f076a3a7b2f0235058ae735ebf00000000c2bd4b4ed8fe70b62642ec214c343a7c5940ad7e2a68aef93e388512a81198bce8dccb49ffff001d175a2d03","010000001b152825966ad9ca8d8879a4a1c1202d25f6577fee045415b70a275600000000bb2605280f921fa60e33446f3e8d344f653c0fa3c500abca4343525724b5e338f2decb49ffff001d20dc62b5","010000001a793f339deacabf5b5df8276f5fed2e6790ee407f1c9ce2e35a5d8b000000007d7e50f29adc9517cf5274f8fd3683005264673887286ae31e0b1e404bc6f6044ee2cb49ffff001d096882e9","01000000d235124f7e34f27e8157757a6035f1a0870610b7b86d4071b01e55d8000000006c7d0cdf49b37986b3a2ca76fd766b6b1c17900b59d67ce33cb5892aef0a3f049ee4cb49ffff001d1e71813b","01000000163a481af69cecd387c4403096195b26099a72eeb3771c061d608363000000001aea7fbab535751d0814455e1c8b9b5eb5df611fc92601dddc381b03ed08f51cdee7cb49ffff001d14efcfd7","0100000045f07afe5ce78696905e6d19fe21507d939efcb82d09a6dab739954900000000fe01fbc09aab69cd9d8ba6509776995d79a75be4da1ed926d3b83bd4ffb14f6549ebcb49ffff001d3630e14f","01000000c0b1d98db869a0dc3e5027ff828f9e99dac934d073a17f40f238b9a6000000001c7f227870a1a74fd6ba61fd1daba1ef860e0410574ec2b8ea46fe2939669572deeecb49ffff001d16fe6764","010000009b4bbeb9c25b35c3614d38bb6c858789e6127e8fe895dcabe4bab5740000000063af3eccbdab615051a5d2d5276b1fb22748472b536339142cf658ef81ddd29e69f1cb49ffff001d34ea3723","010000009fb1d4d3cef8e425033ee167e46c81838802dc7f1c30400f8b1d74cd000000007105c2539e50b898bc9d0e2ea4075b2dbf77d86f6ae34177c5d2497b9e098d7ee9f3cb49ffff001d23df7cfb","0100000015d08dbe58e976f29c7ad417398e1649d5607e9afca421b49cee592c000000003ab55a0b0ea16690bfa677559590c47295ea8c481724179c570b1c0b2a4a1f365ff6cb49ffff001d24aa1a3d","01000000009ee16e05ee40335c7f52621c540513da85758fef7e3d8645194ea900000000c78f88636910bb942264ade47d61cdeddd3f9965bea24bec7b42886339b3fa9278f7cb49ffff001d89827105","0100000022b25302e593e4a68468c70434659bd284f8371d97a0377e35d528c60000000056858d1603412a0a7448a9a1f7493dad64de8523b50bd9346c30870c4ead2cbe30facb49ffff001d08680718","01000000b0a17d18f21cba4b8b45f8ba280b662ad112e752556b33fc214e1fea000000000f6b394d1ff9290213fac103d326746f34e56b82858e1a1be2441b136744699090fecb49ffff001d2424afe8","01000000bd0c4f6a09d39c8ab1354d1cdca1326d5224f12ece7975d9b4e4edc7000000009cd83ac82405674d9ce7a06cf7767dda89b4d95e0cc848e133502f74d6c4026af8ffcb49ffff001dad355703","01000000b07ed04792e740704a9a5478abd5cc3a48370873e6064ec25332967d000000007457813e64b96ce6a087e50d9ff46414c851e663439c88b5be4690acec14af4c6200cc49ffff001d226c96df","01000000b2f65be7141b13d0b99a945684e2203cc2763528156af40df11c9097000000008ff33cc578006b280f39575aa20c8c3799c4ec0a4c98129b0c51d6e7bd620b72e303cc49ffff001d35ba8fe3","01000000ae879f24d602bcff1d6e27d0c29fabaaff5018582231f756ca5570910000000024b1f7a5ca3f5fdebec65599b3e311cca1679fdc26c19432e97a0a95280be0c73506cc49ffff001d2e4e1731","0100000051800f556e6eac41de4425c2b55fbe4822e8afe06ce16df18906c11400000000c4175efd392760d4541476579f64dd6b2aa9ce8fca07cbf0f35cd53d1d5e8e3f6109cc49ffff001d0291ee0e","01000000199bd7479b9c95a0b52a758fc9c3a0522be4747cf638b6712e358444000000005d37f4dcfc259e1718beda774006dc50163025abdd5b0f9cb22fb120cf2cbca06d0ccc49ffff001d33649fc1","0100000072c39eb05ab5d3d6b710f3ba35530c4248b7006f2951d9e28df49a5400000000cd51285a2bbbca758ed0839b292cba8797140aa9fae095cbdc35788d025c43b7cc0ccc49ffff001de1a9e601","0100000024d084d45a166970815a2f73084e9ff28b018fd3a64de89a872cdfbb00000000cd217952f319587029b816a981a4a6f2afbbff7bc50bdaf60bb656fc97fc32760c11cc49ffff001d3263b072","01000000d3714f09ed810c3a44ee5b8f20ec4d47a910a883864d41701ba2723200000000f3c28a2b01dd974f54d4c8797362de7b0cd4c0b060a9e06e538cd89d3ab2ff01e913cc49ffff001d2d04964e","010000002d432a4f2c1d3545973d23f036c4722c16cdf300eae883ffca54de6400000000c715e9060e740d711a47eb54b37f3ada606a90c0d19ed6aecd49b57540984d5b3c14cc49ffff001def014b01","01000000cf3a80f8603a0ec8f83c818c06f1fd2661e593be6feb0b3fad19966100000000392c485720003e2de7c90a3252a353c9229a943ef56cbf6d12dd54ead12c5cae6c16cc49ffff001d1c902424","010000008e78d84d0374ab3ee422691369bf76835fc8a9ff8131c82a00dcdb3000000000d09cf05cd5b4e77064d66f574b100708ea07756b68a4cb4168165b085ff9dc8c6f1bcc49ffff001d0b00c018","010000003338df8f947d7c59dd02da889bb9ce9f91ec1e957917eee81856bbdf0000000097a025c1b9acd1adf2bcf3fa8d41a63284e7292a889b13d7d9383c5c62c0a946eb1bcc49ffff001d36411576","01000000e5bd85390d6c8e908779a16f674efb90d20d3f1f6aad0d47a510bfb400000000084b617b3fe08d1fef69e7693c02f65a453dbde5e7dd5c694a1dda3b9470473ccb1dcc49ffff001d095e0030","010000004a3842af5692f7ab1c9a2ec67b73c26ebef2904b09ddd8589c0272d400000000dcae02f931ab3aa00a04a74a17b50bda6fc9d026ad674f08bf5757d7b50b57ffe01fcc49ffff001d2b3b43fe","01000000f0c8c18792ec35a649f8771f8aa617024e508bf0936d634f3b046653000000003c31e1b3d3980c9906d8d748f479ae541764c2e80634faf60f33ac52b17558c91924cc49ffff001d3787da0c","01000000bc153c387c16acfb0ab41dc25a119eb00d326bd145811df24238a730000000000970199223af392db8271fad41ed6306b0e8d883fa032e6dba63d5eed30bbbe0f827cc49ffff001d2c00ed84","0100000072d85d603a9ae884afc0901c5be2b3cc7a7896cea7b9353fc2360fa100000000ecc20e20b05f64e2bfb870b04f838b3dced65a4adfc7bd60866b34113efd8c93d629cc49ffff001d34ce3a79","01000000f8767ecb5c14228dbaa0cb53c6d18fe6f5b7752af6cb53da9eec666a00000000800f143d58ddc6b57d77b9c26ab00e9f57b14c086ec968440c39bb1b03a20112b62bcc49ffff001d2671b105","010000000755d877821b9b18457936bd24d933067573d45fbb61d3636fd09d9e0000000047543348c81a03a67917a9c638fbc8216e823e150542ff3331913585896e3619a12bcc49ffff001d83186700","0100000041139c53fd1a714f2974eadce4bcb1b48481aec3f72cde566da17f110000000082830093eb0f4d675821929ca0d6bf42c5b07f2716a02e30a5fd08e22ea4b64f4b2dcc49ffff001d050853a1","010000002bfb3481e33d649770ef0282a6a45d4c8f5aa4097cbddb609fc3846f000000004ac81e664751736aec4ffcc0b85b7c36c113f8acb7d245fddcc8a010238cb24abb30cc49ffff001d28b1bcfb","010000005ee1f9c893d72048d1774353866a702dec35459269c87940c83f5e7700000000b4d0eed20c1b77c0820f187adc20c18c73252059cd220c0c24177dc0f9adf2d2f933cc49ffff001d00fee584","01000000516954fc00e62cf4d262f76f4a91030593beb7f1b2b6496a783283b5000000000deff5be1971f907800fef884ea711716fab91f22ab9c27ed56b8aa4ac50d8eb0139cc49ffff001d2186ed15","010000009d2d114d1555f66419bd5e20854b3bb350c2f25d06b4de20e85d2fb1000000009ca6fbb8555a21d053ff72c7ee58b5a0dab921654e2f71b0bc0f09ad706f05cb133dcc49ffff001d06dc5301","0100000055a9762f5e30e96f90daf4db778f40f5f86b3444b433e57d7cc2a2ec0000000080a15a95591404ce2915c5699b10e7de2f8c5c311e712d9a77e310eda5f663d6be40cc49ffff001d15cab6f9","0100000050efadb401cf3a5db33509fe28b991b99e59c1eecad62c3b3e1a0b530000000082241ddd6b058efffa7190510a2f27c7f7e2adb46a2ac4ba818a7129208c7d1a5346cc49ffff001d1bb41a69","01000000d8a2469b23b4cea45dedff0e0018fd99515e50383f7d414dd1fd65e600000000e4a11ff2b34bec093b24de3875c86d6f0f9d0ac5a0cecd112ce6c8b72d8a7e13564ccc49ffff001d1ed445b9","01000000410874643726c8820d59b1914e2db63685f1d40dba279d2f634512b300000000418fae823c9a7297f2a4ca36c4b5203ca8acc55f6ef89bc93c9f370aa5acf0906f50cc49ffff001d0825262a","0100000015d95bb2eff6aef8bc03d5d83524e94247992503bbf1f67d1f1ae9d30000000036af3a3b7ead83dddd0d96aee1a32757c5a938cd558bf316ecc17b983ae465976d54cc49ffff001d2b4620e2","010000003593449ed271764f45965ec38e9bf5b866a2f9a05c4137b17b796d3c000000007ce6c8213156ef59313ccbb32ea9a3c4f7a046094325c61920b7e3910025354a3255cc49ffff001d89ac7304","01000000713901187b39754d84950298288fa095120f42641e00417f2b346a44000000003a8f6478212b850196701718da4ef73032973d9e4e2e6c41f61b78c2d17244f3b858cc49ffff001d15b1f243","010000008db065b6850ee0bf037b28c554e33cdeb5566c18775547bbf96ada1800000000442f99d3395ff9d5df24ae0326233a7c62337e17adc515f09cac851a4f2af7f4345ecc49ffff001d295c69f0","01000000666f9f4dd604a23add8bbbf8de21bcef9c22271236764f79d1fb235600000000c55742452abee4f97196f71c521b337cc5657d6a2a7c0de557569a9d108d33d3575ecc49ffff001dd5e98000","0100000081e7fa264474f90564e60011f432553556b8753da929a578f8314e4b00000000e8809ee47689fff6f041c826d10aa92d8e886a0c2e44bcbf1947d5ebcc5404042264cc49ffff001d07a12752","01000000f4ca5bb21f535900c12163fe69e8eebb8b48c32935ea492145233eea00000000d03700890d0a5614ad1b8e7fd05dafa07f673ccde83f6422f184c591bb6d2070fa67cc49ffff001d1e130261","0100000034777d2e3c95acad4b804b4b6a40aba75220bd8cbca7107c5ee7957c00000000033d00a9fd886269e716b0a44df705a1b64c57cdcbdb831e7eb491e8f6ba04347d6acc49ffff001d33f4c2f5","01000000b4f379f3fc64e12538823b56425c9f8ad9d18ea6c858e0ece506c19100000000819d5729358731eaa46e3e668fa9c92eed0aff572f78d03059610ed015ac8a35376bcc49ffff001dbf891003","010000004e72f5ba5d22d04281f07205fc52ec37c542c3b9f9f5e3b1269e04a300000000701454890ebdec4534760de55dbb046555bc4eb7672a56cf26e43a137d495bce0d70cc49ffff001d312bf1e4","01000000161cd24d8e426d4cf576d8b54031091651cab4d757f0a01da84f89c5000000008db96cebb18ae4be52a2ab0ed8e89f9f36ac254bc593c814417b4edbd1be070dc575cc49ffff001d265393bb","010000001174a19abf91dac88c0713b5e26a3b386e61e2ccba2ccd8a806fa7b3000000000c82948092d68026d1bbd21af799565e07c401289b3c2afbc88975ee294bdbf83c78cc49ffff001d016fd60e","010000003163d190702df73f1adc13306474485d87406d4476073420b6441d1200000000fbdd2741bb65f1251ee28e63fd70c7a920bb45590e57117c176632bcb5c6e4e46479cc49ffff001daff5fe05","0100000048bf2a279327518d8c1cfef509844f8eb14ef62ec7a6654521a97c68000000003053b3fd3f2b22ce2c35a278684600fe7ed8f8199ea7cc3143f2d9d4300a62a5367bcc49ffff001d23c1d632","010000000558fdb8d490f56590e836056ab36b575c463952708a7a6627d9cd2b000000003e31e7ac36580c6b296b04814ae1e97809d20aadc1e56d2efc19e0b5be478a943880cc49ffff001d1ea66710","01000000f7193853b5a6d69514b65a820d1aa67be63f7d1845eced74df7de6f800000000dd030b5a30d7b160a217aa1ada7c633add8dc4190865e709c759e56c41be8ad25482cc49ffff001d1e4dcce6","01000000e913671a055bdfde760b3e404a1d667591310135c284b6b9fafb1b1a00000000fe70fe8e97a307d820f9f222333e4cb1e3570b8ca905c5baf5247614a4fe959ac784cc49ffff001d052d115e","0100000040bc7dedaf72b5d76d7c8eb7661e21d1b80bf9274b93f6f757afd6c600000000603b07eb9a046f75469e0fb5dde929ecc118bb7d7814896dc10803d21912e1a36385cc49ffff001d05d47d01","0100000069c28c91c1a7bacb9afb7965e6c6466021e85bf95cbb863818598a89000000008ff8272ca2f5643615dc1da0b54a8dd96075783baad499c7c5619ae501c31416e886cc49ffff001d272929ea","010000003ba06b37ce137c85d7e80c90d6d282a1d59c257fe2594b3c569f91ed000000009d022f82d81ae1dafd6f494d3807d333bd624883c0709b356a933c190a59d8dec389cc49ffff001d36a9947d","0100000097652a587c9bc10295d3bd7ddf17463f3d269064701c88488585782a000000004db7a5c2a2a0f2006fc0cc2f31f49c64d9e821184129f4d82451f859edaf88afad8ccc49ffff001d22c8d1fc","0100000023236d9078dc428c236753a851fb8e1270b1110007ca4b5c7e777091000000007ba255fc5279f1357d93cc825404713ba546e74be2c8d1b9f1ddd4857a303b65968fcc49ffff001d14c58c0e","010000003253a42f253e5fe89d45b7ca953902ebc9f828405173926684bd66cd0000000073fdb7ce86524c867a4d7ad38818141269f8dfd970b138c14918911f8338ec6aa090cc49ffff001d274536ac","01000000cb07824c11a0c2aa468379cd2c7cb58de280ade5e7d8bd0b22e0a31b0000000004c7f666c469c90a1d513bbbb5d4266d2e7961488e99609a4af7e025b6b4ed461594cc49ffff001d099bc904","01000000ad15392295a42479cb5adac53489f3d3745f05a3838d56d3fde9a75700000000bd41c68d09cfaea70499d02bc9959f915b96d1eaa2ffec75e82290af0b3d97681798cc49ffff001d3053511f","01000000426babfb26a31af612efe7a11a2d69f6c2662f836ea3455f3cd11c340000000076fd610871b0c82315a94b81f7f46da325bd3b6f386361ad64ff2d5f853895e70c9ccc49ffff001d2297841a","0100000021127eb52581088b3b61c8697f292f4faf947e5dba613a7f3a15d36200000000a00aefe177b6a458bb77e4aff8c30743b964e2ab87dda348801af7692971ca38fda1cc49ffff001d1df76890","01000000bd7d006ff07074eb1574453080470509f183ea944c47a7e31bfb28600000000067cdd87b05bdd7a99b3485cc5e4611409fd2cecb44107316fefd614a975e372952a3cc49ffff001d2985b405","010000000792aee7f1613a6b2762cfbef6723fa3dfbca474bcc3d050f8a45b0000000000e4483ac133788551dcbc56dcf686cc47719ee0c456a30cf857db9e89cbeafbcc73a5cc49ffff001d63d10d0a","010000005db3b7131aa62ab753dcb5cbac3532e73e72903031c4bb9e044f6ab500000000db41b732ddcd061c49c80b5cc3102896b4116468e2358f056f3df5215b21c53cd1a6cc49ffff001d214b1e6e","01000000a8e6346bfda034fa979a462c29387ad94a7e21651346af9a48ba08a300000000963d625b3155fd80892fc0b74c44200d2164066b0f19b65f2b2a555ff5d6529ab2a8cc49ffff001d8c131d08","010000005f4456a954208593afaa961e0efd6904464fbdca40066171b0fd67dc0000000040486a102bf4c21b2f31b8c0fdc0ecbf40629c31e0a0a065ce0df2f18d55a14392aacc49ffff001d05e1722d","01000000ee67254be204edbcfabddc7c847a48f5be71bfaa4d78bce92338f787000000005793dfbcacb81fa4ba7387ba394e1c3bbc2dd38fce98adcba8c7425d9a0cccead5aacc49ffff001d1e288900","0100000006d93cf5f9b7ac95dd7ca0e45c57a1ec30e807fda84c4fc2e87abb4500000000193584019d5563b917f6b540b7657c0e249960a4510819900f06f21afea02fe341b0cc49ffff001d2fca9e0d","0100000020249335a5b4617de6745ce4fc5ee4ce03d09cddcefb7665ad5e5cd70000000060d2322d637c5cca7c612d182241052762bef613309ffe45e229f954fb02779719b3cc49ffff001d36ab0194","0100000009535383fd77aa9e8437aac7609f4ff0c0d4eafbb2648a28e8a6b64600000000ed382b57abc333f1024f5f6a9b40998649921362f9a1680eec7a67848df19b98cbb5cc49ffff001d082f2a75","01000000bd05c19ecdfa566348f09113324a8c4150fb7a55126b62cc799e881d00000000bd68085d1c09656692dab136981dc3e852a890d87a0de1d8c40d64b6d15c65732ebacc49ffff001d06a83d37","0100000097752f57ac2b95ca48ff98417b41cca50898bbbd2c015b2df2c14284000000005e1297ce570172ab8c21a9fbcaed22df450a12beb0fae24a24e39ab9ce870c15f5bfcc49ffff001d07f40cb9","010000002c6615351b69cefe5024713af4303d8c345349790bccbb565db5c47e0000000092188028db079ff88b97ebc358dd53ab83337a5ad763a896395e439cb5ee54eaccc5cc49ffff001d13e3207a","01000000e344f1c8894d2f2af7225d4a30638cb47d5322bcd28db049638d218d00000000db683b9ec2000d713ed0bec0711dbc39ddb74f89bd2b13e33a58284b3cf370c8f2c7cc49ffff001d01507218","01000000885126dacf96c71b7ed8024226a3a074005c4f089b0a44a71c20d3e7000000002d06804ce2a336bda1c262d187a669e6d2963b8ececee9487ab207b80ab5b3e613cdcc49ffff001d35bf4da7","010000005261866464dbfd0a096b202cdb4e31cadb0f35e9a72037b2e91c67ba000000005b37a4765d8602f5e16c0c3a32a48bf09f59263b61d9b695362150ec551002eefececc49ffff001d2f137e00","010000006e132dc8508440b3a46898f6538d8fc7a88f4bc6740bfc129e947cec00000000ff70f624989a66ed3e72031d536403085f06ecf9c88ea54eaeb8569d1a6acd3d82d4cc49ffff001d392422b4","01000000365f9394e6e5a71a93fdd6e5401d69e298c48d3394a20eb6b63612900000000034774a915f5165464e15a6dccc1d6023210494b52f37819328c0eade201bc27db7d6cc49ffff001d148dfb35","010000002fbd22f13867a04986b33f53d5c66e13be4cfade78e738dec8c3dd2400000000ae7c5c899110a45b7657f9f72786be1767f712bbbfeeeff819d9bd5ac3928e2ef9dacc49ffff001d23f547e1","01000000635759079e5324f2a5e40da713fe315349bddf9c3872d120685d8bb0000000005425b0dd349331acaeac29e46d81bbb434dfce9c761cf9b9fa1d1012ebda2e46dedecc49ffff001d07f405d6","01000000b14c317b0538f3b74b5440bde52f56ac9d8c7e99d7b65221cf8068da00000000a669dd3e68e3c649df37584bfe4f2a1feabdb5f08c0341c29692fa9f28ee1c768fe3cc49ffff001d151a9988","01000000d98cf99b07ceeda3c389a229f08a09d8806e43b795973500d86c42dd000000003347ca9f211abf7a45dcf542468fa5dacaf11f43b468e250346ce0c1f9e632d154e5cc49ffff001d01b0aef8","01000000dbd9386fdb143a0547bc10c086d678d0ac358d2fc4f0857e5d8fd35700000000b31dd1be85dbe5986b6ca6d28b8c6f23e93d9232fbaefed7786739810f167a5a33e9cc49ffff001d2747f411","010000007c0a66b14cd2db4463b68a7dd2b1d540a87fdff41a93dbbd88dfdbb3000000001c6c1bda0c22cb0af5e9ca1be6ffb66a085bdc5ad958551ba4c51105d185fae78eebcc49ffff001d3730af0b","01000000f4abd3d2b1efb2a2357cc95b46136458ae835c53a3c9cd9cacd336f50000000038918c7f6ba89c78c2ab9120b2677efb38d81973368742d4fc4416f28b10e85091f1cc49ffff001d1d689d5e","0100000025c11cc71d1ba9f16fb0044c8e553e885fafcd3f7acb214508ef5776000000000073aa9a929bef075fe27ec7a5ea375143ac134d235c90f132a97c7b95ed275c85f6cc49ffff001d1e8c6f89","01000000713036add0d5458b664a60339098615acc7308bd4f28b0afd151344800000000990442ca94c635bc8fda8fc0de3d83800d0c90ba298cf0cb3c6b814a1f5082cc04f9cc49ffff001d1bec9099","010000009eed9b17292895e09c08bb9086ddb7ba85a94ae98f9a736cfffad1a000000000063bebf18206fe8647f88903b4d1b3e1f9d9600e50a1060215f95bcc5743280c5dfbcc49ffff001d0669e75b","01000000fbf9385ad929ce7dbd2a40cb3f0c2896d607484fba2fa0c9c3d335c7000000001721781aea87aca8fcb3fda2aea1b460e26a0093127d4cd171e133238bfa81d4ddfdcc49ffff001d22bd59bf","0100000001ec9eab0ee1a2dfbd384ff483f5017a54ff3bd4dc7cf1b25038538d000000008d0feb4c9b7b9b86c4c066cc10546eb73f63fe0a7a4be68a09935ea510d4e84cfefdcc49ffff001d59bac801","0100000042138c59bb50a85ed1740d46c6aa1447a521f4be7db3fe95171b9d5700000000bd402f2f6b018fafb5d160ad76cb2ab85f858fe1f8f8a48287f82315ad3f04d97303cd49ffff001d28015b14","01000000d657bf16ce3b54ffbceab0865171bd951f082023da1c997a47d09033000000006a73249e36ba92b8ab87af3d3d6cfd439d30cdc68e93fa317dcd12651a07c03a0a09cd49ffff001d30fccb2c","01000000537c668babf5a5551278d9c3adae5f3e82323760624dddcb790f4a8900000000d5f51469d32e8b411fa27ecda0f5d59abe3d2b632382382762da4518fe2dbd18780bcd49ffff001d32759786","01000000d5822f1c6e89ad1213aae751d4a9c3a7645ec0623f6e8167af220f5a00000000a6fb5e14c6e015a0ad17d27fb86ee31af1d3cdded58c93a7c4208d7a7503928a9a0ecd49ffff001d2d927bb2","01000000b36f79ba1a6c351c240870962cfc58940bf84f78f716f65e63fd5b6900000000076b70da77cb8854cb241eda98303c1434f58f5873605c9685a7e8e34d87f5c19a13cd49ffff001d1cf0f8c4","010000006318cc3220e716bbd9b0f5602731c4abff8360b7d3f5650e9da3f6970000000092c132940fdb1271a0854032d623977168d228a937eb0351658311e9c3c2b8083b19cd49ffff001d3225fca1","01000000b44abc96b60391b969e1de7d456e6f57dff92fb2bb5dcdd14f0a44700000000036fd8560062d7ca75700f632ac70791d991c74d72f8acf39d6de769527c936eb311bcd49ffff001d6eebda07","010000009a19fb465c1ad9795d51cd4c6f05f5bfc582adb9694163a2e15fcec100000000b142d2055b0bcf1fa6d656658c5b9032e642346641c0a60a828a208498e0c14e841bcd49ffff001d3794da6b","01000000f71cd59b17f8707e10141c953f33d853cc01188e06627c4b7ce63ff70000000049634a90f09fd7f8cdd96bdc3c476020cb289699c01fc11f46f5fad41d123057dd20cd49ffff001d296e98c1","01000000b6c2d328e4c7d75c4501223a7ebb2db28ed692c8e7742020cd8c4ed400000000195bf51f9afebe1ffe837092acc5a78e3c251024e0d5b8b6a6874ab9759e2d7ee926cd49ffff001d0965d5dc","01000000acd7f62ba76fec283b017287af79e8712c86e409a8c78d0d148a4f1100000000189e93193bd08ae70c349d97db99d432a9798d2a21e65d9b9c0a2ecfcbf58d446429cd49ffff001ddf47a306","01000000ca01d615549f3477f57ed45e15a82be2f9c0a7bdc4e3a9aad05d667b0000000049e02cf39b619d58ce142a0dba3f27598962c126c47595d09ef58ba18673b368372bcd49ffff001d00617e41","01000000cf31c3e782cbfa44eeb27b2f288be338e4baea6b53bedd86a7f37d60000000006a9578da80b5e869d009d428f3e73b6239815a73fcb4292d015582ee8997214d792ccd49ffff001da0241305","01000000243ab98f3db7b332cf150f3c501a53d7b3649ac0f206cf3d1b1f7b32000000008520435c867f754a36ff80821ef746591ea2ba11e6a9c1a88f948dfd26e75c336e2fcd49ffff001d313aaaa7","01000000f4f487e258f76742c4513122341ce9ab87c601dd3bdf266481d9230a00000000975043f9d4d231f6c8643f67b641831a464228caed69bfb05b0910a6170578bfab31cd49ffff001d380e9daf","01000000d5cb768618e7ed455135f4c3b42a098cd86f5050a8adac2f7e8d0ce300000000c71ecfa0bd2f215d08364b0d60df32061c7ca757f515285afd401a530ba368205c37cd49ffff001d471d5b16","01000000d4f99906d60536967edcf12dbdbcb989425b28e9cfbcd8fc7a1b1e1c00000000520a50a560ef971f60dfafb9bab0795730f205db358ce5b5388f47f16f517072d438cd49ffff001dcf8e5007","01000000ced29a73fcdaf1ba96c4fb4961d9a4544d4c7a6e68694efac4892323000000009d4a0c7244e6715cc7d500ca2afc85a8bcfa379a002a3de41fd4c8296a8c383e373bcd49ffff001d24db2507","0100000079927140296804f9a8af6cd0cab35fb5331a1945d4834de4ce2a6afe00000000bd3e87293db179f83deaef114a38d16ce8ef67099f1de2a51cdb887233a42b97593ecd49ffff001d14cb2aef","01000000450a2a402fd4f8609f9494ec1052bf5b9e1c2dc99c476587e58cd4e300000000be5be169759408877c3a37c4acf34ac2c35e3056e2dca6d68fa428b75161f924f13fcd49ffff001d34371b6d","010000008081dcdefb3e39dce4c5fbf2b0c99f4f454b4c46b673da4229ecf5050000000010db633f63c64add0ced835cd4d57690a978d1346f4f660f2b13eb89e7a071a69244cd49ffff001d2568fb92","010000001dfd2ffead55da1cc950343d23a49c049b395c7b2c90a7a5104259ef000000009122b80b9b34fba588aa504b36c75c8beda6611db334a3e19dd4a552ce298c530f49cd49ffff001d06f9dff2","010000001729020d3fb0020f4ce70ca6a262ae52c491bd0939c6571d74f8268d00000000bf3db160828791c53337a6af57abf9714eed2c95837dcde5cd63307631403849104ecd49ffff001d1c923d18","01000000a91bf0ba0783f9a81020dc9ca80dc3b497fdf9d1f1b3c7b46bb01f9a00000000f518ec338550ae826803acb764dfdcb2db563fc838b874f94a82e2834fa01f8d2153cd49ffff001d18ea35cb","010000004f05283942445b46b81314e41589440b38c73baaa1e78b1e209e1d9b00000000720ae9adf7160e9e48e4e1c0d6363d1c3ef87379565f784c5b0ae0f9ca43d367ad57cd49ffff001d182a812a","01000000b404d695ddd539923652d1689eeb045b8a6133b79ffc77af17b335a500000000b9fc2ff5533c7e3e734c5376ed557acf59d492195676c20b906abfdd52143b38bc59cd49ffff001d64be9603","010000002d0dfee84c351bb64bfeaffa16f54ef9aea098d56163e97a5290fdc800000000324aea5535c46f0844330120daedbefb9be99939ce193fc2840668bfdbbc1b5bd35ccd49ffff001d318ccdda","01000000fdfaef44f76f4aa39ad969b930d568f6fcbbe1d3dc3ac9bbb63d076000000000a5074ed0fd7c3b2f21463f4c3c099119d16bc969b50c8df415a2231a6bcf892d605dcd49ffff001db922e300","01000000b3b18409aa74d6d493298deea0a2b27687cb09470abf738f4b9f731500000000a594ecb6c6c15196dbd1d7507255624624ffd3e37c9de9f1d5474e3eb34b996c2d60cd49ffff001dc224d10a","01000000dac7f07564c23a1b826fd4e25befac3c8116f44c4d3a6cab7f3d240e0000000077ebc7bb346140b8034a4052c7c558c68a2f40ba5feb3a4eab72a5ec78cce7e1e360cd49ffff001dd2eb7901","01000000ec94d6575fbb46d90b6dd10ade143a53ebaab6ff5eb19af7e5b921c300000000f7805613be8fe6af0eb3b5c4e4660652922c5b6acaadd0204762d872f38c0157a361cd49ffff001d30ba6e40","01000000dfad2e48a02bff6021cf0172d789e8b55ae9bc10c35d211d4ab46e47000000000375eaa7212677df9199591bddf57fb9df6b5291fda23ee93f02e8edd8f2221f4e64cd49ffff001d3554d933","01000000018c1217dcce82af684172a4b607f1787ddfe3c023c80690e148c09b00000000aed5b83963e3ab1e60f427eb0e8a11ff97d795256f43e8149a8e45f7592d7323c868cd49ffff001d2a764df8","0100000095497d2996bc5a109140d11cf1e86cb73678999e47b0c84e7f59ef340000000091e2bd1b4cd1c7e5ede96693bebee2bd9697efadd9cbbae6d9ad166b826ffd00cc6acd49ffff001d1a845883","010000005d9f3b245d69a812520721ccd2426fc6841d69db7a6545da2d169396000000002eadec7e5785ea252cb875c6ca720eccb3d0352c0a8474470f37be63895c13e4dd6fcd49ffff001d06539b74","01000000d390f025b7f39c64c3a00e7f25d9059c70522ae22283ad3babed329600000000a0963982b088859a6ab9af14744ed6672ccced578776311d60a9b25479d31507eb6fcd49ffff001dc7dc2300","010000003a615de8b224c25860c33bf49b7b31cfe8ebd2005d5fd35a5bf3121e00000000bfc6aa2f0e05754d85a32e486b43aa25aa91e6b79f32fb037856a15245068e80db72cd49ffff001d309eae3e","010000009acf5624efdc0d106d5b81041f04ce0f9fe63ddb11d358f4289d0d4c000000009b8f34b34fcf289a9993860fd6484f49d5e2ef45fdf336aeb6cdcc6280a815294c76cd49ffff001d03482ab3","010000000d56965f9494424338665f464ad9800169a2cbe761f912f236768b7000000000af2614acf661b2bde719d76a4d24a804d4a518d1321942d782cf77cf9a64bf70317acd49ffff001d1a2437c5","01000000dce8d9593f91c98f6babb0caaf2d0f8e7e0203b862b334e09d611c4c000000002b3fffd6fcbe9a157b9c11120064b390a70abb33a50159c99b7b66a510f78c66477acd49ffff001d84aa0a00","0100000035afb95d07f8a188390bbe694baa41887b8763f1dbf50788bda90ce90000000026c2a1dbbff11e8fd1ced1de1451f4700976cfeea96272bd9e7b98eff579bd2be17dcd49ffff001d22c13d25","010000004061bb00866da240d34216a60c45f638f6806b6aecdc4a9b55a4c8e700000000f48bb6ec060466da19bf245d2720c3f4b8f95e5857f915e6f09414f5f3aa8652d07fcd49ffff001d717e8609","010000004164105aab0c1f4c66fe78dc85f605eb1c8e84483ebd84e97e8a73b900000000661540f92138f8bc7635297f6dea50f214e8b18ce89714e7813ded8da3a2d1284b80cd49ffff001d526b6202","010000008210124acb24e44517578800ff215f9ae1b3f0b8e67ec1f59238795800000000f44412d1128b1ca88dbe374e1c74fb615bc37ca843b15dd80c42b00d2eeb56b0e281cd49ffff001d2f2f2643","01000000378f9e10cb57d8ff4686a4b3db0d472b79e16f5665d17a9e9e000d22000000003002a936e37e58e071a3104d1de456f93424b7c7810933802ba5c6dcdee1f7f48e87cd49ffff001d059e6d01","010000008b8e8732b6647311a58cd186192ea146326906bd3379064fe97a44ee00000000feaf34fc7e52e71e0251afc87522fecc35866f1dd9c7b7f2bbff984c2db31b266c8ccd49ffff001d37382a18","010000000513e5a7f7990670cd03fc43e7c2a9bb13e76b6d846e5047541276810000000072ff00aa17bc69d44d809bea16eda2fc63c7dd26b6499c553b653f0c19bbd61eb18dcd49ffff001d29342232","01000000fe731b7a07b8392e433431cf2ae2d4a3b8e0db776ed680573eb2d42600000000d3d7eac34373044d4248e5c3ee8a69ba528ae99ad8206212a59558c0a94e76fd1392cd49ffff001d387c5d0f","0100000031724a88e4fe1c8440c84c5e175a3f734a9da2437a309df992ed624b00000000c0c8205b0ed4cc8a244718f63f7cf7b24e0cc9f1aeb0f30041ad61bb0909d6883492cd49ffff001df6d85b00","01000000e6b7df6e012b1203fb65688bb1a0456dbec2f64b9a89a6d35dc935a0000000003ca4d763ad18ba60df33954dfb8d292e4f441873a6236be68ae01f1710edb09dbf96cd49ffff001d0206a116","01000000911427c378ce8a23d9b539c1bec605c4b1b58d70043f10785795767a00000000711c68a8e489849bebdab4ba5fdccb511b6afca1a01b79a9c5b07a7fbe8c0617b29acd49ffff001d15a98498","01000000d4a593a888c8de8b6925b4f34001d8157097dcda10cfeee6c60c6e7b00000000953483208019bfb1606de001d8e773bc17f87ac9353340eda21a8e4c10aa1f630da0cd49ffff001d24f3b8a6","01000000ea01cee8de6e59481117b03ed0f69bce1e91d6893b3059b688b0fefa00000000ad650b61c35226778657c4514a4fd9f6da95eeac7b697e790d93b6473d33240635a3cd49ffff001d271ff067","01000000252e9b26778eff240b6dd2f3f597365d92fb3032ce5d7da086dced43000000000e8d6b676bc889603337027c6489dae8ca466bb0cd01883c0eaadce8a3602dd373a7cd49ffff001d03a90468","01000000b0398574bd58f93cdc4d0bbd8e19ab685f72dae92d7114bc00122ab90000000016e66162817bac8418aa1f6ecfb45cb2be00885b2a6774c78595bf21cfbce92feeabcd49ffff001d211d8c51","01000000f12209d4347bb07e6f13baa858cec186465744ee85b0729c611ac63d00000000d978d0a1b15e217da4d2037ce478cec0dc668020dc64affbbe0e6044f5703dfdf2adcd49ffff001d053caa4f","01000000659c2c6a1a5a8b550ab84c9e33573c05001b242ae0263c2cc8ed189900000000e4a28d785ae5d3297ee6eb622fcd2923927494b238317b9bba94aae926ad2ad622b4cd49ffff001d19d29b76","01000000f7e1c6b832b7e0e88ae1f8761ee47b265b551965fa8f7c4ab5f85b4400000000577369aeace7e772a2df1cb80bd859ccc5f1130d00b316cfd5e162d3429e1cd2c9b4cd49ffff001dbdf32e03","01000000c4d9fc02e276b67405cf77268acc7a133138005368ffd075a00a548700000000d51d2fe63b30163947efac8252a5044083df7e95ac8a6e87ae92c0bad42fb982fab7cd49ffff001d37d4c71c","01000000bb3795d88c74eaa0c1e95059d9cc5809a2f29130b5498969c15faf2b0000000092691147c6574ab4c710946d8d215e86bfee8999dd087d8753897245e392776b5db8cd49ffff001d1588e700","01000000d5f027c92562a64b4058170a7dc39f52bc2f0e4ee7b12e341e4c51ed0000000089c1ba75143968a48f896fca277d3bfe285f31c50f9dd94b0ea880801ba980da79bacd49ffff001d29e6e45b","01000000dc5b4fc5306f72ba635fa4ed381f1d7d2e1c33a74b4fd8d712ac171100000000dda1249b2dee999b270971bf740f5e48b10377e89fd27ecbbc4e4076a5c9b9900dc0cd49ffff001d963fb41b","01000000cf2c318e7e0afef1bade3a6a4570b3ffbdfbbfd6e20522301216df4400000000240a3cf8858d9e6b76a493927c0969409581d403b8856f31173194847d5923e3b8c0cd49ffff001d16624d39","01000000381aca81179dbbde554d2f6d4facac07a0c5c3d00f856824b3d42aab00000000df7c76c25559bea1d326ed3177b40c647515342ccbf74ac35d7db0db955a62924dc4cd49ffff001d1e0c5a7c","01000000b3d044d64cb77d4b22d23f14443386cad7639df57cc1bafc1fadebf8000000009164529f18e819be712320ff86a09d6dbdc74fb551fd27f8aa7a5cfc36842e8e3dc6cd49ffff001d27765617","0100000077bfd366a96f31c19204152e0ad001d28c8ca6aa21d55f857a17659c00000000605635b2ef338be74193cfa7fef84e62e4c1e9cdb30a5a621634cdc3346b1f00b3cacd49ffff001defc77413","010000000463e2b9c63cb12b3008e2aafb5c66456a1c782f21efec64a528e5ce00000000d3dbac1259e1f939f882b403a5866d9639e504b63459efdba0f121324536541b36cccd49ffff001d1cd71683","010000002bf470ff1705f602fcb56ffe9f64a9bf008d1cdb1550712603fcd48b000000005983493652a41f0b8741bc4e30a3df3185136ca6460dc501889a5718a8df42843ed0cd49ffff001d27491826","01000000b6cf88de21a7178acadd90311ef80f9d18f2d3093b906761d33e25c200000000b1d256b419ecdf05cf514f0ffa878e7cdb91236d662deb454c80b9b139a69d7cb4d1cd49ffff001d24a0a643","01000000b6eef651b549396bbe8533a607bd68745d9ffc35555df620eada4c1f00000000aec3c542032f8e62adadd39bbd1cae78540aeba147a045b9dbc2cc3194b16d83cad6cd49ffff001d1d415864","010000007364171dcec1b6aeb92d5a6455f6858a7894955f17bfa67f81080ec8000000007c2ec10de16d9e48b94b402fce646832fb155eff9bfb35d8c7d6113b801efec715dbcd49ffff001d34e335c6","01000000af9c4173d4833fd146d6bcb28aa43dee802c3bbeb287421a519a5f4c000000006c8b634424d173b04dc2381f645322bc38e080e93340a9a810415d4cf4ebfdbb82dfcd49ffff001dc7e82613","010000007718dda4593a757f5661981b7163d756f558ed453baaa7f57af679f500000000869ffc78048a848260ec4d64d9c7a1ca867ecf096efdf0ae67a73c311404ced152e0cd49ffff001d3291146f","0100000020de691ea5a55939961496c97c9e93b6097ee3899b7296a6f71a85f400000000cf1fccdb2b0ab3ce7bf1b67fe3de1f0b298fe8eec1767d100ee7b7bd24acebd64de2cd49ffff001d251dee3e","01000000477f694ce3380cd38709e7b2327d1ec488c2d619b60d3d0367282313000000004b4951ffcb6f9f6103e636c8c4611247394e2ac0c89ee824fb625c284763b654b7e3cd49ffff001daa075303","01000000041427192b86ecee28910cd3830b79e9538de1b471346d1b18074a080000000099ba36ad98338019216366b922dcf707776d25d426b01fc7cd359803a2e32883dde7cd49ffff001d2d93600b","01000000eea923140ba45b8ead6f7c688bde2108a6afb21fe454cbd941962e5a00000000d459e1a34e3d9b203bc104b28c57bf7ccf9ab5ca263ff9424d1ca6379c150c756ee8cd49ffff001d2c644afb","0100000080d7c1688b07be8e3376407138536576bac7a64e9bdfcf4165ded3a5000000000a8c08a145bf951b4593ebceed529f6fc28aae3a40d60181c519596fda7c340378e9cd49ffff001da071b402","0100000081e991d140a2ec16e8fe7c0e1246981b3ff84fc443c82a4d3278583100000000a40a054f4ed76ba9449da58760effc30bb10fa0dfd3570021b00daf99360865aeaeacd49ffff001d2681b432","01000000484d7c092a8a08898eca991602f6921fb93ea46c3223cec2bce93541000000007c17910d255803214eabfc00a7670874587b0d74cf3f16627fe3a7da4b20a29426eecd49ffff001d22d4abf8","010000003771887ef07e2632ed3237f4df7fd1903ab4939e830470a04b35520c000000005534cdc9386e1bb0d09682c8f1fc2e6f9107eb1b50bd00378d595a1afabe5704b8f0cd49ffff001d2e16bb58","010000000d394238b5696c978811fd080b4d939bf923c3399f58d02dcfd26f1500000000b50315a3b1dd7e99d9b7ae220376692afa2779dd6f38d4c7372221e233c304755af4cd49ffff001d30eb05d7","01000000f17feb0bae219f0799c6c68e5b6a787303a8476fbce2fbf4ea9d0b7700000000715032bca4386bed2c5ca20a35b7d166b81c6b491779521e6584c02f2e486b0968f9cd49ffff001d34b6e5a1","010000004e3470cbc0a8d3f10d827f72e72246b5046cb8c6634f4bd2f4eff2f900000000b89ae11b2438ef58bbcaef15d4a1289189476377415f1f58bcf6c69e90e8725040fbcd49ffff001d37ce7e47","0100000029aaa56014f3e58e3fdd4ca89bc5182819ebbaf858b53be431325c45000000006aad33c5d378d16941dce18fed690efb168c047c9bd280146a9117cfcbcbf019fefdcd49ffff001d3712cd6d","010000001eef11385e4bf96eaebeeaa127fa71dfbecd8fabf9f2a44a1f09056000000000e50adde0fc9fb7c559a19efd476ade975323765eb6d97430533df55940ae678ec900ce49ffff001d2de11029","010000008d7d2fba99199ca9fd7c36ff7d36e9475955f9bb293a12a81900be3b00000000263c31f3d379ae226b4ecc7b490fd530bbab7212e416eb32f6247cba3dbcf97ef702ce49ffff001d18061571","010000004f148e969f05fcd42b92d44b0fcdb4f4406a86a9e9f0b18c14b2ab3a000000006ba7d76f7974627172849d660c924e17fb53b2bad8afa879acc9002c590ad0c82104ce49ffff001d6652db04","010000009f58386682407a6633439ddbfbd2e0e05ab3ee9a24933d4171dc6d2b00000000d3bc5da2c9558c63bce04767d9b4bbf4fd4cd3d5929aa25ec0f280875b48c4e16b08ce49ffff001d31c9deee","0100000097f9b07a7d912efa3d64c3101f8746a892cc7b5bee2003fcd85f57bc000000007d9659266ac4f61eb4ae267afc195848eaed6acf7e11a9892021d93ea4bc367a730cce49ffff001de7092803","01000000709e9dff79aaf65deb8c29e42bb365921a390f5d5fffaf08e2b913df000000001243b41f19a344a17f10ad136e34e6e0994fb561084cf46ca1c5537434fac687ce0dce49ffff001d30f2b813","010000005311eb280f07d746ac8ffc18f6f3776092a9b921e8db650cae8790d8000000004d87aa3322eeb14c1ad273843a7c020fd814376bee41141b6e2fb112871f3c35de0ece49ffff001dfb3fa305","0100000091f58d16caeffe583bf52e22a64b08bba1f181e65eb0886cb3843e3a00000000d2695fa8414a136eb8aea499a1b4894832795854aefbc5cf92639c2948852663b70fce49ffff001d2d88da5e","01000000a14221b1579da00fe15549ad803596add3fa8a4dfefa613d553d0d7300000000249af0a43b9a8a08c006d38a4f9599d08f88f78314dba61b98e2dd7356f9d6283515ce49ffff001d2139cc85","01000000b3e3b1e272203419a9e6b04157eba46f155f74b5ed86c962314132a8000000004f296bdd7d4dd5d8d328f5fe218068724fa2c350e084e029b811b7b741ce88ec861ace49ffff001d34a3b082","010000006694de85c41540112439e280a23270cf67ffa42c980f85935dee1c3300000000eab3f7808bebb155ffc1db62aa9fc3bd49f2e52d0731687718af46e3dd7ae0bb021ece49ffff001d1821781b","01000000b7add5aef0bbf3319e4375f3f2ae3a30e9fbcadb5881f3d8ee65bb1200000000c52da755b68f181e8f3650406e7fa1d15718e1626c163c965ac0f84c07056f6f1720ce49ffff001dac0ff208","01000000169fdf56cd9395fc8630fb6b71368b93a2bada33ff124142f67d356c0000000066811c1399258a61824cbadb5df4251cd8b1704cb7dff3ae6f63caf24b47c2fecb20ce49ffff001d06f15785","0100000018b3b80ec08d8721c2b059c10f2e25a73a0ef910823698c0cf12f6b5000000004445c312c0c9799f51a105a89e9ea1889f3be6d09de7ab005d0a6f627e7680472b22ce49ffff001d15c98930","01000000435478f24fb4cc5037ae136d98cf030565ba786f7badcd8836de6a4b0000000077a5b851b15f6bd14bbf1dbda88ae5a518d04ace06d6d0c277c01805f75ed53cdc25ce49ffff001d1f65db0f","010000005c6191a4bb8a0c99b28d1830b7cbd4427924218cdf1efa897e655daa0000000077667d914aa76eb755cf4e794d8c33b426bd6a91b31a7006df258187c8a876777227ce49ffff001d033f8f64","0100000089d9fe5a4bdc3c6b5fdb2e2959cb85b2d73dde092d6d8123e82620600000000094b1fae210a39b5d5a925c993e9d4a979381f2404a4e7fe8f515d4d201bc73f8d32cce49ffff001d221db6c6","01000000a9b888ffd980fba1e5f61469614b6ad394ce8f41d76ee985eea600fb000000002db72af06d0320266f83887c4cd467788a6466482df612d527c5c99302cd7cc0bd2ece49ffff001d874cf704","010000005da4603b0c8136f6b44ae23e787258f7645754ff7eb45f9f44de0c8b00000000673e1c38722e84e791c4626b4f4775663f7b720b039b1f4664aabe63f8c811ff882fce49ffff001d007523eb","010000001f3b0780ab0d47e9374282256f9208e2ee78864aaabdb2a6c4dc11c400000000ded11516d5b8f394c1a5b7974eabd379707a15cde371490f35636515025b5bf54832ce49ffff001d2340ac82","01000000c85edeb2f6a23bd37a4e2c078d881503fc7cbda401bfa976d77b97640000000088b7d731bf27f11db64b87755461083b73cdafdfd1b4adf30cf47b282ce1327b4334ce49ffff001d06f4e28d","01000000e59e7f2ba574c2b3f26733af77cbd2452427d8f0284550d08eab723a000000005793087bd3dee491563304d093d48a9f56ac3ca0fd057e3e1d2d2746a914b86b6c3ace49ffff001d13fba8b2"]
diff --git a/chain-test/src/test/scala/org/bitcoins/chain/ChainAppConfigTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/ChainAppConfigTest.scala
new file mode 100644
index 0000000000..731ba233f0
--- /dev/null
+++ b/chain-test/src/test/scala/org/bitcoins/chain/ChainAppConfigTest.scala
@@ -0,0 +1,33 @@
+package org.bitcoins.chain
+
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+import org.bitcoins.core.config.TestNet3
+import com.typesafe.config.Config
+import com.typesafe.config.ConfigFactory
+import org.bitcoins.core.config.RegTest
+import org.bitcoins.core.config.MainNet
+import org.bitcoins.chain.config.ChainAppConfig
+
+class ChainAppConfigTest extends BitcoinSUnitTest {
+ val config = ChainAppConfig()
+
+ it must "be overridable" in {
+ assert(config.network == RegTest)
+
+ val otherConf = ConfigFactory.parseString("bitcoin-s.network = testnet3")
+ val withOther: ChainAppConfig = config.withOverrides(otherConf)
+ assert(withOther.network == TestNet3)
+
+ val mainnetConf = ConfigFactory.parseString("bitcoin-s.network = mainnet")
+ val mainnet: ChainAppConfig = withOther.withOverrides(mainnetConf)
+ assert(mainnet.network == MainNet)
+ }
+
+ it must "be overridable with multiple levels" in {
+ val testnet = ConfigFactory.parseString("bitcoin-s.network = testnet3")
+ val mainnet = ConfigFactory.parseString("bitcoin-s.network = mainnet")
+ val overriden: ChainAppConfig = config.withOverrides(testnet, mainnet)
+ assert(overriden.network == MainNet)
+
+ }
+}
diff --git a/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BitcoindChainHandlerViaZmqTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BitcoindChainHandlerViaZmqTest.scala
new file mode 100644
index 0000000000..8316f32e56
--- /dev/null
+++ b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BitcoindChainHandlerViaZmqTest.scala
@@ -0,0 +1,51 @@
+package org.bitcoins.chain.blockchain
+
+import akka.actor.ActorSystem
+import org.bitcoins.rpc.util.RpcUtil
+import org.bitcoins.testkit.chain.ChainUnitTest
+import org.bitcoins.testkit.chain.fixture.BitcoindChainHandlerViaZmq
+import org.scalatest.FutureOutcome
+
+import scala.concurrent.Future
+
+class BitcoindChainHandlerViaZmqTest extends ChainUnitTest {
+
+ override type FixtureParam = BitcoindChainHandlerViaZmq
+
+ override implicit val system: ActorSystem = ActorSystem("ChainUnitTest")
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withBitcoindChainHandlerViaZmq(test)
+
+ behavior of "BitcoindChainHandlerViaZmq"
+
+ it must "peer with bitcoind via zmq and have blockchain info relayed" in {
+ bitcoindChainHandler: BitcoindChainHandlerViaZmq =>
+ val bitcoind = bitcoindChainHandler.bitcoindRpc
+
+ val chainHandler = bitcoindChainHandler.chainHandler
+
+ val assert1F = chainHandler.getBlockCount
+ .map(count => assert(count == 0))
+
+ //mine a block on bitcoind
+ val generatedF = assert1F.flatMap(_ => bitcoind.generate(1))
+
+ generatedF.flatMap { headers =>
+ val hash = headers.head
+ val foundHeaderF: Future[Unit] = {
+ //test case is totally async since we
+ //can't monitor processing flow for zmq
+ //so we just need to await until we
+ //have fully processed the header
+ RpcUtil.awaitConditionF(() =>
+ chainHandler.getHeader(hash).map(_.isDefined))
+ }
+
+ for {
+ _ <- foundHeaderF
+ header <- chainHandler.getHeader(hash)
+ } yield assert(header.get.hashBE == hash)
+ }
+ }
+}
diff --git a/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BlockchainTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BlockchainTest.scala
new file mode 100644
index 0000000000..ae8f01554b
--- /dev/null
+++ b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BlockchainTest.scala
@@ -0,0 +1,39 @@
+package org.bitcoins.chain.blockchain
+
+import akka.actor.ActorSystem
+import org.bitcoins.chain.models.BlockHeaderDAO
+import org.bitcoins.testkit.chain.{BlockHeaderHelper, ChainUnitTest}
+import org.scalatest.FutureOutcome
+
+class BlockchainTest extends ChainUnitTest {
+
+ override type FixtureParam = BlockHeaderDAO
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withBlockHeaderDAO(test)
+
+ override implicit val system: ActorSystem = ActorSystem("BlockchainTest")
+
+ behavior of "Blockchain"
+
+ it must "connect a new header to the current tip of a blockchain" in {
+ bhDAO: BlockHeaderDAO =>
+ val blockchain = Blockchain.fromHeaders(
+ headers = Vector(ChainUnitTest.genesisHeaderDb)
+ )
+
+ val newHeader =
+ BlockHeaderHelper.buildNextHeader(ChainUnitTest.genesisHeaderDb)
+
+ val connectTipF = Blockchain.connectTip(header = newHeader.blockHeader,
+ blockHeaderDAO = bhDAO)
+
+ connectTipF.map {
+ case BlockchainUpdate.Successful(_, connectedHeader) =>
+ assert(newHeader == connectedHeader)
+
+ case fail: BlockchainUpdate.Failed =>
+ assert(false)
+ }
+ }
+}
diff --git a/chain-test/src/test/scala/org/bitcoins/chain/blockchain/ChainHandlerTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/ChainHandlerTest.scala
new file mode 100644
index 0000000000..99b7580a5f
--- /dev/null
+++ b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/ChainHandlerTest.scala
@@ -0,0 +1,139 @@
+package org.bitcoins.chain.blockchain
+
+import akka.actor.ActorSystem
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.chain.models.BlockHeaderDbHelper
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.FileUtil
+import org.bitcoins.testkit.chain.fixture.ChainFixtureTag
+import org.bitcoins.testkit.chain.{
+ BlockHeaderHelper,
+ ChainTestUtil,
+ ChainUnitTest
+}
+import org.scalatest.{Assertion, FutureOutcome}
+import play.api.libs.json.Json
+
+import scala.concurrent.Future
+
+class ChainHandlerTest extends ChainUnitTest {
+
+ override type FixtureParam = ChainHandler
+
+ override implicit val system = ActorSystem("ChainUnitTest")
+
+ // we're working with mainnet data
+ override lazy implicit val appConfig: ChainAppConfig = mainnetAppConfig
+
+ override val defaultTag: ChainFixtureTag = ChainFixtureTag.GenisisChainHandler
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withChainHandler(test)
+
+ behavior of "ChainHandler"
+
+ it must "process a new valid block header, and then be able to fetch that header" in {
+ chainHandler: ChainHandler =>
+ val newValidHeader =
+ BlockHeaderHelper.buildNextHeader(ChainUnitTest.genesisHeaderDb)
+ val processedHeaderF =
+ chainHandler.processHeader(newValidHeader.blockHeader)
+
+ val foundHeaderF =
+ processedHeaderF.flatMap(_.getHeader(newValidHeader.hashBE))
+
+ foundHeaderF.map(found => assert(found.get == newValidHeader))
+ }
+
+ it must "have an in-order seed" in { _ =>
+ val source = FileUtil.getFileAsSource("block_headers.json")
+ val arrStr = source.getLines.next
+ source.close()
+
+ import org.bitcoins.rpc.serializers.JsonReaders.BlockHeaderReads
+ val headersResult = Json.parse(arrStr).validate[Vector[BlockHeader]]
+ if (headersResult.isError) {
+ fail(headersResult.toString)
+ }
+
+ val blockHeaders = headersResult.get
+
+ blockHeaders.reduce[BlockHeader] {
+ case (prev, next) =>
+ assert(next.previousBlockHashBE == prev.hashBE)
+ next
+ }
+
+ succeed
+ }
+
+ it must "be able to process and fetch real headers from mainnet" in {
+ chainHandler: ChainHandler =>
+ val source = FileUtil.getFileAsSource("block_headers.json")
+ val arrStr = source.getLines.next
+ source.close()
+
+ import org.bitcoins.rpc.serializers.JsonReaders.BlockHeaderReads
+ val headersResult = Json.parse(arrStr).validate[Vector[BlockHeader]]
+ if (headersResult.isError) {
+ fail(headersResult.toString)
+ }
+
+ val blockHeaders =
+ headersResult.get.drop(
+ ChainUnitTest.FIRST_POW_CHANGE - ChainUnitTest.FIRST_BLOCK_HEIGHT)
+
+ val firstBlockHeaderDb =
+ BlockHeaderDbHelper.fromBlockHeader(ChainUnitTest.FIRST_POW_CHANGE - 2,
+ ChainTestUtil.blockHeader562462)
+
+ val secondBlockHeaderDb =
+ BlockHeaderDbHelper.fromBlockHeader(ChainUnitTest.FIRST_POW_CHANGE - 1,
+ ChainTestUtil.blockHeader562463)
+
+ val thirdBlockHeaderDb =
+ BlockHeaderDbHelper.fromBlockHeader(ChainUnitTest.FIRST_POW_CHANGE,
+ ChainTestUtil.blockHeader562464)
+
+ /*
+ * We need to insert one block before the first POW check because it is used on the next
+ * POW check. We then need to insert the next to blocks to circumvent a POW check since
+ * that would require we have an old block in the Blockchain that we don't have.
+ */
+ val firstThreeBlocks =
+ Vector(firstBlockHeaderDb, secondBlockHeaderDb, thirdBlockHeaderDb)
+
+ val createdF = chainHandler.blockHeaderDAO.createAll(firstThreeBlocks)
+
+ createdF.flatMap { _ =>
+ val processorF = Future.successful(chainHandler)
+ // Takes way too long to do all blocks
+ val blockHeadersToTest = blockHeaders.tail
+ .take(
+ (2 * chainHandler.chainConfig.chain.difficultyChangeInterval + 1).toInt)
+ .toList
+
+ processHeaders(processorF = processorF,
+ remainingHeaders = blockHeadersToTest,
+ height = ChainUnitTest.FIRST_POW_CHANGE + 1)
+ }
+ }
+
+ final def processHeaders(
+ processorF: Future[ChainHandler],
+ remainingHeaders: List[BlockHeader],
+ height: Long): Future[Assertion] = {
+ remainingHeaders match {
+ case header :: headersTail =>
+ val newProcessorF = processorF.flatMap(_.processHeader(header))
+ val getHeaderF = newProcessorF.flatMap(_.getHeader(header.hashBE))
+ val expectedBlockHeaderDb =
+ BlockHeaderDbHelper.fromBlockHeader(height, header)
+ val assertionF =
+ getHeaderF.map(tips => assert(tips.contains(expectedBlockHeaderDb)))
+ assertionF.flatMap(_ =>
+ processHeaders(newProcessorF, headersTail, height = height + 1))
+ case Nil => succeed
+ }
+ }
+}
diff --git a/chain-test/src/test/scala/org/bitcoins/chain/blockchain/sync/ChainSyncTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/sync/ChainSyncTest.scala
new file mode 100644
index 0000000000..b69b1ebbcc
--- /dev/null
+++ b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/sync/ChainSyncTest.scala
@@ -0,0 +1,74 @@
+package org.bitcoins.chain.blockchain.sync
+
+import akka.actor.ActorSystem
+import org.bitcoins.chain.api.ChainApi
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.testkit.chain.ChainUnitTest
+import org.bitcoins.testkit.chain.fixture.BitcoindChainHandlerViaRpc
+import org.scalatest.FutureOutcome
+
+import scala.concurrent.Future
+
+class ChainSyncTest extends ChainUnitTest {
+ override type FixtureParam = BitcoindChainHandlerViaRpc
+
+ override implicit val system = ActorSystem(
+ s"chain-sync-test-${System.currentTimeMillis()}")
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome = {
+ withBitcoindChainHandlerViaRpc(test)
+ }
+
+ behavior of "ChainSync"
+
+ it must "sync our chain handler when it is not synced with bitcoind" in {
+ bitcoindWithChainHandler: BitcoindChainHandlerViaRpc =>
+ val bitcoind = bitcoindWithChainHandler.bitcoindRpc
+ val chainHandler = bitcoindWithChainHandler.chainHandler
+ //first we need to implement the 'getBestBlockHashFunc' and 'getBlockHeaderFunc' functions
+ val getBestBlockHashFunc = { () =>
+ bitcoind.getBestBlockHash
+ }
+
+ val getBlockHeaderFunc = { hash: DoubleSha256DigestBE =>
+ bitcoind.getBlockHeader(hash).map(_.blockHeader)
+ }
+
+ //let's generate a block on bitcoind
+ val block1F = bitcoind.generate(1)
+ val newChainHandlerF: Future[ChainApi] = block1F.flatMap { hashes =>
+ ChainSync.sync(chainHandler = chainHandler,
+ getBlockHeaderFunc = getBlockHeaderFunc,
+ getBestBlockHashFunc = getBestBlockHashFunc)
+ }
+
+ newChainHandlerF.flatMap { chainHandler =>
+ chainHandler.getBlockCount.map(count => assert(count == 1))
+
+ }
+ }
+
+ it must "not fail when syncing a chain handler that is synced with it's external data source" in {
+ bitcoindWithChainHandler: BitcoindChainHandlerViaRpc =>
+ val bitcoind = bitcoindWithChainHandler.bitcoindRpc
+ val chainHandler = bitcoindWithChainHandler.chainHandler
+ //first we need to implement the 'getBestBlockHashFunc' and 'getBlockHeaderFunc' functions
+ val getBestBlockHashFunc = { () =>
+ bitcoind.getBestBlockHash
+ }
+
+ val getBlockHeaderFunc = { hash: DoubleSha256DigestBE =>
+ bitcoind.getBlockHeader(hash).map(_.blockHeader)
+ }
+
+ //note we are not generating a block on bitcoind
+ val newChainHandlerF: Future[ChainApi] =
+ ChainSync.sync(chainHandler = chainHandler,
+ getBlockHeaderFunc = getBlockHeaderFunc,
+ getBestBlockHashFunc = getBestBlockHashFunc)
+
+ newChainHandlerF.flatMap { chainHandler =>
+ chainHandler.getBlockCount.map(count => assert(count == 0))
+ }
+ }
+}
diff --git a/chain-test/src/test/scala/org/bitcoins/chain/models/BlockHeaderDAOTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/models/BlockHeaderDAOTest.scala
new file mode 100644
index 0000000000..f02b4c563b
--- /dev/null
+++ b/chain-test/src/test/scala/org/bitcoins/chain/models/BlockHeaderDAOTest.scala
@@ -0,0 +1,175 @@
+package org.bitcoins.chain.models
+
+import akka.actor.ActorSystem
+import org.bitcoins.testkit.chain.{BlockHeaderHelper, ChainUnitTest}
+import org.scalatest.FutureOutcome
+
+import scala.concurrent.Future
+
+/**
+ * Created by chris on 9/8/16.
+ */
+class BlockHeaderDAOTest extends ChainUnitTest {
+
+ override type FixtureParam = BlockHeaderDAO
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withBlockHeaderDAO(test)
+
+ override implicit val system: ActorSystem = ActorSystem("BlockHeaderDAOTest")
+
+ behavior of "BlockHeaderDAO"
+
+ private val genesisHeaderDb = ChainUnitTest.genesisHeaderDb
+ it should "insert and read the genesis block header back" in {
+ blockHeaderDAO: BlockHeaderDAO =>
+ val readF = blockHeaderDAO.read(genesisHeaderDb.hashBE)
+
+ val assert1 = readF.map { readHeader =>
+ assert(readHeader.get.blockHeader.hashBE == genesisHeaderDb.hashBE)
+ }
+ val read1F = blockHeaderDAO.getAtHeight(0)
+
+ val assert2 = {
+ read1F.map { headersAtHeight0 =>
+ assert(headersAtHeight0 == List(genesisHeaderDb))
+ }
+ }
+
+ assert1.flatMap(_ => assert2.map(_ => succeed))
+
+ }
+
+ it must "delete a block header in the database" in {
+ blockHeaderDAO: BlockHeaderDAO =>
+ val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb)
+
+ val createdF = blockHeaderDAO.create(blockHeader)
+ //delete the header in the db
+ val deletedF = {
+ createdF.flatMap { _ =>
+ blockHeaderDAO.delete(blockHeader)
+ }
+ }
+
+ deletedF.flatMap { _ =>
+ blockHeaderDAO
+ .read(blockHeader.blockHeader.hashBE)
+ .map(opt => assert(opt.isEmpty))
+ }
+
+ }
+
+ it must "retrieve the chain tip saved in the database" in {
+ blockHeaderDAO: BlockHeaderDAO =>
+ val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb)
+
+ val createdF = blockHeaderDAO.create(blockHeader)
+
+ val chainTip1F = createdF.flatMap { _ =>
+ blockHeaderDAO.chainTips
+ }
+
+ val assert1F = chainTip1F.map { tips =>
+ assert(tips.length == 1)
+ assert(tips.head.blockHeader.hash == blockHeader.blockHeader.hash)
+ }
+
+ val blockHeader2 = BlockHeaderHelper.buildNextHeader(blockHeader)
+
+ //insert another header and make sure that is the new last header
+ assert1F.flatMap { _ =>
+ val created2F = blockHeaderDAO.create(blockHeader2)
+ val chainTip2F = created2F.flatMap(_ => blockHeaderDAO.chainTips)
+
+ chainTip2F.map { tips =>
+ assert(tips.length == 1)
+ assert(tips.head.blockHeader.hash == blockHeader2.blockHeader.hash)
+ }
+ }
+
+ }
+
+ it must "return the genesis block when retrieving block headers from an empty database" in {
+ blockHeaderDAO: BlockHeaderDAO =>
+ val chainTipsF = blockHeaderDAO.chainTips
+ chainTipsF.map { tips =>
+ assert(tips.headOption == Some(genesisHeaderDb))
+ }
+ }
+
+ it must "retrieve a block header by height" in {
+ blockHeaderDAO: BlockHeaderDAO =>
+ val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb)
+
+ val createdF = blockHeaderDAO.create(blockHeader)
+
+ val getAtHeightF: Future[Vector[BlockHeaderDb]] = {
+ createdF.flatMap { _ =>
+ blockHeaderDAO.getAtHeight(1)
+ }
+ }
+
+ val assert1F = getAtHeightF.map {
+ case headers =>
+ assert(headers.head == blockHeader)
+ assert(headers.head.height == 1)
+ }
+
+ //create one at height 2
+ val blockHeader2 = BlockHeaderHelper.buildNextHeader(blockHeader)
+
+ val created2F = blockHeaderDAO.create(blockHeader2)
+
+ val getAtHeight2F: Future[Vector[BlockHeaderDb]] = {
+ created2F.flatMap(_ => blockHeaderDAO.getAtHeight(2))
+ }
+
+ val assert2F = getAtHeight2F.map { headers =>
+ assert(headers.head == blockHeader2)
+ }
+
+ assert1F.flatMap(_ => assert2F.map(_ => succeed))
+ }
+
+ it must "find the height of the longest chain" in {
+ blockHeaderDAO: BlockHeaderDAO =>
+ val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb)
+ val createdF = blockHeaderDAO.create(blockHeader)
+
+ val maxHeightF = createdF.flatMap(_ => blockHeaderDAO.maxHeight)
+
+ val blockHeader2 = BlockHeaderHelper.buildNextHeader(blockHeader)
+
+ val created2F =
+ maxHeightF.flatMap(_ => blockHeaderDAO.create(blockHeader2))
+
+ val maxHeight2F = created2F.flatMap(_ => blockHeaderDAO.maxHeight)
+
+ maxHeightF.flatMap { h1 =>
+ maxHeight2F.map { h2 =>
+ assert(h1 == 1)
+ assert(h2 == 2)
+
+ }
+ }
+
+ }
+
+ it must "find the height of two headers that are competing to be the longest chain" in {
+ blockHeaderDAO: BlockHeaderDAO =>
+ val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb)
+ val createdF = blockHeaderDAO.create(blockHeader)
+
+ val blockHeader1 = BlockHeaderHelper.buildNextHeader(genesisHeaderDb)
+ val created2F = createdF.flatMap(_ => blockHeaderDAO.create(blockHeader1))
+
+ //now make sure they are both at height 1
+ val getHeightF = created2F.flatMap(_ => blockHeaderDAO.getAtHeight(1))
+
+ getHeightF.map {
+ case headers =>
+ assert(headers == Seq(blockHeader, blockHeader1))
+ }
+ }
+}
diff --git a/chain-test/src/test/scala/org/bitcoins/chain/pow/BitcoinPowTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/pow/BitcoinPowTest.scala
new file mode 100644
index 0000000000..8896c7423b
--- /dev/null
+++ b/chain-test/src/test/scala/org/bitcoins/chain/pow/BitcoinPowTest.scala
@@ -0,0 +1,76 @@
+package org.bitcoins.chain.pow
+
+import akka.actor.ActorSystem
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.chain.models.BlockHeaderDAO
+import org.bitcoins.core.protocol.blockchain.MainNetChainParams
+import org.bitcoins.db.AppConfig
+import org.bitcoins.testkit.chain.fixture.{ChainFixture, ChainFixtureTag}
+import org.bitcoins.testkit.chain.{ChainTestUtil, ChainUnitTest}
+import org.scalatest.FutureOutcome
+
+import scala.concurrent.Future
+
+class BitcoinPowTest extends ChainUnitTest {
+
+ override type FixtureParam = ChainFixture
+
+ override lazy implicit val appConfig: ChainAppConfig = mainnetAppConfig
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withChainFixture(test)
+
+ override implicit val system: ActorSystem = ActorSystem("BitcoinPowTest")
+
+ behavior of "BitcoinPow"
+
+ it must "NOT calculate a POW change when one is not needed" inFixtured {
+ case ChainFixture.Empty =>
+ val blockHeaderDAO = BlockHeaderDAO(appConfig)
+ val header1 = ChainTestUtil.ValidPOWChange.blockHeaderDb566494
+ val header2 = ChainTestUtil.ValidPOWChange.blockHeaderDb566495
+
+ val nextWorkF =
+ Pow.getNetworkWorkRequired(header1, header2.blockHeader, blockHeaderDAO)
+
+ nextWorkF.map(nextWork => assert(nextWork == header1.nBits))
+ }
+
+ it must "calculate a pow change as per the bitcoin network" inFixtured {
+ case ChainFixture.Empty =>
+ val firstBlockDb = ChainTestUtil.ValidPOWChange.blockHeaderDb564480
+ val currentTipDb = ChainTestUtil.ValidPOWChange.blockHeaderDb566495
+ val expectedNextWork =
+ ChainTestUtil.ValidPOWChange.blockHeader566496.nBits
+ val calculatedWorkF =
+ Pow.calculateNextWorkRequired(currentTipDb,
+ firstBlockDb,
+ MainNetChainParams)
+
+ calculatedWorkF.map(calculatedWork =>
+ assert(calculatedWork == expectedNextWork))
+ }
+
+ it must "GetNextWorkRequired correctly" taggedAs ChainFixtureTag.PopulatedBlockHeaderDAO inFixtured {
+ case ChainFixture.PopulatedBlockHeaderDAO(blockHeaderDAO) =>
+ val iterations = 4200
+
+ // We must start after the first POW change to avoid looking for a block we don't have
+ val assertionFs =
+ (ChainUnitTest.FIRST_POW_CHANGE + 1 until ChainUnitTest.FIRST_POW_CHANGE + 1 + iterations)
+ .map { height =>
+ val blockF = blockHeaderDAO.getAtHeight(height).map(_.head)
+ val nextBlockF = blockHeaderDAO.getAtHeight(height + 1).map(_.head)
+
+ for {
+ currentTip <- blockF
+ nextTip <- nextBlockF
+ nextNBits <- Pow.getNetworkWorkRequired(currentTip,
+ nextTip.blockHeader,
+ blockHeaderDAO)
+ } yield assert(nextNBits == nextTip.nBits)
+ }
+
+ Future.sequence(assertionFs).map(_ => succeed)
+ }
+}
diff --git a/chain-test/src/test/scala/org/bitcoins/chain/validation/TipValidationTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/validation/TipValidationTest.scala
new file mode 100644
index 0000000000..35893cefb5
--- /dev/null
+++ b/chain-test/src/test/scala/org/bitcoins/chain/validation/TipValidationTest.scala
@@ -0,0 +1,81 @@
+package org.bitcoins.chain.validation
+
+import akka.actor.ActorSystem
+import org.bitcoins.chain.db.ChainDbManagement
+import org.bitcoins.chain.models.{
+ BlockHeaderDAO,
+ BlockHeaderDb,
+ BlockHeaderDbHelper
+}
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.testkit.chain.{
+ BlockHeaderHelper,
+ ChainTestUtil,
+ ChainUnitTest
+}
+import org.scalatest.{Assertion, FutureOutcome}
+
+import scala.concurrent.Future
+import org.bitcoins.db.AppConfig
+import org.bitcoins.chain.config.ChainAppConfig
+import com.typesafe.config.ConfigFactory
+
+class TipValidationTest extends ChainUnitTest {
+
+ override type FixtureParam = BlockHeaderDAO
+
+ // we're working with mainnet data
+ override lazy implicit val appConfig: ChainAppConfig = mainnetAppConfig
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withBlockHeaderDAO(test)
+
+ override implicit val system: ActorSystem = ActorSystem("TipValidationTest")
+
+ behavior of "TipValidation"
+
+ //blocks 566,092 and 566,093
+ val newValidTip = BlockHeaderHelper.header1
+ val currentTipDb = BlockHeaderHelper.header2Db
+
+ it must "connect two blocks with that are valid" in { bhDAO =>
+ val newValidTipDb =
+ BlockHeaderDbHelper.fromBlockHeader(566093, newValidTip)
+ val expected = TipUpdateResult.Success(newValidTipDb)
+
+ runTest(newValidTip, expected, bhDAO)
+ }
+
+ it must "fail to connect two blocks that do not reference prev block hash correctly" in {
+ bhDAO =>
+ val badPrevHash = BlockHeaderHelper.badPrevHash
+
+ val expected = TipUpdateResult.BadPreviousBlockHash(badPrevHash)
+
+ runTest(badPrevHash, expected, bhDAO)
+ }
+
+ it must "fail to connect two blocks with two different POW requirements at the wrong interval" in {
+ bhDAO =>
+ val badPOW = BlockHeaderHelper.badNBits
+ val expected = TipUpdateResult.BadPOW(badPOW)
+ runTest(badPOW, expected, bhDAO)
+ }
+
+ it must "fail to connect two blocks with a bad nonce" in { bhDAO =>
+ val badNonce = BlockHeaderHelper.badNonce
+ val expected = TipUpdateResult.BadNonce(badNonce)
+ runTest(badNonce, expected, bhDAO)
+ }
+
+ private def runTest(
+ header: BlockHeader,
+ expected: TipUpdateResult,
+ blockHeaderDAO: BlockHeaderDAO,
+ currentTipDbDefault: BlockHeaderDb = currentTipDb): Future[Assertion] = {
+ val checkTipF =
+ TipValidation.checkNewTip(header, currentTipDbDefault, blockHeaderDAO)
+
+ checkTipF.map(validationResult => assert(validationResult == expected))
+ }
+}
diff --git a/chain/README.md b/chain/README.md
new file mode 100644
index 0000000000..ba7c148150
--- /dev/null
+++ b/chain/README.md
@@ -0,0 +1,17 @@
+### chain
+
+This is meant to be a stand alone project that process a new block / transaction and stores it.
+It also provides a interface to query information related to a blockchain.
+
+The design goal with this project is to be agnostic of how the project is receiving
+the blockchain data, just that it processes and stores it. For instance
+you could provide the blockchain data via
+
+- rpc
+- zmq
+- p2p
+- sattelite
+
+This project just stores relevant [`block`](../core/src/main/scala/org/bitcoins/core/protocol/blockchain/Block.scala)
+and [`transaction`](../core/src/main/scala/org/bitcoins/core/protocol/transaction/Transaction.scala) information and allows
+for it to be queried via a api.
\ No newline at end of file
diff --git a/chain/build.sbt b/chain/build.sbt
new file mode 100644
index 0000000000..b7a2b423b2
--- /dev/null
+++ b/chain/build.sbt
@@ -0,0 +1,3 @@
+coverageMinimum := 90
+
+coverageFailOnMinimum := true
diff --git a/chain/src/main/resources/chain.conf b/chain/src/main/resources/chain.conf
new file mode 100644
index 0000000000..7e9e34aca2
--- /dev/null
+++ b/chain/src/main/resources/chain.conf
@@ -0,0 +1,5 @@
+bitcoin-s {
+ database {
+ name = "chaindb.sqlite"
+ }
+}
\ No newline at end of file
diff --git a/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala b/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala
new file mode 100644
index 0000000000..3f1a321528
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala
@@ -0,0 +1,48 @@
+package org.bitcoins.chain.api
+
+import org.bitcoins.db._
+import org.bitcoins.chain.models.BlockHeaderDb
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+
+import scala.concurrent.{ExecutionContext, Future}
+
+/**
+ * Entry api to the chain project for adding new things to our blockchain
+ */
+trait ChainApi {
+
+ def chainConfig: AppConfig
+
+ /**
+ * Adds a block header to our chain project
+ * @param header
+ * @return
+ */
+ def processHeader(header: BlockHeader)(
+ implicit ec: ExecutionContext): Future[ChainApi]
+
+ /** Process all of the given headers and returns a new [[ChainApi chain api]]
+ * that contains these headers. This method processes headers in the order
+ * that they are given. If the headers are out of order, this method will fail
+ * @param headers
+ * @return
+ */
+ def processHeaders(headers: Vector[BlockHeader])(
+ implicit ec: ExecutionContext): Future[ChainApi] = {
+ headers.foldLeft(Future.successful(this)) {
+ case (chainF, header) =>
+ chainF.flatMap(_.processHeader(header))
+ }
+ }
+
+ /** Get's a [[org.bitcoins.chain.models.BlockHeaderDb]] from the chain's database */
+ def getHeader(hash: DoubleSha256DigestBE): Future[Option[BlockHeaderDb]]
+
+ /** Gets the number of blocks in the database */
+ def getBlockCount: Future[Long]
+
+ /** Gets the hash of the block that is what we consider "best" */
+ def getBestBlockHash(
+ implicit ec: ExecutionContext): Future[DoubleSha256DigestBE]
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/Blockchain.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/Blockchain.scala
new file mode 100644
index 0000000000..cdc786eb59
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/Blockchain.scala
@@ -0,0 +1,109 @@
+package org.bitcoins.chain.blockchain
+
+import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb}
+import org.bitcoins.chain.validation.{TipUpdateResult, TipValidation}
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.BitcoinSLogger
+
+import scala.concurrent.{ExecutionContext, Future}
+
+/**
+ * In memory implementation of a blockchain
+ * This data structure maintains the state of a
+ * blockchain in memory, the headers can be accessed
+ * with [[headers]]. The headers are stored with the most
+ * recent header at index 0, the second most recent header at index 1 etc
+ * You can walk the chain by
+ * {{{
+ * headers.map(h => println(h))
+ * }}}
+ *
+ */
+case class Blockchain(headers: Vector[BlockHeaderDb]) extends BitcoinSLogger {
+ val tip: BlockHeaderDb = headers.head
+}
+
+object Blockchain extends BitcoinSLogger {
+
+ def fromHeaders(headers: Vector[BlockHeaderDb]): Blockchain = {
+ Blockchain(headers)
+ }
+
+ /**
+ * Attempts to connect the given block header with the given blockchain
+ * This is done via the companion object for blockchain because
+ * we query [[BlockHeaderDAO block header dao]] for the chain tips
+ * We then attempt to connect this block header to all of our current
+ * chain tips.
+ * @param header the block header to connect to our chain
+ * @param blockHeaderDAO where we can find our blockchain
+ * @param ec
+ * @return a [[Future future]] that contains a [[BlockchainUpdate update]] indicating
+ * we [[BlockchainUpdate.Successful successfully]] connected the tip,
+ * or [[BlockchainUpdate.Failed failed]] to connect to a tip
+ */
+ def connectTip(header: BlockHeader, blockHeaderDAO: BlockHeaderDAO)(
+ implicit ec: ExecutionContext): Future[BlockchainUpdate] = {
+
+ //get all competing chains we have
+ val blockchainsF: Future[Vector[Blockchain]] =
+ blockHeaderDAO.getBlockchains()
+
+ val tipResultF: Future[BlockchainUpdate] = blockchainsF.flatMap {
+ blockchains =>
+ val nested: Vector[Future[BlockchainUpdate]] = blockchains.map {
+ blockchain =>
+ val tip = blockchain.tip
+ logger.info(
+ s"Attempting to add new tip=${header.hashBE.hex} with prevhash=${header.previousBlockHashBE.hex} to chain with current tips=${tip.hashBE.hex}")
+ val tipResultF = TipValidation.checkNewTip(newPotentialTip = header,
+ currentTip = tip,
+ blockHeaderDAO =
+ blockHeaderDAO)
+
+ tipResultF.map { tipResult =>
+ tipResult match {
+ case TipUpdateResult.Success(headerDb) =>
+ val newChain =
+ Blockchain.fromHeaders(headerDb +: blockchain.headers)
+ BlockchainUpdate.Successful(newChain, headerDb)
+ case fail: TipUpdateResult.Failure =>
+ BlockchainUpdate.Failed(blockchain, header, fail)
+ }
+ }
+ }
+ parseSuccessOrFailure(nested = nested)
+ }
+
+ tipResultF
+ }
+
+ /** Takes in a vector of blockchain updates being executed asynchronously, we can only connect one [[BlockHeader header]]
+ * to a tip successfully, which means _all_ other [[BlockchainUpdate updates]] must fail. This is a helper method
+ * to find the one [[BlockchainUpdate.Successful successful]] update, or else returns one of the [[BlockchainUpdate.Failed failures]]
+ * @param nested
+ * @param ec
+ * @return
+ */
+ private def parseSuccessOrFailure(nested: Vector[Future[BlockchainUpdate]])(
+ implicit ec: ExecutionContext): Future[BlockchainUpdate] = {
+ val successfulTipOptF: Future[Option[BlockchainUpdate]] = {
+ Future.find(nested) {
+ case update: BlockchainUpdate =>
+ update.isInstanceOf[BlockchainUpdate.Successful]
+ }
+ }
+
+ successfulTipOptF.flatMap {
+ case Some(update) => Future.successful(update)
+ case None =>
+ //if we didn't successfully connect a tip, just take the first failure we see
+ Future
+ .find(nested) {
+ case update: BlockchainUpdate =>
+ update.isInstanceOf[BlockchainUpdate.Failed]
+ }
+ .map(_.get)
+ }
+ }
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainBuilder.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainBuilder.scala
new file mode 100644
index 0000000000..43c6495a36
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainBuilder.scala
@@ -0,0 +1,26 @@
+package org.bitcoins.chain.blockchain
+
+import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb}
+
+import scala.collection.mutable
+
+/**
+ * @inheritdoc
+ * @param blockHeaderDAO
+ */
+case class BlockchainBuilder(blockHeaderDAO: BlockHeaderDAO) extends mutable.Builder[BlockHeaderDb, Blockchain] {
+ private val internal = Vector.newBuilder[BlockHeaderDb]
+
+
+ override def result(): Blockchain = {
+ Blockchain.fromHeaders(internal.result().reverse)
+ }
+
+ override def +=(blockHeaderDb: BlockHeaderDb): this.type = {
+ internal.+=(blockHeaderDb)
+ this
+ }
+
+
+ override def clear(): Unit = internal.clear()
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainUpdate.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainUpdate.scala
new file mode 100644
index 0000000000..cea19ea380
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainUpdate.scala
@@ -0,0 +1,35 @@
+package org.bitcoins.chain.blockchain
+
+import org.bitcoins.chain.models.BlockHeaderDb
+import org.bitcoins.chain.validation.TipUpdateResult
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+
+/** Represents the state of an update to our [[org.bitcoins.chain.blockchain.Blockchain Blockchain]]
+ * An example of a successful update is receiving a [[BlockHeader BlockHeader]] and successfully
+ * adding it to our database.
+ *
+ * An example of a [[org.bitcoins.chain.blockchain.BlockchainUpdate.Failed Failed]] update
+ * is when we receive a [[BlockHeader]] that is invalid and because of a
+ * [[org.bitcoins.chain.validation.TipUpdateResult.Failure TipUpdateFailure]]
+ * because of [[org.bitcoins.chain.validation.TipUpdateResult.BadPOW BadPOW]] or a
+ * [[org.bitcoins.chain.validation.TipUpdateResult.BadNonce BadNonce]] etc
+ */
+sealed abstract class BlockchainUpdate
+
+object BlockchainUpdate {
+
+ /** The key thing we receive here is [[org.bitcoins.chain.models.BlockHeaderDb BlockHeaderDb]]
+ * with a height assigned to it this happens after
+ * calling [[ChainHandler.processHeader() ChainHandler.processHeader]]
+ */
+ case class Successful(blockchain: Blockchain, updatedHeader: BlockHeaderDb)
+ extends BlockchainUpdate {
+ def height: Long = updatedHeader.height
+ }
+
+ case class Failed(
+ blockchain: Blockchain,
+ failedHeader: BlockHeader,
+ tipUpdateFailure: TipUpdateResult.Failure)
+ extends BlockchainUpdate
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/ChainHandler.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/ChainHandler.scala
new file mode 100644
index 0000000000..da1deb7fb7
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/ChainHandler.scala
@@ -0,0 +1,73 @@
+package org.bitcoins.chain.blockchain
+
+import org.bitcoins.chain.api.ChainApi
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb}
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.BitcoinSLogger
+
+import scala.concurrent.{ExecutionContext, Future}
+
+/**
+ * Chain Handler is meant to be the reference implementation
+ * of [[ChainApi]], this is the entry point in to the
+ * chain project.
+ */
+case class ChainHandler(
+ blockHeaderDAO: BlockHeaderDAO,
+ chainConfig: ChainAppConfig)
+ extends ChainApi
+ with BitcoinSLogger {
+
+ override def getBlockCount: Future[Long] = {
+ blockHeaderDAO.maxHeight
+ }
+
+ override def getHeader(
+ hash: DoubleSha256DigestBE): Future[Option[BlockHeaderDb]] = {
+ blockHeaderDAO.findByHash(hash)
+ }
+
+ override def processHeader(header: BlockHeader)(
+ implicit ec: ExecutionContext): Future[ChainHandler] = {
+
+ val blockchainUpdateF = Blockchain.connectTip(header, blockHeaderDAO)
+
+ val newHandlerF = blockchainUpdateF.flatMap {
+ case BlockchainUpdate.Successful(_, updatedHeader) =>
+ //now we have successfully connected the header, we need to insert
+ //it into the database
+ val createdF = blockHeaderDAO.create(updatedHeader)
+ createdF.map(_ => ChainHandler(blockHeaderDAO, chainConfig))
+ case BlockchainUpdate.Failed(_, _, reason) =>
+ val errMsg =
+ s"Failed to add header to chain, header=${header.hashBE.hex} reason=${reason}"
+ logger.warn(errMsg)
+ Future.failed(new RuntimeException(errMsg))
+ }
+
+ blockchainUpdateF.failed.foreach { err =>
+ logger.error(
+ s"Failed to connect header=${header.hashBE.hex} err=${err.getMessage}")
+
+ }
+
+ newHandlerF
+ }
+
+ /**
+ * @inheritdoc
+ */
+ override def getBestBlockHash(
+ implicit ec: ExecutionContext): Future[DoubleSha256DigestBE] = {
+ //naive implementation, this is looking for the tip with the _most_ proof of work
+ //this does _not_ mean that it is on the chain that has the most work
+ //TODO: Enhance this in the future to return the "heaviest" header
+ //https://bitcoin.org/en/glossary/block-chain
+ blockHeaderDAO.chainTips.map { tips =>
+ val sorted = tips.sortBy(header => header.blockHeader.difficulty)
+ sorted.head.hashBE
+ }
+ }
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/CheckHeaderResult.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/CheckHeaderResult.scala
new file mode 100644
index 0000000000..0abee548ec
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/CheckHeaderResult.scala
@@ -0,0 +1,5 @@
+package org.bitcoins.chain.blockchain
+
+import org.bitcoins.chain.validation.TipUpdateResult
+
+case class CheckHeaderResult(result: TipUpdateResult, chain: Blockchain)
diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/sync/ChainSync.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/sync/ChainSync.scala
new file mode 100644
index 0000000000..f0984f9211
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/sync/ChainSync.scala
@@ -0,0 +1,124 @@
+package org.bitcoins.chain.blockchain.sync
+
+import org.bitcoins.chain.api.ChainApi
+import org.bitcoins.chain.blockchain.ChainHandler
+import org.bitcoins.chain.models.BlockHeaderDb
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.BitcoinSLogger
+
+import scala.concurrent.{ExecutionContext, Future}
+
+trait ChainSync extends BitcoinSLogger {
+
+ /** This method checks if our chain handler has the tip of the blockchain as an external source
+ * If we do not have the same chain, we sync our chain handler until we are at the same best block hash
+ * @param chainHandler our internal chain handler
+ * @param getBlockHeaderFunc a function that we can call to retrieve a block
+ * @param getBestBlockHashFunc a function that can call a third party source (bitcoind, block explorer etc)
+ * to retrieve what the best block is on the blockchain
+ * @param ec
+ * @return
+ */
+ def sync(chainHandler: ChainHandler,
+ getBlockHeaderFunc: DoubleSha256DigestBE => Future[BlockHeader],
+ getBestBlockHashFunc: () => Future[DoubleSha256DigestBE])(implicit ec: ExecutionContext): Future[ChainApi] = {
+ val currentTipsF: Future[Vector[BlockHeaderDb]] = {
+ chainHandler.blockHeaderDAO.chainTips
+ }
+
+ //TODO: We are implicitly trusting whatever
+ // getBestBlockHashFunc returns as the best chain
+ // and we don't ever even have to have this connect
+ // with our current best tips
+ // do we some how want to mitigate against the divergence
+ // in chains here?
+ val bestBlockHashF = {
+ getBestBlockHashFunc()
+ }
+
+ val updatedChainApi = bestBlockHashF.flatMap { bestBlockHash =>
+ currentTipsF.flatMap { tips =>
+ syncTips(chainApi = chainHandler,
+ tips = tips,
+ bestBlockHash = bestBlockHash,
+ getBlockHeaderFunc = getBlockHeaderFunc)
+ }
+ }
+
+ updatedChainApi
+
+ }
+
+
+ /**
+ * Keeps walking backwards on the chain until we match one
+ * of the tips we have in our chain
+ * @param chainApi the chain api that represents our current chain state
+ * @param tips the best block header we know about
+ * @param bestBlockHash the best block header seen by our third party data source
+ * @param getBlockHeaderFunc how we can retrieve block headers
+ * @param ec
+ * @return
+ */
+ private def syncTips(chainApi: ChainApi,
+ tips: Vector[BlockHeaderDb],
+ bestBlockHash: DoubleSha256DigestBE,
+ getBlockHeaderFunc: DoubleSha256DigestBE => Future[BlockHeader])(implicit ec: ExecutionContext): Future[ChainApi] = {
+ require(tips.nonEmpty, s"Cannot sync without the genesis block")
+
+ //we need to walk backwards on the chain until we get to one of our tips
+
+ val tipsBH = tips.map(_.blockHeader)
+
+ def loop(lastHeaderF: Future[BlockHeader], accum: List[BlockHeader]): Future[List[BlockHeader]] = {
+ lastHeaderF.flatMap { lastHeader =>
+ if (tipsBH.contains(lastHeader)) {
+ //means we have synced back to a block that we know
+ Future.successful(accum)
+ } else {
+
+ logger.debug(s"Last header=${lastHeader.hashBE.hex}")
+ //we don't know this block, so we need to keep walking backwards
+ //to find a block a we know
+ val newLastHeaderF = getBlockHeaderFunc(lastHeader.previousBlockHashBE)
+
+ loop(newLastHeaderF,lastHeader +: accum)
+ }
+ }
+ }
+
+ val bestHeaderF = getBlockHeaderFunc(bestBlockHash)
+
+ bestHeaderF.map { bestHeader =>
+ logger.info(s"Best tip from third party=${bestHeader.hashBE.hex} currentTips=${tips.map(_.hashBE.hex)}")
+ }
+
+ //one sanity check to make sure we aren't _ahead_ of our data source
+ val hasBlockHashF = chainApi.getHeader(bestBlockHash)
+
+ hasBlockHashF.flatMap { hasBlockHashF: Option[BlockHeaderDb] =>
+ if (hasBlockHashF.isDefined) {
+ //if we have the best block hash in our
+ //chainstate already, we don't need to search
+ //for it again!
+ Future.successful(chainApi)
+ } else {
+ //this represents all headers we have received from our external data source
+ //and need to process with our chain handler
+ val headersToSyncF = loop(bestHeaderF, List.empty)
+
+ //now we are going to add them to our chain and return the chain api
+ headersToSyncF.flatMap { headers =>
+ logger.info(s"Attempting to sync ${headers.length} blockheader to our chainstate")
+ chainApi.processHeaders(headers.toVector)
+ }
+ }
+
+ }
+
+ }
+}
+
+
+object ChainSync extends ChainSync
\ No newline at end of file
diff --git a/chain/src/main/scala/org/bitcoins/chain/config/ChainAppConfig.scala b/chain/src/main/scala/org/bitcoins/chain/config/ChainAppConfig.scala
new file mode 100644
index 0000000000..81e3ef176f
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/config/ChainAppConfig.scala
@@ -0,0 +1,62 @@
+package org.bitcoins.chain.config
+
+import com.typesafe.config.Config
+import org.bitcoins.chain.db.ChainDbManagement
+import org.bitcoins.db._
+import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDbHelper}
+import org.bitcoins.core.util.FutureUtil
+
+import scala.concurrent.ExecutionContext
+import scala.concurrent.Future
+import scala.concurrent.Promise
+import scala.util.Success
+import scala.util.Failure
+
+case class ChainAppConfig(val confs: Config*) extends AppConfig {
+ override protected val configOverrides: List[Config] = confs.toList
+ override protected val moduleConfigName: String = "chain.conf"
+ override protected type ConfigType = ChainAppConfig
+ override protected def newConfigOfType(
+ configs: List[Config]): ChainAppConfig = ChainAppConfig(configs: _*)
+
+ def isInitialized()(implicit ec: ExecutionContext): Future[Boolean] = {
+ val bhDAO = BlockHeaderDAO(this)
+ val p = Promise[Boolean]()
+ val isDefinedOptF = {
+ bhDAO.read(chain.genesisBlock.blockHeader.hashBE).map(_.isDefined)
+ }
+ isDefinedOptF.onComplete {
+ case Success(bool) =>
+ logger.info(s"Chain project is initialized")
+ p.success(bool)
+ case Failure(err) =>
+ logger.info(s"Failed to init chain app err=${err.getMessage}")
+ p.success(false)
+ }
+
+ p.future
+ }
+
+ /** Initializes our chain project if it is needed
+ * This creates the necessary tables for the chain project
+ * and inserts preliminary data like the genesis block header
+ * */
+ def initialize(implicit ec: ExecutionContext): Future[Unit] = {
+ val blockHeaderDAO = BlockHeaderDAO(this)
+ val isInitF = isInitialized()
+ isInitF.flatMap { isInit =>
+ if (isInit) {
+ FutureUtil.unit
+ } else {
+ val createdF = ChainDbManagement.createAll()(this, ec)
+ val genesisHeader =
+ BlockHeaderDbHelper.fromBlockHeader(height = 0,
+ bh =
+ chain.genesisBlock.blockHeader)
+ val bhCreatedF =
+ createdF.flatMap(_ => blockHeaderDAO.create(genesisHeader))
+ bhCreatedF.flatMap(_ => FutureUtil.unit)
+ }
+ }
+ }
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/db/ChainDbManagement.scala b/chain/src/main/scala/org/bitcoins/chain/db/ChainDbManagement.scala
new file mode 100644
index 0000000000..05ad18bc9e
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/db/ChainDbManagement.scala
@@ -0,0 +1,31 @@
+package org.bitcoins.chain.db
+
+import org.bitcoins.db._
+import org.bitcoins.chain.models.BlockHeaderTable
+import org.bitcoins.db.{DbManagement}
+import slick.lifted.TableQuery
+
+import scala.concurrent.Future
+
+/**
+ * Responsible for creating and destroying database
+ * tables inside of the Chain project.
+ */
+sealed abstract class ChainDbManagement extends DbManagement {
+
+ private val chainTable: TableQuery[BlockHeaderTable] =
+ TableQuery[BlockHeaderTable]
+
+ override val allTables = List(chainTable)
+
+ def createHeaderTable(createIfNotExists: Boolean = true)(
+ implicit config: AppConfig): Future[Unit] = {
+ createTable(chainTable, createIfNotExists)
+ }
+
+ def dropHeaderTable()(implicit config: AppConfig): Future[Unit] = {
+ dropTable(chainTable)
+ }
+}
+
+object ChainDbManagement extends ChainDbManagement
diff --git a/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderDAO.scala b/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderDAO.scala
new file mode 100644
index 0000000000..27b83d3159
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderDAO.scala
@@ -0,0 +1,196 @@
+package org.bitcoins.chain.models
+
+import org.bitcoins.chain.blockchain.Blockchain
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.db._
+import slick.jdbc.SQLiteProfile
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.annotation.tailrec
+import scala.concurrent.{ExecutionContext, Future}
+
+/**
+ * This class is responsible for all database access related
+ * to [[org.bitcoins.core.protocol.blockchain.BlockHeader]]s in
+ * our chain project
+ */
+case class BlockHeaderDAO(appConfig: ChainAppConfig)(
+ implicit override val ec: ExecutionContext)
+ extends CRUD[BlockHeaderDb, DoubleSha256DigestBE] {
+
+ import org.bitcoins.db.DbCommonsColumnMappers._
+
+ override val table: TableQuery[BlockHeaderTable] =
+ TableQuery[BlockHeaderTable]
+
+ /** Creates all of the given [[BlockHeaderDb]] in the database */
+ override def createAll(
+ headers: Vector[BlockHeaderDb]): Future[Vector[BlockHeaderDb]] = {
+ SlickUtil.createAllNoAutoInc(ts = headers,
+ database = database,
+ table = table)
+ }
+
+ override protected def findAll(
+ ts: Vector[BlockHeaderDb]): Query[Table[_], BlockHeaderDb, Seq] = {
+ findByPrimaryKeys(ts.map(_.hashBE))
+ }
+
+ def findByHash(hash: DoubleSha256DigestBE): Future[Option[BlockHeaderDb]] = {
+ val query = findByPrimaryKey(hash).result
+ database.runVec(query).map(_.headOption)
+ }
+
+ override def findByPrimaryKeys(hashes: Vector[DoubleSha256DigestBE]): Query[
+ Table[_],
+ BlockHeaderDb,
+ Seq] = {
+ table.filter(_.hash.inSet(hashes))
+ }
+
+ /** Retrives the ancestor for the given block header at the given height
+ * @param child
+ * @param height
+ * @return
+ */
+ def getAncestorAtHeight(
+ child: BlockHeaderDb,
+ height: Long): Future[Option[BlockHeaderDb]] = {
+ /*
+ * To avoid making many database reads, we make one database read for all
+ * possibly useful block headers.
+ */
+ val headersF = getBetweenHeights(from = height, to = child.height - 1)
+
+ /*
+ * We then bucket sort these headers by height so that any ancestor can be found
+ * in linear time assuming a bounded number of contentious tips.
+ */
+ val headersByHeight: Array[Vector[BlockHeaderDb]] =
+ new Array[Vector[BlockHeaderDb]](_length = (child.height - height).toInt)
+
+ /*
+ * I believe Array's of Objects are instantiated with null, which is evil,
+ * and so we start by giving each element of the array a Vector.empty.
+ */
+ headersByHeight.indices.foreach(index =>
+ headersByHeight(index) = Vector.empty)
+
+ // Bucket sort
+ headersF.map { headers =>
+ headers.foreach { header =>
+ val index = (header.height - height).toInt
+ headersByHeight(index) = headersByHeight(index).:+(header)
+ }
+
+ // Now that the bucket sort is done, we get rid of mutability
+ val groupedByHeightHeaders: List[Vector[BlockHeaderDb]] =
+ headersByHeight.toList
+
+ @tailrec
+ def loop(
+ currentHeader: BlockHeaderDb,
+ headersByDescHeight: List[Vector[BlockHeaderDb]]): Option[
+ BlockHeaderDb] = {
+ if (currentHeader.height == height) {
+ Some(currentHeader)
+ } else {
+ val prevHeaderOpt = headersByDescHeight.headOption.flatMap(
+ _.find(_.hashBE == currentHeader.previousBlockHashBE))
+
+ prevHeaderOpt match {
+ case None => None
+ case Some(prevHeader) => loop(prevHeader, headersByDescHeight.tail)
+ }
+ }
+ }
+
+ loop(child, groupedByHeightHeaders.reverse)
+ }
+ }
+
+ /** Retrieves a [[BlockHeaderDb]] at the given height */
+ def getAtHeight(height: Long): Future[Vector[BlockHeaderDb]] = {
+ val query = getAtHeightQuery(height)
+ database.runVec(query)
+ }
+
+ def getAtHeightQuery(height: Long): SQLiteProfile.StreamingProfileAction[
+ Seq[BlockHeaderDb],
+ BlockHeaderDb,
+ Effect.Read] = {
+ table.filter(_.height === height).result
+ }
+
+ /** Gets Block Headers between (inclusive) from and to, could be out of order */
+ def getBetweenHeights(from: Long, to: Long): Future[Vector[BlockHeaderDb]] = {
+ val query = getBetweenHeightsQuery(from, to)
+ database.runVec(query)
+ }
+
+ def getBetweenHeightsQuery(
+ from: Long,
+ to: Long): SQLiteProfile.StreamingProfileAction[
+ Seq[BlockHeaderDb],
+ BlockHeaderDb,
+ Effect.Read] = {
+ table.filter(header => header.height >= from && header.height <= to).result
+ }
+
+ /** Returns the maximum block height from our database */
+ def maxHeight: Future[Long] = {
+ val query = maxHeightQuery
+ val result = database.run(query)
+ result
+ }
+
+ private def maxHeightQuery: SQLiteProfile.ProfileAction[
+ Long,
+ NoStream,
+ Effect.Read] = {
+ val query = table.map(_.height).max.getOrElse(0L).result
+ query
+ }
+
+ /** Returns the chainTips in our database. This can be multiple headers if we have
+ * competing blockchains (fork) */
+ def chainTips: Future[Vector[BlockHeaderDb]] = {
+ logger.debug(s"Getting chaintips from: ${database.config.dbConfig.config}")
+ val aggregate = {
+ maxHeightQuery.flatMap { height =>
+ logger.debug(s"Max block height: $height")
+ val atHeight = getAtHeightQuery(height)
+ atHeight.map { headers =>
+ logger.debug(s"Headers at $height: $headers")
+ }
+ atHeight
+ }
+ }
+
+ database.runVec(aggregate)
+ }
+
+ /** Returns competing blockchains that are contained in our BlockHeaderDAO
+ * Each chain returns the last [[org.bitcoins.core.protocol.blockchain.ChainParams.difficultyChangeInterval difficutly interval]]
+ * as defined by the network we are on. For instance, on bitcoin mainnet this will be 2016 block headers.
+ * If no competing tips are found, we only return one [[Blockchain blockchain]], else we
+ * return n chains for the number of competing [[chainTips tips]] we have
+ * @see [[Blockchain]]
+ * @param ec
+ * @return
+ */
+ def getBlockchains()(
+ implicit ec: ExecutionContext): Future[Vector[Blockchain]] = {
+ val chainTipsF = chainTips
+ val diffInterval = appConfig.chain.difficultyChangeInterval
+ chainTipsF.flatMap { tips =>
+ val nestedFuture: Vector[Future[Blockchain]] = tips.map { tip =>
+ val height = Math.max(0, tip.height - diffInterval)
+ val headersF = getBetweenHeights(from = height, to = tip.height)
+ headersF.map(headers => Blockchain.fromHeaders(headers.reverse))
+ }
+ Future.sequence(nestedFuture)
+ }
+ }
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderTable.scala b/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderTable.scala
new file mode 100644
index 0000000000..10a07cfca1
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderTable.scala
@@ -0,0 +1,89 @@
+package org.bitcoins.chain.models
+
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.core.number.{Int32, UInt32}
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import slick.jdbc.SQLiteProfile.api._
+
+case class BlockHeaderDb(
+ height: Long,
+ hashBE: DoubleSha256DigestBE,
+ version: Int32,
+ previousBlockHashBE: DoubleSha256DigestBE,
+ merkleRootHashBE: DoubleSha256DigestBE,
+ time: UInt32,
+ nBits: UInt32,
+ nonce: UInt32,
+ hex: String) {
+
+ lazy val blockHeader: BlockHeader = {
+ val blockHeader = BlockHeader.fromHex(hex)
+
+ require(blockHeader.hashBE == hashBE)
+ require(blockHeader.previousBlockHashBE == previousBlockHashBE)
+ require(blockHeader.version == version)
+ require(blockHeader.nBits == nBits)
+ require(blockHeader.nonce == nonce)
+
+ blockHeader
+ }
+}
+
+object BlockHeaderDbHelper {
+
+ def fromBlockHeader(height: Long, bh: BlockHeader): BlockHeaderDb = {
+ BlockHeaderDb(
+ height = height,
+ hashBE = bh.hashBE,
+ previousBlockHashBE = bh.previousBlockHashBE,
+ merkleRootHashBE = bh.merkleRootHashBE,
+ time = bh.time,
+ nBits = bh.nBits,
+ nonce = bh.nonce,
+ version = bh.version,
+ hex = bh.hex
+ )
+ }
+}
+
+/** A table that stores block headers related to a blockchain */
+class BlockHeaderTable(tag: Tag)
+ extends Table[BlockHeaderDb](tag, "block_headers") {
+ import org.bitcoins.db.DbCommonsColumnMappers._
+
+ def height = column[Long]("height")
+
+ def hash = column[DoubleSha256DigestBE]("hash", O.PrimaryKey)
+
+ def version = column[Int32]("version")
+
+ def previousBlockHash = column[DoubleSha256DigestBE]("previous_block_hash")
+
+ def merkleRootHash = column[DoubleSha256DigestBE]("merkle_root_hash")
+
+ def time = column[UInt32]("time")
+
+ def nBits = column[UInt32]("n_bits")
+
+ def nonce = column[UInt32]("nonce")
+
+ def hex = column[String]("hex")
+
+ /** The sql index for searching based on [[height]] */
+ def heightIndex = index("height_index", height)
+
+ def hashIndex = index("hash_index", hash)
+
+ def * = {
+ (height,
+ hash,
+ version,
+ previousBlockHash,
+ merkleRootHash,
+ time,
+ nBits,
+ nonce,
+ hex).<>(BlockHeaderDb.tupled, BlockHeaderDb.unapply)
+ }
+
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/pow/Pow.scala b/chain/src/main/scala/org/bitcoins/chain/pow/Pow.scala
new file mode 100644
index 0000000000..0dcc5517c7
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/pow/Pow.scala
@@ -0,0 +1,119 @@
+package org.bitcoins.chain.pow
+
+import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb}
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.blockchain.{BlockHeader, ChainParams}
+import org.bitcoins.core.util.{BitcoinSLogger, NumberUtil}
+
+import scala.concurrent.{ExecutionContext, Future}
+
+/**
+ * Implements functions found inside of bitcoin core's
+ * @see [[https://github.com/bitcoin/bitcoin/blob/35477e9e4e3f0f207ac6fa5764886b15bf9af8d0/src/pow.cpp pow.cpp]]
+ */
+sealed abstract class Pow extends BitcoinSLogger {
+
+ /**
+ * Gets the next proof of work requirement for a block
+ * @see [[https://github.com/bitcoin/bitcoin/blob/35477e9e4e3f0f207ac6fa5764886b15bf9af8d0/src/pow.cpp#L13 Mimics bitcoin core implmentation]]
+ * @param tip
+ * @param newPotentialTip
+ * @return
+ */
+ def getNetworkWorkRequired(
+ tip: BlockHeaderDb,
+ newPotentialTip: BlockHeader,
+ blockHeaderDAO: BlockHeaderDAO)(
+ implicit ec: ExecutionContext): Future[UInt32] = {
+ val chainParams = blockHeaderDAO.appConfig.chain
+ val currentHeight = tip.height
+
+ val powLimit = NumberUtil.targetCompression(bigInteger =
+ chainParams.powLimit,
+ isNegative = false)
+ if ((currentHeight + 1) % chainParams.difficultyChangeInterval != 0) {
+ if (chainParams.allowMinDifficultyBlocks) {
+ // Special difficulty rule for testnet:
+ // If the new block's timestamp is more than 2* 10 minutes
+ // then allow mining of a min-difficulty block.
+ if (newPotentialTip.time.toLong > tip.blockHeader.time.toLong + chainParams.powTargetSpacing.toSeconds * 2) {
+ Future.successful(powLimit)
+ } else {
+ // Return the last non-special-min-difficulty-rules-block
+
+ // this is complex to implement and requires walking the
+ //chain until we find a block header that does not have
+ //the minimum difficulty rule on testnet
+
+ //TODO: This is not correctly implemented, come back and fix this when BlockHeaderDAO has a predicate to satisfy
+ Future.successful(powLimit)
+ }
+ } else {
+ Future.successful(tip.blockHeader.nBits)
+ }
+ } else {
+ val firstHeight = currentHeight - (chainParams.difficultyChangeInterval - 1)
+
+ require(firstHeight >= 0, s"We must have our first height be postive, got=${firstHeight}")
+
+ val firstBlockAtIntervalF: Future[Option[BlockHeaderDb]] = {
+ blockHeaderDAO.getAncestorAtHeight(tip, firstHeight)
+ }
+
+ firstBlockAtIntervalF.flatMap {
+ case Some(firstBlock) =>
+ calculateNextWorkRequired(currentTip = tip, firstBlock, chainParams)
+ case None =>
+ Future.failed(
+ new IllegalArgumentException(
+ s"Could not find ancestor for block=${tip.hashBE.hex}"))
+ }
+
+ }
+ }
+
+ /**
+ * Calculate the next proof of work requirement for our blockchain
+ * @see [[https://github.com/bitcoin/bitcoin/blob/35477e9e4e3f0f207ac6fa5764886b15bf9af8d0/src/pow.cpp#L49 bitcoin core implementation]]
+ * @param currentTip
+ * @param firstBlock
+ * @param chainParams
+ * @return
+ */
+ def calculateNextWorkRequired(
+ currentTip: BlockHeaderDb,
+ firstBlock: BlockHeaderDb,
+ chainParams: ChainParams): Future[UInt32] = {
+ if (chainParams.noRetargeting) {
+ Future.successful(currentTip.nBits)
+ } else {
+ var actualTimespan = (currentTip.time - firstBlock.time).toLong
+ val timespanSeconds = chainParams.powTargetTimeSpan.toSeconds
+ if (actualTimespan < timespanSeconds / 4) {
+ actualTimespan = timespanSeconds / 4
+ }
+
+ if (actualTimespan > timespanSeconds * 4) {
+ actualTimespan = timespanSeconds * 4
+ }
+
+ val powLimit = chainParams.powLimit
+
+ var bnNew = NumberUtil.targetExpansion(currentTip.nBits).difficulty
+
+ bnNew = bnNew * actualTimespan
+
+ bnNew = bnNew / timespanSeconds
+
+ if (bnNew > powLimit) {
+ bnNew = powLimit
+ }
+
+ val newTarget = NumberUtil.targetCompression(bnNew, false)
+
+ Future.successful(newTarget)
+ }
+ }
+}
+
+object Pow extends Pow
diff --git a/chain/src/main/scala/org/bitcoins/chain/validation/TipUpdateResult.scala b/chain/src/main/scala/org/bitcoins/chain/validation/TipUpdateResult.scala
new file mode 100644
index 0000000000..7119ae5b49
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/validation/TipUpdateResult.scala
@@ -0,0 +1,28 @@
+package org.bitcoins.chain.validation
+
+import org.bitcoins.chain.models.BlockHeaderDb
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+
+/** Represents the result of updating the chain with
+ * the given header
+ */
+sealed abstract class TipUpdateResult
+
+object TipUpdateResult {
+
+ /** Indicates we successfully update the chain tip with this header */
+ case class Success(header: BlockHeaderDb) extends TipUpdateResult
+
+ sealed abstract class Failure extends TipUpdateResult {
+ def header: BlockHeader
+ }
+
+ /** Means that [[header.previousBlockHashBE]] was incorrect */
+ case class BadPreviousBlockHash(header: BlockHeader) extends Failure
+
+ /** Means that [[header.nBits]] was invalid */
+ case class BadPOW(header: BlockHeader) extends Failure
+
+ /** Means that [[header.nonce]] was invalid */
+ case class BadNonce(header: BlockHeader) extends Failure
+}
diff --git a/chain/src/main/scala/org/bitcoins/chain/validation/TipValidation.scala b/chain/src/main/scala/org/bitcoins/chain/validation/TipValidation.scala
new file mode 100644
index 0000000000..7d9ccaeeb6
--- /dev/null
+++ b/chain/src/main/scala/org/bitcoins/chain/validation/TipValidation.scala
@@ -0,0 +1,107 @@
+package org.bitcoins.chain.validation
+
+import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb, BlockHeaderDbHelper}
+import org.bitcoins.chain.pow.Pow
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.{BitcoinSLogger, NumberUtil}
+
+import scala.concurrent.{ExecutionContext, Future}
+
+/**
+ * Responsible for checking if we can connect two
+ * block headers together on the blockchain. The checks
+ * things like proof of work difficulty, if it
+ * references the previous block header correctly etc.
+ */
+sealed abstract class TipValidation extends BitcoinSLogger {
+
+ /** Checks if the given header can be connected to the current tip
+ * This is the method where a [[BlockHeader]] is transformed into a
+ * [[BlockHeaderDb]]. What this really means is that a height is
+ * assigned to a [[BlockHeader header]] after all these
+ * validation checks occur
+ * */
+ def checkNewTip(
+ newPotentialTip: BlockHeader,
+ currentTip: BlockHeaderDb,
+ blockHeaderDAO: BlockHeaderDAO)(
+ implicit ec: ExecutionContext): Future[TipUpdateResult] = {
+ val header = newPotentialTip
+ logger.info(
+ s"Checking header=${header.hashBE.hex} to try to connect to currentTip=${currentTip.hashBE.hex} with height=${currentTip.height}")
+
+ val powCheckF = isBadPow(newPotentialTip = newPotentialTip,
+ currentTip = currentTip,
+ blockHeaderDAO = blockHeaderDAO)
+
+ val connectTipResultF: Future[TipUpdateResult] = {
+ powCheckF.map { expectedWork =>
+ if (header.previousBlockHashBE != currentTip.hashBE) {
+ logger.warn(
+ s"Failed to connect tip=${header.hashBE.hex} to current chain")
+ TipUpdateResult.BadPreviousBlockHash(newPotentialTip)
+ } else if (header.nBits != expectedWork) {
+ //https://github.com/bitcoin/bitcoin/blob/eb7daf4d600eeb631427c018a984a77a34aca66e/src/pow.cpp#L19
+ TipUpdateResult.BadPOW(newPotentialTip)
+ } else if (isBadNonce(newPotentialTip)) {
+ TipUpdateResult.BadNonce(newPotentialTip)
+ } else {
+ val headerDb = BlockHeaderDbHelper.fromBlockHeader(
+ height = currentTip.height + 1,
+ bh = newPotentialTip
+ )
+ TipUpdateResult.Success(headerDb)
+ }
+ }
+ }
+
+ logTipResult(connectTipResultF, currentTip)
+ connectTipResultF
+ }
+
+ /** Logs the result of [[org.bitcoins.chain.validation.TipValidation.checkNewTip() checkNewTip]] */
+ private def logTipResult(
+ connectTipResultF: Future[TipUpdateResult],
+ currentTip: BlockHeaderDb)(implicit ec: ExecutionContext): Unit = {
+ connectTipResultF.map {
+ case TipUpdateResult.Success(tipDb) =>
+ logger.info(
+ s"Successfully connected ${tipDb.hashBE.hex} with height=${tipDb.height} to block=${currentTip.hashBE.hex} with height=${currentTip.height}")
+
+ case bad: TipUpdateResult.Failure =>
+ logger.warn(
+ s"Failed to connect ${bad.header.hashBE.hex} to ${currentTip.hashBE.hex} with height=${currentTip.height}, reason=${bad}")
+
+ }
+
+ ()
+ }
+
+ /** Checks if [[header]] hashes to meet the POW requirements for this block (nBits)
+ * Mimics this
+ * @see [[https://github.com/bitcoin/bitcoin/blob/eb7daf4d600eeb631427c018a984a77a34aca66e/src/pow.cpp#L74]]
+ * */
+ def isBadNonce(header: BlockHeader): Boolean = {
+ //convert hash into a big integer
+ val headerWork = BigInt(1, header.hashBE.bytes.toArray)
+ if (headerWork <= 0 || NumberUtil.isNBitsOverflow(nBits = header.nBits)) {
+ true
+ } else {
+ headerWork > header.difficulty
+ }
+ }
+
+ private def isBadPow(
+ newPotentialTip: BlockHeader,
+ currentTip: BlockHeaderDb,
+ blockHeaderDAO: BlockHeaderDAO)(
+ implicit ec: ExecutionContext): Future[UInt32] = {
+ Pow.getNetworkWorkRequired(tip = currentTip,
+ newPotentialTip = newPotentialTip,
+ blockHeaderDAO = blockHeaderDAO)
+
+ }
+}
+
+object TipValidation extends TipValidation
diff --git a/core-test/src/test/resources/logback-test.xml b/core-test/src/test/resources/logback-test.xml
index c3b03af9bb..28d373cb48 100644
--- a/core-test/src/test/resources/logback-test.xml
+++ b/core-test/src/test/resources/logback-test.xml
@@ -1,23 +1,9 @@
-
-
- logs/test-application.log
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
-
-
-
-
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
-
-
-
+
-
diff --git a/core-test/src/test/scala/org/bitcoins/core/crypto/AesCryptTest.scala b/core-test/src/test/scala/org/bitcoins/core/crypto/AesCryptTest.scala
index 6545d8b8cd..527aa3a68b 100644
--- a/core-test/src/test/scala/org/bitcoins/core/crypto/AesCryptTest.scala
+++ b/core-test/src/test/scala/org/bitcoins/core/crypto/AesCryptTest.scala
@@ -10,7 +10,6 @@ class AesCryptTest extends BitcoinSUnitTest {
val password = AesPassword("PASSWORD")
val badPassword = AesPassword("BAD_PASSWORD")
- val emptyPassword = AesPassword("")
/**
* The test vectors in this test was generated by using
@@ -111,26 +110,6 @@ class AesCryptTest extends BitcoinSUnitTest {
}
- it must "fail when encrypting with an empty password" in {
- val encryptE =
- AesCrypt.encrypt(plainText = hex"abcdef", password = emptyPassword)
- encryptE match {
- case Right(_) => fail("Was able to encrypt with an empty password!")
- case Left(AesException.EmptyPasswordException) => succeed
- case Left(exc) => fail("Failed with unexpected exception", exc)
- }
- }
-
- it must "fail when decrypting with an empty password" in {
- val encrypted = AesCrypt.encryptExc(plainText = hex"123456789", password)
- AesCrypt.decrypt(encrypted, emptyPassword) match {
- case Right(_) => fail("Was able to decrypt with an empty password!")
- case Left(AesException.EmptyPasswordException) => succeed
- case Left(exc) => fail("Failed with unexpected exception", exc)
- }
-
- }
-
it must "have encryption and decryption symmetry" in {
forAll(NumberGenerator.bytevector,
StringGenerators.genString.suchThat(_.nonEmpty)) {
@@ -155,4 +134,8 @@ class AesCryptTest extends BitcoinSUnitTest {
}
}
}
+
+ it must "fail to create an empty AES password" in {
+ assertThrows[IllegalArgumentException](AesPassword(""))
+ }
}
diff --git a/core-test/src/test/scala/org/bitcoins/core/crypto/bip32/BIP32PathTest.scala b/core-test/src/test/scala/org/bitcoins/core/crypto/bip32/BIP32PathTest.scala
index 29ce895dce..f2977e31c6 100644
--- a/core-test/src/test/scala/org/bitcoins/core/crypto/bip32/BIP32PathTest.scala
+++ b/core-test/src/test/scala/org/bitcoins/core/crypto/bip32/BIP32PathTest.scala
@@ -12,6 +12,7 @@ import org.scalacheck.{Gen, Shrink}
import org.scalatest.path
import scala.util.{Success, Try}
+import org.bitcoins.core.crypto.ExtPrivateKey
class BIP32PathTest extends BitcoinSUnitTest {
@@ -127,4 +128,67 @@ class BIP32PathTest extends BitcoinSUnitTest {
assert(path == BIP32Path.fromString(toString))
}
}
+
+ it must "do path diffing" in {
+ {
+ val first = BIP32Path.fromString("m/44'/1'")
+ assert(first.diff(first).contains(BIP32Path.empty))
+ }
+
+ {
+ val first = BIP32Path.fromString("m/44'/0'/0'")
+ val second = BIP32Path.fromString("m/44'/0'/0'/0/2")
+ val expected = BIP32Path.fromString("m/0/2")
+ assert(first.diff(second).contains(expected))
+ }
+
+ {
+ val first = BIP32Path.fromString("m/44'/0'/0'/1")
+ val second = BIP32Path.fromString("m/44'/0'/0'/1/2")
+ val expected = BIP32Path.fromString("m/2")
+ assert(first.diff(second).contains(expected))
+ }
+
+ {
+ val first = BIP32Path.fromString("m/44'/1'")
+ val second = BIP32Path.fromString("m/44'")
+ assert(first.diff(second).isEmpty)
+ }
+
+ {
+ val first = BIP32Path.fromString("m/44'")
+ val second = BIP32Path.fromString("m/44'/1'")
+ val expected = BIP32Path.fromString("m/1'")
+ assert(first.diff(second).contains(expected))
+ }
+
+ {
+ val first = BIP32Path.fromString("m/44'/1'")
+ val second = BIP32Path.fromString("m/43'/2'")
+ assert(first.diff(second).isEmpty)
+ }
+
+ {
+ val first = BIP32Path.fromString("m/44'/1/0")
+ val second = BIP32Path.fromString("m/44'/2/0")
+ assert(first.diff(second).isEmpty)
+ }
+
+ }
+
+ it must "do path diffing without altering the result" in {
+ forAll(HDGenerators.diffableHDPaths, CryptoGenerators.extPrivateKey) {
+ case ((short, long), xpriv) =>
+ val diffed = short.diff(long) match {
+ case None => fail(s"$short and $long was not diffable!")
+ case Some(value) => value
+ }
+
+ val longDerived = xpriv.deriveChildPrivKey(long)
+ val diffDerived =
+ xpriv.deriveChildPrivKey(short).deriveChildPrivKey(diffed)
+ assert(longDerived == diffDerived)
+
+ }
+ }
}
diff --git a/core/src/main/resources/common-logback.xml b/core/src/main/resources/common-logback.xml
new file mode 100644
index 0000000000..cd505a8958
--- /dev/null
+++ b/core/src/main/resources/common-logback.xml
@@ -0,0 +1,54 @@
+
+
+ logs/application.log
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}.%M\(%line\) - %msg%n
+
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}.%M\(%line\) - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/scala/org/bitcoins/core/config/NetworkParameters.scala b/core/src/main/scala/org/bitcoins/core/config/NetworkParameters.scala
index df8a55e14a..aa7deb2c14 100644
--- a/core/src/main/scala/org/bitcoins/core/config/NetworkParameters.scala
+++ b/core/src/main/scala/org/bitcoins/core/config/NetworkParameters.scala
@@ -45,12 +45,9 @@ sealed abstract class NetworkParameters {
*/
def magicBytes: ByteVector
- /** In bitcoin, the network recaculates the difficulty for the network every 2016 blocks */
- def difficultyChangeThreshold: Int
}
sealed abstract class BitcoinNetwork extends NetworkParameters {
- override def difficultyChangeThreshold: Int = 2016
override def chainParams: BitcoinChainParams
}
@@ -74,20 +71,23 @@ sealed abstract class MainNet extends BitcoinNetwork {
/**
* @inheritdoc
*/
- override def dnsSeeds: Seq[String] =
- Seq("seed.bitcoin.sipa.be",
- "dnsseed.bluematt.me",
- "dnsseed.bitcoin.dashjr.org",
- "seed.bitcoinstats.com",
- "bitseed.xf2.org",
- "seed.bitcoin.jonasschnelli.ch")
+ override def dnsSeeds = {
+ List(
+ "seed.bitcoin.sipa.be",
+ "dnsseed.bluematt.me",
+ "dnsseed.bitcoin.dashjr.org",
+ "seed.bitcoinstats.com",
+ "seed.btc.petertodd.org",
+ "seed.bitcoin.jonasschnelli.ch",
+ "seed.bitcoin.sprovoost.nl"
+ )
+ }
/**
* @inheritdoc
*/
override def magicBytes = ByteVector(0xf9, 0xbe, 0xb4, 0xd9)
- override def difficultyChangeThreshold: Int = 2016
}
object MainNet extends MainNet
@@ -117,7 +117,6 @@ sealed abstract class TestNet3 extends BitcoinNetwork {
*/
override def magicBytes = ByteVector(0x0b, 0x11, 0x09, 0x07)
- override def difficultyChangeThreshold: Int = 2016
}
object TestNet3 extends TestNet3
@@ -144,7 +143,6 @@ sealed abstract class RegTest extends BitcoinNetwork {
* @inheritdoc
*/
override def magicBytes = ByteVector(0xfa, 0xbf, 0xb5, 0xda)
- override def difficultyChangeThreshold: Int = 2016
}
object RegTest extends RegTest
diff --git a/core/src/main/scala/org/bitcoins/core/crypto/AesCrypt.scala b/core/src/main/scala/org/bitcoins/core/crypto/AesCrypt.scala
index 9f37bf3f0f..bbb3865e9d 100644
--- a/core/src/main/scala/org/bitcoins/core/crypto/AesCrypt.scala
+++ b/core/src/main/scala/org/bitcoins/core/crypto/AesCrypt.scala
@@ -17,7 +17,12 @@ case class AesSalt(
value: ByteVector
)
-case class AesPassword(value: String)
+/**
+ * @throws IllegalArgumentException if passed an empty string
+ */
+case class AesPassword(value: String) {
+ require(value.nonEmpty, "AES passwords cannot be empty!")
+}
/**
* Provides functionality for encrypting and decrypting with AES
diff --git a/core/src/main/scala/org/bitcoins/core/crypto/BIP39Seed.scala b/core/src/main/scala/org/bitcoins/core/crypto/BIP39Seed.scala
index 346f3ad15d..6dc0557c91 100644
--- a/core/src/main/scala/org/bitcoins/core/crypto/BIP39Seed.scala
+++ b/core/src/main/scala/org/bitcoins/core/crypto/BIP39Seed.scala
@@ -31,6 +31,8 @@ object BIP39Seed extends Factory[BIP39Seed] {
override def fromBytes(bytes: ByteVector): BIP39Seed =
BIP39SeedImpl(bytes)
+ val EMPTY_PASSWORD = ""
+
private val ITERATION_COUNT = 2048
private val DERIVED_KEY_LENGTH = 512
@@ -39,7 +41,9 @@ object BIP39Seed extends Factory[BIP39Seed] {
* seed from a mnemonic code. An optional password can be supplied.
* @param password Defaults to the empty string
*/
- def fromMnemonic(mnemonic: MnemonicCode, password: String = ""): BIP39Seed = {
+ def fromMnemonic(
+ mnemonic: MnemonicCode,
+ password: String = EMPTY_PASSWORD): BIP39Seed = {
val salt = s"mnemonic$password"
val words = mnemonic.words.mkString(" ")
diff --git a/core/src/main/scala/org/bitcoins/core/crypto/HashDigest.scala b/core/src/main/scala/org/bitcoins/core/crypto/HashDigest.scala
index 4b82ff6e34..7902c09c68 100644
--- a/core/src/main/scala/org/bitcoins/core/crypto/HashDigest.scala
+++ b/core/src/main/scala/org/bitcoins/core/crypto/HashDigest.scala
@@ -68,6 +68,11 @@ object Sha256Digest extends Factory[Sha256Digest] {
}
override def fromBytes(bytes: ByteVector): Sha256Digest =
Sha256DigestImpl(bytes)
+
+ private val e = ByteVector(Array.fill(32)(0.toByte))
+
+ val empty: Sha256Digest = Sha256Digest.fromBytes(e)
+
}
/**
@@ -109,6 +114,9 @@ object DoubleSha256Digest extends Factory[DoubleSha256Digest] {
override def fromBytes(bytes: ByteVector): DoubleSha256Digest =
DoubleSha256DigestImpl(bytes)
+ private val e = ByteVector(Array.fill(32)(0.toByte))
+ val empty: DoubleSha256Digest = DoubleSha256Digest.fromBytes(e)
+
}
/** The big endian version of [[org.bitcoins.core.crypto.DoubleSha256Digest DoubleSha256Digest]] */
@@ -128,6 +136,7 @@ object DoubleSha256DigestBE extends Factory[DoubleSha256DigestBE] {
override def fromBytes(bytes: ByteVector): DoubleSha256DigestBE =
DoubleSha256DigestBEImpl(bytes)
+ val empty: DoubleSha256DigestBE = DoubleSha256Digest.empty.flip
}
/**
diff --git a/core/src/main/scala/org/bitcoins/core/crypto/MnemonicCode.scala b/core/src/main/scala/org/bitcoins/core/crypto/MnemonicCode.scala
index 86aa3392d2..be502432f6 100644
--- a/core/src/main/scala/org/bitcoins/core/crypto/MnemonicCode.scala
+++ b/core/src/main/scala/org/bitcoins/core/crypto/MnemonicCode.scala
@@ -53,7 +53,7 @@ sealed abstract class MnemonicCode {
* Returns the entropy initially provided to construct
* this mnemonic code
*/
- private[crypto] def toEntropy: BitVector = {
+ private[bitcoins] def toEntropy: BitVector = {
val entropyWithChecksumBits = toEntropyWithChecksum
val lengthNoEntropy = MnemonicCode
.getMnemonicCodeInfo(words)
diff --git a/core/src/main/scala/org/bitcoins/core/hd/BIP32Path.scala b/core/src/main/scala/org/bitcoins/core/hd/BIP32Path.scala
index 8e781c227f..c7a97c61b7 100644
--- a/core/src/main/scala/org/bitcoins/core/hd/BIP32Path.scala
+++ b/core/src/main/scala/org/bitcoins/core/hd/BIP32Path.scala
@@ -6,6 +6,78 @@ import org.bitcoins.core.number.UInt32
abstract class BIP32Path {
def path: Vector[BIP32Node]
+ /**
+ * BIP32 paths can be subsets/superset of each other.
+ * If all elements in a path `p` is included in a path
+ * `P`, (i.e. `p` is a subset of `P`), `p.diff(P)`
+ * is the elements from `P` that is not in `p`.
+ *
+ * @example
+ * {{{
+ * // equal paths
+ * m/44'/1' diff m/44'/1' == Some(BIP32Path.empty)
+ *
+ * // diffable path
+ * m/44'/0'/0' diff m/44'/0'/0'/0/2 = Some(m/0/2)
+ * m/44'/0'/0'/1 diff m/44'/0'/0'/1/2 = Some(m/2)
+ *
+ * // this is longer than other
+ * m/44'/1' diff m/44' == None
+ *
+ * // any fields are unequal along the way
+ * m/44'/1' diff m/43'/2' == None
+ * m/44'/1'/0 diff m/44'/2'/1 == None
+ * }}}
+ */
+ def diff(that: BIP32Path): Option[BIP32Path] = {
+ import that.{path => otherPath}
+
+ if (path.length > otherPath.length) {
+ None
+ } else if (path == otherPath) {
+ Some(BIP32Path.empty)
+ } else {
+ val lengthDiff = otherPath.length - path.length
+
+ val extendedPath: Vector[Option[BIP32Node]] = path.map(Some(_)) ++
+ Vector.fill[Option[BIP32Node]](lengthDiff)(None)
+
+ val pathsWithIndices = extendedPath
+ .zip(otherPath)
+ .zipWithIndex
+
+ val calculatedDiff: Option[BIP32Path] = pathsWithIndices
+ .foldLeft(Option(BIP32Path.empty)) {
+ // we encountered an error along the way, return
+ // none
+ case (None, _) => None
+
+ // we've reached the end of our path, append
+ // the element from their path but don't
+ // include the previous one (as
+ // that's shared)
+ case (Some(_), ((None, their), index)) if index == path.length =>
+ Some(BIP32Path(their))
+
+ // append the next divergent element to
+ // the acummed value
+ case (Some(accum), ((None, their), _)) =>
+ Some(BIP32Path(accum.path :+ their))
+
+ // we've not yet reached the start of diverging
+ // paths
+ case (Some(_), ((Some(our), their), _)) if our == their =>
+ Some(BIP32Path(our))
+
+ // paths are divergent, fail the computation
+ case (Some(_), ((Some(_), _), _)) =>
+ None
+ }
+
+ calculatedDiff
+ }
+ }
+
override def toString: String =
path
.map {
diff --git a/core/src/main/scala/org/bitcoins/core/hd/HDAddress.scala b/core/src/main/scala/org/bitcoins/core/hd/HDAddress.scala
index fafb9d54e3..4584522f52 100644
--- a/core/src/main/scala/org/bitcoins/core/hd/HDAddress.scala
+++ b/core/src/main/scala/org/bitcoins/core/hd/HDAddress.scala
@@ -18,7 +18,7 @@ sealed abstract class HDAddress extends BIP32Path {
def chain: HDChain
def index: Int
- def toPath: HDPath[_] = purpose match {
+ def toPath: HDPath = purpose match {
case HDPurposes.Legacy => LegacyHDPath(this)
case HDPurposes.SegWit => SegWitHDPath(this)
case HDPurposes.NestedSegWit => NestedSegWitHDPath(this)
diff --git a/core/src/main/scala/org/bitcoins/core/hd/HDPath.scala b/core/src/main/scala/org/bitcoins/core/hd/HDPath.scala
index 116b6c33b4..085ca3a35f 100644
--- a/core/src/main/scala/org/bitcoins/core/hd/HDPath.scala
+++ b/core/src/main/scala/org/bitcoins/core/hd/HDPath.scala
@@ -1,16 +1,44 @@
package org.bitcoins.core.hd
import scala.util.Try
-private[bitcoins] trait HDPath[T <: HDPath[T]] extends BIP32Path {
+private[bitcoins] trait HDPath extends BIP32Path {
+
+ /**
+ * This type is to give a cleaner return
+ * type of `next`.
+ *
+ * Consider:
+ *
+ * {{{
+ * def next: this.type = ???
+ *
+ * val first: SegWitHDPath = ???
+ * val second = first.next
+ * // second is now:
+ * // first.type (with underlying type org.bitcoins.core.hd.SegWitHDPath)
+ * }}}
+
+ * {{{
+ * def next: NextPath = ???
+ *
+ * // in SegWitHDPath
+ * override type NextPath = SegWitHDPath
+ *
+ * val first: SegWitHDPath = ???
+ * val second = first.next
+ * // second is now:
+ * // SegWitHDPath
+ * }}}
+ */
+ protected type NextPath <: HDPath
/**
* Increments the address index and returns the
* new path that can be passed into a
* [[org.bitcoins.core.crypto.ExtKey ExtKey]]
*/
- // TODO check out this cast
- def next: T =
- HDAddress(chain, account.index + 1).toPath.asInstanceOf[T]
+ def next: NextPath =
+ HDAddress(chain, account.index + 1).toPath.asInstanceOf[NextPath]
def account: HDAccount = address.account
@@ -28,7 +56,7 @@ private[bitcoins] trait HDPath[T <: HDPath[T]] extends BIP32Path {
object HDPath {
/** Attempts to parse a string into a valid HD path */
- def fromString(string: String): Option[HDPath[_]] =
+ def fromString(string: String): Option[HDPath] =
Try(LegacyHDPath.fromString(string))
.orElse(Try(SegWitHDPath.fromString(string)))
.orElse(Try(NestedSegWitHDPath.fromString(string)))
diff --git a/core/src/main/scala/org/bitcoins/core/hd/LegacyHDPath.scala b/core/src/main/scala/org/bitcoins/core/hd/LegacyHDPath.scala
index cdb126382e..672709c947 100644
--- a/core/src/main/scala/org/bitcoins/core/hd/LegacyHDPath.scala
+++ b/core/src/main/scala/org/bitcoins/core/hd/LegacyHDPath.scala
@@ -1,6 +1,8 @@
package org.bitcoins.core.hd
-sealed abstract class LegacyHDPath extends HDPath[LegacyHDPath]
+sealed abstract class LegacyHDPath extends HDPath {
+ override protected type NextPath = LegacyHDPath
+}
object LegacyHDPath extends HDPathFactory[LegacyHDPath] {
diff --git a/core/src/main/scala/org/bitcoins/core/hd/NestedSegWitHDPath.scala b/core/src/main/scala/org/bitcoins/core/hd/NestedSegWitHDPath.scala
index 41cfbc31b2..9accd33361 100644
--- a/core/src/main/scala/org/bitcoins/core/hd/NestedSegWitHDPath.scala
+++ b/core/src/main/scala/org/bitcoins/core/hd/NestedSegWitHDPath.scala
@@ -1,6 +1,8 @@
package org.bitcoins.core.hd
-sealed abstract class NestedSegWitHDPath extends HDPath[NestedSegWitHDPath]
+sealed abstract class NestedSegWitHDPath extends HDPath {
+ override protected type NextPath = NestedSegWitHDPath
+}
object NestedSegWitHDPath extends HDPathFactory[NestedSegWitHDPath] {
diff --git a/core/src/main/scala/org/bitcoins/core/hd/SegWitHDPath.scala b/core/src/main/scala/org/bitcoins/core/hd/SegWitHDPath.scala
index 3fcc449925..bbacc8db8b 100644
--- a/core/src/main/scala/org/bitcoins/core/hd/SegWitHDPath.scala
+++ b/core/src/main/scala/org/bitcoins/core/hd/SegWitHDPath.scala
@@ -1,6 +1,8 @@
package org.bitcoins.core.hd
-sealed abstract class SegWitHDPath extends HDPath[SegWitHDPath]
+sealed abstract class SegWitHDPath extends HDPath {
+ override protected type NextPath = SegWitHDPath
+}
object SegWitHDPath extends HDPathFactory[SegWitHDPath] {
diff --git a/core/src/main/scala/org/bitcoins/core/protocol/Address.scala b/core/src/main/scala/org/bitcoins/core/protocol/Address.scala
index 3f58cc3581..ec51441f04 100644
--- a/core/src/main/scala/org/bitcoins/core/protocol/Address.scala
+++ b/core/src/main/scala/org/bitcoins/core/protocol/Address.scala
@@ -17,6 +17,11 @@ sealed abstract class Address {
/** The string representation of this address */
def value: String
+ override def equals(obj: Any): Boolean = obj match {
+ case addr: Address => value == addr.value
+ case _: Any => false
+ }
+
/** Every address is derived from a [[org.bitcoins.core.crypto.HashDigest HashDigest]] in a
* [[org.bitcoins.core.protocol.transaction.TransactionOutput TransactionOutput]] */
def hash: HashDigest
diff --git a/core/src/main/scala/org/bitcoins/core/protocol/blockchain/ChainParams.scala b/core/src/main/scala/org/bitcoins/core/protocol/blockchain/ChainParams.scala
index c8a07e62bc..139839c929 100644
--- a/core/src/main/scala/org/bitcoins/core/protocol/blockchain/ChainParams.scala
+++ b/core/src/main/scala/org/bitcoins/core/protocol/blockchain/ChainParams.scala
@@ -3,6 +3,7 @@ package org.bitcoins.core.protocol.blockchain
import java.math.BigInteger
import java.nio.charset.StandardCharsets
+import org.bitcoins.core.config.{BitcoinNetwork, MainNet, NetworkParameters, RegTest, TestNet3}
import org.bitcoins.core.consensus.Merkle
import org.bitcoins.core.crypto.DoubleSha256Digest
import org.bitcoins.core.currency.{CurrencyUnit, Satoshis}
@@ -178,6 +179,25 @@ sealed abstract class ChainParams {
def difficultyChangeInterval: Long = {
powTargetTimeSpan.toSeconds / powTargetSpacing.toSeconds
}
+
+ /**
+ * Whether we should allow minimum difficulty blocks or not
+ * As an example you can trivially mine blocks on [[RegTestNetChainParams]] and [[TestNetChainParams]]
+ * but not the [[MainNetChainParams]]
+ * @return
+ */
+ def allowMinDifficultyBlocks: Boolean
+
+ /**
+ * Whether this chain supports
+ * proof of work retargeting or not
+ * @see [[https://github.com/bitcoin/bitcoin/blob/eb7daf4d600eeb631427c018a984a77a34aca66e/src/consensus/params.h#L72 link]]
+ * @return
+ */
+ def noRetargeting: Boolean
+
+ /** The [[org.bitcoins.core.config.BitcoinNetwork network]] that corresponds to this chain param */
+ def network: NetworkParameters
}
sealed abstract class BitcoinChainParams extends ChainParams {
@@ -200,21 +220,11 @@ sealed abstract class BitcoinChainParams extends ChainParams {
/** The best chain should have this amount of work */
def minimumChainWork: BigInteger
- /**
- * Whether we should allow minimum difficulty blocks or not
- * As an example you can trivially mine blocks on [[RegTestNetChainParams]] and [[TestNetChainParams]]
- * but not the [[MainNetChainParams]]
- * @return
- */
- def allowMinDifficultyBlocks: Boolean
/**
- * Whether this chain supports
- * proof of work retargeting or not
- * [[https://github.com/bitcoin/bitcoin/blob/eb7daf4d600eeb631427c018a984a77a34aca66e/src/consensus/params.h#L72 link]]
- * @return
+ * @inheritdoc
*/
- def noRetargeting: Boolean
+ def network: BitcoinNetwork
}
/** The Main Network parameters. */
@@ -272,6 +282,11 @@ object MainNetChainParams extends BitcoinChainParams {
* [[https://github.com/bitcoin/bitcoin/blob/a083f75ba79d465f15fddba7b00ca02e31bb3d40/src/chainparams.cpp#L76 mainnet pow retargetting]]
*/
override lazy val noRetargeting: Boolean = false
+
+ /**
+ * @inheritdoc
+ */
+ override lazy val network: BitcoinNetwork = MainNet
}
object TestNetChainParams extends BitcoinChainParams {
@@ -320,6 +335,11 @@ object TestNetChainParams extends BitcoinChainParams {
* [[https://github.com/bitcoin/bitcoin/blob/a083f75ba79d465f15fddba7b00ca02e31bb3d40/src/chainparams.cpp#L193 testnet pow retargetting]]
*/
override lazy val noRetargeting: Boolean = false
+
+ /**
+ * @inheritdoc
+ */
+ override lazy val network: BitcoinNetwork = TestNet3
}
object RegTestNetChainParams extends BitcoinChainParams {
@@ -362,6 +382,11 @@ object RegTestNetChainParams extends BitcoinChainParams {
* [[https://github.com/bitcoin/bitcoin/blob/a083f75ba79d465f15fddba7b00ca02e31bb3d40/src/chainparams.cpp#L288 regtest pow retargetting]]
*/
override lazy val noRetargeting: Boolean = true
+
+ /**
+ * @inheritdoc
+ */
+ override lazy val network: BitcoinNetwork = RegTest
}
sealed abstract class Base58Type
diff --git a/core/src/main/scala/org/bitcoins/core/script/ScriptType.scala b/core/src/main/scala/org/bitcoins/core/script/ScriptType.scala
new file mode 100644
index 0000000000..cac82da3eb
--- /dev/null
+++ b/core/src/main/scala/org/bitcoins/core/script/ScriptType.scala
@@ -0,0 +1,69 @@
+package org.bitcoins.core.script
+
+/**
+ * The different Bitcoin Script type variations
+ *
+ * @see [[https://github.com/bitcoin/bitcoin/blob/fa6180188b8ab89af97860e6497716405a48bab6/src/script/standard.h#L56 standard.h]]
+ * and [[https://github.com/bitcoin/bitcoin/blob/03732f8644a449af34f4df1bb3b8915fb15ef22c/src/script/standard.cpp#L27 standarc.cpp]]
+ * from Bitcoin Core
+ */
+sealed abstract class ScriptType {
+ import org.bitcoins.core.script.ScriptType._
+ override def toString = this match {
+ case NONSTANDARD => "nonstandard"
+ case PUBKEY => "pubkey"
+ case PUBKEYHASH => "pubkeyhash"
+ case SCRIPTHASH => "scripthash"
+ case MULTISIG => "multisig"
+ case NULLDATA => "nulldata"
+ case WITNESS_V0_KEYHASH => "witness_v0_keyhash"
+ case WITNESS_V0_SCRIPTHASH => "witness_v0_scripthash"
+ case WITNESS_UNKNOWN => "witness_unknown"
+ }
+}
+
+/**
+ * The different Bitcoin Script type variations
+ *
+ * @see [[https://github.com/bitcoin/bitcoin/blob/fa6180188b8ab89af97860e6497716405a48bab6/src/script/standard.h#L56 standard.h]]
+ * and [[https://github.com/bitcoin/bitcoin/blob/03732f8644a449af34f4df1bb3b8915fb15ef22c/src/script/standard.cpp#L27 standarc.cpp]]
+ * from Bitcoin Core
+ */
+object ScriptType {
+ private val all: Seq[ScriptType] = Vector(NONSTANDARD,
+ PUBKEY,
+ PUBKEYHASH,
+ SCRIPTHASH,
+ MULTISIG,
+ NULLDATA,
+ WITNESS_V0_KEYHASH,
+ WITNESS_V0_SCRIPTHASH,
+ WITNESS_UNKNOWN)
+
+ def fromString(string: String): Option[ScriptType] =
+ all.find(_.toString == string)
+
+ /** Throws if given string is invalid */
+ def fromStringExn(string: String): ScriptType =
+ fromString(string)
+ .getOrElse(
+ throw new IllegalArgumentException(
+ s"$string is not a valid script type!"))
+
+ final case object NONSTANDARD extends ScriptType
+
+ // ╔ "standard" transaction/script types
+ // V
+ final case object PUBKEY extends ScriptType
+ final case object PUBKEYHASH extends ScriptType
+ final case object SCRIPTHASH extends ScriptType
+ final case object MULTISIG extends ScriptType
+
+ /** unspendable OP_RETURN script that carries data */
+ final case object NULLDATA extends ScriptType
+ final case object WITNESS_V0_KEYHASH extends ScriptType
+ final case object WITNESS_V0_SCRIPTHASH extends ScriptType
+
+ /** Only for Witness versions not already defined */
+ final case object WITNESS_UNKNOWN extends ScriptType
+}
diff --git a/core/src/main/scala/org/bitcoins/core/serializers/RawBitcoinSerializerHelper.scala b/core/src/main/scala/org/bitcoins/core/serializers/RawBitcoinSerializerHelper.scala
index 635fbca73e..48a91264e7 100644
--- a/core/src/main/scala/org/bitcoins/core/serializers/RawBitcoinSerializerHelper.scala
+++ b/core/src/main/scala/org/bitcoins/core/serializers/RawBitcoinSerializerHelper.scala
@@ -49,14 +49,23 @@ sealed abstract class RawSerializerHelper {
def writeCmpctSizeUInt[T](
ts: Seq[T],
serializer: T => ByteVector): ByteVector = {
- val serialized = ts.foldLeft(ByteVector.empty) {
- case (accum, t) =>
- val ser = serializer(t)
- accum ++ ser
- }
+ val serialized = write(ts,serializer)
val cmpct = CompactSizeUInt(UInt64(ts.size))
cmpct.bytes ++ serialized
}
+
+
+ /** Serializes a [[Seq]] of [[org.bitcoins.core.protocol.NetworkElement]] to a [[scodec.bits.ByteVector]] */
+ def writeNetworkElements[T <: NetworkElement](ts: Seq[T]): ByteVector = {
+ val f = {t : T => t.bytes}
+ write(ts, f)
+ }
+
+ def write[T](ts: Seq[T], serializer: T => ByteVector): ByteVector = {
+ ts.foldLeft(ByteVector.empty) { case (accum, t) =>
+ accum ++ serializer(t)
+ }
+ }
}
object RawSerializerHelper extends RawSerializerHelper
diff --git a/core/src/main/scala/org/bitcoins/core/util/BitcoinSLogger.scala b/core/src/main/scala/org/bitcoins/core/util/BitcoinSLogger.scala
index 0d9d9b4035..a1f2113011 100644
--- a/core/src/main/scala/org/bitcoins/core/util/BitcoinSLogger.scala
+++ b/core/src/main/scala/org/bitcoins/core/util/BitcoinSLogger.scala
@@ -5,10 +5,8 @@ import org.slf4j.{Logger, LoggerFactory}
/**
* Created by chris on 3/11/16.
*/
-abstract class BitcoinSLogger {
-
- def logger: Logger = LoggerFactory.getLogger(this.getClass().toString)
-
+trait BitcoinSLogger {
+ lazy val logger: Logger = LoggerFactory.getLogger(getClass)
}
object BitcoinSLogger extends BitcoinSLogger
diff --git a/core/src/main/scala/org/bitcoins/core/util/BitcoinSUtil.scala b/core/src/main/scala/org/bitcoins/core/util/BitcoinSUtil.scala
index 6bd1f31cb1..dcf4221535 100644
--- a/core/src/main/scala/org/bitcoins/core/util/BitcoinSUtil.scala
+++ b/core/src/main/scala/org/bitcoins/core/util/BitcoinSUtil.scala
@@ -1,5 +1,8 @@
package org.bitcoins.core.util
+import java.net.InetSocketAddress
+
+import com.sun.jndi.toolkit.url.Uri
import org.bitcoins.core.protocol.NetworkElement
import scodec.bits.{BitVector, ByteVector}
@@ -101,6 +104,10 @@ trait BitcoinSUtil {
h.foldLeft(ByteVector.empty)(_ ++ _.bytes)
}
+ def toInetSocketAddress(string: String): InetSocketAddress = {
+ val uri = new Uri(string)
+ new InetSocketAddress(uri.getHost, uri.getPort)
+ }
}
object BitcoinSUtil extends BitcoinSUtil
diff --git a/core/src/main/scala/org/bitcoins/core/util/EitherUtil.scala b/core/src/main/scala/org/bitcoins/core/util/EitherUtil.scala
new file mode 100644
index 0000000000..8c4c08206c
--- /dev/null
+++ b/core/src/main/scala/org/bitcoins/core/util/EitherUtil.scala
@@ -0,0 +1,88 @@
+package org.bitcoins.core.util
+
+import scala.concurrent.{ExecutionContext, Future}
+import scala.util.{Try, Success, Failure}
+
+/**
+ * @define liftBiasedFut Given a [[scala.Either Either]] that contains a
+ * [[scala.concurrent.Future Future[L | R] ]] only on one side,
+ * transforms it into a future [[scala.Either Either[L, R] ]]
+ */
+object EitherUtil {
+
+ /**
+ * Flattens a nested `Either[Foo, Future[Foo, Bar]]` into
+ * a `Future[Either[Foo, Bar]]`. This is useful for situtations
+ * where the right hand side of an either is asynchronous.
+ */
+ def flattenFutureE[L, R](
+ either: Either[L, Future[Either[L, R]]]
+ ): Future[Either[L, R]] = {
+
+ def ifLeft(left: L): Future[Either[L, R]] = Future.successful(Left(left))
+ def ifRight(rightF: Future[Either[L, R]]): Future[Either[L, R]] = rightF
+
+ either.fold(ifLeft, ifRight)
+ }
+
+ /** $liftBiasedFut */
+ def liftRightBiasedFutureE[L, R](
+ either: Either[L, Future[R]]
+ )(implicit ec: ExecutionContext): Future[Either[L, R]] =
+ either match {
+ case Right(fut) => fut.map(Right(_))
+ case Left(l) => Future.successful(Left(l))
+ }
+
+ /** $liftBiasedFut */
+ def listLeftBiasedFutureE[L, R](
+ either: Either[Future[L], R]
+ )(implicit ec: ExecutionContext): Future[Either[L, R]] =
+ either match {
+ case Left(fut) => fut.map(Left(_))
+ case Right(l) => Future.successful(Right(l))
+ }
+
+ object EitherOps {
+ import scala.language.implicitConversions
+ implicit def either2EnhancedEither[A, B](
+ either: Either[A, B]
+ ): EnchancedEither[A, B] = EnchancedEither(either)
+
+ implicit def enchancedEither2Either[A, B](
+ enhanced: EnchancedEither[A, B]): Either[A, B] = enhanced.underlying
+ }
+
+ /** The methods here are copied directly from the 2.12 stdlib */
+ case class EnchancedEither[A, B](
+ private[EitherUtil] val underlying: Either[A, B]) {
+
+ /** The given function is applied if this is a `Right`.
+ *
+ * {{{
+ * Right(12).map(x => "flower") // Result: Right("flower")
+ * Left(12).map(x => "flower") // Result: Left(12)
+ * }}}
+ */
+ def map[B1](f: B => B1): EnchancedEither[A, B1] = underlying match {
+ case Right(b) => EnchancedEither(Right(f(b)))
+ case _ => EnchancedEither(this.asInstanceOf[Either[A, B1]])
+ }
+
+ /** Binds the given function across `Right`.
+ *
+ * @param f The function to bind across `Right`.
+ */
+ def flatMap[A1 >: A, B1](f: B => Either[A1, B1]): EnchancedEither[A1, B1] =
+ underlying match {
+ case Right(b) => EnchancedEither(f(b))
+ case _ => EnchancedEither(underlying.asInstanceOf[Either[A1, B1]])
+ }
+
+ def toTry(implicit ev: A <:< Throwable): Try[B] = underlying match {
+ case Right(b) => Success(b)
+ case Left(a) => Failure(a)
+ }
+ }
+
+}
diff --git a/core/src/main/scala/org/bitcoins/core/util/FileUtil.scala b/core/src/main/scala/org/bitcoins/core/util/FileUtil.scala
new file mode 100644
index 0000000000..0385190a9e
--- /dev/null
+++ b/core/src/main/scala/org/bitcoins/core/util/FileUtil.scala
@@ -0,0 +1,9 @@
+package org.bitcoins.core.util
+
+object FileUtil {
+
+ /** Returns a BufferedSource for any file on the classpath */
+ def getFileAsSource(fileName: String): scala.io.BufferedSource = {
+ scala.io.Source.fromURL(getClass.getResource(s"/$fileName"))
+ }
+}
diff --git a/core/src/main/scala/org/bitcoins/core/util/FutureUtil.scala b/core/src/main/scala/org/bitcoins/core/util/FutureUtil.scala
new file mode 100644
index 0000000000..677335566c
--- /dev/null
+++ b/core/src/main/scala/org/bitcoins/core/util/FutureUtil.scala
@@ -0,0 +1,8 @@
+package org.bitcoins.core.util
+
+import scala.concurrent.Future
+
+object FutureUtil {
+
+ val unit: Future[Unit] = Future.successful(())
+}
diff --git a/core/src/main/scala/org/bitcoins/core/util/NumberUtil.scala b/core/src/main/scala/org/bitcoins/core/util/NumberUtil.scala
index 9c1f1790c1..05e1380101 100644
--- a/core/src/main/scala/org/bitcoins/core/util/NumberUtil.scala
+++ b/core/src/main/scala/org/bitcoins/core/util/NumberUtil.scala
@@ -298,6 +298,30 @@ sealed abstract class NumberUtil extends BitcoinSLogger {
targetCompression(difficultyHelper.difficulty, difficultyHelper.isNegative)
}
+ /**
+ * Implements this check for overflowing for [[org.bitcoins.core.protocol.blockchain.BlockHeader.nBits]]
+ * @see [[https://github.com/bitcoin/bitcoin/blob/2068f089c8b7b90eb4557d3f67ea0f0ed2059a23/src/arith_uint256.cpp#L220 bitcoin core check]]
+ * @param nBits
+ * @return
+ */
+ def isNBitsOverflow(nBits: UInt32): Boolean = {
+ val noSignificand = nBits.bytes.takeRight(3)
+ val mantissaBytes = {
+ val withSignBit = noSignificand
+ val noSignBit = false +: withSignBit.bits.tail
+ noSignBit.toByteVector
+ }
+
+ val nSize: Long = nBits.toLong >>> 24L
+
+ val nWord: UInt32 = UInt32.fromBytes(mantissaBytes)
+
+ nWord != UInt32.zero && (
+ nSize > 34 ||
+ (nWord > UInt32(UInt8.max.toInt) && nSize > 33) ||
+ (nWord > UInt32(0xffff) && nSize > 32)
+ )
+ }
}
object NumberUtil extends NumberUtil
diff --git a/core/src/main/scala/org/bitcoins/core/wallet/fee/FeeUnit.scala b/core/src/main/scala/org/bitcoins/core/wallet/fee/FeeUnit.scala
index f54e1f1870..d6590d310f 100644
--- a/core/src/main/scala/org/bitcoins/core/wallet/fee/FeeUnit.scala
+++ b/core/src/main/scala/org/bitcoins/core/wallet/fee/FeeUnit.scala
@@ -21,8 +21,26 @@ sealed abstract class FeeUnit {
*/
sealed abstract class BitcoinFeeUnit extends FeeUnit
-case class SatoshisPerByte(currencyUnit: CurrencyUnit) extends BitcoinFeeUnit
+case class SatoshisPerByte(currencyUnit: CurrencyUnit) extends BitcoinFeeUnit {
+ def toSatPerKb: SatoshisPerKiloByte = {
+ SatoshisPerKiloByte(currencyUnit.satoshis * Satoshis(Int64(1000)))
+ }
+}
+case class SatoshisPerKiloByte(currencyUnit: CurrencyUnit) extends BitcoinFeeUnit {
+ def toSatPerByte: SatoshisPerByte = {
+ val conversionOpt = (currencyUnit.toBigDecimal * 0.001).toBigIntExact()
+ conversionOpt match {
+ case Some(conversion) =>
+ val sat = Satoshis(Int64(conversion))
+ SatoshisPerByte(sat)
+
+ case None =>
+ throw new RuntimeException(s"Failed to convert sat/kb -> sat/byte for ${currencyUnit}")
+ }
+
+ }
+}
/**
* A 'virtual byte' (also known as virtual size) is a new weight measurement that
* was created with segregated witness (BIP141). Now 1 'virtual byte'
diff --git a/db-commons/README.md b/db-commons/README.md
new file mode 100644
index 0000000000..c4f9410b09
--- /dev/null
+++ b/db-commons/README.md
@@ -0,0 +1,21 @@
+### db-commons
+
+This is a project that is meant to contain re-usable database related infrastructure for bitcoin-s. This project is a dependency of [`wallet`](../wallet/) and [`node`](../node).
+
+The library that bitcoin-s currently uses for database related things is called [`Slick`](http://slick.lightbend.com/doc/3.3.0/).
+
+The most important file in this project is [`DbConfig`](src/main/scala/org/bitcoins/db/DbConfig.scala). This provides a
+common way for databases to be accessed from configuration files. For more information on how Slick configuration files
+work please see this [reference](http://slick.lightbend.com/doc/3.3.0/gettingstarted.html#database-configuration).
+
+
+This project expects the following keys for databases
+
+- mainnetDb
+- testnet3Db
+- regtestDb
+- unittestDb
+
+This will be read by [`DbConfig`](src/main/scala/org/bitcoins/db/DbConfig.scala) to specify database information related
+to a specific project. You can look at the database configuration for the [`node`](../node/src/main/resources/application.conf) project for an example
+of how this works.
\ No newline at end of file
diff --git a/db-commons/src/main/resources/db.conf b/db-commons/src/main/resources/db.conf
new file mode 100644
index 0000000000..7e3a6bdd25
--- /dev/null
+++ b/db-commons/src/main/resources/db.conf
@@ -0,0 +1,17 @@
+bitcoin-s {
+ database {
+ dataSourceClass = slick.jdbc.DatabaseUrlDataSource
+ profile = "slick.jdbc.SQLiteProfile$"
+ dbPath = ${bitcoin-s.datadir}/${bitcoin-s.network}/
+
+ # this config key is read by Slick
+ db {
+ driver = org.sqlite.JDBC
+ url = "jdbc:sqlite:"${bitcoin-s.database.dbPath}${bitcoin-s.database.name}
+
+ # as long as we're on SQLite there's no point
+ # in doing connection pooling
+ connectionPool = disabled
+ }
+ }
+}
diff --git a/db-commons/src/main/resources/reference.conf b/db-commons/src/main/resources/reference.conf
new file mode 100644
index 0000000000..2053250f39
--- /dev/null
+++ b/db-commons/src/main/resources/reference.conf
@@ -0,0 +1,4 @@
+bitcoin-s {
+ datadir = ${HOME}/.bitcoin-s
+ network = regtest # regtest, testnet3, mainnet
+}
\ No newline at end of file
diff --git a/db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala b/db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala
new file mode 100644
index 0000000000..31295da891
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala
@@ -0,0 +1,278 @@
+package org.bitcoins.db
+
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.protocol.blockchain.ChainParams
+import java.nio.file.Path
+import java.nio.file.Paths
+
+import org.bitcoins.core.config.MainNet
+import org.bitcoins.core.config.TestNet3
+import org.bitcoins.core.config.RegTest
+import com.typesafe.config._
+import org.bitcoins.core.util.BitcoinSLogger
+import slick.jdbc.SQLiteProfile
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.util.Try
+import scala.util.Success
+import scala.util.Failure
+import slick.basic.DatabaseConfig
+import org.bitcoins.core.protocol.blockchain.MainNetChainParams
+import org.bitcoins.core.protocol.blockchain.TestNetChainParams
+import org.bitcoins.core.protocol.blockchain.RegTestNetChainParams
+import java.nio.file.Files
+
+import scala.util.Properties
+import scala.util.matching.Regex
+
+/**
+ * Everything needed to configure functionality
+ * of bitcoin-s applications is found in here.
+ *
+ * @see [[https://github.com/bitcoin-s/bitcoin-s-core/blob/master/doc/configuration.md `configuration.md`]]
+ * for more information.
+ */
+abstract class AppConfig extends BitcoinSLogger {
+
+ /** Sub members of AppConfig should override this type with
+ * the type of themselves, ensuring `withOverrides` return
+ * the correct type
+ */
+ protected type ConfigType <: AppConfig
+
+ /** Constructor to make a new instance of this config type */
+ protected def newConfigOfType(configOverrides: List[Config]): ConfigType
+
+ /** List of user-provided configs that should
+ * override defaults
+ */
+ protected val configOverrides: List[Config] = List.empty
+
+ /**
+ * This method returns a new `AppConfig`, where every
+ * key under `bitcoin-s` overrides the configuration
+ * picked up by other means (the `reference.conf`
+ * provided by bitcoin-s and the `application.conf`
+ * provided by the user). If you pass in configs with
+ * overlapping keys (e.g. several configs with the key
+ * `bitcoin-s.network`), the latter config overrides the
+ * first.
+ */
+ def withOverrides(config: Config, configs: Config*): ConfigType = {
+ // the two val assignments below are workarounds
+ // for awkward name resolution in the block below
+ val firstOverride = config
+
+ val numOverrides = configs.length + 1
+
+ if (logger.isDebugEnabled()) {
+ // force lazy evaluation before we print
+ // our lines
+ val oldConfStr = this.config.asReadableJson
+
+ logger.debug(s"Creating AppConfig with $numOverrides override(s) ")
+ logger.debug(s"Old config:")
+ logger.debug(oldConfStr)
+ }
+
+ val newConf = newConfigOfType(
+ configOverrides = List(firstOverride) ++ configs
+ )
+
+ // to avoid non-necessary lazy load
+ if (logger.isDebugEnabled()) {
+ // force lazy load before we print
+ val newConfStr = newConf.config.asReadableJson
+
+ logger.debug("New config:")
+ logger.debug(newConfStr)
+ }
+
+ newConf
+ }
+
+ /**
+ * Name of module specific
+ * config file. `wallet.conf`, `node.conf`,
+ * etc.
+ */
+ protected def moduleConfigName: String
+
+ /**
+ * The configuration details for connecting/using the database for our projects
+ * that require datbase connections
+ */
+ lazy val dbConfig: DatabaseConfig[SQLiteProfile] = {
+ //if we don't pass specific class, non-deterministic
+ //errors around the loaded configuration depending
+ //on the state of the default classLoader
+ //https://github.com/lightbend/config#debugging-your-configuration
+ val dbConfig = {
+ Try {
+ DatabaseConfig.forConfig[SQLiteProfile](path = "database", config)
+ } match {
+ case Success(value) =>
+ value
+ case Failure(exception) =>
+ logger.error(s"Error when loading database from config: $exception")
+ logger.error(s"Configuration: ${config.asReadableJson}")
+ throw exception
+ }
+ }
+
+ logger.trace(s"Resolved DB config: ${dbConfig.config}")
+
+ val _ = createDbFileIfDNE()
+
+ dbConfig
+ }
+
+ /** The database we are connecting to */
+ lazy val database: Database = {
+ dbConfig.db
+ }
+
+ /** The path where our DB is located */
+ // todo: what happens when to this if we
+ // dont use SQLite?
+ lazy val dbPath: Path = {
+ val pathStr = config.getString("database.dbPath")
+ val path = Paths.get(pathStr)
+ logger.debug(s"DB path: $path")
+ path
+ }
+
+ private def createDbFileIfDNE(): Unit = {
+ //should add a check in here that we are using sqlite
+ if (!Files.exists(dbPath)) {
+ logger.debug(s"Creating database directory=$dbPath")
+ val _ = Files.createDirectories(dbPath)
+ ()
+ }
+ }
+
+ /** Chain parameters for the blockchain we're on */
+ lazy val chain: ChainParams = {
+ val networkStr = config.getString("network")
+ networkStr match {
+ case "mainnet" => MainNetChainParams
+ case "testnet3" => TestNetChainParams
+ case "regtest" => RegTestNetChainParams
+ case other: String =>
+ throw new IllegalArgumentException(
+ s"'$other' is not a recognized network! Available options: mainnet, testnet3, regtest")
+ }
+ }
+
+ /** The blockchain network we're on */
+ lazy val network: NetworkParameters = chain.network
+
+ /**
+ * The underlying config that we derive the
+ * rest of the fields in this class from
+ */
+ protected lazy val config: Config = {
+ val moduleConfig =
+ ConfigFactory.load(moduleConfigName)
+
+ logger.debug(
+ s"Module config: ${moduleConfig.getConfig("bitcoin-s").asReadableJson}")
+
+ // `load` tries to resolve substitions,
+ // `parseResources` does not
+ val dbConfig = ConfigFactory
+ .parseResources("db.conf")
+
+ logger.trace(
+ s"DB config: ${dbConfig.getConfig("bitcoin-s").asReadableJson}")
+
+ val classPathConfig =
+ ConfigFactory
+ .load()
+
+ logger.trace(
+ s"Classpath config: ${classPathConfig.getConfig("bitcoin-s").asReadableJson}")
+
+ // loads reference.conf as well as application.conf,
+ // if the user has made one
+ val unresolvedConfig = classPathConfig
+ .withFallback(moduleConfig)
+ .withFallback(dbConfig)
+
+ logger.trace(s"Unresolved bitcoin-s config:")
+ logger.trace(unresolvedConfig.getConfig("bitcoin-s").asReadableJson)
+
+ val withOverrides =
+ if (configOverrides.nonEmpty) {
+ val overrides =
+ configOverrides
+ // we reverse to make the configs specified last take precedent
+ .reverse
+ .reduce(_.withFallback(_))
+
+ val interestingOverrides = overrides.getConfig("bitcoin-s")
+ logger.trace(s"User-overrides for bitcoin-s config:")
+ logger.trace(interestingOverrides.asReadableJson)
+
+ // to make the overrides actually override
+ // the default setings we have to do it
+ // in this order
+ overrides.withFallback(unresolvedConfig)
+ } else {
+ unresolvedConfig
+ }
+
+ val config = withOverrides
+ .resolve()
+ .getConfig("bitcoin-s")
+
+ logger.debug(s"Resolved bitcoin-s config:")
+ logger.debug(config.asReadableJson)
+
+ config
+
+ }
+
+ /** The data directory used by bitcoin-s apps */
+ lazy val datadir: Path = {
+ val basedir = Paths.get(config.getString("datadir"))
+ val lastDirname = network match {
+ case MainNet => "mainnet"
+ case TestNet3 => "testnet3"
+ case RegTest => "regtest"
+ }
+ basedir.resolve(lastDirname)
+ }
+
+}
+
+object AppConfig extends BitcoinSLogger {
+
+ /**
+ * Matches the default data directory location
+ * with a network appended,
+ * both with and without a trailing `/`
+ */
+ private val defaultDatadirRegex: Regex = {
+ (Properties.userHome + "/.bitcoin-s/(testnet3|mainnet|regtest)/?$").r
+ }
+
+ /**
+ * Throws if the encountered datadir is the default one. Useful
+ * in tests, to make sure you don't blow up important data.
+ */
+ private[bitcoins] def throwIfDefaultDatadir(config: AppConfig): Unit = {
+ val datadirStr = config.datadir.toString()
+ AppConfig.defaultDatadirRegex.findFirstMatchIn(datadirStr) match {
+ case None => () // pass
+ case Some(_) =>
+ val errMsg =
+ List(
+ "It looks like you haven't changed the data directory in your test configuration.",
+ s"Your data directory is $datadirStr. This would cause tests to potentially",
+ "overwrite your existing data, which you probably don't want."
+ ).mkString(" ")
+ throw new RuntimeException(errMsg)
+ }
+ }
+}
diff --git a/db-commons/src/main/scala/org/bitcoins/db/CRUD.scala b/db-commons/src/main/scala/org/bitcoins/db/CRUD.scala
new file mode 100644
index 0000000000..e5d4362b8e
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/CRUD.scala
@@ -0,0 +1,148 @@
+package org.bitcoins.db
+
+import org.bitcoins.core.util.BitcoinSLogger
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.concurrent.{ExecutionContext, Future}
+
+/**
+ * Created by chris on 9/8/16.
+ * This is an abstract actor that can be used to implement any sort of
+ * actor that accesses a Postgres database. It creates
+ * read, update, upsert, and delete methods for your actor to call.
+ * You are responsible for the create function. You also need to specify
+ * the table and the database you are connecting to.
+ */
+abstract class CRUD[T, PrimaryKeyType] extends BitcoinSLogger {
+
+ def appConfig: AppConfig
+ implicit val ec: ExecutionContext
+
+ /** The table inside our database we are inserting into */
+ val table: TableQuery[_ <: Table[T]]
+
+ /** Binding to the actual database itself, this is what is used to run querys */
+ def database: SafeDatabase = SafeDatabase(appConfig)
+
+ /**
+ * create a record in the database
+ *
+ * @param t - the record to be inserted
+ * @return the inserted record
+ */
+ def create(t: T): Future[T] = createAll(Vector(t)).map(_.head)
+
+ def createAll(ts: Vector[T]): Future[Vector[T]]
+
+ /**
+ * read a record from the database
+ *
+ * @param id - the id of the record to be read
+ * @return Option[T] - the record if found, else none
+ */
+ def read(id: PrimaryKeyType): Future[Option[T]] = {
+ val query = findByPrimaryKey(id)
+ val rows: Future[Seq[T]] = database.run(query.result)
+ rows.map(_.headOption)
+ }
+
+ /** Update the corresponding record in the database */
+ def update(t: T): Future[T] = {
+ updateAll(Vector(t)).map { ts =>
+ ts.headOption match {
+ case Some(updated) => updated
+ case None => throw UpdateFailedException("Update failed for: " + t)
+ }
+ }
+ }
+
+ /** Updates all of the given ts in the database */
+ def updateAll(ts: Vector[T]): Future[Vector[T]] = {
+ val query = findAll(ts)
+ val actions = ts.map(t => query.update(t))
+ val affectedRows: Future[Vector[Int]] = database.run(DBIO.sequence(actions))
+ val updatedTs = findAll(ts)
+ affectedRows.flatMap { _ =>
+ database.runVec(updatedTs.result)
+ }
+ }
+
+ /**
+ * delete the corresponding record in the database
+ *
+ * @param t - the record to be deleted
+ * @return int - the number of rows affected by the deletion
+ */
+ def delete(t: T): Future[Int] = {
+ logger.debug("Deleting record: " + t)
+ val query: Query[Table[_], T, Seq] = find(t)
+ database.run(query.delete)
+ }
+
+ /**
+ * insert the record if it does not exist, update it if it does
+ *
+ * @param t - the record to inserted / updated
+ * @return t - the record that has been inserted / updated
+ */
+ def upsert(t: T): Future[T] = upsertAll(Vector(t)).map(_.head)
+
+ /** Upserts all of the given ts in the database, then returns the upserted values */
+ def upsertAll(ts: Vector[T]): Future[Vector[T]] = {
+ val actions = ts.map(t => table.insertOrUpdate(t))
+ val result: Future[Vector[Int]] = database.run(DBIO.sequence(actions))
+ val findQueryFuture = result.map(_ => findAll(ts).result)
+ findQueryFuture.flatMap(database.runVec(_))
+ }
+
+ /**
+ * return all rows that have a certain primary key
+ *
+ * @param id
+ * @return Query object corresponding to the selected rows
+ */
+ protected def findByPrimaryKey(id: PrimaryKeyType): Query[Table[_], T, Seq] =
+ findByPrimaryKeys(Vector(id))
+
+ /** Finds the rows that correlate to the given primary keys */
+ protected def findByPrimaryKeys(
+ ids: Vector[PrimaryKeyType]): Query[Table[_], T, Seq]
+
+ /**
+ * return the row that corresponds with this record
+ *
+ * @param t - the row to find
+ * @return query - the sql query to find this record
+ */
+ protected def find(t: T): Query[Table[_], T, Seq] = findAll(Vector(t))
+
+ protected def findAll(ts: Vector[T]): Query[Table[_], T, Seq]
+
+}
+
+case class SafeDatabase(config: AppConfig) extends BitcoinSLogger {
+
+ import config.database
+
+ /**
+ * SQLite does not enable foreign keys by default. This query is
+ * used to enable it. It must be included in all connections to
+ * the database.
+ */
+ private val foreignKeysPragma = sqlu"PRAGMA foreign_keys = TRUE;"
+
+ def run[R](action: DBIOAction[R, NoStream, _]): Future[R] = {
+
+ val result = database.run[R](foreignKeysPragma >> action)
+ result
+ }
+
+ def runVec[R](action: DBIOAction[Seq[R], NoStream, _])(
+ implicit ec: ExecutionContext): Future[Vector[R]] = {
+ val result = database.run[Seq[R]](foreignKeysPragma >> action)
+ result.map(_.toVector)
+ }
+}
+
+case class UpdateFailedException(message: String)
+ extends RuntimeException(message)
diff --git a/db-commons/src/main/scala/org/bitcoins/db/CRUDAutoInc.scala b/db-commons/src/main/scala/org/bitcoins/db/CRUDAutoInc.scala
new file mode 100644
index 0000000000..1c52305921
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/CRUDAutoInc.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.db
+
+import slick.dbio.Effect.Write
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.concurrent.Future
+
+abstract class CRUDAutoInc[T <: DbRowAutoInc[T]] extends CRUD[T, Long] {
+
+ /** The table inside our database we are inserting into */
+ override val table: TableQuery[_ <: TableAutoInc[T]]
+
+ override def createAll(ts: Vector[T]): Future[Vector[T]] = {
+ val query = table
+ .returning(table.map(_.id))
+ .into((t, id) => t.copyWithId(id = id))
+ val actions: Vector[DBIOAction[query.SingleInsertResult, NoStream, Write]] =
+ ts.map(r => query.+=(r))
+ database.runVec(DBIO.sequence(actions))
+ }
+
+ override def findByPrimaryKeys(ids: Vector[Long]): Query[Table[_], T, Seq] = {
+ table.filter(_.id.inSet(ids))
+ }
+
+ override def findAll(ts: Vector[T]): Query[Table[_], T, Seq] = {
+ val ids = ts.filter(_.id.isDefined).map(_.id.get)
+ findByPrimaryKeys(ids)
+ }
+}
diff --git a/db-commons/src/main/scala/org/bitcoins/db/DbCommonsColumnMappers.scala b/db-commons/src/main/scala/org/bitcoins/db/DbCommonsColumnMappers.scala
new file mode 100644
index 0000000000..3876240a57
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/DbCommonsColumnMappers.scala
@@ -0,0 +1,169 @@
+package org.bitcoins.db
+
+import org.bitcoins.core.crypto._
+import org.bitcoins.core.number.{Int32, UInt32, UInt64}
+import org.bitcoins.core.protocol.BitcoinAddress
+import org.bitcoins.core.protocol.script.{ScriptPubKey, ScriptWitness}
+import org.bitcoins.core.protocol.transaction.{
+ TransactionOutPoint,
+ TransactionOutput
+}
+import org.bitcoins.core.script.ScriptType
+import org.bitcoins.core.serializers.script.RawScriptWitnessParser
+import scodec.bits.ByteVector
+import slick.jdbc.SQLiteProfile.api._
+import org.bitcoins.core.hd.HDCoinType
+import org.bitcoins.core.hd.HDPath
+import org.bitcoins.core.hd.HDChainType
+import org.bitcoins.core.hd.HDPurpose
+import org.bitcoins.core.hd.HDPurposes
+import org.bitcoins.core.hd.SegWitHDPath
+import slick.jdbc.GetResult
+
+abstract class DbCommonsColumnMappers {
+
+ /**
+ * If executing something like this:
+ *
+ * {{{
+ * sql"SELECT * FROM sqlite_master where type='table'"
+ * }}}
+ *
+ * you end up with something like this:
+ * {{{
+ * /-------+---------------+---------------+----------+----------------------\
+ * | 1 | 2 | 3 | 4 | 5 |
+ * | type | name | tbl_name | rootpage | sql |
+ * |-------+---------------+---------------+----------+----------------------|
+ * | table | block_headers | block_headers | 2 | CREATE TABLE "blo... |
+ * \-------+---------------+---------------+----------+----------------------/
+ * }}}
+ *
+ * This is most likely an implementation that will break of you try and cast
+ * the result of a different raw SQL query into a
+ * [[org.bitcoins.db.SQLiteTableInfo SQLiteTableInfo]].
+ */
+ implicit val sqliteTableInfoReader: GetResult[SQLiteTableInfo] =
+ GetResult[SQLiteTableInfo] { row =>
+ row.nextString() // type
+ row.nextString() // name
+ val tableName = row.nextString()
+ row.nextString() // rootpage
+ val sql = row.nextString()
+ SQLiteTableInfo(tableName, sql)
+
+ }
+
+ /** Responsible for mapping a [[DoubleSha256Digest]] to a String, and vice versa */
+ implicit val doubleSha256DigestMapper: BaseColumnType[DoubleSha256Digest] =
+ MappedColumnType.base[DoubleSha256Digest, String](
+ _.hex,
+ DoubleSha256Digest.fromHex
+ )
+
+ implicit val doubleSha256DigestBEMapper: BaseColumnType[
+ DoubleSha256DigestBE] =
+ MappedColumnType.base[DoubleSha256DigestBE, String](
+ _.hex,
+ DoubleSha256DigestBE.fromHex
+ )
+
+ implicit val ecPublicKeyMapper: BaseColumnType[ECPublicKey] =
+ MappedColumnType.base[ECPublicKey, String](_.hex, ECPublicKey.fromHex)
+
+ implicit val sha256Hash160DigestMapper: BaseColumnType[Sha256Hash160Digest] =
+ MappedColumnType
+ .base[Sha256Hash160Digest, String](_.hex, Sha256Hash160Digest.fromHex)
+
+ /** Responsible for mapping a [[UInt32]] to a long in Slick, and vice versa */
+ implicit val uInt32Mapper: BaseColumnType[UInt32] =
+ MappedColumnType.base[UInt32, Long](
+ tmap = _.toLong,
+ tcomap = UInt32(_)
+ )
+
+ implicit val int32Mapper: BaseColumnType[Int32] = {
+ MappedColumnType.base[Int32, Long](tmap = _.toLong, tcomap = Int32(_))
+ }
+
+ /** Responsible for mapping a [[TransactionOutput]] to hex in Slick, and vice versa */
+ implicit val transactionOutputMapper: BaseColumnType[TransactionOutput] = {
+ MappedColumnType.base[TransactionOutput, String](
+ _.hex,
+ TransactionOutput(_)
+ )
+ }
+
+ implicit val uint64Mapper: BaseColumnType[UInt64] = {
+ MappedColumnType.base[UInt64, BigDecimal](
+ { u64: UInt64 =>
+ BigDecimal(u64.toBigInt.bigInteger)
+ },
+ //this has the potential to throw
+ { bigDec: BigDecimal =>
+ UInt64(bigDec.toBigIntExact().get)
+ }
+ )
+ }
+
+ implicit val transactionOutPointMapper: BaseColumnType[TransactionOutPoint] = {
+ MappedColumnType
+ .base[TransactionOutPoint, String](_.hex, TransactionOutPoint(_))
+ }
+
+ implicit val scriptPubKeyMapper: BaseColumnType[ScriptPubKey] = {
+ MappedColumnType.base[ScriptPubKey, String](_.hex, ScriptPubKey(_))
+ }
+
+ implicit val scriptWitnessMapper: BaseColumnType[ScriptWitness] = {
+ MappedColumnType
+ .base[ScriptWitness, String](
+ _.hex,
+ hex => RawScriptWitnessParser.read(ByteVector.fromValidHex(hex)))
+ }
+
+ implicit val byteVectorMapper: BaseColumnType[ByteVector] = {
+ MappedColumnType
+ .base[ByteVector, String](_.toHex, ByteVector.fromValidHex(_))
+ }
+
+ implicit val xpubMapper: BaseColumnType[ExtPublicKey] = {
+ MappedColumnType
+ .base[ExtPublicKey, String](_.toString, ExtPublicKey.fromString(_).get)
+ }
+
+ implicit val hdCoinTypeMapper: BaseColumnType[HDCoinType] = {
+ MappedColumnType.base[HDCoinType, Int](_.toInt, HDCoinType.fromInt)
+ }
+
+ implicit val hdPathMappper: BaseColumnType[HDPath] =
+ MappedColumnType
+ .base[HDPath, String](_.toString, HDPath.fromString(_).get) // hm rethink .get?
+
+ implicit val segwitPathMappper: BaseColumnType[SegWitHDPath] =
+ MappedColumnType
+ .base[SegWitHDPath, String](_.toString, SegWitHDPath.fromString(_)) // hm rethink .get?
+
+ implicit val hdChainTypeMapper: BaseColumnType[HDChainType] =
+ MappedColumnType.base[HDChainType, Int](_.index, HDChainType.fromInt)
+
+ implicit val hdPurposeMapper: BaseColumnType[HDPurpose] =
+ MappedColumnType
+ .base[HDPurpose, Int](_.constant, HDPurposes.fromConstant(_).get) // hm rething .get
+
+ implicit val bitcoinAddressMapper: BaseColumnType[BitcoinAddress] =
+ MappedColumnType
+ .base[BitcoinAddress, String](_.value, BitcoinAddress.fromStringExn)
+
+ implicit val scriptTypeMapper: BaseColumnType[ScriptType] =
+ MappedColumnType
+ .base[ScriptType, String](_.toString, ScriptType.fromStringExn)
+
+ implicit val aesSaltMapper: BaseColumnType[AesSalt] =
+ MappedColumnType.base[AesSalt, String](
+ _.value.toHex,
+ hex => AesSalt(ByteVector.fromValidHex(hex)))
+
+}
+
+object DbCommonsColumnMappers extends DbCommonsColumnMappers
diff --git a/db-commons/src/main/scala/org/bitcoins/db/DbManagement.scala b/db-commons/src/main/scala/org/bitcoins/db/DbManagement.scala
new file mode 100644
index 0000000000..5ba21b6ffd
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/DbManagement.scala
@@ -0,0 +1,51 @@
+package org.bitcoins.db
+
+import org.bitcoins.core.util.BitcoinSLogger
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.concurrent.{ExecutionContext, Future}
+
+abstract class DbManagement extends BitcoinSLogger {
+ def allTables: List[TableQuery[_ <: Table[_]]]
+
+ /** Lists all tables in the given database */
+ def listTables(db: Database): Future[Vector[SQLiteTableInfo]] = {
+ import DbCommonsColumnMappers._
+ val query = sql"SELECT * FROM sqlite_master where type='table'"
+ .as[SQLiteTableInfo]
+ db.run(query)
+ }
+
+ def createAll()(
+ implicit config: AppConfig,
+ ec: ExecutionContext): Future[List[Unit]] = {
+ Future.sequence(allTables.map(createTable(_)))
+ }
+
+ def dropAll()(
+ implicit config: AppConfig,
+ ec: ExecutionContext): Future[List[Unit]] = {
+ Future.sequence(allTables.reverse.map(dropTable(_)))
+ }
+
+ def createTable(
+ table: TableQuery[_ <: Table[_]],
+ createIfNotExists: Boolean = true)(
+ implicit config: AppConfig): Future[Unit] = {
+ import config.database
+ val result = if (createIfNotExists) {
+ database.run(table.schema.createIfNotExists)
+ } else {
+ database.run(table.schema.create)
+ }
+ result
+ }
+
+ def dropTable(
+ table: TableQuery[_ <: Table[_]]
+ )(implicit config: AppConfig): Future[Unit] = {
+ import config.database
+ val result = database.run(table.schema.dropIfExists)
+ result
+ }
+}
diff --git a/db-commons/src/main/scala/org/bitcoins/db/DbRowAutoInc.scala b/db-commons/src/main/scala/org/bitcoins/db/DbRowAutoInc.scala
new file mode 100644
index 0000000000..db8f57dd99
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/DbRowAutoInc.scala
@@ -0,0 +1,15 @@
+package org.bitcoins.db
+
+/** This is meant to be coupled with [[CRUDAutoInc]]
+ * and [[TableAutoInc]] to allow for automatically incrementing an id
+ * when inserting something into a database. This removes the boiler
+ * boiler plate from this having to happen every where a [[CRUD]]
+ * is created
+ */
+abstract class DbRowAutoInc[T] {
+
+ def id: Option[Long]
+
+ def copyWithId(id: Long): T
+
+}
diff --git a/db-commons/src/main/scala/org/bitcoins/db/SQLiteTableInfo.scala b/db-commons/src/main/scala/org/bitcoins/db/SQLiteTableInfo.scala
new file mode 100644
index 0000000000..fb2834f8fd
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/SQLiteTableInfo.scala
@@ -0,0 +1,7 @@
+package org.bitcoins.db
+
+/**
+ * @param name The name of the table
+ * @param sql The SQL executed to create the table
+ */
+case class SQLiteTableInfo(name: String, sql: String)
diff --git a/db-commons/src/main/scala/org/bitcoins/db/SlickUtil.scala b/db-commons/src/main/scala/org/bitcoins/db/SlickUtil.scala
new file mode 100644
index 0000000000..c8e1c8ad1d
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/SlickUtil.scala
@@ -0,0 +1,19 @@
+package org.bitcoins.db
+
+import scala.concurrent.Future
+import slick.jdbc.SQLiteProfile.api._
+
+sealed abstract class SlickUtil {
+
+ /** Creates rows in a database that are not auto incremented */
+ def createAllNoAutoInc[T, U <: Table[T]](
+ ts: Vector[T],
+ database: SafeDatabase,
+ table: TableQuery[U]): Future[Vector[T]] = {
+ val actions = ts.map(t => (table += t).andThen(DBIO.successful(t)))
+ val result = database.run(DBIO.sequence(actions))
+ result
+ }
+}
+
+object SlickUtil extends SlickUtil
diff --git a/db-commons/src/main/scala/org/bitcoins/db/TableAutoInc.scala b/db-commons/src/main/scala/org/bitcoins/db/TableAutoInc.scala
new file mode 100644
index 0000000000..f7f6993bb3
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/TableAutoInc.scala
@@ -0,0 +1,17 @@
+package org.bitcoins.db
+
+import slick.jdbc.SQLiteProfile.api._
+
+/** Defines a table that has an auto incremented fields that is named id.
+ * This is useful for things we want to store that don't have an
+ * inherent id such as a hash.
+ * @param tag
+ * @param tableName
+ * @tparam T
+ */
+abstract class TableAutoInc[T](tag: Tag, tableName: String)
+ extends Table[T](tag, tableName) {
+
+ def id: Rep[Long] = column[Long]("id", O.PrimaryKey, O.AutoInc)
+
+}
diff --git a/db-commons/src/main/scala/org/bitcoins/db/package..scala b/db-commons/src/main/scala/org/bitcoins/db/package..scala
new file mode 100644
index 0000000000..917499b51a
--- /dev/null
+++ b/db-commons/src/main/scala/org/bitcoins/db/package..scala
@@ -0,0 +1,16 @@
+package org.bitcoins
+
+import com.typesafe.config.Config
+import com.typesafe.config.ConfigRenderOptions
+
+package object db {
+
+ implicit class ConfigOps(private val config: Config) extends AnyVal {
+
+ def asReadableJson: String = {
+ val options = ConfigRenderOptions.concise().setFormatted(true)
+ config.root().render(options)
+ }
+ }
+
+}
diff --git a/doc/README.md b/doc/README.md
new file mode 100644
index 0000000000..7df88c8843
--- /dev/null
+++ b/doc/README.md
@@ -0,0 +1,16 @@
+## Ammonite scripts
+
+This project contain [Ammonite](https://ammonite.io) scripts that demonstrate
+functionality of `bitcoin-s`.
+
+#### Running them with sbt:
+
+```bash
+$ sbt "doc/run path/to/script.sc" # this is very slow, not recommended
+```
+
+#### Running them with the [Bloop CLI](https://scalacenter.github.io/bloop/):
+
+```bash
+$ bloop run doc --args path/to/script.sc # much faster than through sbt
+```
diff --git a/doc/configuration.md b/doc/configuration.md
new file mode 100644
index 0000000000..a357720e85
--- /dev/null
+++ b/doc/configuration.md
@@ -0,0 +1,40 @@
+# bitcoin-s configuration
+
+bitcoin-s uses [HOCON](https://github.com/lightbend/config/blob/master/HOCON.md)
+to configure various parts of the application the library offers. HOCON is a
+superset of JSON, that is, all valid JSON is valid HOCON.
+
+All configuration for bitcoin-s is under the `bitcoin-s` key. The most interesting
+configurable parts right now are `datadir` and `network`. See
+[`db-commons/src/main/resources/reference.conf`](../db-commons/src/main/resources/reference.conf)
+for more information. In the future there will be separate keys under `bitcoin-s`
+for the `wallet`, `chain` and `node` modules.
+
+If you have a file `application.conf` anywhere on your classpath when using
+bitcoin-s, the values there take precedence over the ones found in our
+`reference.conf`.
+
+The resolved configuration gets parsed by
+[`AppConfig`](../db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala).
+You can call the `.withOverrides` on this to override any value in the
+bitcoin-s configuration. An example of this would be:
+
+```scala
+import org.bitcoins.wallet.config.WalletAppConfig
+import com.typesafe.config.ConfigFactory
+
+val myConfig = ConfigFactory.parseString("bitcoin-s.network = testnet3")
+val walletConfig = WalletAppConfig.withOverrides(myConfig)
+```
+
+You can pass as many configs as you'd like into `withOverrides`. If any
+keys appear multiple times the last one encountered. takes precedence.
+
+
+## Internal configuration
+
+Database connections are also configured by using HOCON. This is done in
+[`db.conf`](../db-commons/src/main/resources/db.conf)
+(as well as [`application.conf`](../testkit/src/main/resources/application.conf)
+in `testkit` for running tests). The options exposed here are **not** intended to
+be used by users of bitcoin-s, and are internal only.
diff --git a/doc/database.md b/doc/database.md
new file mode 100644
index 0000000000..dfde689d77
--- /dev/null
+++ b/doc/database.md
@@ -0,0 +1,13 @@
+## bitcoin-s databases
+
+### node project
+
+This contains information related to peer to peer networking and chainstate for the bitcoin-s project. You can see configuration for these databases [here](../node/src/main/resources/reference.conf)
+
+Database names:
+
+- `nodedb` - the mainnet database
+- `nodedb-testnet3` - the testnet3 database
+- `nodedb-regtest` - the regtest database
+- `nodedb-unittest` - the database used by unit tests.
+
diff --git a/zmq/src/test/resources/logback-test.xml b/doc/src/main/resources/logback.xml
similarity index 88%
rename from zmq/src/test/resources/logback-test.xml
rename to doc/src/main/resources/logback.xml
index f1ebc8381c..f6d9b39c34 100644
--- a/zmq/src/test/resources/logback-test.xml
+++ b/doc/src/main/resources/logback.xml
@@ -1,23 +1,22 @@
-
- logs/test-application.log
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
-
-
-
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
+
+ logs/doc.log
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
+
+
+
-
diff --git a/doc/src/main/scala/TxBuilderExample.scala b/doc/src/main/scala/TxBuilderExample.scala
new file mode 100644
index 0000000000..6f01d0e7bf
--- /dev/null
+++ b/doc/src/main/scala/TxBuilderExample.scala
@@ -0,0 +1,157 @@
+import org.bitcoins.core.config.RegTest
+import org.bitcoins.core.crypto.ECPrivateKey
+import org.bitcoins.core.currency.Satoshis
+import org.bitcoins.core.number.{Int32, Int64, UInt32}
+import org.bitcoins.core.protocol.script.P2PKHScriptPubKey
+import org.bitcoins.core.protocol.transaction.{
+ BaseTransaction,
+ Transaction,
+ TransactionOutPoint,
+ TransactionOutput
+}
+import org.bitcoins.core.script.crypto.HashType
+import org.bitcoins.core.wallet.builder.BitcoinTxBuilder
+import org.bitcoins.core.wallet.fee.SatoshisPerByte
+import org.bitcoins.core.wallet.utxo.BitcoinUTXOSpendingInfo
+import org.scalatest.{FlatSpec, MustMatchers}
+
+import scala.concurrent.ExecutionContext.Implicits.global
+import scala.concurrent.Future
+
+class TxBuilderExample extends FlatSpec with MustMatchers {
+
+ behavior of "TxBuilderExample"
+
+ it must "build a signed tx" in {
+
+ //This is a documented example of how to create a signed bitcoin transaction
+ //with bitcoin-s. You can run this test case with the following sbt command
+
+ //$ sbt "doc/testOnly *TxBuilderExample -- -z signed"
+
+ //generate a fresh private key that we are going to use in the scriptpubkey
+ val privKey = ECPrivateKey.freshPrivateKey
+
+ //this is the script that the TxBuilder is going to create a
+ //script signature that validly spends this scriptPubKey
+ val creditingSpk = P2PKHScriptPubKey(pubKey = privKey.publicKey)
+ val amount = Satoshis(Int64(10000))
+
+ //this is the utxo we are going to be spending
+ val utxo =
+ TransactionOutput(currencyUnit = amount, scriptPubKey = creditingSpk)
+
+ //the private key that locks the funds for the script we are spending too
+ val destinationPrivKey = ECPrivateKey.freshPrivateKey
+
+ //the amount we are sending -- 5000 satoshis -- to the destinationSPK
+ val destinationAmount = Satoshis(Int64(5000))
+
+ //the script that corresponds to destination private key, this is what is protecting the money
+ val destinationSPK =
+ P2PKHScriptPubKey(pubKey = destinationPrivKey.publicKey)
+
+ //this is where we are sending money too
+ //we could add more destinations here if we
+ //wanted to batch transactions
+ val destinations = {
+ val destination1 = TransactionOutput(currencyUnit = destinationAmount,
+ scriptPubKey = destinationSPK)
+
+ List(destination1)
+ }
+
+ //we have to fabricate a transaction that contains the
+ //utxo we are trying to spend. If this were a real blockchain
+ //we would need to reference the utxo set
+ val creditingTx = BaseTransaction(version = Int32.one,
+ inputs = List.empty,
+ outputs = List(utxo),
+ lockTime = UInt32.zero)
+
+ //this is the information we need from the crediting tx
+ //to properly "link" it in the transaction we are creating
+ val outPoint = TransactionOutPoint(creditingTx.txId, UInt32.zero)
+
+ // this contains all the information we need to
+ // validly sign the utxo above
+ val utxoSpendingInfo = BitcoinUTXOSpendingInfo(outPoint = outPoint,
+ output = utxo,
+ signers = List(privKey),
+ redeemScriptOpt = None,
+ scriptWitnessOpt = None,
+ hashType =
+ HashType.sigHashAll)
+
+ //all of the utxo spending information, since we are only
+ //spending one utxo, this is just one element
+ val utxos: List[BitcoinUTXOSpendingInfo] = List(utxoSpendingInfo)
+
+ //this is how much we are going to pay as a fee to the network
+ //for this example, we are going to pay 1 satoshi per byte
+ val feeRate = SatoshisPerByte(Satoshis.one)
+
+ val changePrivKey = ECPrivateKey.freshPrivateKey
+ val changeSPK = P2PKHScriptPubKey(pubKey = changePrivKey.publicKey)
+
+ // the network we are on, for this example we are using
+ // the regression test network. This is a network you control
+ // on your own machine
+ val networkParams = RegTest
+
+ //yay! Now we have a TxBuilder object that we can use
+ //to sign the tx.
+ val txBuilder: Future[BitcoinTxBuilder] = {
+ BitcoinTxBuilder(
+ destinations = destinations,
+ utxos = utxos,
+ feeRate = feeRate,
+ changeSPK = changeSPK,
+ network = networkParams
+ )
+ }
+
+ txBuilder.failed.foreach { case err => println(err.getMessage) }
+
+ //let's finally produce a validly signed tx
+ //The 'sign' method is going produce a validly signed transaction
+ //This is going to iterate through each of the 'utxos' and use
+ //the corresponding 'UTXOSpendingInfo' to produce a validly
+ //signed input. This tx has a
+ //
+ //1 input
+ //2 outputs (destination and change outputs)
+ //3 a fee rate of 1 satoshi/byte
+ val signedTxF: Future[Transaction] = txBuilder.flatMap(_.sign)
+
+ //let's print these things out so you can example them
+ signedTxF.map { tx =>
+ println("\nInputs:")
+ tx.inputs.foreach(println)
+
+ println("\nOutputs:")
+ tx.outputs.foreach(println)
+
+ //here is the fully signed serialized tx that
+ //you COULD broadcast to a cryptocurrency p2p network
+ println(s"\nFully signed tx in hex:")
+
+ println(s"${tx.hex}")
+ }
+
+ //The output from the print statements should read something like this
+
+ //Inputs:
+ //TransactionInputImpl(TransactionOutPointImpl(DoubleSha256DigestImpl(43c75d1d59e6f13f2ad3baf6e124685ba0919bccdbdf89c362fe2f30fee4bdfc),UInt32Impl(0)),P2PKHScriptSignature(6a4730440220573a7bbbd59192c4bf01b8f1dcafe981d11ab8528fead9d66d702c1b72e5dc76022007946a423073c949e85a4ca3901ab10a2d6b72873a347d2a55ef873016adae8601210356d581971934349333066ed933cdea45ae9c72829ce34d8dd6a758d56967e4cb),UInt32Impl(0))
+ //
+ //Outputs:
+ //TransactionOutputImpl(SatoshisImpl(Int64Impl(5000)),P2PKHScriptPubKeyImpl(1976a914dbdadae42124c46a00d81181e5d9ab28fbf546ed88ac))
+ //TransactionOutputImpl(SatoshisImpl(Int64Impl(4774)),P2PKHScriptPubKeyImpl(1976a914a95eb0d284593f0c8f818f64a55fa6e3852012a688ac))
+ //
+ //Fully signed tx in hex:
+ //020000000143c75d1d59e6f13f2ad3baf6e124685ba0919bccdbdf89c362fe2f30fee4bdfc000000006a4730440220573a7bbbd59192c4bf01b8f1dcafe981d11ab8528fead9d66d702c1b72e5dc76022007946a423073c949e85a4ca3901ab10a2d6b72873a347d2a55ef873016adae8601210356d581971934349333066ed933cdea45ae9c72829ce34d8dd6a758d56967e4cb000000000288130000000000001976a914dbdadae42124c46a00d81181e5d9ab28fbf546ed88aca6120000000000001976a914a95eb0d284593f0c8f818f64a55fa6e3852012a688ac00000000
+
+ //remember, you can call .hex on any bitcoin-s data structure to get the hex representation!
+ }
+
+}
diff --git a/doc/src/main/scala/org/bitcoins/doc/AmmoniteBridge.scala b/doc/src/main/scala/org/bitcoins/doc/AmmoniteBridge.scala
new file mode 100644
index 0000000000..3e24cb62fe
--- /dev/null
+++ b/doc/src/main/scala/org/bitcoins/doc/AmmoniteBridge.scala
@@ -0,0 +1,43 @@
+package org.bitcoins.doc
+import java.nio.file.Files
+import java.nio.file.Path
+import java.nio.file.Paths
+import scala.util.Properties
+
+object amm extends App {
+
+ /** Gets all files ending with .sc in dir or subdirs */
+ def getScripts(dir: Path): Seq[Path] = {
+ import scala.collection.JavaConverters._
+
+ Files
+ .walk(dir)
+ .iterator()
+ .asScala
+ .filter(Files.isRegularFile(_))
+ .filter(_.toString.endsWith(".sc"))
+ .toList
+ }
+
+ if (args.isEmpty || args.headOption.forall(_.isEmpty)) {
+ import System.err.{println => printerr}
+
+ printerr("No script name provided!")
+ printerr()
+
+ val cwd = Paths.get(Properties.userDir)
+ val scripts = getScripts(cwd)
+
+ if (scripts.nonEmpty) {
+ printerr("Available scripts:")
+ scripts.foreach { script =>
+ printerr(s" ${cwd.relativize(script)}")
+ }
+ } else {
+ printerr("No .sc scripts found!")
+ }
+ sys.exit(1)
+ } else {
+ ammonite.Main.main(args)
+ }
+}
diff --git a/doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc b/doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc
new file mode 100644
index 0000000000..050844017b
--- /dev/null
+++ b/doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc
@@ -0,0 +1,82 @@
+import org.bitcoins.rpc.config._
+
+import akka.actor.ActorSystem
+import org.bitcoins.chain.db._
+import org.bitcoins.chain.config._
+import org.bitcoins.chain.blockchain._
+import org.bitcoins.chain.blockchain.sync._
+import org.bitcoins.chain.models._
+
+import org.bitcoins.core.protocol.blockchain._
+import org.bitcoins.rpc.client.common._
+import org.bitcoins.testkit.chain._
+import org.bitcoins.wallet._
+import org.bitcoins.wallet.api._
+
+import org.slf4j.LoggerFactory
+
+import scala.collection.JavaConverters._
+import scala.concurrent._
+import scala.concurrent.duration.DurationInt
+import scala.util._
+
+//the goal for this script is to create a chain and sync it
+//to disk after creation
+
+//we should be able to read this chain on subsequent runs
+//assuming we are connected to the same bitcoind instance
+
+//you can run this script with
+//$ sbt "doc/run doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc"
+
+
+//boring config stuff
+val logger = LoggerFactory.getLogger("org.bitcoins.doc.chain.SyncChain")
+val time = System.currentTimeMillis()
+implicit val system = ActorSystem(s"sync-chain-${time}")
+import system.dispatcher
+
+//first we are assuming that a bitcoind regtest node is running in
+//the background, you can see 'connect_bitcoind.sc' script
+//to see how to bind to a local/remote bitcoind node
+//This script assumes that you have a bitcoind instance running in the
+//background and that you have ~/.bitcoin/bitcoin.conf setup.
+//you need to have 'rpcuser' and 'rpcpassword' set in that bitcoin.conf file
+//You can pass in an alternative datadir if you wish by construct a new java.io.File()
+val bitcoindInstance = BitcoindInstance.fromDatadir()
+val rpcCli = new BitcoindRpcClient(bitcoindInstance)
+
+logger.info(s"Done configuring rpc client")
+//next we need to create a way to monitor the chain
+val getBestBlockHash = ChainTestUtil.bestBlockHashFnRpc(Future.successful(rpcCli))
+
+val getBlockHeader = ChainTestUtil.getBlockHeaderFnRpc(Future.successful(rpcCli))
+
+val chainDbConfig = ChainDbConfig.RegTestDbConfig
+val chainAppConfig = ChainAppConfig(chainDbConfig)
+
+logger.info(s"Creating chain tables")
+//initialize chain tables in bitcoin-s if they do not exist
+val chainProjectInitF = ChainTestUtil.initializeIfNeeded(chainAppConfig)
+
+val blockHeaderDAO = BlockHeaderDAO(appConfig = chainAppConfig)
+
+val chainHandler = ChainHandler(blockHeaderDAO, chainAppConfig)
+
+val syncedChainApiF = chainProjectInitF.flatMap { _ =>
+ logger.info(s"Beginning sync to bitcoin-s chain state")
+ ChainSync.sync(chainHandler, getBlockHeader, getBestBlockHash)
+}
+
+val syncResultF = syncedChainApiF.flatMap { chainApi =>
+ chainApi.getBlockCount.map(count => logger.info(s"chain api blockcount=${count}"))
+
+ rpcCli.getBlockCount.map(count => logger.info(s"bitcoind blockcount=${count}"))
+}
+
+syncResultF.onComplete { case result =>
+
+ logger.info(s"Sync result=${result}")
+ system.terminate()
+}
+
diff --git a/doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc b/doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc
new file mode 100644
index 0000000000..c62dba712b
--- /dev/null
+++ b/doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc
@@ -0,0 +1,232 @@
+import java.io.File
+
+import org.bitcoins.chain.blockchain.{Blockchain, ChainHandler}
+import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb, BlockHeaderDbHelper}
+import org.bitcoins.core.protocol.blockchain.{Block, RegTestNetChainParams}
+import org.bitcoins.wallet.Wallet
+import org.bitcoins.wallet.api.InitializeWalletSuccess
+import scodec.bits.ByteVector
+import akka.actor.ActorSystem
+import org.bitcoins.chain.api.ChainApi
+import com.typesafe.config.ConfigFactory
+import org.bitcoins.chain.db.ChainDbManagement
+import org.bitcoins.chain.db.ChainDbConfig
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.chain.blockchain.sync.ChainSync
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.core.currency._
+import org.bitcoins.core.protocol.transaction._
+import org.bitcoins.core.number._
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+import org.bitcoins.rpc.client.v17.BitcoindV17RpcClient
+import org.bitcoins.rpc.config.BitcoindInstance
+import org.bitcoins.rpc.util.RpcUtil
+import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
+import org.bitcoins.wallet.db.WalletDbManagement
+import org.bitcoins.wallet.db.WalletDbConfig
+import org.bitcoins.wallet.config.WalletAppConfig
+
+import org.bitcoins.zmq.ZMQSubscriber
+import org.slf4j.LoggerFactory
+
+import scala.collection.JavaConverters._
+import scala.concurrent._
+import scala.concurrent.duration.DurationInt
+import scala.util._
+/**
+* This is for example purposes only!
+ * This shows how to peer a bitcoin-s wallet
+ * with a bitcoind instance that is relaying
+ * information about what is happening on the blockchain
+ * to the bitcoin-s wallet.
+ *
+ * This is useful if you want more flexible signing
+ * procedures in the JVM ecosystem and more
+ * granular control over your utxos with
+ * popular databases like postgres, sqlite etc
+ */
+
+//you can run this script with the following command
+//$ sbt "doc/run doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc"
+
+val logger = LoggerFactory.getLogger("org.bitcoins.doc.wallet.CreateWallet")
+val time = System.currentTimeMillis()
+//boiler plate config
+implicit val system = ActorSystem(s"wallet-scala-sheet-${time}")
+import system.dispatcher
+
+val chainDbConfig = ChainDbConfig.RegTestDbConfig
+val chainAppConfig = ChainAppConfig(chainDbConfig)
+implicit val chainParams = chainAppConfig.chain
+
+val walletDbConfig = WalletDbConfig.RegTestDbConfig
+val walletAppConfig = WalletAppConfig(walletDbConfig)
+
+val datadir = new File(s"/tmp/bitcoin-${time}/")
+val bitcoinConf = new File(datadir.getAbsolutePath + "/bitcoin.conf")
+
+logger.info(s"bitcoin.conf location=${bitcoinConf.getAbsolutePath}")
+datadir.mkdirs()
+bitcoinConf.createNewFile()
+
+val config = BitcoindRpcTestUtil.standardConfig
+val _ = BitcoindRpcTestUtil.writeConfigToFile(config,datadir)
+
+//construct bitcoind
+val instance = BitcoindInstance.fromConfig(config = config, datadir)
+val bitcoind = new BitcoindRpcClient(instance = instance)
+
+//start bitcoind, this may take a little while
+//generate 101 blocks so we have money in our wallet
+val bitcoindF = bitcoind.start().map(_ => bitcoind)
+
+//create a native chain handler for bitcoin-s
+val blockHeaderDAO: BlockHeaderDAO = BlockHeaderDAO(appConfig = chainAppConfig)
+val genesisHeader = BlockHeaderDbHelper.fromBlockHeader(
+ height = 0,
+ bh = chainAppConfig.chain.genesisBlock.blockHeader)
+
+
+val blockHeaderTableF = {
+ //drop regtest table if it exists
+ val dropTableF = ChainDbManagement.dropHeaderTable(chainDbConfig)
+
+ //recreate the table
+ val createdTableF = dropTableF.flatMap(_ => ChainDbManagement.createHeaderTable(chainDbConfig))
+
+ createdTableF
+}
+val createdGenHeaderF = blockHeaderTableF.flatMap(_ => blockHeaderDAO.create(genesisHeader))
+
+val chainF = createdGenHeaderF.map(h => Vector(h))
+
+val blockchainF = chainF.map(chain => Blockchain(chain))
+
+val chainHandlerF = blockchainF.map(blockchain => ChainHandler(blockHeaderDAO, chainAppConfig))
+
+val chainApi101BlocksF = sync(chainHandlerF, 101)
+
+val bitcoinsLogF = chainApi101BlocksF.flatMap { chainApi =>
+ chainApi.getBlockCount.map(count => logger.info(s"bitcoin-s blockcount=${count}"))
+}
+
+val walletF = bitcoinsLogF.flatMap { _ =>
+ //create tables
+ val dropTablesF = WalletDbManagement.dropAll(walletDbConfig)
+ val createTablesF = dropTablesF.flatMap(_ => WalletDbManagement.createAll(walletDbConfig))
+ createTablesF.flatMap { _ =>
+ Wallet.initialize(walletAppConfig)
+ .collect{ case success: InitializeWalletSuccess => success.wallet }
+ }
+}
+
+val bitcoinsAddrF = walletF.flatMap(_.getNewAddress())
+
+//send money to our wallet with bitcoind
+val amt = Bitcoins.one
+val transactionOutputIndexF: Future[(Transaction,Int)] = for {
+ bitcoind <- bitcoindF
+ bitcoinsAddr <- bitcoinsAddrF
+ txid <- bitcoind.sendToAddress(bitcoinsAddr, amt)
+ tx <- bitcoind.getRawTransactionRaw(txid)
+} yield {
+ logger.info(s"Sending ${amt} to address ${bitcoinsAddr.value}")
+ val Some((output,index)) = tx.outputs.zipWithIndex.find { case (output,index) =>
+ output.scriptPubKey == bitcoinsAddr.scriptPubKey
+ }
+
+ (tx,index)
+}
+
+//add the utxo that was just created by bitcoind to our wallet
+val addUtxoF = for {
+ wallet <- walletF
+ (tx,index) <- transactionOutputIndexF
+ addUtxo <- wallet.addUtxo(tx,UInt32(index))
+} yield {
+ logger.info(s"Add utxo result=${addUtxo}")
+ addUtxo
+}
+
+//bury the utxo with enough proof of work to make it confirmed
+val chainApi6BlocksF = for {
+ addUtxo <- addUtxoF
+ (tx,_) <- transactionOutputIndexF
+ chainApi <- sync(chainApi101BlocksF,6)
+} yield {
+ logger.info(s"txid=${tx.txId.flip.hex}")
+}
+
+//check balance & clean everything up
+chainApi6BlocksF.onComplete { chainApi =>
+ val balanceF = walletF.flatMap(_.getBalance)
+
+ balanceF.onComplete(balance => logger.info(s"bitcoin-s walllet balance=${balance}"))
+
+ balanceF.flatMap(_ => cleanup())
+}
+
+
+
+/** Syncs the give number of blocks to our chain */
+def sync(chainHandlerF: Future[ChainApi], numBlocks: Int)(implicit ec: ExecutionContext): Future[ChainApi] = {
+ //we need a way to connect bitcoin-s to our running bitcoind, we are going to do this via rpc for now
+ //we need to implement the 'getBestBlockHashFunc' and 'getBlockHeaderFunc' functions
+ //to be able to sync our internal bitcoin-s chain with our external bitcoind chain
+ val getBestBlockHashFunc = { () =>
+ bitcoindF.flatMap(_.getBestBlockHash)
+ }
+
+ val getBlockHeaderFunc = { hash: DoubleSha256DigestBE =>
+ bitcoindF.flatMap(_.getBlockHeader(hash).map(_.blockHeader))
+ }
+
+
+ //now that we have bitcoind setup correctly and have rpc linked to
+ //the bitcoin-s chain project, let's generate some blocks so
+ //we have money to spend in our bitcoind wallet!
+ //we need to generate 101 blocks to give us 50 btc to spend
+ val genBlocksF = chainHandlerF.flatMap { _ =>
+ bitcoindF.flatMap(_.generate(numBlocks))
+ }
+
+ //now we need to sync those blocks into bitcoin-s
+ val chainSyncF = genBlocksF.flatMap { _ =>
+ chainHandlerF.flatMap { ch =>
+ ChainSync.sync(
+ ch.asInstanceOf[ChainHandler],
+ getBlockHeaderFunc,
+ getBestBlockHashFunc)
+ }
+ }
+
+ chainSyncF
+}
+
+def cleanup(): Future[Unit] = {
+ logger.info("Beginning clean up of create wallet script")
+ val bitcoindStopF = {
+ bitcoindF.flatMap { bitcoind =>
+ val stopF = bitcoind.stop()
+ stopF
+ }
+ }
+ datadir.delete()
+ logger.debug("cleaning up chain, wallet, and system")
+ val chainCleanupF = ChainDbManagement.dropAll(chainDbConfig)
+ val walletCleanupF = WalletDbManagement.dropAll(walletDbConfig)
+
+ val doneWithCleanupF = for {
+ _ <- bitcoindStopF
+ _ <- chainCleanupF
+ _ <- walletCleanupF
+ _ <- system.terminate()
+ } yield {
+ logger.info(s"Done cleaning up")
+ }
+
+ doneWithCleanupF
+}
+
+
diff --git a/eclair-rpc-test/src/test/resources/logback-test.xml b/eclair-rpc-test/src/test/resources/logback-test.xml
deleted file mode 100644
index c3fce55920..0000000000
--- a/eclair-rpc-test/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
- logs/eclair-rpc-test.log
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
-
-
-
-
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/eclair-rpc-test/src/test/scala/org/bitcoins/eclair/rpc/EclairRpcTestUtilTest.scala b/eclair-rpc-test/src/test/scala/org/bitcoins/eclair/rpc/EclairRpcTestUtilTest.scala
index 67a0516c12..1aeb7e28eb 100644
--- a/eclair-rpc-test/src/test/scala/org/bitcoins/eclair/rpc/EclairRpcTestUtilTest.scala
+++ b/eclair-rpc-test/src/test/scala/org/bitcoins/eclair/rpc/EclairRpcTestUtilTest.scala
@@ -12,7 +12,7 @@ class EclairRpcTestUtilTest extends AsyncFlatSpec with BeforeAndAfterAll {
private val logger = LoggerFactory.getLogger(getClass)
- private implicit val actorSystem: ActorSystem =
+ implicit private val actorSystem: ActorSystem =
ActorSystem("EclairRpcTestUtilTest", BitcoindRpcTestUtil.AKKA_CONFIG)
private lazy val bitcoindRpcF = {
diff --git a/node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala b/node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala
new file mode 100644
index 0000000000..85e521f981
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala
@@ -0,0 +1,15 @@
+package org.bitcoins.node
+
+import org.bitcoins.testkit.node.NodeTestUtil
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+/**
+ * Created by chris on 6/28/16.
+ */
+class NetworkMessageTest extends BitcoinSUnitTest {
+
+ "NetworkMessage" must "be able to serialize then deserialize a message and get the original hex back" in {
+ NetworkMessage(NodeTestUtil.rawNetworkMessage).hex must be(
+ NodeTestUtil.rawNetworkMessage)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/NodeAppConfigTest.scala b/node-test/src/test/scala/org/bitcoins/node/NodeAppConfigTest.scala
new file mode 100644
index 0000000000..1bf3d873f8
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/NodeAppConfigTest.scala
@@ -0,0 +1,33 @@
+package org.bitcoins.node
+
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+import org.bitcoins.node.config.NodeAppConfig
+import org.bitcoins.core.config.TestNet3
+import com.typesafe.config.Config
+import com.typesafe.config.ConfigFactory
+import org.bitcoins.core.config.RegTest
+import org.bitcoins.core.config.MainNet
+
+class NodeAppConfigTest extends BitcoinSUnitTest {
+ val config = NodeAppConfig()
+
+ it must "be overridable" in {
+ assert(config.network == RegTest)
+
+ val otherConf = ConfigFactory.parseString("bitcoin-s.network = testnet3")
+ val withOther: NodeAppConfig = config.withOverrides(otherConf)
+ assert(withOther.network == TestNet3)
+
+ val mainnetConf = ConfigFactory.parseString("bitcoin-s.network = mainnet")
+ val mainnet: NodeAppConfig = withOther.withOverrides(mainnetConf)
+ assert(mainnet.network == MainNet)
+ }
+
+ it must "be overridable with multiple levels" in {
+ val testnet = ConfigFactory.parseString("bitcoin-s.network = testnet3")
+ val mainnet = ConfigFactory.parseString("bitcoin-s.network = mainnet")
+ val overriden: NodeAppConfig = config.withOverrides(testnet, mainnet)
+ assert(overriden.network == MainNet)
+
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/SpvNodeTest.scala b/node-test/src/test/scala/org/bitcoins/node/SpvNodeTest.scala
new file mode 100644
index 0000000000..cb199414c7
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/SpvNodeTest.scala
@@ -0,0 +1,53 @@
+package org.bitcoins.node
+
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.rpc.util.RpcUtil
+import org.bitcoins.testkit.node.NodeUnitTest
+import org.bitcoins.testkit.node.fixture.SpvNodeConnectedWithBitcoind
+import org.scalatest.FutureOutcome
+
+import scala.concurrent.Future
+
+class SpvNodeTest extends NodeUnitTest {
+
+ override type FixtureParam = SpvNodeConnectedWithBitcoind
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withSpvNodeConnectedToBitcoind(test)
+
+ behavior of "SpvNode"
+
+ it must "receive notification that a block occurred on the p2p network" in {
+ spvNodeConnectedWithBitcoind: SpvNodeConnectedWithBitcoind =>
+ val spvNode = spvNodeConnectedWithBitcoind.spvNode
+ val bitcoind = spvNodeConnectedWithBitcoind.bitcoind
+
+ assert(spvNode.isConnected)
+
+ assert(spvNode.isInitialized)
+
+ val hashF: Future[DoubleSha256DigestBE] = {
+ bitcoind.generate(1).map(_.head)
+ }
+
+ //check we have that hash inside of our chain project!
+ val spvSyncF = for {
+ _ <- hashF
+ sync <- spvNode.sync()
+ } yield sync
+
+ def isSameBestHash(): Future[Boolean] = {
+ for {
+ spvBestHash <- spvNode.chainApi.getBestBlockHash
+ hash <- hashF
+ } yield spvBestHash == hash
+ }
+
+ spvSyncF.flatMap { _ =>
+ RpcUtil
+ .retryUntilSatisfiedF(isSameBestHash)
+ .map(_ => succeed)
+ }
+
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala b/node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala
new file mode 100644
index 0000000000..c1b4c8451c
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala
@@ -0,0 +1,33 @@
+package org.bitcoins.node.headers
+
+import org.bitcoins.core.config.TestNet3
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.util.{BitcoinSUtil, CryptoUtil}
+import org.bitcoins.node.messages.VerAckMessage
+import org.bitcoins.testkit.node.NodeTestUtil
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/10/16.
+ */
+class NetworkHeaderTest extends FlatSpec with MustMatchers {
+
+ "MessageHeader" must "must create a message header for a message" in {
+ val messageHeader = NetworkHeader(TestNet3, NodeTestUtil.versionMessage)
+ messageHeader.network must be(TestNet3.magicBytes)
+ messageHeader.commandName must be(NodeTestUtil.versionMessage.commandName)
+ messageHeader.payloadSize must be(
+ UInt32(NodeTestUtil.versionMessage.bytes.size))
+ messageHeader.checksum must be(
+ CryptoUtil.doubleSHA256(NodeTestUtil.versionMessage.bytes).bytes.take(4))
+ }
+
+ it must "build the correct message header for a verack message" in {
+ val messageHeader = NetworkHeader(TestNet3, VerAckMessage)
+ messageHeader.network must be(TestNet3.magicBytes)
+ messageHeader.commandName must be(VerAckMessage.commandName)
+ messageHeader.payloadSize must be(UInt32.zero)
+ BitcoinSUtil.encodeHex(messageHeader.checksum) must be("5df6e0e2")
+ }
+
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala b/node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala
new file mode 100644
index 0000000000..f5ffad6141
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala
@@ -0,0 +1,18 @@
+package org.bitcoins.node.messages
+
+import org.bitcoins.node.headers.NetworkHeader
+import org.bitcoins.testkit.node.NodeTestUtil
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class NetworkPayloadTest extends BitcoinSUnitTest {
+
+ "NetworkMessage" must "create a payload object from it's network header and the payload bytes" in {
+ val rawNetworkMessage = NodeTestUtil.rawNetworkMessage
+ val header = NetworkHeader(rawNetworkMessage.take(48))
+ logger.debug("Header: " + header)
+ val payloadHex = rawNetworkMessage.slice(48, rawNetworkMessage.length)
+ val payload = NetworkPayload(header, payloadHex)
+ payload.isInstanceOf[VersionMessage] must be(true)
+ payload.commandName must be(NetworkPayload.versionCommandName)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala b/node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala
new file mode 100644
index 0000000000..7855a15122
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala
@@ -0,0 +1,23 @@
+package org.bitcoins.node.messages
+
+import org.bitcoins.node.messages.TypeIdentifier.{
+ MsgBlock,
+ MsgFilteredBlock,
+ MsgTx
+}
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class TypeIdentifierTest extends BitcoinSUnitTest {
+
+ "MsgTx" must "serialize to 01000000" in {
+ MsgTx.hex must be("01000000")
+ }
+
+ "MsgBlock" must "serialize to 02000000" in {
+ MsgBlock.hex must be("02000000")
+ }
+
+ "MsgFilteredBlock" must "serialize to 03000000" in {
+ MsgFilteredBlock.hex must be("03000000")
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala
new file mode 100644
index 0000000000..c050439d8b
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala
@@ -0,0 +1,16 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.testkit.gen.ControlMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+/**
+ * Created by chris on 8/26/16.
+ */
+class FilterAddMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(ControlMessageGenerator.filterAddMessage) { filterAddMsg =>
+ assert(FilterAddMessage(filterAddMsg.hex) == filterAddMsg)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala
new file mode 100644
index 0000000000..343e3355ba
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala
@@ -0,0 +1,13 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.testkit.gen.ControlMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class FilterLoadMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(ControlMessageGenerator.filterLoadMessage) { filterMsg =>
+ assert(FilterLoadMessage(filterMsg.hex) == filterMsg)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala
new file mode 100644
index 0000000000..80b41acd59
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala
@@ -0,0 +1,13 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.testkit.gen.ControlMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class PingMessageSpec extends BitcoinSUnitTest {
+
+ it must "have symmetry serialization" in {
+ forAll(ControlMessageGenerator.pingMessage) { pingMessage =>
+ assert(PingMessage(pingMessage.hex) == pingMessage)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala
new file mode 100644
index 0000000000..8264456424
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala
@@ -0,0 +1,13 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.testkit.gen.ControlMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class PongMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(ControlMessageGenerator.pongMessage) { pongMsg =>
+ assert(PongMessage(pongMsg.hex) == pongMsg)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala
new file mode 100644
index 0000000000..cd08cc3b9e
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala
@@ -0,0 +1,13 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.testkit.gen.ControlMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class RejectMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(ControlMessageGenerator.rejectMessage) { rejectMsg =>
+ assert(RejectMessage(rejectMsg.hex) == rejectMsg)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala
new file mode 100644
index 0000000000..5845f9bff4
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala
@@ -0,0 +1,14 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.testkit.gen.ControlMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class VersionMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(ControlMessageGenerator.versionMessage) { versionMessage =>
+ assert(VersionMessage(versionMessage.hex) == versionMessage)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala
new file mode 100644
index 0000000000..ab99c8a44a
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala
@@ -0,0 +1,26 @@
+package org.bitcoins.node.messages.control
+
+import java.net.InetAddress
+
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+import org.bitcoins.core.config.MainNet
+import org.bitcoins.core.number.{Int32, UInt64}
+import org.joda.time.DateTime
+
+class VersionMessageTest extends BitcoinSUnitTest {
+
+ "VersionMessage" must "create a new version message to be sent to another node on the network" in {
+ val versionMessage = VersionMessage(MainNet, InetAddress.getLocalHost)
+ versionMessage.addressReceiveServices must be(UnnamedService)
+ versionMessage.addressReceiveIpAddress must be(InetAddress.getLocalHost)
+ versionMessage.addressReceivePort must be(MainNet.port)
+
+ versionMessage.addressTransServices must be(NodeNetwork)
+ versionMessage.addressTransIpAddress must be(InetAddress.getLocalHost)
+ versionMessage.addressTransPort must be(MainNet.port)
+
+ versionMessage.nonce must be(UInt64.zero)
+ versionMessage.startHeight must be(Int32.zero)
+ versionMessage.timestamp.toLong must be(DateTime.now.getMillis +- 1000)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala
new file mode 100644
index 0000000000..3c6d804276
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala
@@ -0,0 +1,17 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.testkit.gen.DataMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+import org.scalacheck.{Prop, Properties}
+
+/**
+ * Created by chris on 7/8/16.
+ */
+class GetDataMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(DataMessageGenerator.getDataMessages) { dataMsg =>
+ assert(GetDataMessage(dataMsg.hex) == dataMsg)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala
new file mode 100644
index 0000000000..93cda5d5e3
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala
@@ -0,0 +1,14 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.testkit.gen.DataMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class GetHeadersMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(DataMessageGenerator.getHeaderMessages) { headerMsg =>
+ assert(GetHeadersMessage(headerMsg.hex) == headerMsg)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala
new file mode 100644
index 0000000000..c41014329b
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala
@@ -0,0 +1,13 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.testkit.gen.DataMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class HeadersMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(DataMessageGenerator.headersMessage) { headersMsg =>
+ assert(HeadersMessage(headersMsg.hex) == headersMsg)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala
new file mode 100644
index 0000000000..76936e78a3
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala
@@ -0,0 +1,16 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.testkit.gen.DataMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+/**
+ * Created by chris on 7/8/16.
+ */
+class InventoryMessageSpec extends BitcoinSUnitTest {
+
+ it must " have serialization symmetry" in {
+ forAll(DataMessageGenerator.inventoryMessages) { invMessage =>
+ assert(InventoryMessage(invMessage.hex) == invMessage)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala
new file mode 100644
index 0000000000..757c68b60c
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala
@@ -0,0 +1,16 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.testkit.gen.DataMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+/**
+ * Created by chris on 7/8/16.
+ */
+class InventorySpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(DataMessageGenerator.inventory) { inventory =>
+ assert(Inventory(inventory.hex) == inventory)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala
new file mode 100644
index 0000000000..971b08c560
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala
@@ -0,0 +1,12 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.testkit.gen.DataMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class MerkleBlockMessageSpec extends BitcoinSUnitTest {
+ it must "have serialization symmetry" in {
+ forAll(DataMessageGenerator.merkleBlockMessage) { merkleBlockMsg =>
+ assert(MerkleBlockMessage(merkleBlockMsg.hex) == merkleBlockMsg)
+ }
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala
new file mode 100644
index 0000000000..1867fe6dcd
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala
@@ -0,0 +1,14 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.testkit.gen.DataMessageGenerator
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class TransactionMessageSpec extends BitcoinSUnitTest {
+
+ it must "have serialization symmetry" in {
+ forAll(DataMessageGenerator.transactionMessage) { txMsg =>
+ assert(TransactionMessage.fromHex(txMsg.hex) == txMsg)
+ }
+ }
+
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala
new file mode 100644
index 0000000000..81534d8cfb
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala
@@ -0,0 +1,61 @@
+/*
+package org.bitcoins.node.networking
+
+import akka.actor.ActorSystem
+import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe}
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil}
+import org.bitcoins.node.db.UnitTestDbConfig
+import org.bitcoins.node.messages.BlockMessage
+import org.bitcoins.node.messages.BlockMessage
+import org.bitcoins.node.util.TestUtil
+import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FlatSpecLike, MustMatchers}
+
+import scala.concurrent.duration.DurationInt
+
+/**
+ * Created by chris on 7/10/16.
+ */
+class BlockActorTest
+ extends TestKit(ActorSystem("BlockActorTest"))
+ with FlatSpecLike
+ with MustMatchers
+ with ImplicitSender
+ with BeforeAndAfter
+ with BeforeAndAfterAll
+ with BitcoinSLogger {
+
+ def blockActor = {
+ val peerMsgHandler = TestUtil.peer(self)
+ TestActorRef(
+ props = BlockActor.props(peerMsgHandler = peerMsgHandler,
+ dbConfig = TestUtil.dbConfig),
+ supervisor = self
+ )
+ }
+
+ val blockHash = DoubleSha256Digest.fromHex(
+ BitcoinSUtil.flipEndianness(
+ "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206"))
+
+ "BlockActor" must "be able to send a GetBlocksMessage then receive that block back" in {
+ blockActor ! blockHash
+ val blockMsg = expectMsgType[BlockMessage](10.seconds)
+ blockMsg.block.blockHeader.hash must be(blockHash)
+
+ }
+
+ it must "be able to request a block from it's block header" in {
+ val blockHeader = BlockHeader(
+ "0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b672")
+ blockActor ! blockHeader
+ val blockMsg = expectMsgType[BlockMessage](10.seconds)
+ blockMsg.block.blockHeader.hash must be(blockHash)
+ }
+
+ override def afterAll = {
+ TestKit.shutdownActorSystem(system)
+ }
+}
+*/
diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala
new file mode 100644
index 0000000000..d7cbd45c4a
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala
@@ -0,0 +1,108 @@
+package org.bitcoins.node.networking
+
+import akka.actor.ActorSystem
+import akka.io.Tcp
+import akka.testkit.{TestActorRef, TestKit, TestProbe}
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.models.Peer
+import org.bitcoins.node.networking.peer.PeerMessageReceiver
+import org.bitcoins.node.networking.peer.PeerMessageReceiverState.Preconnection
+import org.bitcoins.testkit.async.TestAsyncUtil
+import org.bitcoins.testkit.node.NodeTestUtil
+import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
+import org.scalatest._
+
+import scala.concurrent.Future
+import scala.concurrent.duration.DurationInt
+
+/**
+ * Created by chris on 6/7/16.
+ */
+class ClientTest
+ extends AsyncFlatSpec
+ with MustMatchers
+ with BeforeAndAfter
+ with BeforeAndAfterAll
+ with BitcoinSLogger {
+ implicit val system = ActorSystem(
+ s"Client-Test-System-${System.currentTimeMillis()}")
+
+ private val appConfig = NodeTestUtil.nodeAppConfig
+
+ private val chainAppConfig = ChainAppConfig()
+
+ implicit val np = appConfig.network
+
+ val bitcoindRpcF = BitcoindRpcTestUtil.startedBitcoindRpcClient()
+
+ val bitcoindPeerF = bitcoindRpcF.map { bitcoind =>
+ NodeTestUtil.getBitcoindPeer(bitcoind)
+ }
+
+ val bitcoindRpc2F = BitcoindRpcTestUtil.startedBitcoindRpcClient()
+
+ val bitcoindPeer2F = bitcoindRpcF.map { bitcoind =>
+ NodeTestUtil.getBitcoindPeer(bitcoind)
+ }
+
+ behavior of "Client"
+
+ it must "establish a tcp connection with a bitcoin node" in {
+ bitcoindPeerF.flatMap(remote => connectAndDisconnect(remote))
+ }
+
+ it must "connect to two nodes" in {
+ val try1 =
+ bitcoindPeerF.flatMap(remote => connectAndDisconnect(remote))
+
+ val try2 = bitcoindPeer2F.flatMap(remote => connectAndDisconnect(remote))
+
+ try1.flatMap { _ =>
+ try2
+ }
+ }
+
+ /**
+ * Helper method to connect to the
+ * remote node and bind our local
+ * connection to the specified port
+ * @param remote the remote node on the p2p network we are connecting to
+ * @param port the port we are binding on our machine
+ * @return
+ */
+ def connectAndDisconnect(peer: Peer): Future[Assertion] = {
+ val probe = TestProbe()
+ val remote = peer.socket
+ val peerMessageReceiver =
+ PeerMessageReceiver(state = Preconnection,
+ nodeAppConfig = appConfig,
+ chainAppConfig = chainAppConfig)
+ val client =
+ TestActorRef(Client.props(peer, peerMessageReceiver), probe.ref)
+
+ client ! Tcp.Connect(remote)
+
+ val isConnectedF =
+ TestAsyncUtil.retryUntilSatisfied(peerMessageReceiver.isInitialized)
+
+ isConnectedF.flatMap { _ =>
+ //disconnect here
+ client ! Tcp.Abort
+ val isDisconnectedF =
+ TestAsyncUtil.retryUntilSatisfied(peerMessageReceiver.isDisconnected,
+ duration = 1.seconds)
+
+ isDisconnectedF.map { _ =>
+ succeed
+ }
+ }
+ }
+
+ override def afterAll: Unit = {
+ bitcoindRpcF.flatMap(_.stop())
+ bitcoindRpc2F.flatMap(_.stop())
+ TestKit.shutdownActorSystem(system)
+ }
+
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala
new file mode 100644
index 0000000000..f677e5db66
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala
@@ -0,0 +1,118 @@
+/*
+package org.bitcoins.node.networking
+
+import akka.actor.ActorSystem
+import akka.testkit.{ImplicitSender, TestActorRef, TestKit}
+import org.bitcoins.core.crypto.{DoubleSha256Digest, Sha256Hash160Digest}
+import org.bitcoins.core.number.{Int32, UInt32}
+import org.bitcoins.core.protocol.P2PKHAddress
+import org.bitcoins.core.protocol.blockchain.{BlockHeader, MerkleBlock, PartialMerkleTree}
+import org.bitcoins.core.protocol.transaction.Transaction
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages.data.{Inventory, InventoryMessage, MerkleBlockMessage, TransactionMessage}
+import org.bitcoins.node.messages.{MsgBlock, MsgTx}
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.db.UnitTestDbConfig
+import org.bitcoins.node.messages.data.{Inventory, InventoryMessage, MerkleBlockMessage, TransactionMessage}
+import org.bitcoins.node.messages.{MsgBlock, MsgTx}
+import org.bitcoins.node.util.TestUtil
+import org.scalatest._
+import scodec.bits.BitVector
+
+import scala.concurrent.duration.DurationInt
+
+/**
+ * Created by chris on 9/1/16.
+ */
+class PaymentActorTest
+ extends TestKit(ActorSystem("PaymentActorTest"))
+ with ImplicitSender
+ with FlatSpecLike
+ with MustMatchers
+ with BeforeAndAfterAll {
+
+ val txId = DoubleSha256Digest.fromHex(
+ "0d507a29efb362ce93687f524e7e3a668689e335ba20374c93710efdf7597c5f")
+
+ val transaction = Transaction.fromHex(
+ "0100000001f78d02e5d2e37319a4cec31331babea9f0c6b9efb75060e27cf23997c6e560b3010000006a47304402207f6d19701c0e58bdedbc5073c17ac36e3493326c8c916db7dd224961fa8c8c9f02201ba78149c12a9754f7ceab1bcfe4c6afb8fb5ee38078f47065d316cddaa932b40121023de7008d781aa60ed8b0cdf92ece1d3e6eca2a0fd958d883114129a450ab05f2feffffff02bf9fb700000000001976a914a82d2cefa38fe32eb90c5d31d2063dde716c90df88ac009f2400000000001976a914415a05d63df2c212e1c750a70eba49d6d8af196d88accb210e00")
+ "PaymentActor" must "monitor an address, then send SuccessfulPayment or FailedPayment message if that address is not paid in the next block" in {
+ val paymentActor = paymentActorRef
+ val pubKeyHash =
+ Sha256Hash160Digest("415a05d63df2c212e1c750a70eba49d6d8af196d")
+ val addr = P2PKHAddress(pubKeyHash, Constants.networkParameters)
+ paymentActor ! addr
+
+ //TODO: Remove this thread.sleep call
+ //wait for connection to be made so we have the right context
+ Thread.sleep(3000)
+ //build an inventory message, then send it to the payment actor
+ val inventory = Inventory(MsgTx, txId)
+ val txIdInvMsg = InventoryMessage(Seq(inventory))
+ paymentActor ! txIdInvMsg
+
+ //now the payment actor switches to waiting for the full transaction
+ //so send the actor the full transaction
+ val txMsg = TransactionMessage(transaction)
+ paymentActor ! txMsg
+
+ //after seeing the tx message, our payment actor waits for a block to be announced on the network
+ val blockMsg = Inventory(
+ MsgBlock,
+ DoubleSha256Digest(
+ "62862488a791bf863ea840f8b9e4ded91ef5625e73b4f56940d6050000000000"))
+ val blockInvMsg = InventoryMessage(Seq(blockMsg))
+ paymentActor ! blockInvMsg
+
+ val partialMerkleTree = PartialMerkleTree(
+ transactionCount = UInt32(36),
+ hashes = List(
+ DoubleSha256Digest(
+ "27f706c39b2ea48d9316d85f513080da35329f3629ecf5f22869e191d38f3553"),
+ DoubleSha256Digest(
+ "0d507a29efb362ce93687f524e7e3a668689e335ba20374c93710efdf7597c5f"),
+ DoubleSha256Digest(
+ "b80117bee395e816a26e807dcb5858403142dcb8d5edfc3eaa6dde700a9198a2"),
+ DoubleSha256Digest(
+ "d297f7e4e712967f77f87c65fc698fc6ff8fc0fb056b07ebd459567d0a1c36f8"),
+ DoubleSha256Digest(
+ "114b915455ad5cb314e77c648e243f71d9b4895ab96c38cc3c7e27fd151d112b"),
+ DoubleSha256Digest(
+ "c83ce4bd870c2d791d73d1ce3fd7b96f61c94d3ce3af270af22938c0d15b683a"),
+ DoubleSha256Digest(
+ "ec89457fd619020e11727f01d7f5518b7c3114aaa70376611efe9efd41c5c099")
+ ),
+ bits = BitVector.fromValidBin("11011111" + "00000000")
+ )
+
+ //after seeing a new block announcement on the network we request a merkle block message from the peer on the network
+ //this merkle block message is taken from a node on the network
+ val header = BlockHeader(
+ version = Int32(805306368),
+ previousBlockHash = DoubleSha256Digest(
+ "1d73fa2ffbdf79c2e78e3312066833c4a264a19b958faf450100000000000000"),
+ merkleRootHash = DoubleSha256Digest(
+ "9b47cf5d64aa52d7536e2b469891a79ea8488092dc3c2e0ed26dbe9b508cce16"),
+ time = UInt32(1472661981),
+ nBits = UInt32(486604799),
+ nonce = UInt32(4219144207L)
+ )
+ val merkleBlockMsg = MerkleBlockMessage(
+ merkleBlock = MerkleBlock(blockHeader = header,
+ txCount = UInt32(36),
+ partialMerkleTree = partialMerkleTree))
+ paymentActor ! merkleBlockMsg
+ expectMsgType[PaymentActor.SuccessfulPayment](10.seconds)
+ }
+
+
+ def paymentActorRef: TestActorRef[PaymentActor] = {
+ val peerMsgHandler = TestUtil.peer(self)
+ val paymentProps = PaymentActor.props(
+ peerMsgHandler = peerMsgHandler,
+ dbConfig = TestUtil.dbConfig)
+
+ TestActorRef(paymentProps, self)
+ }
+}
+*/
diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala
new file mode 100644
index 0000000000..95c5564ed4
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala
@@ -0,0 +1,207 @@
+package org.bitcoins.node.networking.peer
+
+import akka.testkit.TestKit
+import akka.util.Timeout
+import org.bitcoins.testkit.async.TestAsyncUtil
+import org.bitcoins.testkit.node.NodeUnitTest
+import org.scalatest.FutureOutcome
+
+import scala.concurrent.duration.DurationInt
+
+/**
+ * Created by chris on 7/1/16.
+ */
+class PeerMessageHandlerTest extends NodeUnitTest {
+ override type FixtureParam = Unit
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome = {
+ test(())
+ }
+
+ private implicit val akkaTimeout = Timeout(timeout)
+
+ behavior of "PeerHandler"
+
+ it must "be able to fully initialize a PeerMessageReceiver" in { _ =>
+ val peerHandlerF = buildPeerHandler()
+ val peerMsgSenderF = peerHandlerF.map(_.peerMsgSender)
+ val peerMsgRecvF = peerHandlerF.map(_.peerMsgRecv)
+
+ val _ =
+ bitcoindPeerF.flatMap(p => peerHandlerF.map(_.peerMsgSender.connect()))
+
+ val isConnectedF = TestAsyncUtil.retryUntilSatisfiedF(
+ () => peerMsgRecvF.map(_.isConnected),
+ duration = 500.millis
+ )
+
+ val hasVersionMsgF = isConnectedF.flatMap { _ =>
+ TestAsyncUtil.retryUntilSatisfiedF(
+ conditionF = () => peerMsgRecvF.map(_.hasReceivedVersionMsg)
+ )
+ }
+
+ val hasVerackMsg = hasVersionMsgF.flatMap { _ =>
+ TestAsyncUtil.retryUntilSatisfiedF(
+ conditionF = () => peerMsgRecvF.map(_.hasReceivedVerackMsg)
+ )
+ }
+
+ val isInitF = hasVerackMsg.flatMap { _ =>
+ peerMsgRecvF.map(p => assert(p.isInitialized))
+ }
+
+ val disconnectF = isInitF.flatMap { _ =>
+ peerMsgSenderF.map(_.disconnect())
+ }
+
+ val isDisconnectedF = disconnectF.flatMap { _ =>
+ TestAsyncUtil.retryUntilSatisfiedF(() =>
+ peerMsgRecvF.map(_.isDisconnected))
+
+ }
+
+ isDisconnectedF.map(_ => succeed)
+ }
+
+ /*
+ "PeerMessageHandler" must "be able to send a GetHeadersMessage then receive a list of headers back" in {
+
+ val hashStart = DoubleSha256Digest.empty
+ //this is the hash of block 2, so this test will send two blocks
+ val hashStop = DoubleSha256Digest(
+ BitcoinSUtil.flipEndianness(
+ "000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820"))
+ val getHeadersMessage =
+ GetHeadersMessage(Constants.version, List(hashStart), hashStop)
+
+ val (peerMsgSender, testProbe) = buildPeerMessageSender()
+ val socket = peerSocketAddress
+ val peerHandler = PeerHandler(dbConfig = NodeTestUtil.dbConfig,
+ peerMsgSender = peerMsgSender,
+ socket = socket)
+
+ val connected = Await.result(peerHandler.connect(), timeout)
+
+ val _ = peerHandler.getHeaders(getHeadersMsg = getHeadersMessage)
+
+ val headersMsg = expectMsgType[HeadersMessage](timeout)
+
+ headersMsg.commandName must be(NetworkPayload.headersCommandName)
+
+ val firstHeader = headersMsg.headers.head
+
+ firstHeader.hash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206"))
+
+ val secondHeader = headersMsg.headers(1)
+ secondHeader.hash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820"))
+
+ peerHandler.close()
+
+ }
+
+ it must "send a getblocks message and receive a list of blocks back" in {
+ val hashStart = DoubleSha256Digest(
+ "0000000000000000000000000000000000000000000000000000000000000000")
+ //this is the hash of block 2, so this test will send two blocks
+ val hashStop = DoubleSha256Digest(
+ BitcoinSUtil.flipEndianness(
+ "000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820"))
+
+ val getBlocksMsg =
+ GetBlocksMessage(Constants.version, Seq(hashStart), hashStop)
+
+ val peerRequest = buildPeerRequest(getBlocksMsg)
+
+ val (peerMsgHandler, probe) = peerMsgHandlerRef
+ probe.send(peerMsgHandler, peerRequest)
+
+ val invMsg = probe.expectMsgType[InventoryMessage](5.seconds)
+
+ invMsg.inventoryCount must be(CompactSizeUInt(UInt64.one, 1))
+ invMsg.inventories.head.hash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206"))
+ invMsg.inventories.head.typeIdentifier must be(MsgBlock)
+ peerMsgHandler ! Tcp.Close
+ probe.expectMsg(Tcp.Closed)
+ }
+
+ it must "request a full block from another node" in {
+ //first block on testnet
+ //https://tbtc.blockr.io/block/info/1
+ val blockHash = DoubleSha256Digest(
+ BitcoinSUtil.flipEndianness(
+ "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206"))
+ val getDataMessage = GetDataMessage(Inventory(MsgBlock, blockHash))
+ val peerRequest = buildPeerRequest(getDataMessage)
+ val (peerMsgHandler, probe) = peerMsgHandlerRef
+ probe.send(peerMsgHandler, peerRequest)
+
+ val blockMsg = probe.expectMsgType[BlockMessage](5.seconds)
+ logger.debug("BlockMsg: " + blockMsg)
+ blockMsg.block.blockHeader.hash must be(blockHash)
+
+ blockMsg.block.transactions.length must be(1)
+ blockMsg.block.transactions.head.txId must be
+ (DoubleSha256Digest(
+ BitcoinSUtil.flipEndianness(
+ "f0315ffc38709d70ad5647e22048358dd3745f3ce3874223c80a7c92fab0c8ba")))
+ peerMsgHandler ! Tcp.Close
+ probe.expectMsg(Tcp.Closed)
+
+ }
+
+ it must "request a transaction from another node" in {
+ //this tx is the coinbase tx in the first block on testnet
+ //https://tbtc.blockr.io/tx/info/f0315ffc38709d70ad5647e22048358dd3745f3ce3874223c80a7c92fab0c8ba
+ val txId = DoubleSha256Digest(
+ BitcoinSUtil.flipEndianness(
+ "a4dd00d23de4f0f96963e16b72afea547bc9ad1d0c1dda5653110eddd83fe0e2"))
+ val getDataMessage = GetDataMessage(Inventory(MsgTx, txId))
+ val peerRequest = buildPeerRequest(getDataMessage)
+ val (peerMsgHandler, probe) = peerMsgHandlerRef
+ probe.send(peerMsgHandler, peerRequest)
+ //we cannot request an arbitrary tx from a node,
+ //therefore the node responds with a [[NotFoundMessage]]
+ probe.expectMsgType[NotFoundMessage](5.seconds)
+
+ peerMsgHandler ! Tcp.Close
+ probe.expectMsg(Tcp.Closed)
+ }
+
+ it must "send a GetAddressMessage and then receive an AddressMessage back" in {
+ val (peerMsgHandler, probe) = peerMsgHandlerRef
+ val peerRequest = buildPeerRequest(GetAddrMessage)
+ probe.send(peerMsgHandler, peerRequest)
+ val addrMsg = probe.expectMsgType[AddrMessage](15.seconds)
+ peerMsgHandler ! Tcp.Close
+ probe.expectMsg(Tcp.Closed)
+ }
+
+ it must "send a PingMessage to our peer and receive a PongMessage back" in {
+ val (peerMsgHandler, probe) = peerMsgHandlerRef
+ val nonce = UInt64(scala.util.Random.nextLong.abs)
+
+ val peerRequest = buildPeerRequest(PingMessage(nonce))
+
+ system.scheduler.schedule(2.seconds,
+ 30.seconds,
+ peerMsgHandler,
+ peerRequest)(global, probe.ref)
+ val pongMessage = probe.expectMsgType[PongMessage](8.seconds)
+
+ pongMessage.nonce must be(nonce)
+
+ peerMsgHandler ! Tcp.Close
+ probe.expectMsg(Tcp.Closed)
+ }*/
+
+ override def afterAll = {
+ startedBitcoindF.flatMap(_.stop())
+ TestKit.shutdownActorSystem(system)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala
new file mode 100644
index 0000000000..c160a50e7e
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala
@@ -0,0 +1,242 @@
+/*
+package org.bitcoins.node.networking.sync
+
+import akka.actor.{ActorSystem, PoisonPill}
+import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe}
+import org.bitcoins.core.config.{MainNet, TestNet3}
+import org.bitcoins.core.gen.BlockchainElementsGenerator
+import org.bitcoins.core.protocol.blockchain.{
+ BlockHeader,
+ MainNetChainParams,
+ TestNetChainParams
+}
+import org.bitcoins.node.constant.{Constants, TestConstants}
+import org.bitcoins.node.db.NodeDbManagement
+import org.bitcoins.node.messages.data.HeadersMessage
+import org.bitcoins.node.models.BlockHeaderTable
+import org.bitcoins.node.util.TestUtil
+import org.scalatest.{
+ BeforeAndAfter,
+ BeforeAndAfterAll,
+ FlatSpecLike,
+ MustMatchers
+}
+import slick.jdbc.PostgresProfile.api._
+
+import scala.concurrent.{Await, ExecutionContext}
+import scala.concurrent.duration.DurationInt
+
+/**
+ * Created by chris on 9/13/16.
+ */
+class BlockHeaderSyncActorTest
+ extends TestKit(ActorSystem("BlockHeaderSyncActorSpec"))
+ with ImplicitSender
+ with FlatSpecLike
+ with MustMatchers
+ with BeforeAndAfter
+ with BeforeAndAfterAll {
+ implicit val ec: ExecutionContext =
+ scala.concurrent.ExecutionContext.Implicits.global
+ val timeout = 10.seconds
+ val genesisBlockHash = TestNetChainParams.genesisBlock.blockHeader.hash
+
+ before {
+ Await.result(
+ NodeDbManagement.createBlockHeaderTable(TestConstants.dbConfig),
+ timeout)
+ }
+
+ "BlockHeaderSyncActor" must "send us an error if we receive two block headers that are not connected" in {
+ val (b, probe) = blockHeaderSyncActor
+ val blockHeader1 = BlockchainElementsGenerator.blockHeader.sample.get
+ val blockHeader2 = BlockchainElementsGenerator.blockHeader.sample.get
+ val headersMsg = HeadersMessage(List(blockHeader2))
+ b ! BlockHeaderSyncActor.StartHeaders(List(blockHeader1))
+ b ! headersMsg
+ val errorMsg =
+ probe.expectMsgType[BlockHeaderSyncActor.BlockHeadersDoNotConnect]
+ errorMsg must be(
+ BlockHeaderSyncActor.BlockHeadersDoNotConnect(blockHeader1.hash,
+ blockHeader2.hash))
+ b ! PoisonPill
+ }
+
+ it must "sync the first 5 headers on testnet" in {
+ //genesis block hash is 43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000
+ val genesisBlockHash = TestNetChainParams.genesisBlock.blockHeader.hash
+ val firstBlockHash = TestUtil.firstFiveTestNetBlockHeaders.head.hash
+ val secondBlockHash = TestUtil.firstFiveTestNetBlockHeaders(1).hash
+ val thirdBlockHash = TestUtil.firstFiveTestNetBlockHeaders(2).hash
+ val fourthBlockHash = TestUtil.firstFiveTestNetBlockHeaders(3).hash
+ //5th block hash on testnet
+ val fifthBlockHash = TestUtil.firstFiveTestNetBlockHeaders.last.hash
+ val (b, probe) = blockHeaderSyncActor
+
+ b ! BlockHeaderSyncActor.GetHeaders(genesisBlockHash, fifthBlockHash)
+ val headersReply =
+ probe.expectMsgType[BlockHeaderSyncActor.GetHeadersReply](5.seconds)
+ //note the hash we started the sync at is not included in the expected blockheaders we recevie from our peer
+ val expectedHashes = List(firstBlockHash,
+ secondBlockHash,
+ thirdBlockHash,
+ fourthBlockHash,
+ fifthBlockHash)
+ val actualHashes = headersReply.headers.map(_.hash)
+
+ actualHashes.size must be(expectedHashes.size)
+ actualHashes must be(expectedHashes)
+ b ! PoisonPill
+ }
+
+ it must "fail to sync with a GetHeaders message if they are not connected" in {
+ val (b, probe) = blockHeaderSyncActor
+ val fifthBlockHash = TestUtil.firstFiveTestNetBlockHeaders.last.hash
+ b ! BlockHeaderSyncActor.GetHeaders(genesisBlockHash, fifthBlockHash)
+
+ val headers = TestUtil.firstFiveTestNetBlockHeaders
+ .slice(0, 2) ++ TestUtil.firstFiveTestNetBlockHeaders
+ .slice(3, TestUtil.firstFiveTestNetBlockHeaders.size)
+ val headersMsgMissingHeader = HeadersMessage(headers)
+ b ! headersMsgMissingHeader
+
+ probe.expectMsgType[BlockHeaderSyncActor.BlockHeadersDoNotConnect]
+ b ! PoisonPill
+ }
+
+ it must "stop syncing when we do not receive 2000 block headers from our peer" in {
+ val (b, probe) = blockHeaderSyncActor
+ b ! BlockHeaderSyncActor.StartHeaders(
+ List(TestNetChainParams.genesisBlock.blockHeader))
+ val headersMsg = HeadersMessage(TestUtil.firstFiveTestNetBlockHeaders)
+ b ! headersMsg
+ val reply =
+ probe.expectMsgType[BlockHeaderSyncActor.SuccessfulSyncReply](7.seconds)
+ reply.lastHeader must be(TestUtil.firstFiveTestNetBlockHeaders.last)
+ b ! PoisonPill
+ }
+
+ it must "start syncing at the genesis block when there are no headers in the database" in {
+ val (b, probe) = blockHeaderSyncActor
+ b ! BlockHeaderSyncActor.StartAtLastSavedHeader
+ val lastSavedHeaderReply =
+ probe.expectMsgType[BlockHeaderSyncActor.StartAtLastSavedHeaderReply]
+ lastSavedHeaderReply.header must be(
+ Constants.chainParams.genesisBlock.blockHeader)
+ b ! PoisonPill
+ }
+
+ it must "successfully check two block headers if their difficulty is the same" in {
+ val firstHeader = BlockchainElementsGenerator.blockHeader.sample.get
+ //note that this header properly references the previous header, but nBits are different
+ val secondHeader = BlockchainElementsGenerator
+ .blockHeader(firstHeader.hash, firstHeader.nBits)
+ .sample
+ .get
+ val checkHeaderResult =
+ BlockHeaderSyncActor.checkHeaders(Some(firstHeader),
+ List(secondHeader),
+ 0,
+ MainNet)
+
+ checkHeaderResult.error.isDefined must be(false)
+ checkHeaderResult.headers must be(List(secondHeader))
+ }
+
+ it must "successfully check the header of ONLY the genesis block" in {
+ val genesisBlockHeader = MainNetChainParams.genesisBlock.blockHeader
+ val checkHeaderResult =
+ BlockHeaderSyncActor.checkHeaders(None,
+ List(genesisBlockHeader),
+ 0,
+ MainNet)
+ checkHeaderResult.error.isDefined must be(false)
+ checkHeaderResult.headers must be(List(genesisBlockHeader))
+ }
+
+ it must "successfully check a sequence of headers if their is a difficulty change on the 2016 block" in {
+ val firstHeaders = genValidHeaderChain(2015)
+ val lastHeader =
+ BlockchainElementsGenerator.blockHeader(firstHeaders.last.hash).sample.get
+ val headers = firstHeaders ++ List(lastHeader)
+ val checkHeaderResult =
+ BlockHeaderSyncActor.checkHeaders(None, headers, 0, MainNet)
+ checkHeaderResult.error must be(None)
+ checkHeaderResult.headers must be(headers)
+ }
+
+ it must "fail a checkHeader on a sequence of headers if their is a difficulty change on the 2015 or 2017 block" in {
+ val firstHeaders = genValidHeaderChain(2014)
+
+ val lastHeader =
+ BlockchainElementsGenerator.blockHeader(firstHeaders.last.hash).sample.get
+ val headers = firstHeaders ++ List(lastHeader)
+ val checkHeaderResult =
+ BlockHeaderSyncActor.checkHeaders(None, headers, 0, MainNet)
+ checkHeaderResult.error.isDefined must be(true)
+ checkHeaderResult.headers must be(headers)
+
+ val firstHeaders2 =
+ BlockchainElementsGenerator.validHeaderChain(2016).sample.get
+ val lastHeader2 = BlockchainElementsGenerator
+ .blockHeader(firstHeaders2.last.hash)
+ .sample
+ .get
+ val headers2 = firstHeaders ++ List(lastHeader2)
+ val checkHeaderResult2 =
+ BlockHeaderSyncActor.checkHeaders(None, headers2, 0, MainNet)
+ checkHeaderResult2.error.isDefined must be(true)
+ checkHeaderResult2.headers must be(headers2)
+ }
+
+ it must "fail to check two block headers if the network difficulty isn't correct" in {
+ val firstHeader = BlockchainElementsGenerator.blockHeader.sample.get
+ //note that this header properly references the previous header, but nBits are different
+ val secondHeader =
+ BlockchainElementsGenerator.blockHeader(firstHeader.hash).sample.get
+ val checkHeaderResult =
+ BlockHeaderSyncActor.checkHeaders(Some(firstHeader),
+ List(secondHeader),
+ 0,
+ MainNet)
+
+ val errorMsg = checkHeaderResult.error.get
+ .asInstanceOf[BlockHeaderSyncActor.BlockHeaderDifficultyFailure]
+
+ errorMsg.previousBlockHeader must be(firstHeader)
+ errorMsg.blockHeader must be(secondHeader)
+ }
+
+ /** The [[TestActorRef]] for a [[BlockHeaderSyncActor]] we use for testing */
+ private def blockHeaderSyncActor: (
+ TestActorRef[BlockHeaderSyncActor],
+ TestProbe) = {
+ val probe = TestProbe()
+
+ val peerMsgHandler = TestUtil.peer(self)
+
+ val syncActorProps = BlockHeaderSyncActor.props(
+ peerMsgHandler = peerMsgHandler,
+ dbConfig = TestConstants.dbConfig,
+ networkParameters = TestNet3)
+ val blockHeaderSyncActor: TestActorRef[BlockHeaderSyncActor] = {
+ TestActorRef(syncActorProps, probe.ref)
+ }
+
+ (blockHeaderSyncActor, probe)
+ }
+
+ private def genValidHeaderChain(num: Long): List[BlockHeader] = {
+ BlockchainElementsGenerator.validHeaderChain(num).sample.get.toList
+ }
+
+ after {
+ Await.result(NodeDbManagement.dropBlockHeaderTable(TestConstants.dbConfig),
+ timeout)
+ }
+
+ override def afterAll = {
+ TestKit.shutdownActorSystem(system)
+ }
+}
+*/
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala
new file mode 100644
index 0000000000..b1b19bc3ad
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala
@@ -0,0 +1,42 @@
+package org.bitcoins.node.serializers.headers
+
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.util.BitcoinSUtil
+import org.bitcoins.node.messages.NetworkPayload
+import org.bitcoins.testkit.node.NodeTestUtil
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class RawNetworkHeaderSerializerTest extends BitcoinSUnitTest {
+ val hex = "f9beb4d976657261636b000000000000000000005df6e0e2"
+ "RawMessageHeaderSerializer" must "read hex string into a message header" in {
+ //this example is from this section in the bitcoin developer reference
+ //https://bitcoin.org/en/developer-reference#message-headers
+
+ val messageHeader = RawNetworkHeaderSerializer.read(hex)
+ //this is the mainnet id
+ BitcoinSUtil.encodeHex(messageHeader.network) must be("f9beb4d9")
+
+ messageHeader.commandName must be("verack")
+
+ messageHeader.payloadSize must be(UInt32.zero)
+
+ BitcoinSUtil.encodeHex(messageHeader.checksum) must be("5df6e0e2")
+ }
+
+ it must "write an object that was just read and get the original input" in {
+ val messageHeader = RawNetworkHeaderSerializer.read(hex)
+ messageHeader.hex must be(hex)
+ }
+
+ it must "read a network header from a node on the network" in {
+ val hex = NodeTestUtil.rawNetworkMessage.take(48)
+ val header = RawNetworkHeaderSerializer.read(hex)
+ BitcoinSUtil.encodeHex(header.network) must be("0B110907".toLowerCase)
+ header.commandName.size must be(NetworkPayload.versionCommandName.size)
+ header.commandName must be(NetworkPayload.versionCommandName)
+ header.payloadSize must be(UInt32(102))
+ BitcoinSUtil.encodeHex(header.checksum) must be("2f6743da")
+
+ }
+
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala
new file mode 100644
index 0000000000..889000597b
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala
@@ -0,0 +1,34 @@
+package org.bitcoins.node.serializers.messages
+
+import org.bitcoins.node.messages.TypeIdentifier.{
+ MsgBlock,
+ MsgFilteredBlock,
+ MsgTx
+}
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 5/31/16.
+ */
+class RawTypeIdentifierSerializerTest extends FlatSpec with MustMatchers {
+ val msgTxHex = "01000000"
+ val msgBlockHex = "02000000"
+ val msgFilteredBlockHex = "03000000"
+ "RawTypeIdentifier" must "read/write a MsgTx" in {
+ val msg = RawTypeIdentifierSerializer.read(msgTxHex)
+ msg must be(MsgTx)
+ RawTypeIdentifierSerializer.write(msg).toHex must be(msgTxHex)
+ }
+
+ it must "read/write a MsgBlock" in {
+ val msg = RawTypeIdentifierSerializer.read(msgBlockHex)
+ msg must be(MsgBlock)
+ RawTypeIdentifierSerializer.write(msg).toHex must be(msgBlockHex)
+ }
+
+ it must "read/write a MsgFilteredBlock" in {
+ val msg = RawTypeIdentifierSerializer.read(msgFilteredBlockHex)
+ msg must be(MsgFilteredBlock)
+ RawTypeIdentifierSerializer.write(msg).toHex must be(msgFilteredBlockHex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala
new file mode 100644
index 0000000000..5b64274458
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/3/16.
+ */
+class RawAddrMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ //from this bitcoin developer guide example
+ //https://bitcoin.org/en/developer-reference#addr
+ val addressCount = "01"
+ val time = "d91f4854"
+ val services = "0100000000000000"
+ val address = "00000000000000000000ffffc0000233"
+ val port = "208d"
+ val hex = addressCount + time + services + address + port
+ "RawAddrMessageSerializer" must "read a AddrMessage from a hex string" in {
+ val addrMessage = RawAddrMessageSerializer.read(hex)
+ addrMessage.ipCount must be(CompactSizeUInt(UInt64.one, 1))
+ addrMessage.addresses.size must be(1)
+ }
+
+ it must "write a Addr message and get its original hex back" in {
+ val addrMessage = RawAddrMessageSerializer.read(hex)
+ RawAddrMessageSerializer.write(addrMessage).toHex must be(hex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala
new file mode 100644
index 0000000000..e67665eb86
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala
@@ -0,0 +1,24 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.util.BitcoinSUtil
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 8/26/16.
+ */
+class RawFilterAddMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ //https://bitcoin.org/en/developer-reference#filteradd
+ val hex = "20" + "fdacf9b3eb077412e7a968d2e4f11b9a9dee312d666187ed77ee7d26af16cb0b"
+ "RawFilterAddMessageSerializer" must "deserialize a message in the bitcoin developer reference" in {
+ val filterAddMsg = RawFilterAddMessageSerializer.read(hex)
+ filterAddMsg.elementSize.hex must be("20")
+ BitcoinSUtil.encodeHex(filterAddMsg.element) must be(
+ "fdacf9b3eb077412e7a968d2e4f11b9a9dee312d666187ed77ee7d26af16cb0b")
+ }
+
+ it must "serialize a filter add message" in {
+ val filterAddMsg = RawFilterAddMessageSerializer.read(hex)
+ filterAddMsg.hex must be(hex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala
new file mode 100644
index 0000000000..2cc559124d
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala
@@ -0,0 +1,29 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.bloom.BloomUpdateNone
+import org.bitcoins.core.number.{UInt32, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.BitcoinSUtil
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 7/20/16.
+ */
+class RawFilterLoadMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ "RawFilterLoadMessageSerializer" must "deserialize and serialize a filter load message" in {
+ //example from the bitcoin developer reference
+ //https://bitcoin.org/en/developer-reference#filterload
+ val hex = "02b50f0b0000000000000000"
+
+ val filterLoadMsg = RawFilterLoadMessageSerializer.read(hex)
+ filterLoadMsg.bloomFilter.filterSize must be(CompactSizeUInt(UInt64(2)))
+ BitcoinSUtil.encodeHex(filterLoadMsg.bloomFilter.data) must be("b50f")
+ filterLoadMsg.bloomFilter.hashFuncs must be(UInt32(11))
+ filterLoadMsg.bloomFilter.tweak must be(UInt32.zero)
+ filterLoadMsg.bloomFilter.flags must be(BloomUpdateNone)
+
+ RawFilterLoadMessageSerializer.write(filterLoadMsg).toHex must be(hex)
+
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala
new file mode 100644
index 0000000000..9894b75f16
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala
@@ -0,0 +1,32 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.node.messages.control.NodeNetwork
+import org.bitcoins.node.messages.control.NodeNetwork
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/2/16.
+ */
+class RawNetworkIpAddressSerializerTest extends FlatSpec with MustMatchers {
+
+ //from this bitcoin developer guide example
+ //https://bitcoin.org/en/developer-reference#addr
+ val time = "d91f4854"
+ val services = "0100000000000000"
+ val address = "00000000000000000000ffffc0000233"
+ val port = "208d"
+ val hex = time + services + address + port
+ "RawNetworkIpAddressSerializer" must "read a network ip address from a hex string" in {
+ val ipAddress = RawNetworkIpAddressSerializer.read(hex)
+ ipAddress.time must be(UInt32(1414012889))
+ ipAddress.services must be(NodeNetwork)
+ ipAddress.address.toString must be("/192.0.2.51")
+ ipAddress.port must be(8333)
+ }
+
+ it must "write a network ip address from and get its original hex back" in {
+ val ipAddress = RawNetworkIpAddressSerializer.read(hex)
+ RawNetworkIpAddressSerializer.write(ipAddress).toHex must be(hex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala
new file mode 100644
index 0000000000..58781887da
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala
@@ -0,0 +1,21 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.node.messages.control.PingMessage
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/29/16.
+ */
+class RawPingMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ "RawPingMessageSerializer" must "read and write a uint64 representing the ping" in {
+ val hex = "0094102111e2af4d"
+ RawPingMessageSerializer.read(hex) must be(PingMessage(UInt64(hex)))
+ }
+
+ it must "write a ping message" in {
+ val pingMessage = PingMessage(UInt64.zero)
+ pingMessage.hex must be("0000000000000000")
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala
new file mode 100644
index 0000000000..e83158df01
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala
@@ -0,0 +1,32 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.BitcoinSUtil
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 8/31/16.
+ */
+class RawRejectMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ //https://bitcoin.org/en/developer-reference#reject
+ val hex = "02" + "7478" + "12" + "15" + "6261642d74786e732d696e707574732d7370656e74" +
+ "394715fcab51093be7bfca5a31005972947baf86a31017939575fb2354222821"
+
+ "RawRejectMessageSerializer" must "read in a reject message example" in {
+ val rejectMsg = RawRejectMessageSerializer.read(hex)
+ rejectMsg.messageSize must be(CompactSizeUInt(UInt64(2)))
+ rejectMsg.message must be("tx")
+ rejectMsg.code must be(0x12.toChar)
+ rejectMsg.reasonSize must be(CompactSizeUInt(UInt64(21)))
+ rejectMsg.reason must be("bad-txns-inputs-spent")
+ BitcoinSUtil.encodeHex(rejectMsg.extra) must be(
+ "394715fcab51093be7bfca5a31005972947baf86a31017939575fb2354222821")
+ }
+
+ it must "read then write a reject message" in {
+ val rejectMsg = RawRejectMessageSerializer.read(hex)
+ rejectMsg.hex must be(hex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala
new file mode 100644
index 0000000000..e831b0fa37
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala
@@ -0,0 +1,32 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService}
+import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService}
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/2/16.
+ */
+class RawServiceIdentifierSerializerTest extends FlatSpec with MustMatchers {
+
+ "RawServiceIdentifierSerializer" must "read a unnamed service identfier from a hex string" in {
+ val hex = "0000000000000000"
+ RawServiceIdentifierSerializer.read(hex) must be(UnnamedService)
+ }
+ it must "read a full node service identifier" in {
+ val hex = "0100000000000000"
+ RawServiceIdentifierSerializer.read(hex) must be(NodeNetwork)
+ }
+
+ it must "write a unnamed service identifier" in {
+ val hex = "0000000000000000"
+ val service = RawServiceIdentifierSerializer.read(hex)
+ RawServiceIdentifierSerializer.write(service).toHex must be(hex)
+ }
+
+ it must "write a node network service provider" in {
+ val hex = "0100000000000000"
+ val service = RawServiceIdentifierSerializer.read(hex)
+ RawServiceIdentifierSerializer.write(service).toHex must be(hex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala
new file mode 100644
index 0000000000..7fb593d78e
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala
@@ -0,0 +1,132 @@
+package org.bitcoins.node.serializers.messages.control
+
+import java.net.InetSocketAddress
+
+import org.bitcoins.core.number.{Int32, Int64, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.BitcoinSUtil
+import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService}
+import org.bitcoins.node.util.BitcoinSpvNodeUtil
+import org.bitcoins.node.versions.{ProtocolVersion, ProtocolVersion70002}
+import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService}
+import org.bitcoins.node.util.BitcoinSpvNodeUtil
+import org.bitcoins.node.versions.{
+ ProtocolVersion,
+ ProtocolVersion70002,
+ ProtocolVersion70012
+}
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/3/16.
+ */
+class RawVersionMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ //take from the bitcoin developer reference underneath this seciton
+ //https://bitcoin.org/en/developer-reference#version
+
+ val protocolVersion = "72110100"
+ val services = "0100000000000000"
+ val timestamp = "bc8f5e5400000000"
+
+ val receivingNodesServices = "0100000000000000"
+ val receivingNodeIpAddress = "00000000000000000000ffffc61b6409"
+ val receivingNodePort = "208d"
+
+ val transNodeServices = "0100000000000000"
+ val transNodeIpAddress = "00000000000000000000ffffcb0071c0"
+ val transNodePort = "208d"
+ val nonce = "128035cbc97953f8"
+
+ val userAgentSize = "0f"
+ val userAgent = "2f5361746f7368693a302e392e332f"
+ val startHeight = "cf050500"
+ val relay = "01"
+
+ val hex = protocolVersion + services + timestamp + receivingNodesServices + receivingNodeIpAddress +
+ receivingNodePort + transNodeServices + transNodeIpAddress + transNodePort + nonce +
+ userAgentSize + userAgent + startHeight + relay
+
+ "RawVersionMessageSerializer" must "read a raw version message from the p2p network" in {
+ val versionMessage = RawVersionMessageSerializer.read(hex)
+ versionMessage.version must be(ProtocolVersion(protocolVersion))
+ versionMessage.services must be(NodeNetwork)
+ versionMessage.timestamp must be(Int64(1415483324))
+
+ versionMessage.addressReceiveServices must be(NodeNetwork)
+ BitcoinSpvNodeUtil
+ .writeAddress(versionMessage.addressReceiveIpAddress)
+ .toHex must be(receivingNodeIpAddress)
+ versionMessage.addressReceivePort must be(8333)
+
+ versionMessage.addressTransServices must be(NodeNetwork)
+ BitcoinSpvNodeUtil
+ .writeAddress(versionMessage.addressTransIpAddress)
+ .toHex must be(transNodeIpAddress)
+ versionMessage.addressTransPort must be(8333)
+
+ versionMessage.nonce.toBigInt must be(
+ BigInt(BitcoinSUtil.decodeHex(nonce).toArray))
+
+ versionMessage.userAgentSize must be(CompactSizeUInt(UInt64(15), 1))
+ versionMessage.userAgent must be("/Satoshi:0.9.3/")
+
+ versionMessage.startHeight must be(Int32(329167))
+ versionMessage.relay must be(true)
+ }
+
+ it must "write a VersionMessage to its original hex format" in {
+ val versionMessage = RawVersionMessageSerializer.read(hex)
+ RawVersionMessageSerializer.write(versionMessage).toHex must be(hex)
+ }
+
+ it must "read a VersionMessage that bitcoins created" in {
+ //random version message bitcoins created when connecting to a testnet seed
+ //and sending it a version message
+ val hex =
+ "7c1101000000000000000000d805833655010000000000000000000000000000000000000000ffff0a940106479d010000000000000000000000000000000000ffff739259bb479d0000000000000000182f626974636f696e732d7370762d6e6f64652f302e302e310000000000"
+ val versionMessage = RawVersionMessageSerializer.read(hex)
+ RawVersionMessageSerializer.write(versionMessage).toHex must be(hex)
+ }
+
+ it must "read a version message from a full node on the network" in {
+ val hex =
+ "721101000100000000000000e0165b5700000000010000000000000000000000000000000000ffffad1f27a8479d010000000000000000000000000000000000ffff00000000479d68dc32a9948d149b102f5361746f7368693a302e31312e322f7f440d0001"
+ val versionMessage = RawVersionMessageSerializer.read(hex)
+ versionMessage.version must be(ProtocolVersion70002)
+
+ versionMessage.userAgent must be("/Satoshi:0.11.2/")
+ versionMessage.relay must be(true)
+
+ versionMessage.hex must be(hex)
+ }
+
+ it must "read and write a version message generated by our VersionMessageGenerator" in {
+
+ // VersionMessageRequestImpl(ProtocolVersion70002,NodeNetwork,Int64Impl(-4420735367386806222,c2a6649afce74832),UnnamedService,
+ // 0.0.0.0/0.0.0.0,17057,UnnamedService,0.0.0.0/0.0.0.0,41963,UInt64Impl(9223372036854775809),CompactSizeUIntImpl(86,1),
+ // NcQHwZ87bRe9y4m6PA7lX2iVA5If1jWjUycykFOQeqB0REj92awaKy0zMRdckvEKq1j97i3Mal3Eo7QxgdjcpV,Int32Impl(-919905282,c92b5bfe),false)
+ val hex =
+ "7211010001000000000000003248e7fc9a64a6c2000000000000000000000000000000000000ffff0000000042a1000000000000000000000000000000000000ffff00000000a3eb8000000000000001564e635148775a38376252653979346d365041376c5832695641354966316a576a557963796b464f516571423052456a39326177614b79307a4d5264636b76454b71316a393769334d616c33456f37517867646a637056fe5b2bc900"
+ val versionMessage = RawVersionMessageSerializer.read(hex)
+ versionMessage.version must be(ProtocolVersion70002)
+ versionMessage.services must be(NodeNetwork)
+ versionMessage.timestamp must be(Int64(-4420735367386806222L))
+ versionMessage.addressReceiveIpAddress must be(
+ new InetSocketAddress(17057).getAddress)
+ versionMessage.addressReceiveServices must be(UnnamedService)
+ versionMessage.addressReceivePort must be(17057)
+ versionMessage.addressTransServices must be(UnnamedService)
+ versionMessage.addressTransIpAddress must be(
+ new InetSocketAddress(41963).getAddress)
+ versionMessage.addressTransPort must be(41963)
+ versionMessage.nonce must be(UInt64(BigInt("9223372036854775809")))
+ versionMessage.userAgentSize must be(CompactSizeUInt(UInt64(86), 1))
+ versionMessage.userAgent must be(
+ "NcQHwZ87bRe9y4m6PA7lX2iVA5If1jWjUycykFOQeqB0REj92awaKy0zMRdckvEKq1j97i3Mal3Eo7QxgdjcpV")
+ versionMessage.startHeight must be(Int32(-919905282))
+ versionMessage.relay must be(false)
+ versionMessage.hex must be(hex)
+ }
+
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala
new file mode 100644
index 0000000000..f9fe9e3b7d
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala
@@ -0,0 +1,52 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.BitcoinSUtil
+import org.bitcoins.node.messages.GetBlocksMessage
+import org.bitcoins.node.versions.ProtocolVersion70001
+import org.bitcoins.node.messages.GetBlocksMessage
+import org.bitcoins.node.versions.ProtocolVersion70001
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/1/16.
+ */
+class RawGetBlocksMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ val hex = "7111010002d39f608a7775b537729884d4e6633bb2105e55a16a14d31b0000000000000000" +
+ "5c3e6403d40837110a2e8afb602b1c01714bda7ce23bea0a0000000000000000" +
+ "0000000000000000000000000000000000000000000000000000000000000000"
+ "RawGetBlocksMessageSerializer" must "read a getblocks message from a hex string" in {
+ val getBlocksMessage: GetBlocksMessage =
+ RawGetBlocksMessageSerializer.read(hex)
+
+ getBlocksMessage.protocolVersion must be(ProtocolVersion70001)
+
+ getBlocksMessage.hashCount must be(CompactSizeUInt(UInt64(2), 1))
+
+ getBlocksMessage.blockHeaderHashes.head must be
+ (DoubleSha256Digest(
+ BitcoinSUtil.decodeHex(
+ "d39f608a7775b537729884d4e6633bb2105e55a16a14d31b0000000000000000")))
+
+ getBlocksMessage.blockHeaderHashes.tail.head must be
+ (DoubleSha256Digest(
+ BitcoinSUtil.decodeHex(
+ "5c3e6403d40837110a2e8afb602b1c01714bda7ce23bea0a0000000000000000")))
+
+ getBlocksMessage.stopHash must be(
+ DoubleSha256Digest(BitcoinSUtil.decodeHex(
+ "0000000000000000000000000000000000000000000000000000000000000000")))
+
+ }
+
+ it must "write a getblocks message and get the original hex back" in {
+ val getBlocksMessage: GetBlocksMessage =
+ RawGetBlocksMessageSerializer.read(hex)
+
+ RawGetBlocksMessageSerializer.write(getBlocksMessage).toHex must be(hex)
+ }
+
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala
new file mode 100644
index 0000000000..379b1df0a9
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala
@@ -0,0 +1,41 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.node.messages.TypeIdentifier.MsgTx
+import org.bitcoins.node.messages.data.Inventory
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 7/8/16.
+ */
+class RawGetDataMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ //from bitcoin developer reference
+ //a getdata message is essentially an inv message
+ //https://bitcoin.org/en/developer-reference#inv
+ val hex = "02" + "01000000" + "de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a" +
+ "01000000" + "91d36d997037e08018262978766f24b8a055aaf1d872e94ae85e9817b2c68dc7"
+
+ "RawGetDataMessageSerializer" must "read in a data message" in {
+ val dataMsg = RawGetDataMessageSerializer.read(hex)
+ dataMsg.inventoryCount must be(CompactSizeUInt(UInt64(2)))
+ dataMsg.inventories.head must be(
+ Inventory(
+ MsgTx,
+ DoubleSha256Digest(
+ "de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a")))
+ dataMsg.inventories(1) must be(
+ Inventory(
+ MsgTx,
+ DoubleSha256Digest(
+ "91d36d997037e08018262978766f24b8a055aaf1d872e94ae85e9817b2c68dc7")))
+
+ }
+
+ it must "write a GetDataMessage back to the original hex" in {
+ val dataMsg = RawGetDataMessageSerializer.read(hex)
+ RawGetDataMessageSerializer.write(dataMsg)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala
new file mode 100644
index 0000000000..c26c72f434
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala
@@ -0,0 +1,32 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.node.versions.ProtocolVersion70002
+import org.bitcoins.testkit.node.NodeTestUtil
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/29/16.
+ */
+class RawGetHeadersMessageSerializerTest extends FlatSpec with MustMatchers {
+ val hex = NodeTestUtil.rawGetHeadersMsg
+
+ "RawGetHeadersMessageSerializer" must "read a hex string representing a GetHeaderMessage" in {
+ val getHeadersMessage = RawGetHeadersMessageSerializer.read(hex)
+ getHeadersMessage.version must be(ProtocolVersion70002)
+ getHeadersMessage.hashCount must be(CompactSizeUInt(UInt64(31), 1))
+ getHeadersMessage.hashes.length must be(31)
+
+ getHeadersMessage.hashStop must be(
+ DoubleSha256Digest(
+ "0000000000000000000000000000000000000000000000000000000000000000"))
+ }
+
+ it must "write a GetHeaderMessage" in {
+ val getHeadersMessage = RawGetHeadersMessageSerializer.read(hex)
+ RawGetHeadersMessageSerializer.write(getHeadersMessage).toHex must be(hex)
+ }
+
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala
new file mode 100644
index 0000000000..36b35ba975
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala
@@ -0,0 +1,73 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.{UInt32, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil}
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 7/5/16.
+ */
+class RawHeadersMessageSerializerTest
+ extends FlatSpec
+ with MustMatchers
+ with BitcoinSLogger {
+
+ //from this example
+ //https://bitcoin.org/en/developer-reference#headers
+ val hex = "01" +
+ "02000000" +
+ "b6ff0b1b1680a2862a30ca44d346d9e8910d334beb48ca0c0000000000000000" +
+ "9d10aa52ee949386ca9385695f04ede270dda20810decd12bc9b048aaab31471" +
+ "24d95a54" +
+ "30c31b18" +
+ "fe9f0864" + "00"
+ "RawHeadersMessageSerializer" must "deserialize a list of block headers" in {
+ val headersMsg = RawHeadersMessageSerializer.read(hex)
+ val header = headersMsg.headers.head
+ headersMsg.count must be(CompactSizeUInt(UInt64.one, 1))
+ header.previousBlockHash must be(
+ DoubleSha256Digest(
+ "b6ff0b1b1680a2862a30ca44d346d9e8910d334beb48ca0c0000000000000000"))
+ header.merkleRootHash must be(
+ DoubleSha256Digest(
+ "9d10aa52ee949386ca9385695f04ede270dda20810decd12bc9b048aaab31471"))
+ header.time must be(UInt32(1415239972))
+ header.nBits must be(UInt32(BitcoinSUtil.flipEndianness("30c31b18")))
+ header.nonce must be(UInt32(BitcoinSUtil.flipEndianness("fe9f0864")))
+ }
+
+ it must "read then write a HeaderMessage" in {
+ val headersMsg = RawHeadersMessageSerializer.read(hex)
+ RawHeadersMessageSerializer.write(headersMsg).toHex must be(hex)
+ }
+
+ it must "read the first two block headers from testnet3" in {
+ val hex =
+ "020100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b672000100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d2353400"
+ val headersMsg = RawHeadersMessageSerializer.read(hex)
+ val first = headersMsg.headers.head
+ logger.debug("Headers: " + headersMsg.headers)
+ first.previousBlockHash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"))
+ first.hash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206"))
+ first.merkleRootHash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "f0315ffc38709d70ad5647e22048358dd3745f3ce3874223c80a7c92fab0c8ba"))
+ logger.debug("Second header: " + headersMsg.headers(1))
+ val second = headersMsg.headers(1)
+ second.previousBlockHash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206"))
+ second.hash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820"))
+ second.merkleRootHash.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "20222eb90f5895556926c112bb5aa0df4ab5abc3107e21a6950aec3b2e3541e2"))
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala
new file mode 100644
index 0000000000..9b9103de2c
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala
@@ -0,0 +1,27 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/1/16.
+ */
+class RawInventoryMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ //from bitcoin developer reference
+ //https://bitcoin.org/en/developer-reference#inv
+ val hex = "0201000000de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a" +
+ "0100000091d36d997037e08018262978766f24b8a055aaf1d872e94ae85e9817b2c68dc7"
+
+ "RawInventoryMessageSerializer" must "read a InventoryMessage object from its hex serialization" in {
+ val inventoryMessage = RawInventoryMessageSerializer.read(hex)
+ inventoryMessage.inventoryCount must be(CompactSizeUInt(UInt64(2), 1))
+ inventoryMessage.inventories.size must be(2)
+ }
+
+ it must "read and then write an inventory message and get its original hex" in {
+ val inventoryMessage = RawInventoryMessageSerializer.read(hex)
+ RawInventoryMessageSerializer.write(inventoryMessage).toHex must be(hex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala
new file mode 100644
index 0000000000..3d541854c3
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.util.BitcoinSUtil
+import org.bitcoins.node.messages.TypeIdentifier.MsgTx
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/1/16.
+ */
+class RawInventorySerializerTest extends FlatSpec with MustMatchers {
+
+ //from bitcoin developer reference example section
+ //https://bitcoin.org/en/developer-reference#inv
+ val hex =
+ "01000000de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a"
+ "RawInventorySerializer" must "read a inventory object from its hex representation" in {
+ val inventory = RawInventorySerializer.read(hex)
+ inventory.typeIdentifier must be(MsgTx)
+ inventory.hash must be
+ (DoubleSha256Digest(
+ BitcoinSUtil.decodeHex(
+ "de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a")))
+ }
+
+ it must "write a inventory object to its serialized format" in {
+ val inventory = RawInventorySerializer.read(hex)
+ RawInventorySerializer.write(inventory).toHex must be(hex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala
new file mode 100644
index 0000000000..802295aabd
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala
@@ -0,0 +1,53 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.{UInt32, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.BitcoinSUtil
+import org.scalatest.{FlatSpec, MustMatchers}
+import scodec.bits.BitVector
+
+/**
+ * Created by chris on 6/2/16.
+ */
+class RawMerkleBlockMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ //from bitcoin developer reference
+ //https://bitcoin.org/en/developer-reference#merkleblock
+ val hex = "0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc88067010000000000" +
+ "7f16c5962e8bd963659c793ce370d95f093bc7e367117b3c30c1f8fdd0d97287" +
+ "76381b4d4c86041b554b85290700000004" +
+ "3612262624047ee87660be1a707519a443b1c1ce3d248cbfc6c15870f6c5daa2" +
+ "019f5b01d4195ecbc9398fbf3c3b1fa9bb3183301d7a1fb3bd174fcfa40a2b65" +
+ "41ed70551dd7e841883ab8f0b16bf04176b7d1480e4f0af9f3d4c3595768d068" +
+ "20d2a7bc994987302e5b1ac80fc425fe25f8b63169ea78e68fbaaefa59379bbf" +
+ "011d"
+
+ "RawMerkleBlockMessage" must "read a raw hex string into a merkle block message" in {
+ val merkleBlockMessage = RawMerkleBlockMessageSerializer.read(hex)
+
+ merkleBlockMessage.merkleBlock.transactionCount must be(UInt32(7))
+ merkleBlockMessage.merkleBlock.hashCount must be(CompactSizeUInt(UInt64(4)))
+
+ merkleBlockMessage.merkleBlock.hashes must be(
+ Seq(
+ DoubleSha256Digest(BitcoinSUtil.decodeHex(
+ "3612262624047ee87660be1a707519a443b1c1ce3d248cbfc6c15870f6c5daa2")),
+ DoubleSha256Digest(BitcoinSUtil.decodeHex(
+ "019f5b01d4195ecbc9398fbf3c3b1fa9bb3183301d7a1fb3bd174fcfa40a2b65")),
+ DoubleSha256Digest(BitcoinSUtil.decodeHex(
+ "41ed70551dd7e841883ab8f0b16bf04176b7d1480e4f0af9f3d4c3595768d068")),
+ DoubleSha256Digest(BitcoinSUtil.decodeHex(
+ "20d2a7bc994987302e5b1ac80fc425fe25f8b63169ea78e68fbaaefa59379bbf"))
+ ))
+
+ merkleBlockMessage.merkleBlock.partialMerkleTree.bits must be(
+ BitVector.fromValidBin("10111000"))
+ }
+
+ it must "write a merkle block header message" in {
+ val merkleBlockMessage = RawMerkleBlockMessageSerializer.read(hex)
+
+ RawMerkleBlockMessageSerializer.write(merkleBlockMessage).toHex must be(hex)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala
new file mode 100644
index 0000000000..2714f88c45
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/2/16.
+ */
+class RawNotFoundMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ //according to the developer reference, the format for inventory messages and
+ //not found messages are the same
+ //from bitcoin developer reference
+ //https://bitcoin.org/en/developer-reference#inv
+ val hex = "0201000000de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a" +
+ "0100000091d36d997037e08018262978766f24b8a055aaf1d872e94ae85e9817b2c68dc7"
+
+ "RawNotFoundMessageSerializer" must "read a not found message from its hex representation" in {
+ val notFoundMessage = RawNotFoundMessageSerializer.read(hex)
+ notFoundMessage.inventoryCount must be(CompactSizeUInt(UInt64(2), 1))
+ notFoundMessage.inventories.size must be(2)
+ }
+
+ it must "write a not found message and get its original hex representation back" in {
+ val notFoundMessage = RawNotFoundMessageSerializer.read(hex)
+ RawNotFoundMessageSerializer.write(notFoundMessage).toHex must be(hex)
+ }
+
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala
new file mode 100644
index 0000000000..2919d0880f
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala
@@ -0,0 +1,26 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.util.BitcoinSUtil
+import org.bitcoins.testkit.node.NodeTestUtil
+import org.scalatest.{FlatSpec, MustMatchers}
+
+/**
+ * Created by chris on 6/2/16.
+ */
+class RawTransactionMessageSerializerTest extends FlatSpec with MustMatchers {
+
+ "RawTransactionMessageSerializer" must "read a TransactionMessage from a sequence of bytes" in {
+ val txMessage =
+ RawTransactionMessageSerializer.read(NodeTestUtil.rawTransaction)
+ txMessage.transaction.txId.hex must be(
+ BitcoinSUtil.flipEndianness(
+ "44e504f5b7649d215be05ad9f09026dee95201244a3b218013c504a6a49a26ff"))
+ }
+
+ it must "write a TransactionMessage to its hex format" in {
+ val txMessage =
+ RawTransactionMessageSerializer.read(NodeTestUtil.rawTransaction)
+ RawTransactionMessageSerializer.write(txMessage).toHex must be(
+ NodeTestUtil.rawTransaction)
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala b/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala
new file mode 100644
index 0000000000..c8cb2da7b4
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala
@@ -0,0 +1,80 @@
+package org.bitcoins.node.util
+
+import org.bitcoins.core.config.TestNet3
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.{Int32, UInt32, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil}
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages.HeadersMessage
+import org.bitcoins.node.messages.data.HeadersMessage
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages.HeadersMessage
+import org.bitcoins.node.messages.control.VersionMessage
+import org.bitcoins.node.messages.data.HeadersMessage
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+/**
+ * Created by chris on 9/6/16.
+ */
+class BitcoinSpvNodeUtilTest extends BitcoinSUnitTest {
+
+ "BitcoinSpvNodeUtil" must "return the entire byte array if a message is not aligned to a byte frame" in {
+ val versionMessage =
+ VersionMessage(TestNet3.dnsSeeds(0), Constants.networkParameters)
+ val networkMsg = NetworkMessage(Constants.networkParameters, versionMessage)
+ //remove last byte so the message is not aligned
+ val bytes = networkMsg.bytes.slice(0, networkMsg.bytes.size - 1)
+ val (_, unAlignedBytes) = BitcoinSpvNodeUtil.parseIndividualMessages(bytes)
+
+ unAlignedBytes must be(bytes)
+ }
+
+ it must "block header message that is not aligned with a tcp frame" in {
+
+ val headersMsg = HeadersMessage(
+ CompactSizeUInt(UInt64(2), 1),
+ Vector(
+ BlockHeader(
+ Int32(315017594),
+ DoubleSha256Digest(
+ "177e777f078d2deeaa3ad4b82e78a00ad2f4738c5217f7a36d9cf3bd11e41817"),
+ DoubleSha256Digest(
+ "1dcaebebd620823bb344bd18a18276de508910d66b4e3cbb3426a14eced66224"),
+ UInt32(2845833462L),
+ UInt32(2626024374L),
+ UInt32(2637850613L)
+ ),
+ BlockHeader(
+ Int32(1694049746),
+ DoubleSha256Digest(
+ "07b6d61809476830bc7ef862a983a7222997df3f639e0d2aa5902a5a48018430"),
+ DoubleSha256Digest(
+ "68c65f803b70b72563e86ac3e8e20ad11fbfa2eac3f9fddf4bc624d03a14f084"),
+ UInt32(202993555),
+ UInt32(4046619225L),
+ UInt32(1231236881)
+ )
+ )
+ )
+ val networkMsg = NetworkMessage(Constants.networkParameters, headersMsg)
+ //split the network msg at a random index to simulate a tcp frame not being aligned
+ val randomIndex = scala.util.Random.nextInt().abs % networkMsg.bytes.size
+ val (firstHalf, secondHalf) = networkMsg.bytes.splitAt(randomIndex)
+ val (firstHalfParseHeaders, remainingBytes) =
+ BitcoinSpvNodeUtil.parseIndividualMessages(firstHalf)
+ firstHalfParseHeaders.isEmpty must be(true)
+
+ val (secondHalfParsedHeaders, _) =
+ BitcoinSpvNodeUtil.parseIndividualMessages(remainingBytes ++ secondHalf)
+ val parsedNetworkMsg = secondHalfParsedHeaders.head
+ val parsedHeadersMsg = parsedNetworkMsg.payload.asInstanceOf[HeadersMessage]
+ parsedNetworkMsg.header must be(networkMsg.header)
+ parsedHeadersMsg.headers.head must be(headersMsg.headers.head)
+ parsedHeadersMsg.headers(1) must be(parsedHeadersMsg.headers(1))
+
+ }
+}
diff --git a/node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala b/node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala
new file mode 100644
index 0000000000..18aaaa15b2
--- /dev/null
+++ b/node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala
@@ -0,0 +1,10 @@
+package org.bitcoins.node.versions
+
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+class ProtocolVersionTest extends BitcoinSUnitTest {
+
+ "ProtocolVersion" must "give us the correct protocol version back from its hex format" in {
+ ProtocolVersion("72110100") must be(ProtocolVersion70002)
+ }
+}
diff --git a/node/LICENSE b/node/LICENSE
new file mode 100644
index 0000000000..c267b1bc5c
--- /dev/null
+++ b/node/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 scalacoin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node/README.md b/node/README.md
new file mode 100644
index 0000000000..aac2a775f4
--- /dev/null
+++ b/node/README.md
@@ -0,0 +1,16 @@
+# State of the world
+
+Currently this project is a heavy WIP. The most important files are
+
+- [`Client`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/Client.scala) - this handles all of the networking code. Currently this uses akka but the plan is to move away from akka in the future for compatability with other JVM based platforms
+- [`PeerMessageReceiver`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala) - this handles messages we receive on the p2p network. The only messages that are currently handled are `VerackMessage` and `VersionMessage`. As this project get's built out this is where we need to add code for calling other subsystems that handle transactions, blocks, peer related information etc. All messages are algebraic data types, so we can easily pattern match on them and implement features in `PeerMessageReceiver.handleControlPayload` and `PeerMessageReceiver.handleDataPayload`
+- [`PeerMessageReceiverState`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala) - the states that our peer message receiver can be in. It transitions through these states during the connect/disconnect process with our peer.
+- [`PeerMessageSender`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala) - this handles sending messages to our peer on the p2p network. Since we are lite client, we probably won't be sending a lot of messages to peers so this isn't that interesting.
+- [`PeerHandler`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala) - this combines a `PeerMessageReceiver` and a `PeerMessageSender` into a pair.
+- [`Peer`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/models/Peer.scala) - The low level socket details need to connect to a peer
+
+
+There is still a lot of code commented out on the project, but the unit tests should pass for the ones that are not. Interesting unit tests are
+
+- [`ClientTest`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala) - currently tests that we can connect with peers
+- [`PeerMessageHandlerTest`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala) - tests that we can get our node into the [`PeerMessageReceiverState.Normal`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala#L150) state. This means we can send / receive arbitrary messages from our peer.
diff --git a/node/doc/database_setup.md b/node/doc/database_setup.md
new file mode 100644
index 0000000000..515002df79
--- /dev/null
+++ b/node/doc/database_setup.md
@@ -0,0 +1,50 @@
+We use [Slick](http://slick.lightbend.com/) as our library for database bindings in bitcoins-spv-node. Slick offers numerous database bindings such as Postgres, MySQL, DB2 etc. Configuration for databases is specified inside of the [application.conf](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/resources/application.conf#L14-L63) file inside of src/main/resources. If you want to read more about the different configuration options for Slick the documentation is [here](http://slick.lightbend.com/doc/3.1.1/database.html).
+
+Currently we have 4 databases that need to be created for using our application:
+* bitcoins-spv-node
+* bitcoins-spv-node-testnet3
+* bitcoins-spv-node-regtest
+* bitcoins-spv-node-unit-test
+
+Note, that bitcoins-spv-node is for mainnet. Inside our codebase, we have a trait that represents a database binding called [DbConfig](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/scala/org/bitcoins/spvnode/constant/DbConfig.scala). This is passed around inside of our codebase to specify what database to use. It is best to just use [the configuration inside of Constants](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/scala/org/bitcoins/spvnode/constant/Constants.scala#L32) instead of passing around the objects inside of DbConfig. This eliminates the chance of having a situation where we have given the wrong database binding for the network we are currently on, for instance giving the TestNet3 database as an arguement when we are on mainnet.
+
+Here is an example of creating a table in a database.
+
+```scala
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.models.BlockHeaderTable
+import slick.driver.PostgresDriver.api._
+import scala.concurrent.Await
+import scala.concurrent.duration.DurationInt
+object Main extends App {
+ override def main(args : Array[String]) = {
+ val table = TableQuery[BlockHeaderTable]
+ val db = Constants.database
+ //creates the table in the database
+ Await.result(db.run(table.schema.create),3.seconds)
+ db.close()
+ }
+}
+```
+
+now if we wanted to drop that same table, we could use this snippet of code:
+
+```scala
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.models.BlockHeaderTable
+import slick.driver.PostgresDriver.api._
+import scala.concurrent.Await
+import scala.concurrent.duration.DurationInt
+object Main extends App {
+ override def main(args : Array[String]) = {
+ val table = TableQuery[BlockHeaderTable]
+ val db = Constants.database
+ //drops the table in the database
+ Await.result(db.run(table.schema.drop),3.seconds)
+ db.close()
+ }
+}
+```
+
+If you want to see how a table is actually represented in Slick, you can look at how we model our BlockHeaderTable, which stores all headers on the network, [here](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/scala/org/bitcoins/spvnode/models/BlockHeaderTable.scala). For documentation on creating schemas for tables in Slick, you can look [here](http://slick.lightbend.com/doc/3.1.1/schemas.html).
+
diff --git a/node/doc/header_sync.md b/node/doc/header_sync.md
new file mode 100644
index 0000000000..2f7888473e
--- /dev/null
+++ b/node/doc/header_sync.md
@@ -0,0 +1,61 @@
+### Syncing for the first time
+
+To start syncing our block headers, we need to indicate a header to start at. Currently our library only supports syncing from the beginning of time, aka the genesis block. We have some logic inside of our storage mechanisms to handle the case of seeding the database with the genesis header, then each new row added must reference the previous row in the database (thus forming a blockchain).
+
+Here is some example code to start syncing our spv node with all block headers on the network
+
+```scala
+package org.bitcoins.node
+
+import akka.actor.ActorRef
+import org.bitcoins.core.protocol.blockchain.TestNetChainParams
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.models.BlockHeaderTable
+import org.bitcoins.node.networking.sync.BlockHeaderSyncActor
+import slick.driver.PostgresDriver.api._
+
+import scala.concurrent.Await
+import scala.concurrent.duration.DurationInt
+/**
+ * Created by chris on 8/29/16.
+ */
+object Main extends App {
+ override def main(args : Array[String]) = {
+ //creates the 'block_headers' table, if it exists alread you can remove these 4 lines
+ val table = TableQuery[BlockHeaderTable]
+ val db = Constants.database
+ Await.result(Constants.database.run(table.schema.create),3.seconds)
+ db.close()
+
+ //create a BlockHeaderSyncActor
+ val blockHeaderSyncActor: ActorRef = BlockHeaderSyncActor(Constants.actorSystem, Constants.dbConfig, Constants.networkParameters)
+ val genesisBlockHash = TestNetChainParams.genesisBlock.blockHeader.hash
+ //indicates to start the header sync at the genesis hash
+ val startHeader = BlockHeaderSyncActor.StartHeaders(Seq(genesisBlockHash))
+ //send the block header sync actor a message indicating to start the sync
+ blockHeaderSyncActor ! startHeader
+ }
+}
+```
+
+You will start receiving block headers from a node on the peer to peer network, and those headers will be saved in persistent storage, for more information persistent storage read the [database doc](https://github.com/Christewart/bitcoin-s-spv-node/blob/database_documentation/doc/database_setup.md).
+
+### Syncing after being off for awhile
+
+Another scenario users can have is that they have powered down their node for awhile, and want to sync all blockheaders from the network to get the current state of the blockchain. You can do this with this code
+
+```scala
+package org.bitcoins.node
+
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.networking.sync.BlockHeaderSyncActor
+object Main extends App {
+ override def main(args : Array[String]) = {
+ val blockHeaderSyncActor = BlockHeaderSyncActor(Constants.actorSystem, Constants.dbConfig, Constants.networkParameters)
+ blockHeaderSyncActor ! BlockHeaderSyncActor.StartAtLastSavedHeader
+ }
+}
+```
+
+Once the sync is complete, your actor will receive a [BlockHeaderSyncActor.SuccessfulSyncReply](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/scala/org/bitcoins/spvnode/networking/sync/BlockHeaderSyncActor.scala#L244) message indicating the sync was successful.
+
diff --git a/node/project/Build.scala b/node/project/Build.scala
new file mode 100644
index 0000000000..750c796d1c
--- /dev/null
+++ b/node/project/Build.scala
@@ -0,0 +1,36 @@
+import sbt._
+import Keys._
+object BitcoinSSpvNodeBuild extends Build {
+
+ val appName = "bitcoins-spv-node"
+ val appV = "0.0.1"
+ val scalaV = "2.11.7"
+ val organization = "org.bitcoins.node"
+ val slf4jV = "1.7.5"
+ val logbackV = "1.0.13"
+ val akkaV = "2.4.7"
+ val slickV = "3.1.1"
+/* val appDependencies = Seq(
+ "org.scalatest" % "scalatest_2.11" % "2.2.0",
+ "com.typesafe.akka" %% "akka-actor" % akkaV withSources() withJavadoc(),
+ "com.typesafe.akka" %% "akka-testkit" % akkaV withSources() withJavadoc(),
+ "ch.qos.logback" % "logback-classic" % logbackV,
+ "joda-time" % "joda-time" % "2.9.4",
+ ("com.typesafe.akka" %% "akka-slf4j" % akkaV withSources() withJavadoc()).exclude("org.slf4j", "slf4j-api"),
+ "com.typesafe.slick" %% "slick" % slickV withSources() withJavadoc(),
+ "com.typesafe.slick" %% "slick-hikaricp" % "3.1.1",
+ "org.postgresql" % "postgresql" % "9.4.1210"
+ )*/
+
+ lazy val root = Project(appName, file(".")).settings(
+ version := appV,
+ scalaVersion := scalaV,
+ resolvers += Resolver.sonatypeRepo("releases"),
+ libraryDependencies ++= appDependencies,
+ scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature"),
+ mainClass := Some("org.bitcoins.node.Main"),
+ parallelExecution in Test := false,
+ //hints for testOptions config here: http://stackoverflow.com/questions/7237824/how-can-i-get-complete-stacktraces-for-exceptions-thrown-in-tests-when-using-sbt
+ testOptions in Test += Tests.Argument("-oF")
+ )
+}
diff --git a/node/src/main/resources/application.conf b/node/src/main/resources/application.conf
new file mode 100644
index 0000000000..ce9d8020e5
--- /dev/null
+++ b/node/src/main/resources/application.conf
@@ -0,0 +1,25 @@
+bitcoin-s {
+ network = regtest
+}
+
+akka {
+ loglevel = "OFF"
+
+ # Log the complete configuration at INFO level when the actor system is started.
+ # This is useful when you are uncertain of what configuration is used.
+ # log-config-on-start = on
+
+ actor {
+ debug {
+ # enable function of LoggingReceive, which is to log any received message at
+ # DEBUG level
+ receive = on
+
+ # enable DEBUG logging of unhandled messages
+ unhandled = on
+
+ # enable DEBUG logging of all LoggingFSMs for events, transitions and timers
+ fsm = on
+ }
+ }
+}
diff --git a/node/src/main/resources/logback.xml b/node/src/main/resources/logback.xml
new file mode 100644
index 0000000000..a84a24c11d
--- /dev/null
+++ b/node/src/main/resources/logback.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/node/src/main/resources/node.conf b/node/src/main/resources/node.conf
new file mode 100644
index 0000000000..c8ee57d6e7
--- /dev/null
+++ b/node/src/main/resources/node.conf
@@ -0,0 +1,5 @@
+bitcoin-s {
+ database {
+ name = "nodedb.sqlite"
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/Main.scala b/node/src/main/scala/org/bitcoins/node/Main.scala
new file mode 100644
index 0000000000..9c99a943d9
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/Main.scala
@@ -0,0 +1,55 @@
+package org.bitcoins.node
+
+import java.net.{InetAddress, InetSocketAddress}
+
+import org.bitcoins.chain.blockchain.ChainHandler
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderTable}
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.config.NodeAppConfig
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.models.Peer
+import org.bitcoins.node.util.NetworkIpAddress
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.concurrent._
+import scala.concurrent.duration._
+import scala.util.{Failure, Success}
+
+object Main extends App with BitcoinSLogger {
+ implicit val system = Constants.actorSystem
+ import system.dispatcher
+
+ implicit val appconfig = NodeAppConfig()
+ implicit val chainAppConfig = ChainAppConfig()
+ logger.info(s"Chain config: ${chainAppConfig.dbConfig.config}")
+
+ val bhDAO = BlockHeaderDAO(chainAppConfig)
+ val chainApi = ChainHandler(bhDAO, chainAppConfig)
+ val table = TableQuery[BlockHeaderTable]
+
+ logger.info(s"Creating block header table")
+
+ val chainInitF = chainAppConfig.initialize
+ Await.result(chainInitF, 3.seconds)
+ logger.info(s"Creating block header table: done")
+
+ val socket = new InetSocketAddress(InetAddress.getLoopbackAddress, 18333)
+ val nip = NetworkIpAddress.fromInetSocketAddress(socket)
+ val peer = Peer(nip)
+
+ logger.info(s"Starting spv node")
+ val spvNodeF = SpvNode(peer, chainApi).start()
+
+ logger.info(s"Starting SPV node sync")
+ spvNodeF.map { spvNode =>
+ spvNode.sync().onComplete {
+ case Failure(exception) =>
+ logger.error(s"Could not sync SPV node!")
+ exception.printStackTrace()
+ sys.exit(1)
+ case Success(_) =>
+ logger.info(s"Started syncing SPV node successfully")
+ }
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/NetworkMessage.scala b/node/src/main/scala/org/bitcoins/node/NetworkMessage.scala
new file mode 100644
index 0000000000..023bbd48a0
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/NetworkMessage.scala
@@ -0,0 +1,55 @@
+package org.bitcoins.node
+
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.protocol.NetworkElement
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.headers.NetworkHeader
+import org.bitcoins.node.messages.NetworkPayload
+import org.bitcoins.node.serializers.RawNetworkMessageSerializer
+import org.bitcoins.node.headers.NetworkHeader
+import org.bitcoins.node.messages.NetworkPayload
+import org.bitcoins.node.serializers.RawNetworkMessageSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/10/16.
+ * Represents an entire p2p network message in bitcoins
+ */
+sealed abstract class NetworkMessage extends NetworkElement {
+ def header: NetworkHeader
+ def payload: NetworkPayload
+ override def bytes: ByteVector = RawNetworkMessageSerializer.write(this)
+}
+
+object NetworkMessage extends Factory[NetworkMessage] {
+ private case class NetworkMessageImpl(
+ header: NetworkHeader,
+ payload: NetworkPayload)
+ extends NetworkMessage
+
+ def fromBytes(bytes: ByteVector): NetworkMessage =
+ RawNetworkMessageSerializer.read(bytes)
+
+ /**
+ * Creates a network message from it's [[NetworkHeader]] and [[NetworkPayload]]
+ * @param header the [[NetworkHeader]] which is being sent across the network
+ * @param payload the [[NetworkPayload]] which contains the information being sent across the network
+ * @return
+ */
+ def apply(header: NetworkHeader, payload: NetworkPayload): NetworkMessage = {
+ NetworkMessageImpl(header, payload)
+ }
+
+ /**
+ * Creates a [[NetworkMessage]] out of it's [[NetworkPayload]]
+ * @param network the [[NetworkParameters]] indicating the network which the message is going to be sent on
+ * @param payload the payload that needs to be sent across the network
+ * @return
+ */
+ def apply(
+ network: NetworkParameters,
+ payload: NetworkPayload): NetworkMessage = {
+ val header = NetworkHeader(network, payload)
+ NetworkMessage(header, payload)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/SpvNode.scala b/node/src/main/scala/org/bitcoins/node/SpvNode.scala
new file mode 100644
index 0000000000..e9333ed038
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/SpvNode.scala
@@ -0,0 +1,84 @@
+package org.bitcoins.node
+
+import akka.actor.ActorSystem
+import org.bitcoins.chain.api.ChainApi
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.config.NodeAppConfig
+import org.bitcoins.node.models.Peer
+import org.bitcoins.node.networking.Client
+import org.bitcoins.node.networking.peer.{
+ PeerMessageReceiver,
+ PeerMessageSender
+}
+import org.bitcoins.rpc.util.AsyncUtil
+
+import scala.concurrent.Future
+
+case class SpvNode(peer: Peer, chainApi: ChainApi)(
+ implicit system: ActorSystem,
+ nodeAppConfig: NodeAppConfig,
+ chainAppConfig: ChainAppConfig)
+ extends BitcoinSLogger {
+ import system.dispatcher
+
+ private val peerMsgRecv =
+ PeerMessageReceiver.newReceiver(nodeAppConfig, chainAppConfig)
+
+ private val client: Client =
+ Client(context = system, peer = peer, peerMessageReceiver = peerMsgRecv)
+
+ private val peerMsgSender: PeerMessageSender = {
+ PeerMessageSender(client, nodeAppConfig.network)
+ }
+
+ /** Starts our spv node */
+ def start(): Future[SpvNode] = {
+ peerMsgSender.connect()
+
+ val isInitializedF =
+ AsyncUtil.retryUntilSatisfied(peerMsgRecv.isInitialized)
+
+ isInitializedF.map { _ =>
+ logger.info(s"Our peer=${peer} has been initialized")
+ }
+
+ isInitializedF.failed.foreach { err =>
+ logger.error(s"Failed to conenct with peer=$peer with err=${err}")
+
+ }
+
+ isInitializedF.map(_ => this)
+ }
+
+ /** Stops our spv node */
+ def stop(): Future[SpvNode] = {
+ peerMsgSender.disconnect()
+
+ val isStoppedF = AsyncUtil.retryUntilSatisfied(peerMsgRecv.isDisconnected)
+
+ isStoppedF.map(_ => this)
+ }
+
+ /** Checks if we have a tcp connection with our peer */
+ def isConnected: Boolean = peerMsgRecv.isConnected
+
+ /** Checks if we are fully initialized with our peer and have executed the handshake
+ * This means we can now send arbitrary messages to our peer
+ * @return
+ */
+ def isInitialized: Boolean = peerMsgRecv.isInitialized
+
+ /** Starts to sync our spv node with our peer
+ * If our local best block hash is the same as our peers
+ * we will not sync, otherwise we will keep syncing
+ * until our best block hashes match up
+ * @return
+ */
+ def sync(): Future[Unit] = {
+ chainApi.getBestBlockHash.map { hashBE: DoubleSha256DigestBE =>
+ peerMsgSender.sendGetHeadersMessage(hashBE.flip)
+ }
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/config/NodeAppConfig.scala b/node/src/main/scala/org/bitcoins/node/config/NodeAppConfig.scala
new file mode 100644
index 0000000000..2f188c2405
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/config/NodeAppConfig.scala
@@ -0,0 +1,13 @@
+package org.bitcoins.node.config
+
+import com.typesafe.config.Config
+import org.bitcoins.db.AppConfig
+
+case class NodeAppConfig(confs: Config*) extends AppConfig {
+ override val configOverrides: List[Config] = confs.toList
+ override protected def moduleConfigName: String = "node.conf"
+ override protected type ConfigType = NodeAppConfig
+ override protected def newConfigOfType(configs: List[Config]): NodeAppConfig =
+ NodeAppConfig(configs: _*)
+
+}
diff --git a/node/src/main/scala/org/bitcoins/node/constant/Constants.scala b/node/src/main/scala/org/bitcoins/node/constant/Constants.scala
new file mode 100644
index 0000000000..11b591663f
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/constant/Constants.scala
@@ -0,0 +1,43 @@
+package org.bitcoins.node.constant
+
+import akka.actor.ActorSystem
+import org.bitcoins.core.config.{MainNet, NetworkParameters, RegTest, TestNet3}
+import org.bitcoins.core.protocol.blockchain.{
+ ChainParams,
+ MainNetChainParams,
+ RegTestNetChainParams,
+ TestNetChainParams
+}
+import org.bitcoins.node.config.NodeAppConfig
+import org.bitcoins.node.versions.ProtocolVersion70013
+import slick.jdbc.PostgresProfile.api._
+
+import scala.concurrent.duration.DurationInt
+
+case object Constants {
+ lazy val actorSystem = ActorSystem("BitcoinSpvNode")
+ def networkParameters: NetworkParameters = appConfig.network
+ def version = ProtocolVersion70013
+
+ def timeout = 5.seconds
+ def userAgent = "/bitcoins-spv-node/0.0.1"
+
+ /** This is the file where our block headers are stored */
+ def blockHeaderFile = new java.io.File("src/main/resources/block_headers.dat")
+
+ lazy val appConfig: NodeAppConfig = NodeAppConfig()
+
+ /** The [[ChainParams]] for the blockchain we are currently connected to */
+ def chainParams: ChainParams = networkParameters match {
+ case MainNet => MainNetChainParams
+ case TestNet3 => TestNetChainParams
+ case RegTest => RegTestNetChainParams
+ }
+
+ /** This is the database we are currently bound to, this
+ * should be the database that stores information corresponding to the network
+ * we are currently connected to inside of the [[networkParameters]] function
+ * @return
+ */
+ def database: Database = appConfig.database
+}
diff --git a/node/src/main/scala/org/bitcoins/node/db/NodeDbManagement.scala b/node/src/main/scala/org/bitcoins/node/db/NodeDbManagement.scala
new file mode 100644
index 0000000000..fde0bdc9af
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/db/NodeDbManagement.scala
@@ -0,0 +1,8 @@
+package org.bitcoins.node.db
+
+import org.bitcoins.db.DbManagement
+
+object NodeDbManagement extends DbManagement {
+
+ override val allTables = List.empty
+}
diff --git a/node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala b/node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala
new file mode 100644
index 0000000000..f90f4d18b9
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala
@@ -0,0 +1,102 @@
+package org.bitcoins.node.headers
+
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.NetworkElement
+import org.bitcoins.core.util.{CryptoUtil, Factory}
+import org.bitcoins.node.messages.NetworkPayload
+import org.bitcoins.node.serializers.headers.RawNetworkHeaderSerializer
+import org.bitcoins.node.messages.NetworkPayload
+import org.bitcoins.node.serializers.headers.RawNetworkHeaderSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 5/31/16.
+ * Represents a message header on the peer-to-peer network
+ * https://bitcoin.org/en/developer-reference#message-headers
+ */
+sealed trait NetworkHeader extends NetworkElement {
+
+ override def bytes: ByteVector = RawNetworkHeaderSerializer.write(this)
+
+ /**
+ * Magic bytes indicating the originating network;
+ * used to seek to next message when stream state is unknown.
+ * @return
+ */
+ def network: ByteVector
+
+ /**
+ * ASCII string which identifies what message type is contained in the payload.
+ * Followed by nulls (0x00) to pad out byte count; for example: version\0\0\0\0\0.
+ *
+ * @return
+ */
+ def commandName: String
+
+ /**
+ * Number of bytes in payload. The current maximum number of bytes (MAX_SIZE) allowed in the payload
+ * by Bitcoin Core is 32 MiB—messages with a payload size larger than this will be dropped or rejected.
+ *
+ * @return
+ */
+ def payloadSize: UInt32
+
+ /**
+ * Added in protocol version 209.
+ * First 4 bytes of SHA256(SHA256(payload)) in internal byte order.
+ * If payload is empty, as in verack and getaddr messages,
+ * the checksum is always 0x5df6e0e2 (SHA256(SHA256(""))).
+ *
+ * @return
+ */
+ def checksum: ByteVector
+
+}
+
+object NetworkHeader extends Factory[NetworkHeader] {
+
+ private case class NetworkHeaderImpl(
+ network: ByteVector,
+ commandName: String,
+ payloadSize: UInt32,
+ checksum: ByteVector)
+ extends NetworkHeader {
+ require(bytes.length == 24, "NetworkHeaders must be 24 bytes")
+ }
+
+ override def fromBytes(bytes: ByteVector): NetworkHeader =
+ RawNetworkHeaderSerializer.read(bytes)
+
+ /**
+ * Creates a [[NetworkHeader]] from all of its individual components
+ * @param network the [[NetworkParameters]] object indicating what network this header is sent on
+ * @param commandName the name of the command being sent in the header
+ * @param payloadSize the size of the payload being sent by this header
+ * @param checksum the checksum of the payload to ensure that the entire payload was sent
+ * @return
+ */
+ def apply(
+ network: ByteVector,
+ commandName: String,
+ payloadSize: UInt32,
+ checksum: ByteVector): NetworkHeader = {
+ NetworkHeaderImpl(network, commandName, payloadSize, checksum)
+ }
+
+ /**
+ * Creates a [[NetworkHeader]] from it's [[NetworkParameters]] and [[NetworkPayload]]
+ * @param network the [[NetworkParameters]] object that indicates what network the payload needs to be sent on
+ * @param payload the [[NetworkPayload]] object that needs to be sent on the network
+ * @return
+ */
+ def apply(
+ network: NetworkParameters,
+ payload: NetworkPayload): NetworkHeader = {
+ val checksum = CryptoUtil.doubleSHA256(payload.bytes)
+ NetworkHeader(network.magicBytes,
+ payload.commandName,
+ UInt32(payload.bytes.size),
+ checksum.bytes.take(4))
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala b/node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala
new file mode 100644
index 0000000000..f804e962af
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala
@@ -0,0 +1,714 @@
+package org.bitcoins.node.messages
+
+import java.net.InetAddress
+
+import org.bitcoins.core.bloom.BloomFilter
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.{Int32, Int64, UInt64}
+import org.bitcoins.core.protocol.blockchain.{Block, BlockHeader, MerkleBlock}
+import org.bitcoins.core.protocol.transaction.Transaction
+import org.bitcoins.core.protocol.{CompactSizeUInt, NetworkElement}
+import org.bitcoins.core.util.BitcoinSUtil
+import org.bitcoins.core.wallet.fee.{SatoshisPerByte, SatoshisPerKiloByte}
+import org.bitcoins.node.headers.NetworkHeader
+import org.bitcoins.node.messages.control.ServiceIdentifier
+import org.bitcoins.node.messages.data.Inventory
+import org.bitcoins.node.serializers.messages.control._
+import org.bitcoins.node.serializers.messages.data._
+import org.bitcoins.node.util.NetworkIpAddress
+import org.bitcoins.node.versions.ProtocolVersion
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 5/31/16.
+ * Trait that represents a payload for a message on the Bitcoin p2p network
+ * [[https://bitcoin.org/en/developer-reference#p2p-network]]
+ */
+sealed trait NetworkPayload extends NetworkElement {
+
+ /**
+ * ASCII string which identifies what message type is contained in the payload.
+ * Followed by nulls (0x00) to pad out byte count; for example: version\0\0\0\0\0.
+ * Command names need to be 12 bytes long
+ * This is generally used to build a [[org.bitcoins.node.headers.NetworkHeader]]
+ * @return
+ */
+ def commandName: String
+}
+
+/**
+ * Represents a data message inside of bitcoin core
+ * [[https://bitcoin.org/en/developer-reference#data-messages]]
+ */
+sealed trait DataPayload extends NetworkPayload
+
+/**
+ * The block message transmits a single serialized block
+ * [[https://bitcoin.org/en/developer-reference#block]]
+ */
+trait BlockMessage extends DataPayload {
+
+ /**
+ * The block being transmitted inside of this [[BlockMessage]]
+ * @return
+ */
+ def block: Block
+
+ override def commandName = NetworkPayload.blockCommandName
+
+ override def bytes: ByteVector = RawBlockMessageSerializer.write(this)
+}
+
+/**
+ * The getblocks message requests an inv message that provides block header hashes
+ * starting from a particular point in the block chain.
+ * It allows a peer which has been disconnected or started for the first time to get the data
+ * it needs to request the blocks it hasn’t seen.
+ * [[https://bitcoin.org/en/developer-reference#getblocks]]
+ */
+trait GetBlocksMessage extends DataPayload {
+
+ /**
+ * The protocol version number; the same as sent in the version message.
+ * @return
+ */
+ def protocolVersion: ProtocolVersion
+
+ /**
+ * The number of header hashes provided not including the stop hash.
+ * There is no limit except that the byte size of the entire message
+ * must be below the MAX_SIZE limit; typically from 1 to 200 hashes are sent.
+ * @return
+ */
+ def hashCount: CompactSizeUInt
+
+ /**
+ * One or more block header hashes (32 bytes each) in internal byte order.
+ * Hashes should be provided in reverse order of block height,
+ * so highest-height hashes are listed first and lowest-height hashes are listed last.
+ * @return
+ */
+ def blockHeaderHashes: Seq[DoubleSha256Digest]
+
+ /**
+ * The header hash of the last header hash being requested;
+ * set to all zeroes to request an inv message with all subsequent
+ * header hashes (a maximum of 500 will be sent as a reply to this message;
+ * if you need more than 500, you will need to send another getblocks message
+ * with a higher-height header hash as the first entry in block header hash field).
+ * @return
+ */
+ def stopHash: DoubleSha256Digest
+
+ override def commandName = NetworkPayload.getBlocksCommandName
+
+ override def bytes: ByteVector = RawGetBlocksMessageSerializer.write(this)
+}
+
+/**
+ * The getdata message requests one or more data objects from another node.
+ * The objects are requested by an inventory,
+ * which the requesting node typically previously received by way of an inv message.
+ * [[https://bitcoin.org/en/developer-reference#getdata]]
+ */
+trait GetDataMessage extends DataPayload {
+
+ /**
+ * The number of inventory enteries
+ * @return
+ */
+ def inventoryCount: CompactSizeUInt
+
+ /**
+ * One or more inventory entries up to a maximum of 50,000 entries.
+ * @return
+ */
+ def inventories: Seq[Inventory]
+
+ override def commandName = NetworkPayload.getDataCommandName
+
+ override def bytes: ByteVector = RawGetDataMessageSerializer.write(this)
+}
+
+/**
+ * The getheaders message requests a headers message that provides block headers starting
+ * from a particular point in the block chain.
+ * It allows a peer which has been disconnected or started for the first time to get the
+ * headers it hasn’t seen yet.
+ * @see [[https://bitcoin.org/en/developer-reference#getheaders]]
+ */
+trait GetHeadersMessage extends DataPayload {
+ def version: ProtocolVersion
+ def hashCount: CompactSizeUInt
+ def hashes: Seq[DoubleSha256Digest]
+ def hashStop: DoubleSha256Digest
+
+ override def commandName = NetworkPayload.getHeadersCommandName
+ override def bytes: ByteVector = RawGetHeadersMessageSerializer.write(this)
+}
+
+/**
+ * The headers message sends one or more block headers to a node
+ * which previously requested certain headers with a getheaders message.
+ * [[https://bitcoin.org/en/developer-reference#headers]]
+ */
+trait HeadersMessage extends DataPayload {
+
+ /**
+ * Number of block headers up to a maximum of 2,000.
+ * Note: headers-first sync assumes the sending node
+ * will send the maximum number of headers whenever possible.
+ * @return
+ */
+ def count: CompactSizeUInt
+
+ /**
+ * Block headers: each 80-byte block header is in the format described in the
+ * block headers section with an additional 0x00 suffixed.
+ * This 0x00 is called the transaction count, but because the headers message
+ * doesn’t include any transactions, the transaction count is always zero.
+ * @return
+ */
+ def headers: Vector[BlockHeader]
+
+ override def commandName = NetworkPayload.headersCommandName
+
+ override def bytes: ByteVector = RawHeadersMessageSerializer.write(this)
+}
+
+/**
+ * The inv message (inventory message) transmits one or more inventories of objects known to the transmitting peer.
+ * It can be sent unsolicited to announce new transactions or blocks,
+ * or it can be sent in reply to a getblocks message or mempool message.
+ * [[https://bitcoin.org/en/developer-reference#inv]]
+ */
+trait InventoryMessage extends DataPayload {
+
+ /**
+ * The number of inventory enteries
+ * @return
+ */
+ def inventoryCount: CompactSizeUInt
+
+ /**
+ * One or more inventory entries up to a maximum of 50,000 entries.
+ * @return
+ */
+ def inventories: Seq[Inventory]
+
+ override def commandName = NetworkPayload.invCommandName
+
+ override def bytes: ByteVector = RawInventoryMessageSerializer.write(this)
+}
+
+/**
+ * The mempool message requests the TXIDs of transactions that the receiving node has verified
+ * as valid but which have not yet appeared in a block.
+ * That is, transactions which are in the receiving node’s memory pool.
+ * The response to the mempool message is one or more inv messages containing the TXIDs in the usual inventory format.
+ * [[https://bitcoin.org/en/developer-reference#mempool]]
+ */
+case object MemPoolMessage extends DataPayload {
+ override val commandName = NetworkPayload.memPoolCommandName
+ override val bytes: ByteVector = ByteVector.empty
+}
+
+/**
+ * The merkleblock message is a reply to a getdata message which requested a
+ * block using the inventory type MSG_MERKLEBLOCK.
+ * It is only part of the reply: if any matching transactions are found,
+ * they will be sent separately as tx messages.
+ * [[https://bitcoin.org/en/developer-reference#merkleblock]]
+ */
+trait MerkleBlockMessage extends DataPayload {
+
+ /** The actual [[MerkleBlock]] that this message represents */
+ def merkleBlock: MerkleBlock
+
+ override def commandName = NetworkPayload.merkleBlockCommandName
+
+ def bytes: ByteVector = RawMerkleBlockMessageSerializer.write(this)
+
+}
+
+/**
+ * The notfound message is a reply to a getdata message which requested an object the receiving
+ * node does not have available for relay. (Nodes are not expected to relay historic transactions
+ * which are no longer in the memory pool or relay set.
+ * Nodes may also have pruned spent transactions from older blocks, making them unable to send those blocks.)
+ * [[https://bitcoin.org/en/developer-reference#notfound]]
+ */
+trait NotFoundMessage extends DataPayload with InventoryMessage {
+ override def commandName = NetworkPayload.notFoundCommandName
+ override def bytes: ByteVector = RawNotFoundMessageSerializer.write(this)
+}
+
+/**
+ * The tx message transmits a single transaction in the raw transaction format.
+ * It can be sent in a variety of situations;
+ * [[https://bitcoin.org/en/developer-reference#tx]]
+ */
+trait TransactionMessage extends DataPayload {
+
+ /**
+ * The transaction being sent over the wire
+ * @return
+ */
+ def transaction: Transaction
+ override def commandName = NetworkPayload.transactionCommandName
+ override def bytes: ByteVector = RawTransactionMessageSerializer.write(this)
+}
+
+/**
+ * Represents a control message on this network
+ * [[https://bitcoin.org/en/developer-reference#control-messages]]
+ */
+sealed trait ControlPayload extends NetworkPayload
+
+/**
+ * The addr (IP address) message relays connection information for peers on the network.
+ * Each peer which wants to accept incoming connections creates an addr message providing its
+ * connection information and then sends that message to its peers unsolicited.
+ * Some of its peers send that information to their peers (also unsolicited),
+ * some of which further distribute it, allowing decentralized peer discovery for
+ * any program already on the network.
+ * [[https://bitcoin.org/en/developer-reference#addr]]
+ */
+trait AddrMessage extends ControlPayload {
+ def ipCount: CompactSizeUInt
+ def addresses: Seq[NetworkIpAddress]
+ override def commandName = NetworkPayload.addrCommandName
+ override def bytes: ByteVector = RawAddrMessageSerializer.write(this)
+}
+
+/**
+ * The feefilter message is a request to the receiving peer to not relay any transaction inv messages
+ * to the sending peer where the fee rate for the transaction is below the fee rate specified in the
+ * feefilter message.
+ *
+ * feefilter was introduced in Bitcoin Core 0.13.0 following the introduction of mempool limiting in
+ * Bitcoin Core 0.12.0. Mempool limiting provides protection against attacks and spam transactions
+ * that have low fee rates and are unlikely to be included in mined blocks. The feefilter messages
+ * allows a node to inform its peers that it will not accept transactions below a specified fee rate
+ * into its mempool, and therefore that the peers can skip relaying inv messages for transactions below
+ * that fee rate to that node.
+ */
+trait FeeFilterMessage extends ControlPayload {
+
+ /** The raw fee rate, in satoshis per kb. This is what is defined in the p2p message */
+ def feeRate: SatoshisPerKiloByte
+
+ def satPerByte: SatoshisPerByte = {
+ feeRate.toSatPerByte
+ }
+
+ override def commandName: String = NetworkPayload.feeFilterCommandName
+
+ override def bytes: ByteVector = {
+ RawFeeFilterMessageSerializer.write(this)
+ }
+}
+
+/**
+ * The filteradd message tells the receiving peer to add a single element to a
+ * previously-set bloom filter, such as a new public key.
+ * The element is sent directly to the receiving peer; the peer then uses the parameters
+ * set in the filterload message to add the element to the bloom filter.
+ * [[https://bitcoin.org/en/developer-reference#filteradd]]
+ */
+trait FilterAddMessage extends ControlPayload {
+
+ /**
+ * The number of bytes in the following element field.
+ * @return
+ */
+ def elementSize: CompactSizeUInt
+
+ /**
+ * The element to add to the current filter.
+ * Maximum of 520 bytes, which is the maximum size of an element which can be pushed
+ * onto the stack in a pubkey or signature script.
+ * Elements must be sent in the byte order they would use when appearing in a raw transaction;
+ * for example, hashes should be sent in internal byte order.
+ * @return
+ */
+ def element: ByteVector
+
+ override def commandName = NetworkPayload.filterAddCommandName
+
+ override def bytes: ByteVector = RawFilterAddMessageSerializer.write(this)
+}
+
+/**
+ * The filterclear message tells the receiving peer to remove a previously-set bloom filter.
+ * This also undoes the effect of setting the relay field in the version message to 0,
+ * allowing unfiltered access to inv messages announcing new transactions.
+ * [[https://bitcoin.org/en/developer-reference#filterclear]]
+ */
+case object FilterClearMessage extends ControlPayload {
+ override val commandName = NetworkPayload.filterClearCommandName
+ override val bytes: ByteVector = ByteVector.empty
+}
+
+/**
+ * The filterload message tells the receiving peer to filter all relayed transactions and
+ * requested merkle blocks through the provided filter.
+ * This allows clients to receive transactions relevant to their wallet plus a configurable
+ * rate of false positive transactions which can provide plausible-deniability privacy.
+ * [[https://bitcoin.org/en/developer-reference#filterload]]
+ */
+trait FilterLoadMessage extends ControlPayload {
+
+ /** The underlying bloom filter inside of the FilterLoadMessage */
+ def bloomFilter: BloomFilter
+
+ override def commandName = NetworkPayload.filterLoadCommandName
+
+ override def bytes: ByteVector = RawFilterLoadMessageSerializer.write(this)
+}
+
+/**
+ * The getaddr message requests an addr message from the receiving node,
+ * preferably one with lots of IP addresses of other receiving nodes.
+ * The transmitting node can use those IP addresses to quickly update its
+ * database of available nodes rather than waiting for unsolicited addr messages to arrive over time.
+ * [[https://bitcoin.org/en/developer-reference#getaddr]]
+ */
+case object GetAddrMessage extends ControlPayload {
+ override val commandName = NetworkPayload.getAddrCommandName
+ override val bytes: ByteVector = ByteVector.empty
+}
+
+/**
+ * The ping message helps confirm that the receiving peer is still connected.
+ * If a TCP/IP error is encountered when sending the ping message (such as a connection timeout),
+ * the transmitting node can assume that the receiving node is disconnected.
+ * The response to a ping message is the pong message.
+ * [[https://bitcoin.org/en/developer-reference#ping]]
+ */
+trait PingMessage extends ControlPayload {
+
+ /**
+ * Random nonce assigned to this ping message.
+ * The responding pong message will include this nonce
+ * to identify the ping message to which it is replying.
+ * @return
+ */
+ def nonce: UInt64
+
+ override def commandName = NetworkPayload.pingCommandName
+
+ override def bytes: ByteVector = RawPingMessageSerializer.write(this)
+}
+
+/**
+ * The pong message replies to a ping message, proving to the pinging node that the ponging node is still alive.
+ * Bitcoin Core will, by default, disconnect from any clients which have not responded
+ * to a ping message within 20 minutes.
+ * [[https://bitcoin.org/en/developer-reference#pong]]
+ */
+trait PongMessage extends ControlPayload {
+
+ /**
+ * The nonce which is the nonce in the ping message the peer is responding too
+ * @return
+ */
+ def nonce: UInt64
+
+ override def commandName = NetworkPayload.pongCommandName
+
+ override def bytes: ByteVector = RawPongMessageSerializer.write(this)
+
+}
+
+/**
+ * The reject message informs the receiving node that one of its previous messages has been rejected.
+ * [[https://bitcoin.org/en/developer-reference#reject]]
+ */
+trait RejectMessage extends ControlPayload {
+
+ /**
+ * The number of bytes in the following message field.
+ * @return
+ */
+ def messageSize: CompactSizeUInt
+
+ /**
+ * The type of message rejected as ASCII text without null padding.
+ * For example: “tx”, “block”, or “version”.
+ * @return
+ */
+ def message: String
+
+ /**
+ * The reject message code.
+ * @return
+ */
+ def code: Char
+
+ /**
+ * The number of bytes in the following reason field.
+ * May be 0x00 if a text reason isn’t provided.
+ * @return
+ */
+ def reasonSize: CompactSizeUInt
+
+ /**
+ * The reason for the rejection in ASCII text.
+ * This should not be displayed to the user; it is only for debugging purposes.
+ * @return
+ */
+ def reason: String
+
+ /**
+ * Optional additional data provided with the rejection.
+ * For example, most rejections of tx messages or block messages include
+ * the hash of the rejected transaction or block header. See the code table below.
+ * @return
+ */
+ def extra: ByteVector
+
+ override def commandName = NetworkPayload.rejectCommandName
+
+ override def bytes: ByteVector = RawRejectMessageSerializer.write(this)
+}
+
+/**
+ * The sendheaders message tells the receiving peer to send new block announcements
+ * using a headers message rather than an inv message.
+ * There is no payload in a sendheaders message. See the message header section for an example
+ * of a message without a payload.
+ * [[https://bitcoin.org/en/developer-reference#sendheaders]]
+ */
+case object SendHeadersMessage extends ControlPayload {
+ override def commandName = NetworkPayload.sendHeadersCommandName
+ override def bytes: ByteVector = ByteVector.empty
+}
+
+/**
+ * The verack message acknowledges a previously-received version message,
+ * informing the connecting node that it can begin to send other messages.
+ * The verack message has no payload; for an example of a message with no payload,
+ * see the message headers section.
+ * [[https://bitcoin.org/en/developer-reference#verack]]
+ */
+case object VerAckMessage extends ControlPayload {
+ override val commandName = NetworkPayload.verAckCommandName
+ override val bytes: ByteVector = ByteVector.empty
+}
+
+/**
+ * The version message provides information about the transmitting node to the
+ * receiving node at the beginning of a connection.
+ * Until both peers have exchanged version messages, no other messages will be accepted.
+ * If a version message is accepted, the receiving node should send a verack message—but
+ * no node should send a verack message before initializing its half of the connection
+ * by first sending a version message.
+ * [[https://bitcoin.org/en/developer-reference#version]]
+ */
+trait VersionMessage extends ControlPayload {
+
+ /**
+ * The highest protocol version understood by the transmitting node. See the protocol version section.
+ * @return
+ */
+ def version: ProtocolVersion
+
+ /**
+ * The services supported by the transmitting node encoded as a bitfield. See the list of service codes below.
+ * @return
+ */
+ def services: ServiceIdentifier
+
+ /**
+ * The current Unix epoch time according to the transmitting node’s clock.
+ * Because nodes will reject blocks with timestamps more than two hours in the future,
+ * this field can help other nodes to determine that their clock is wrong.
+ * @return
+ */
+ def timestamp: Int64
+
+ /**
+ * The services supported by the receiving node as perceived by the transmitting node.
+ * Same format as the ‘services’ field above.
+ * Bitcoin Core will attempt to provide accurate information. BitcoinJ will, by default, always send 0.
+ * @return
+ */
+ def addressReceiveServices: ServiceIdentifier
+
+ /**
+ * The IPv6 address of the receiving node as perceived by the transmitting node in big endian byte order.
+ * IPv4 addresses can be provided as IPv4-mapped IPv6 addresses.
+ * Bitcoin Core will attempt to provide accurate information
+ * BitcoinJ will, by default, always return ::ffff:127.0.0.1
+ * This is the network address of the node receiving this message
+ */
+ def addressReceiveIpAddress: InetAddress
+
+ /**
+ * The port number of the receiving node as perceived by the transmitting node in big endian byte order.
+ * @return
+ */
+ def addressReceivePort: Int
+
+ /**
+ * The services supported by the transmitting node. Should be identical to the ‘services’ field above.
+ * @return
+ */
+ def addressTransServices: ServiceIdentifier
+
+ /**
+ * The IPv6 address of the transmitting node in big endian byte order.
+ * IPv4 addresses can be provided as IPv4-mapped IPv6 addresses.
+ * Set to ::ffff:127.0.0.1 if unknown.
+ * This is the network address of the node emitting this message
+ * @return
+ */
+ def addressTransIpAddress: InetAddress
+
+ /**
+ * The port number of the transmitting node in big endian byte order.
+ * @return
+ */
+ def addressTransPort: Int
+
+ /**
+ * A random nonce which can help a node detect a connection to itself.
+ * If the nonce is 0, the nonce field is ignored.
+ * If the nonce is anything else, a node should terminate the connection on receipt
+ * of a version message with a nonce it previously sent.
+ * @return
+ */
+ def nonce: UInt64
+
+ /**
+ * Number of bytes in following user_agent field. If 0x00, no user agent field is sent.
+ * @return
+ */
+ def userAgentSize: CompactSizeUInt
+
+ /**
+ * User agent as defined by BIP14. Previously called subVer.
+ * @return
+ */
+ def userAgent: String
+
+ /**
+ * The height of the transmitting node’s best block chain or,
+ * in the case of an SPV client, best block header chain.
+ * @return
+ */
+ def startHeight: Int32
+
+ /**
+ * Transaction relay flag. If 0x00, no inv messages or tx messages announcing new transactions
+ * should be sent to this client until it sends a filterload message or filterclear message.
+ * If 0x01, this node wants inv messages and tx messages announcing new transactions.
+ * @return
+ */
+ def relay: Boolean
+
+ override def commandName = NetworkPayload.versionCommandName
+
+ override def bytes: ByteVector = RawVersionMessageSerializer.write(this)
+}
+
+object NetworkPayload {
+ val alertCommandName = "alert"
+ val blockCommandName = "block"
+ val getBlocksCommandName = "getblocks"
+ val getHeadersCommandName = "getheaders"
+ val headersCommandName = "headers"
+ val invCommandName = "inv"
+ val getDataCommandName = "getdata"
+ val memPoolCommandName = "mempool"
+ val merkleBlockCommandName = "merkleblock"
+ val notFoundCommandName = "notfound"
+ val transactionCommandName = "tx"
+ val addrCommandName = "addr"
+ val feeFilterCommandName = "feefilter"
+ val filterAddCommandName = "filteradd"
+ val filterClearCommandName = "filterclear"
+ val filterLoadCommandName = "filterload"
+ val getAddrCommandName = "getaddr"
+ val pingCommandName = "ping"
+ val pongCommandName = "pong"
+ val rejectCommandName = "reject"
+ val sendHeadersCommandName = "sendheaders"
+ val verAckCommandName = "verack"
+ val versionCommandName = "version"
+
+ /**
+ * Contains all the valid command names with their deserializer on the p2p protocol
+ * These commands all have the null bytes appended to the end of the string as
+ * required in [[NetworkHeader]]
+ * [[https://bitcoin.org/en/developer-reference#message-headers]]
+ *
+ * @return
+ */
+ val commandNames: Map[String, ByteVector => NetworkPayload] = Map(
+ blockCommandName -> { RawBlockMessageSerializer.read(_) },
+ getBlocksCommandName -> { RawGetBlocksMessageSerializer.read(_) },
+ getHeadersCommandName -> { RawGetHeadersMessageSerializer.read(_) },
+ getDataCommandName -> { RawGetDataMessageSerializer.read(_) },
+ headersCommandName -> { RawHeadersMessageSerializer.read(_) },
+ invCommandName -> { RawInventoryMessageSerializer.read(_) },
+ memPoolCommandName -> { _: ByteVector =>
+ MemPoolMessage
+ },
+ merkleBlockCommandName -> { RawMerkleBlockMessageSerializer.read(_) },
+ notFoundCommandName -> { RawNotFoundMessageSerializer.read(_) },
+ transactionCommandName -> { RawTransactionMessageSerializer.read(_) },
+ addrCommandName -> { RawAddrMessageSerializer.read(_) },
+ feeFilterCommandName -> { RawFeeFilterMessageSerializer.read(_) },
+ filterAddCommandName -> { RawFilterAddMessageSerializer.read(_) },
+ filterClearCommandName -> { _: ByteVector =>
+ FilterClearMessage
+ },
+ filterLoadCommandName -> { RawFilterLoadMessageSerializer.read(_) },
+ getAddrCommandName -> { _: ByteVector =>
+ GetAddrMessage
+ },
+ pingCommandName -> { RawPingMessageSerializer.read(_) },
+ pongCommandName -> { RawPongMessageSerializer.read(_) },
+ rejectCommandName -> { _: ByteVector =>
+ ???
+ },
+ sendHeadersCommandName -> { _: ByteVector =>
+ SendHeadersMessage
+ },
+ verAckCommandName -> { _: ByteVector =>
+ VerAckMessage
+ },
+ versionCommandName -> { RawVersionMessageSerializer.read(_) }
+ )
+
+ /**
+ * Parses a [[NetworkPayload]] from the given bytes using the [[NetworkHeader]]
+ * to determine what type of [[NetworkPayload]] this is
+ * @param networkHeader the header for the message on the p2p network
+ * @param payloadBytes the payload corresponding to the header on the p2p network
+ * @return
+ */
+ def apply(
+ networkHeader: NetworkHeader,
+ payloadBytes: ByteVector): NetworkPayload = {
+ //the commandName in the network header tells us what payload type this is
+ val deserializer: ByteVector => NetworkPayload = commandNames(
+ networkHeader.commandName)
+ deserializer(payloadBytes)
+ }
+
+ /**
+ * Parses a [[NetworkPayload]] from the given hex using the [[NetworkHeader]]
+ * to determine what type of [[NetworkPayload]] this is
+ * @param networkHeader the header for the message on the p2p network
+ * @param payloadHex the hexadecimal representation of the payload
+ * @return
+ */
+ def apply(
+ networkHeader: NetworkHeader,
+ payloadHex: String): NetworkPayload = {
+ NetworkPayload(networkHeader, BitcoinSUtil.decodeHex(payloadHex))
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala b/node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala
new file mode 100644
index 0000000000..c985296348
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala
@@ -0,0 +1,49 @@
+package org.bitcoins.node.messages
+
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.NetworkElement
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.serializers.messages.RawTypeIdentifierSerializer
+import org.bitcoins.node.serializers.messages.RawTypeIdentifierSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 5/31/16.
+ * This indicates the type of the object that has been hashed for an inventory
+ * https://bitcoin.org/en/developer-reference#data-messages
+ */
+sealed trait TypeIdentifier extends NetworkElement {
+ def num: UInt32
+ override def bytes: ByteVector = RawTypeIdentifierSerializer.write(this)
+}
+
+sealed trait MsgUnassigned extends TypeIdentifier
+
+object TypeIdentifier extends Factory[TypeIdentifier] {
+
+ final case object MsgTx extends TypeIdentifier {
+ override val num = UInt32.one
+ }
+
+ final case object MsgBlock extends TypeIdentifier {
+ override val num = UInt32(2)
+ }
+
+ final case object MsgFilteredBlock extends TypeIdentifier {
+ override val num = UInt32(3)
+ }
+
+ private case class MsgUnassignedImpl(num: UInt32) extends MsgUnassigned
+
+ override def fromBytes(bytes: ByteVector): TypeIdentifier =
+ RawTypeIdentifierSerializer.read(bytes)
+
+ def apply(num: Long): TypeIdentifier = TypeIdentifier(UInt32(num))
+
+ def apply(uInt32: UInt32): TypeIdentifier = uInt32 match {
+ case UInt32.one => MsgTx
+ case _ if (uInt32 == UInt32(2)) => MsgBlock
+ case _ if (uInt32 == UInt32(3)) => MsgFilteredBlock
+ case x: UInt32 => MsgUnassignedImpl(x)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala
new file mode 100644
index 0000000000..8bd6c3b06e
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala
@@ -0,0 +1,33 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.AddrMessage
+import org.bitcoins.node.serializers.messages.control.RawAddrMessageSerializer
+import org.bitcoins.node.util.NetworkIpAddress
+import org.bitcoins.node.messages.AddrMessage
+import org.bitcoins.node.serializers.messages.control.RawAddrMessageSerializer
+import org.bitcoins.node.util.NetworkIpAddress
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/3/16.
+ * The companion object for an AddrMessage
+ * https://bitcoin.org/en/developer-reference#addr
+ */
+object AddrMessage extends Factory[AddrMessage] {
+
+ private case class AddrMessageImpl(
+ ipCount: CompactSizeUInt,
+ addresses: Seq[NetworkIpAddress])
+ extends AddrMessage
+
+ def fromBytes(bytes: ByteVector): AddrMessage =
+ RawAddrMessageSerializer.read(bytes)
+
+ def apply(
+ ipCount: CompactSizeUInt,
+ addresses: Seq[NetworkIpAddress]): AddrMessage =
+ AddrMessageImpl(ipCount, addresses)
+
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala
new file mode 100644
index 0000000000..d822a63348
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala
@@ -0,0 +1,28 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.util.Factory
+import org.bitcoins.core.wallet.fee.{SatoshisPerByte, SatoshisPerKiloByte}
+import org.bitcoins.node.messages.FeeFilterMessage
+import org.bitcoins.node.serializers.messages.control.RawFeeFilterMessageSerializer
+import scodec.bits.ByteVector
+
+object FeeFilterMessage extends Factory[FeeFilterMessage] {
+
+
+ private case class FeeFilterMessageImpl(feeRate: SatoshisPerKiloByte) extends FeeFilterMessage
+
+
+ override def fromBytes(bytes: ByteVector): FeeFilterMessage = {
+ RawFeeFilterMessageSerializer.read(bytes)
+ }
+
+
+ def apply(satoshisPerKiloByte: SatoshisPerKiloByte): FeeFilterMessage = {
+ FeeFilterMessageImpl(satoshisPerKiloByte)
+ }
+
+
+ def apply(satPerByte: SatoshisPerByte): FeeFilterMessage = {
+ FeeFilterMessage(satPerByte.toSatPerKb)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala
new file mode 100644
index 0000000000..f3090146d8
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala
@@ -0,0 +1,29 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.FilterAddMessage
+import org.bitcoins.node.serializers.messages.control.RawFilterAddMessageSerializer
+import org.bitcoins.node.messages.FilterAddMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 8/26/16.
+ * Factory object for a [[FilterAddMessage]]
+ * [[https://bitcoin.org/en/developer-reference#filteradd]]
+ */
+object FilterAddMessage extends Factory[FilterAddMessage] {
+
+ private case class FilterAddMessageImpl(
+ elementSize: CompactSizeUInt,
+ element: ByteVector)
+ extends FilterAddMessage
+ override def fromBytes(bytes: ByteVector): FilterAddMessage =
+ RawFilterAddMessageSerializer.read(bytes)
+
+ def apply(
+ elementSize: CompactSizeUInt,
+ element: ByteVector): FilterAddMessage = {
+ FilterAddMessageImpl(elementSize, element)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala
new file mode 100644
index 0000000000..8724d26739
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala
@@ -0,0 +1,58 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.bloom.{BloomFilter, BloomFlag}
+import org.bitcoins.core.number.{UInt32, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.FilterLoadMessage
+import org.bitcoins.node.serializers.messages.control.RawFilterLoadMessageSerializer
+import org.bitcoins.node.messages.FilterLoadMessage
+import org.bitcoins.node.serializers.messages.control.RawFilterLoadMessageSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/19/16.
+ * [[https://bitcoin.org/en/developer-reference#filterload]]
+ */
+object FilterLoadMessage extends Factory[FilterLoadMessage] {
+ private case class FilterLoadMessageImpl(bloomFilter: BloomFilter)
+ extends FilterLoadMessage {
+ require(
+ bloomFilter.filterSize.num.toLong <= BloomFilter.maxSize.toLong,
+ "Can only have a maximum of 36,000 bytes in our filter, got: " + bloomFilter.data.size)
+ require(
+ bloomFilter.hashFuncs <= BloomFilter.maxHashFuncs,
+ "Can only have a maximum of 50 hashFuncs inside FilterLoadMessage, got: " + bloomFilter.hashFuncs)
+ require(
+ bloomFilter.filterSize.num.toLong == bloomFilter.data.size,
+ "Filter Size compactSizeUInt and actual filter size were different, " +
+ "filterSize: " + bloomFilter.filterSize.num + " actual filter size: " + bloomFilter.data.length
+ )
+ }
+
+ override def fromBytes(bytes: ByteVector): FilterLoadMessage =
+ RawFilterLoadMessageSerializer.read(bytes)
+
+ def apply(
+ filterSize: CompactSizeUInt,
+ filter: ByteVector,
+ hashFuncs: UInt32,
+ tweak: UInt32,
+ flags: BloomFlag): FilterLoadMessage = {
+ val bloomFilter = BloomFilter(filterSize, filter, hashFuncs, tweak, flags)
+ FilterLoadMessage(bloomFilter)
+ }
+
+ def apply(
+ filter: ByteVector,
+ hashFuncs: UInt32,
+ tweak: UInt32,
+ flags: BloomFlag): FilterLoadMessage = {
+ val filterSize = CompactSizeUInt(UInt64(filter.length))
+ FilterLoadMessage(filterSize, filter, hashFuncs, tweak, flags)
+ }
+
+ def apply(bloomFilter: BloomFilter): FilterLoadMessage = {
+ FilterLoadMessageImpl(bloomFilter)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala
new file mode 100644
index 0000000000..39d11704fd
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala
@@ -0,0 +1,18 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.PingMessage
+import org.bitcoins.node.serializers.messages.control.RawPingMessageSerializer
+import org.bitcoins.node.messages.PingMessage
+import scodec.bits.ByteVector
+
+object PingMessage extends Factory[PingMessage] {
+ private case class PingMessageImpl(nonce: UInt64) extends PingMessage
+ override def fromBytes(bytes: ByteVector): PingMessage = {
+ val pingMsg = RawPingMessageSerializer.read(bytes)
+ PingMessageImpl(pingMsg.nonce)
+ }
+
+ def apply(nonce: UInt64): PingMessage = PingMessageImpl(nonce)
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala
new file mode 100644
index 0000000000..72db18b8a9
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala
@@ -0,0 +1,22 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.PongMessage
+import org.bitcoins.node.serializers.messages.control.RawPongMessageSerializer
+import org.bitcoins.node.messages.PongMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/5/16.
+ */
+object PongMessage extends Factory[PongMessage] {
+ private case class PongMessageImpl(nonce: UInt64) extends PongMessage
+
+ def fromBytes(bytes: ByteVector): PongMessage = {
+ val pongMsg = RawPongMessageSerializer.read(bytes)
+ PongMessageImpl(pongMsg.nonce)
+ }
+
+ def apply(nonce: UInt64): PongMessage = PongMessageImpl(nonce)
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala
new file mode 100644
index 0000000000..521e4a94b2
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala
@@ -0,0 +1,48 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.RejectMessage
+import org.bitcoins.node.serializers.messages.control.RawRejectMessageSerializer
+import org.bitcoins.node.messages.RejectMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 8/31/16.
+ * Factory object for
+ * [[https://bitcoin.org/en/developer-reference#reject]]
+ */
+object RejectMessage extends Factory[RejectMessage] {
+ private case class RejectMessageImpl(
+ messageSize: CompactSizeUInt,
+ message: String,
+ code: Char,
+ reasonSize: CompactSizeUInt,
+ reason: String,
+ extra: ByteVector)
+ extends RejectMessage
+
+ def apply(
+ messageSize: CompactSizeUInt,
+ message: String,
+ code: Char,
+ reasonSize: CompactSizeUInt,
+ reason: String,
+ extra: ByteVector): RejectMessage = {
+ RejectMessageImpl(messageSize, message, code, reasonSize, reason, extra)
+ }
+
+ def fromBytes(bytes: ByteVector): RejectMessage =
+ RawRejectMessageSerializer.read(bytes)
+
+ def apply(
+ message: String,
+ code: Char,
+ reason: String,
+ extra: ByteVector): RejectMessage = {
+ val messageSize: CompactSizeUInt = CompactSizeUInt(UInt64(message.size))
+ val reasonSize: CompactSizeUInt = CompactSizeUInt(UInt64(reason.size))
+ RejectMessage(messageSize, message, code, reasonSize, reason, extra)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala b/node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala
new file mode 100644
index 0000000000..dafa4e5617
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala
@@ -0,0 +1,54 @@
+package org.bitcoins.node.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.NetworkElement
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.serializers.messages.control.RawServiceIdentifierSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * Indicates the services that are provided by this spv node
+ * [[https://bitcoin.org/en/developer-reference#version]]
+ */
+sealed trait ServiceIdentifier extends NetworkElement {
+ def num: UInt64
+ override def bytes: ByteVector = RawServiceIdentifierSerializer.write(this)
+}
+
+/**
+ * This node is not a full node.
+ * It may not be able to provide any data except for the transactions it originates.
+ */
+case object UnnamedService extends ServiceIdentifier {
+ override val num = UInt64.zero
+}
+
+/**
+ * This is a full node and can be asked for full blocks.
+ * It should implement all protocol features available in its self-reported protocol version.
+ */
+case object NodeNetwork extends ServiceIdentifier {
+ override val num = UInt64.one
+}
+
+/**
+ * Designated type for any service that does not have value of 0 or 1
+ */
+sealed trait UnknownService extends ServiceIdentifier
+
+object ServiceIdentifier extends Factory[ServiceIdentifier] {
+
+ private case class UnknownServiceImpl(num: UInt64) extends UnknownService
+
+ def fromBytes(bytes: ByteVector): ServiceIdentifier =
+ RawServiceIdentifierSerializer.read(bytes)
+
+ def apply(num: BigInt): ServiceIdentifier = ServiceIdentifier(UInt64(num))
+
+ def apply(uInt64: UInt64): ServiceIdentifier = uInt64 match {
+ case UInt64.zero => UnnamedService
+ case UInt64.one => NodeNetwork
+ case x: UInt64 => UnknownServiceImpl(x)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala
new file mode 100644
index 0000000000..0d566beae1
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala
@@ -0,0 +1,120 @@
+package org.bitcoins.node.messages.control
+
+import java.net.{InetAddress, InetSocketAddress}
+
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.number.{Int32, Int64, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages.VersionMessage
+import org.bitcoins.node.serializers.messages.control.RawVersionMessageSerializer
+import org.bitcoins.node.versions.ProtocolVersion
+import org.joda.time.DateTime
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/3/16.
+ * Companion object responsible for creating VersionMessages on the p2p network
+ * https://bitcoin.org/en/developer-reference#version
+ */
+object VersionMessage extends Factory[VersionMessage] {
+
+ private case class VersionMessageImpl(
+ version: ProtocolVersion,
+ services: ServiceIdentifier,
+ timestamp: Int64,
+ addressReceiveServices: ServiceIdentifier,
+ addressReceiveIpAddress: InetAddress,
+ addressReceivePort: Int,
+ addressTransServices: ServiceIdentifier,
+ addressTransIpAddress: InetAddress,
+ addressTransPort: Int,
+ nonce: UInt64,
+ userAgentSize: CompactSizeUInt,
+ userAgent: String,
+ startHeight: Int32,
+ relay: Boolean)
+ extends VersionMessage
+
+ override def fromBytes(bytes: ByteVector): VersionMessage =
+ RawVersionMessageSerializer.read(bytes)
+
+ def apply(
+ version: ProtocolVersion,
+ services: ServiceIdentifier,
+ timestamp: Int64,
+ addressReceiveServices: ServiceIdentifier,
+ addressReceiveIpAddress: InetAddress,
+ addressReceivePort: Int,
+ addressTransServices: ServiceIdentifier,
+ addressTransIpAddress: InetAddress,
+ addressTransPort: Int,
+ nonce: UInt64,
+ userAgent: String,
+ startHeight: Int32,
+ relay: Boolean): VersionMessage = {
+ val userAgentSize: CompactSizeUInt =
+ CompactSizeUInt.calculateCompactSizeUInt(ByteVector(userAgent.getBytes))
+ VersionMessageImpl(
+ version = version,
+ services = services,
+ timestamp = timestamp,
+ addressReceiveServices = addressReceiveServices,
+ addressReceiveIpAddress = addressReceiveIpAddress,
+ addressReceivePort = addressReceivePort,
+ addressTransServices = addressTransServices,
+ addressTransIpAddress = addressTransIpAddress,
+ addressTransPort = addressTransPort,
+ nonce = nonce,
+ userAgentSize = userAgentSize,
+ userAgent = userAgent,
+ startHeight = startHeight,
+ relay = relay
+ )
+ }
+
+ def apply(
+ network: NetworkParameters,
+ receivingIpAddress: InetAddress): VersionMessage = {
+ val transmittingIpAddress = InetAddress.getLocalHost
+ VersionMessage(network, receivingIpAddress, transmittingIpAddress)
+ }
+
+ def apply(
+ network: NetworkParameters,
+ receivingIpAddress: InetAddress,
+ transmittingIpAddress: InetAddress): VersionMessage = {
+ val nonce = UInt64.zero
+ val userAgent = Constants.userAgent
+ val startHeight = Int32.zero
+ val relay = false
+ VersionMessage(
+ version = Constants.version,
+ services = UnnamedService,
+ timestamp = Int64(DateTime.now.getMillis),
+ addressReceiveServices = UnnamedService,
+ addressReceiveIpAddress = receivingIpAddress,
+ addressReceivePort = network.port,
+ addressTransServices = NodeNetwork,
+ addressTransIpAddress = transmittingIpAddress,
+ addressTransPort = network.port,
+ nonce = nonce,
+ userAgent = userAgent,
+ startHeight = startHeight,
+ relay = relay
+ )
+ }
+
+ def apply(host: String, network: NetworkParameters): VersionMessage = {
+ //network.dnsSeeds(0)
+ val transmittingIpAddress = InetAddress.getByName(host)
+ VersionMessage(network, transmittingIpAddress)
+ }
+
+ def apply(
+ socket: InetSocketAddress,
+ network: NetworkParameters): VersionMessage = {
+ VersionMessage(network, socket.getAddress)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala
new file mode 100644
index 0000000000..2c4ef497cb
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala
@@ -0,0 +1,22 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.protocol.blockchain.Block
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.BlockMessage
+import org.bitcoins.node.serializers.messages.data.RawBlockMessageSerializer
+import org.bitcoins.node.messages.BlockMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/8/16.
+ */
+object BlockMessage extends Factory[BlockMessage] {
+
+ private case class BlockMessageImpl(block: Block) extends BlockMessage
+
+ def fromBytes(bytes: ByteVector): BlockMessage =
+ RawBlockMessageSerializer.read(bytes)
+
+ def apply(block: Block): BlockMessage = BlockMessageImpl(block)
+
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala
new file mode 100644
index 0000000000..25e0d38b59
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala
@@ -0,0 +1,47 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.GetBlocksMessage
+import org.bitcoins.node.serializers.messages.data.RawGetBlocksMessageSerializer
+import org.bitcoins.node.versions.ProtocolVersion
+import org.bitcoins.node.messages._
+import org.bitcoins.node.serializers.messages.data.RawGetBlocksMessageSerializer
+import org.bitcoins.node.versions.ProtocolVersion
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/1/16.
+ * This is the companion object for the GetBlocks network message on the p2p network
+ * https://bitcoin.org/en/developer-reference#getblocks
+ */
+object GetBlocksMessage extends Factory[GetBlocksMessage] {
+
+ private case class GetBlocksMessageImpl(
+ protocolVersion: ProtocolVersion,
+ hashCount: CompactSizeUInt,
+ blockHeaderHashes: Seq[DoubleSha256Digest],
+ stopHash: DoubleSha256Digest)
+ extends GetBlocksMessage
+
+ def apply(
+ version: ProtocolVersion,
+ hashCount: CompactSizeUInt,
+ blockHeaderHashes: Seq[DoubleSha256Digest],
+ stopHash: DoubleSha256Digest): GetBlocksMessage = {
+ GetBlocksMessageImpl(version, hashCount, blockHeaderHashes, stopHash)
+ }
+
+ def apply(
+ version: ProtocolVersion,
+ blockHeaderHashes: Seq[DoubleSha256Digest],
+ stopHash: DoubleSha256Digest): GetBlocksMessage = {
+ val hashCount = CompactSizeUInt(UInt64(blockHeaderHashes.length))
+ GetBlocksMessage(version, hashCount, blockHeaderHashes, stopHash)
+ }
+
+ def fromBytes(bytes: ByteVector): GetBlocksMessage =
+ RawGetBlocksMessageSerializer.read(bytes)
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala
new file mode 100644
index 0000000000..f3d0cbd9ac
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala
@@ -0,0 +1,37 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.GetDataMessage
+import org.bitcoins.node.serializers.messages.data.RawGetDataMessageSerializer
+import org.bitcoins.node.messages.GetDataMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/8/16.
+ */
+object GetDataMessage extends Factory[GetDataMessage] {
+ private case class GetDataMessageImpl(
+ inventoryCount: CompactSizeUInt,
+ inventories: Seq[Inventory])
+ extends GetDataMessage
+
+ override def fromBytes(bytes: ByteVector): GetDataMessage = {
+ RawGetDataMessageSerializer.read(bytes)
+ }
+
+ def apply(
+ inventoryCount: CompactSizeUInt,
+ inventories: Seq[Inventory]): GetDataMessage = {
+ GetDataMessageImpl(inventoryCount, inventories)
+ }
+
+ def apply(inventories: Seq[Inventory]): GetDataMessage = {
+ val inventoryCount = CompactSizeUInt(UInt64(inventories.length))
+ GetDataMessage(inventoryCount, inventories)
+ }
+
+ def apply(inventory: Inventory): GetDataMessage =
+ GetDataMessage(Seq(inventory))
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala
new file mode 100644
index 0000000000..61080685d9
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala
@@ -0,0 +1,67 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages.GetHeadersMessage
+import org.bitcoins.node.serializers.messages.data.RawGetHeadersMessageSerializer
+import org.bitcoins.node.versions.ProtocolVersion
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages.GetHeadersMessage
+import org.bitcoins.node.serializers.messages.data.RawGetHeadersMessageSerializer
+import org.bitcoins.node.versions.ProtocolVersion
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/29/16.
+ */
+object GetHeadersMessage extends Factory[GetHeadersMessage] {
+ private case class GetHeadersMessageImpl(
+ version: ProtocolVersion,
+ hashCount: CompactSizeUInt,
+ hashes: Seq[DoubleSha256Digest],
+ hashStop: DoubleSha256Digest)
+ extends GetHeadersMessage
+
+ override def fromBytes(bytes: ByteVector): GetHeadersMessage =
+ RawGetHeadersMessageSerializer.read(bytes)
+
+ def apply(
+ version: ProtocolVersion,
+ hashCount: CompactSizeUInt,
+ hashes: Seq[DoubleSha256Digest],
+ hashStop: DoubleSha256Digest): GetHeadersMessage = {
+ GetHeadersMessageImpl(version, hashCount, hashes, hashStop)
+ }
+
+ def apply(
+ version: ProtocolVersion,
+ hashes: Seq[DoubleSha256Digest],
+ hashStop: DoubleSha256Digest): GetHeadersMessage = {
+ val hashCount = CompactSizeUInt(UInt64(hashes.length))
+ GetHeadersMessage(version, hashCount, hashes, hashStop)
+ }
+
+ /** Creates a [[GetHeadersMessage]] with the default protocol version in [[Constants]] */
+ def apply(
+ hashes: Seq[DoubleSha256Digest],
+ hashStop: DoubleSha256Digest): GetHeadersMessage = {
+ GetHeadersMessage(Constants.version, hashes, hashStop)
+ }
+
+ /** Creates a [[GetHeadersMessage]] with no hash stop set, this requests all possible blocks
+ * if we need more than 2000 block headers, we will have to send another [[GetHeadersMessage]]
+ * [[https://bitcoin.org/en/developer-reference#getheaders]] */
+ def apply(hashes: Seq[DoubleSha256Digest]): GetHeadersMessage = {
+ //The header hash of the last header hash being requested; set to all zeroes to request an inv message with all
+ //subsequent header hashes (a maximum of 2000 will be sent as a reply to this message
+ val hashStop = DoubleSha256Digest.empty
+ GetHeadersMessage(hashes, hashStop)
+ }
+
+ def apply(hashes: DoubleSha256Digest): GetHeadersMessage = {
+ GetHeadersMessage(Vector(hashes))
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala
new file mode 100644
index 0000000000..65cf0541af
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala
@@ -0,0 +1,33 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.HeadersMessage
+import org.bitcoins.node.serializers.messages.data.RawHeadersMessageSerializer
+import org.bitcoins.node.messages.HeadersMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/5/16.
+ */
+object HeadersMessage extends Factory[HeadersMessage] {
+ private case class HeadersMessageImpl(
+ count: CompactSizeUInt,
+ headers: Vector[BlockHeader])
+ extends HeadersMessage
+
+ def fromBytes(bytes: ByteVector): HeadersMessage =
+ RawHeadersMessageSerializer.read(bytes)
+
+ def apply(
+ count: CompactSizeUInt,
+ headers: Vector[BlockHeader]): HeadersMessage =
+ HeadersMessageImpl(count, headers)
+
+ def apply(headers: Vector[BlockHeader]): HeadersMessage = {
+ val count = CompactSizeUInt(UInt64(headers.length))
+ HeadersMessageImpl(count, headers)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala b/node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala
new file mode 100644
index 0000000000..e6d091735d
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala
@@ -0,0 +1,49 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.protocol.NetworkElement
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.TypeIdentifier
+import org.bitcoins.node.serializers.messages.data.RawInventorySerializer
+import org.bitcoins.node.messages.TypeIdentifier
+import org.bitcoins.node.serializers.messages.data.RawInventorySerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 5/31/16.
+ * These are used as unique identifiers inside the peer-to-peer network
+ * [[https://bitcoin.org/en/developer-reference#term-inventory]]
+ */
+trait Inventory extends NetworkElement {
+
+ /**
+ * The type of object which was hashed
+ * @return
+ */
+ def typeIdentifier: TypeIdentifier
+
+ /**
+ * SHA256(SHA256()) hash of the object in internal byte order.
+ * @return
+ */
+ def hash: DoubleSha256Digest
+
+ override def bytes: ByteVector = RawInventorySerializer.write(this)
+}
+
+object Inventory extends Factory[Inventory] {
+
+ private case class InventoryImpl(
+ typeIdentifier: TypeIdentifier,
+ hash: DoubleSha256Digest)
+ extends Inventory
+
+ override def fromBytes(bytes: ByteVector): Inventory =
+ RawInventorySerializer.read(bytes)
+
+ def apply(
+ typeIdentifier: TypeIdentifier,
+ hash: DoubleSha256Digest): Inventory = {
+ InventoryImpl(typeIdentifier, hash)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala
new file mode 100644
index 0000000000..ef4179aab3
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala
@@ -0,0 +1,36 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.InventoryMessage
+import org.bitcoins.node.serializers.messages.data.RawInventoryMessageSerializer
+import org.bitcoins.node.messages.InventoryMessage
+import org.bitcoins.node.serializers.messages.data.RawInventoryMessageSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/1/16.
+ * Creates an scala object that represents the inventory type on the p2p network
+ * https://bitcoin.org/en/developer-reference#inv
+ */
+object InventoryMessage extends Factory[InventoryMessage] {
+
+ private case class InventoryMessageImpl(
+ inventoryCount: CompactSizeUInt,
+ inventories: Seq[Inventory])
+ extends InventoryMessage
+ override def fromBytes(bytes: ByteVector): InventoryMessage =
+ RawInventoryMessageSerializer.read(bytes)
+
+ def apply(
+ inventoryCount: CompactSizeUInt,
+ inventories: Seq[Inventory]): InventoryMessage = {
+ InventoryMessageImpl(inventoryCount, inventories)
+ }
+
+ def apply(inventories: Seq[Inventory]): InventoryMessage = {
+ val count = CompactSizeUInt(UInt64(inventories.length))
+ InventoryMessage(count, inventories)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala
new file mode 100644
index 0000000000..de8645e883
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala
@@ -0,0 +1,26 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.protocol.blockchain.MerkleBlock
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.MerkleBlockMessage
+import org.bitcoins.node.serializers.messages.data.RawMerkleBlockMessageSerializer
+import org.bitcoins.node.messages.MerkleBlockMessage
+import org.bitcoins.node.serializers.messages.data.RawMerkleBlockMessageSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * https://bitcoin.org/en/developer-reference#merkleblock
+ */
+object MerkleBlockMessage extends Factory[MerkleBlockMessage] {
+
+ private case class MerkleBlockMessageImpl(merkleBlock: MerkleBlock)
+ extends MerkleBlockMessage
+
+ def fromBytes(bytes: ByteVector): MerkleBlockMessage =
+ RawMerkleBlockMessageSerializer.read(bytes)
+
+ def apply(merkleBlock: MerkleBlock): MerkleBlockMessage = {
+ MerkleBlockMessageImpl(merkleBlock)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala
new file mode 100644
index 0000000000..f729488e33
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.NotFoundMessage
+import org.bitcoins.node.serializers.messages.data.RawNotFoundMessageSerializer
+import org.bitcoins.node.messages.NotFoundMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * The companion object factory used to create NotFoundMessages on the p2p network
+ * https://bitcoin.org/en/developer-reference#notfound
+ */
+object NotFoundMessage extends Factory[NotFoundMessage] {
+
+ private case class NotFoundMessageImpl(
+ inventoryCount: CompactSizeUInt,
+ inventories: Seq[Inventory])
+ extends NotFoundMessage
+
+ def fromBytes(bytes: ByteVector): NotFoundMessage =
+ RawNotFoundMessageSerializer.read(bytes)
+
+ def apply(
+ inventoryCount: CompactSizeUInt,
+ inventories: Seq[Inventory]): NotFoundMessage = {
+ NotFoundMessageImpl(inventoryCount, inventories)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala
new file mode 100644
index 0000000000..d9cb044ed4
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala
@@ -0,0 +1,26 @@
+package org.bitcoins.node.messages.data
+
+import org.bitcoins.core.protocol.transaction.Transaction
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.TransactionMessage
+import org.bitcoins.node.serializers.messages.data.RawTransactionMessageSerializer
+import org.bitcoins.node.messages._
+import org.bitcoins.node.serializers.messages.data.RawTransactionMessageSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * Companion factory object for the TransactionMessage on the p2p network
+ * https://bitcoin.org/en/developer-reference#tx
+ */
+object TransactionMessage extends Factory[TransactionMessage] {
+
+ private case class TransactionMessageImpl(transaction: Transaction)
+ extends TransactionMessage
+
+ def fromBytes(bytes: ByteVector): TransactionMessage =
+ RawTransactionMessageSerializer.read(bytes)
+
+ def apply(transaction: Transaction): TransactionMessage =
+ TransactionMessageImpl(transaction)
+}
diff --git a/node/src/main/scala/org/bitcoins/node/models/ColumnMappers.scala b/node/src/main/scala/org/bitcoins/node/models/ColumnMappers.scala
new file mode 100644
index 0000000000..e4e16f0c61
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/models/ColumnMappers.scala
@@ -0,0 +1,7 @@
+package org.bitcoins.node.models
+
+trait ColumnMappers {
+ import org.bitcoins.db.DbCommonsColumnMappers._
+}
+
+object ColumnMappers extends ColumnMappers
diff --git a/node/src/main/scala/org/bitcoins/node/models/Peer.scala b/node/src/main/scala/org/bitcoins/node/models/Peer.scala
new file mode 100644
index 0000000000..ba930ccc34
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/models/Peer.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.node.models
+
+import java.net.InetSocketAddress
+
+import org.bitcoins.db.DbRowAutoInc
+import org.bitcoins.node.util.NetworkIpAddress
+
+case class Peer(networkIpAddress: NetworkIpAddress, id: Option[Long] = None)
+ extends DbRowAutoInc[Peer] {
+
+ def socket: InetSocketAddress =
+ new InetSocketAddress(networkIpAddress.address, networkIpAddress.port)
+
+ override def copyWithId(id: Long): Peer = {
+ this.copy(id = Some(id))
+ }
+
+}
+
+object Peer {
+
+ def fromNetworkIpAddress(networkIpAddress: NetworkIpAddress): Peer = {
+ Peer(networkIpAddress)
+ }
+
+ def fromSocket(socket: InetSocketAddress): Peer = {
+ val nip = NetworkIpAddress.fromInetSocketAddress(socket = socket)
+ fromNetworkIpAddress(nip)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/models/PeerDAO.scala b/node/src/main/scala/org/bitcoins/node/models/PeerDAO.scala
new file mode 100644
index 0000000000..24e03b0a47
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/models/PeerDAO.scala
@@ -0,0 +1,13 @@
+package org.bitcoins.node.models
+
+import org.bitcoins.db.{CRUDAutoInc}
+import slick.jdbc.SQLiteProfile.api._
+
+import org.bitcoins.db.AppConfig
+import scala.concurrent.ExecutionContext
+
+case class PeerDAO(appConfig: AppConfig)(
+ implicit override val ec: ExecutionContext)
+ extends CRUDAutoInc[Peer] {
+ override val table = TableQuery[PeerTable]
+}
diff --git a/node/src/main/scala/org/bitcoins/node/models/PeerTable.scala b/node/src/main/scala/org/bitcoins/node/models/PeerTable.scala
new file mode 100644
index 0000000000..50430c4701
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/models/PeerTable.scala
@@ -0,0 +1,10 @@
+package org.bitcoins.node.models
+
+import org.bitcoins.db.TableAutoInc
+import slick.jdbc.PostgresProfile.api._
+import slick.lifted.Tag
+
+class PeerTable(tag: Tag) extends TableAutoInc[Peer](tag, "peer_table") {
+
+ def * = ???
+}
diff --git a/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala b/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala
new file mode 100644
index 0000000000..bb78575753
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala
@@ -0,0 +1,53 @@
+package org.bitcoins.node.networking
+
+import akka.actor.{Actor, ActorContext, ActorRef, Props}
+import akka.event.LoggingReceive
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages.data.{GetDataMessage, Inventory}
+import org.bitcoins.node.messages.{BlockMessage, TypeIdentifier}
+
+/**
+ * Created by chris on 7/10/16.
+ */
+sealed abstract class BlockActor extends Actor with BitcoinSLogger {
+
+ def peerMsgHandler: ActorRef
+
+ def receive: Receive = LoggingReceive {
+ case hash: DoubleSha256Digest =>
+ val inv = Inventory(TypeIdentifier.MsgBlock, hash)
+ val getDataMessage = GetDataMessage(inv)
+ val networkMessage =
+ NetworkMessage(Constants.networkParameters, getDataMessage)
+ peerMsgHandler ! networkMessage
+ context.become(awaitBlockMsg)
+ case blockHeader: BlockHeader =>
+ self.forward(blockHeader.hash)
+ }
+
+ def awaitBlockMsg: Receive = LoggingReceive {
+ case blockMsg: BlockMessage =>
+ context.parent ! blockMsg
+ context.stop(self)
+ }
+}
+
+object BlockActor {
+ private case class BlockActorImpl(
+ peerMsgHandler: ActorRef
+ ) extends BlockActor
+
+ def props(peerMsgHandler: ActorRef): Props = {
+ Props(classOf[BlockActorImpl], peerMsgHandler)
+ }
+
+ def apply(peerMsgHandler: ActorRef)(
+ implicit context: ActorContext): ActorRef = {
+ context.actorOf(props(peerMsgHandler))
+ }
+
+}
diff --git a/node/src/main/scala/org/bitcoins/node/networking/Client.scala b/node/src/main/scala/org/bitcoins/node/networking/Client.scala
new file mode 100644
index 0000000000..41a3db7897
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/Client.scala
@@ -0,0 +1,243 @@
+package org.bitcoins.node.networking
+
+import akka.actor.{Actor, ActorRef, ActorRefFactory, Props}
+import akka.event.LoggingReceive
+import akka.io.{IO, Tcp}
+import akka.util.ByteString
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages.NetworkPayload
+import org.bitcoins.node.models.Peer
+import org.bitcoins.node.networking.peer.PeerMessageReceiver
+import org.bitcoins.node.networking.peer.PeerMessageReceiver.NetworkMessageReceived
+import org.bitcoins.node.util.BitcoinSpvNodeUtil
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/6/16.
+ * This actor is responsible for creating a connection,
+ * relaying messages and closing a connection to our peer on
+ * the p2p network. This is the actor that directly interacts
+ * with the p2p network. It's responsibly is to deal with low
+ * level [[Tcp.Message]].
+ *
+ * If the [[Client]] receives a [[NetworkMessage]], from a [[org.bitcoins.node.networking.peer.PeerMessageSender]]
+ * it serializes the message to it to a [[akka.util.ByteString]] and then sends it to the [[manager]]
+ * which streams the data to our peer on the bitcoin network.
+ *
+ * If the [[Client]] receives a [[Tcp.Received]] message, it means we have received
+ * a message from our peer on the bitcoin p2p network. This means we try to parse
+ * the [[ByteString]] into a [[NetworkMessage]]. If we successfully parse the message
+ * we relay that message to the [[org.bitcoins.node.networking.peer.PeerMessageSender]]
+ * that created the Client Actor.
+ *
+ * In this class you will see a 'unalignedBytes' value passed around in a lot of methods
+ * This is because we cannot assume that a Bitcoin [[NetworkMessage]] aligns with a tcp packet.
+ * For instance, a large [[org.bitcoins.node.messages.BlockMessage]] (up to 4MB in size)
+ * CANNOT fit in a single tcp packet. This means we must cache
+ * the bytes and wait for the rest of them to be sent.
+ */
+sealed abstract class ClientActor extends Actor with BitcoinSLogger {
+
+ def peer: Peer
+
+ /** The place we send messages that we successfully parsed from our
+ * peer on the p2p network. This is mostly likely a [[org.bitcoins.node.networking.peer.PeerMessageSender]]
+ *
+ * @return
+ */
+ def peerMsgHandlerReceiver: PeerMessageReceiver
+
+ /**
+ * The manager is an actor that handles the underlying low level I/O resources (selectors, channels)
+ * and instantiates workers for specific tasks, such as listening to incoming connections.
+ */
+ def manager: ActorRef = IO(Tcp)(context.system)
+
+ /**
+ * The parameters for the network we are connected to
+ * i.e. [[org.bitcoins.core.config.MainNet]] or [[org.bitcoins.core.config.TestNet3]]
+ * @return
+ */
+ def network: NetworkParameters = Constants.networkParameters
+
+ /**
+ * This actor signifies the node we are connected to on the p2p network
+ * This is the context we are in after we received a [[Tcp.Connected]] message
+ */
+ private def awaitNetworkRequest(
+ peer: ActorRef,
+ unalignedBytes: ByteVector): Receive = LoggingReceive {
+ case message: NetworkMessage => sendNetworkMessage(message, peer)
+ case payload: NetworkPayload =>
+ val networkMsg = NetworkMessage(network, payload)
+ self.forward(networkMsg)
+ case message: Tcp.Message =>
+ val newUnalignedBytes =
+ handleTcpMessage(message, Some(peer), unalignedBytes)
+ context.become(awaitNetworkRequest(peer, newUnalignedBytes))
+ }
+
+ /** This context is responsible for initializing a tcp connection with a peer on the bitcoin p2p network */
+ def receive = LoggingReceive {
+ case cmd: Tcp.Command =>
+ //we only accept a Tcp.Connect/Tcp.Connected
+ //message to the default receive on this actor
+ //after receiving Tcp.Connected we switch to the
+ //'awaitNetworkRequest' context. This is the main
+ //execution loop for the Client actor
+ val _ = handleCommand(cmd, None)
+
+ case connected: Tcp.Connected =>
+ val _ = handleEvent(connected, ByteVector.empty)
+
+ case msg: NetworkMessage =>
+ self.forward(msg.payload)
+ case payload: NetworkPayload =>
+ logger.error(
+ s"Cannot send a message to our peer when we are not connected! payload=${payload} peer=${peer}")
+ }
+
+ /**
+ * Handles boiler plate [[Tcp.Message]] types.
+ * @param message
+ * @return the unaligned bytes if we haven't received a full bitcoin p2p message yet
+ */
+ private def handleTcpMessage(
+ message: Tcp.Message,
+ peer: Option[ActorRef],
+ unalignedBytes: ByteVector): ByteVector = {
+ message match {
+ case event: Tcp.Event =>
+ handleEvent(event, unalignedBytes)
+ case command: Tcp.Command =>
+ handleCommand(command, peer)
+
+ unalignedBytes
+ }
+ }
+
+ /**
+ * This function is responsible for handling a [[Tcp.Event]] algebraic data type
+ * @param event
+ */
+ private def handleEvent(
+ event: Tcp.Event,
+ unalignedBytes: ByteVector): ByteVector = {
+ event match {
+ case Tcp.Bound(localAddress) =>
+ logger.debug(
+ s"Actor is now bound to the local address: ${localAddress}")
+ context.parent ! Tcp.Bound(localAddress)
+
+ unalignedBytes
+ case Tcp.CommandFailed(command) =>
+ logger.debug(s"Client Command failed: ${command}")
+
+ unalignedBytes
+ case Tcp.Connected(remote, local) =>
+ logger.debug(s"Tcp connection to: ${remote}")
+ logger.debug(s"Local: ${local}")
+
+ //this is what registers a actor to send all byte messages to that is
+ //received from our peer. Since we are using 'self' that means
+ //our bitcoin peer will send all messages to this actor.
+ sender ! Tcp.Register(self)
+
+ val _ = peerMsgHandlerReceiver.connect(Client(self, peer))
+
+ context.become(awaitNetworkRequest(sender, ByteVector.empty))
+
+ unalignedBytes
+ case closeCmd @ (Tcp.ConfirmedClosed | Tcp.Closed | Tcp.Aborted |
+ Tcp.PeerClosed) =>
+ logger.debug(s"Closed command received: ${closeCmd}")
+
+ //tell our peer message handler we are disconnecting
+ val disconnectT = peerMsgHandlerReceiver.disconnect()
+
+ disconnectT.failed.foreach(err =>
+ logger.error(s"Failed to disconnect=${err}"))
+ context.stop(self)
+ unalignedBytes
+ case Tcp.Received(byteString: ByteString) =>
+ //logger.debug("Received byte string in peerMessageHandler " + BitcoinSUtil.encodeHex(byteString.toArray))
+ //logger.debug("Unaligned bytes: " + BitcoinSUtil.encodeHex(unalignedBytes))
+
+ //we need to aggregate our previous 'unalignedBytes' with the new message
+ //we just received from our peer to hopefully be able to parse full messages
+ val bytes: ByteVector = unalignedBytes ++ ByteVector(byteString.toArray)
+ //logger.debug("Bytes for message parsing: " + BitcoinSUtil.encodeHex(bytes))
+ val (messages, newUnalignedBytes) =
+ BitcoinSpvNodeUtil.parseIndividualMessages(bytes)
+
+ //for the messages we successfully parsed above
+ //send them to 'context.parent' -- this is the
+ //PeerMessageHandler that is responsible for
+ //creating this Client Actor
+ messages.foreach { m =>
+ val msg = NetworkMessageReceived(m, Client(self, peer))
+ peerMsgHandlerReceiver.handleNetworkMessageReceived(msg)
+
+ }
+
+ newUnalignedBytes
+ }
+ }
+
+ /**
+ * This function is responsible for handling a [[Tcp.Command]] algebraic data type
+ * @param command
+ */
+ private def handleCommand(
+ command: Tcp.Command,
+ peer: Option[ActorRef]): Unit =
+ command match {
+ case closeCmd @ (Tcp.ConfirmedClose | Tcp.Close | Tcp.Abort) =>
+ peer.map(p => p ! closeCmd)
+ ()
+ case connectCmd: Tcp.Connect =>
+ manager ! connectCmd
+ case bind: Tcp.Bind =>
+ manager ! bind
+ }
+
+ /**
+ * Sends a network request to our peer on the network
+ * @param message
+ * @return
+ */
+ private def sendNetworkMessage(
+ message: NetworkMessage,
+ peer: ActorRef): Unit = {
+ val byteMessage = BitcoinSpvNodeUtil.buildByteString(message.bytes)
+ peer ! Tcp.Write(byteMessage)
+ }
+
+}
+
+case class Client(actor: ActorRef, peer: Peer)
+
+object Client {
+ private case class ClientActorImpl(
+ peer: Peer,
+ peerMsgHandlerReceiver: PeerMessageReceiver)
+ extends ClientActor
+
+ def props(peer: Peer, peerMsgHandlerReceiver: PeerMessageReceiver): Props =
+ Props(classOf[ClientActorImpl], peer, peerMsgHandlerReceiver)
+
+ def apply(
+ context: ActorRefFactory,
+ peer: Peer,
+ peerMessageReceiver: PeerMessageReceiver): Client = {
+ val actorRef = context.actorOf(
+ props(peer = peer, peerMsgHandlerReceiver = peerMessageReceiver),
+ BitcoinSpvNodeUtil.createActorName(this.getClass))
+
+ Client(actorRef, peer)
+ }
+
+}
diff --git a/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala b/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala
new file mode 100644
index 0000000000..c24b37055b
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala
@@ -0,0 +1,178 @@
+package org.bitcoins.node.networking
+
+import akka.actor.{Actor, ActorRef, ActorRefFactory, Props}
+import akka.event.LoggingReceive
+import akka.io.Tcp
+import org.bitcoins.core.bloom.{BloomFilter, BloomUpdateNone}
+import org.bitcoins.core.crypto.{DoubleSha256Digest, Sha256Hash160Digest}
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.Address
+import org.bitcoins.core.protocol.blockchain.MerkleBlock
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.messages._
+import org.bitcoins.node.messages.control.FilterLoadMessage
+import org.bitcoins.node.messages.data.{GetDataMessage, Inventory}
+import org.bitcoins.node.util.BitcoinSpvNodeUtil
+
+/**
+ * Created by chris on 8/30/16.
+ * Responsible for checking if a payment to a address was made
+ * Verifying that the transaction that made the payment was included
+ * inside of a block on the blockchain
+ *
+ * 1.) Creates a bloom filter
+ * 2.) Sends the bloom filter to a node on the network
+ * 3.) Nodes matches the bloom filter, sends a txid that matched the filter back to us
+ * 4.) We request the full transaction using a [[GetDataMessage]]
+ * 5.) We verify the transaction given to us has an output that matches the address we expected a payment to
+ * 6.) When another block is announced on the network, we send a MsgMerkleBlock
+ * to our peer on the network to see if the tx was included on that block
+ * 7.) If it was, send the actor that that requested this message back
+ */
+sealed abstract class PaymentActor extends Actor with BitcoinSLogger {
+
+ def peerMsgHandler: ActorRef
+
+ def receive = LoggingReceive {
+ case hash: Sha256Hash160Digest =>
+ paymentToHash(hash)
+ case address: Address =>
+ self.forward(address.hash)
+ }
+
+ /** Constructs a bloom filter that matches the given hash,
+ * then sends that bloom filter to a peer on the network */
+ def paymentToHash(hash: Sha256Hash160Digest) = {
+ val bloomFilter =
+ BloomFilter(10, 0.0001, UInt32.zero, BloomUpdateNone).insert(hash)
+ val filterLoadMsg = FilterLoadMessage(bloomFilter)
+ val bloomFilterNetworkMsg =
+ NetworkMessage(Constants.networkParameters, filterLoadMsg)
+ peerMsgHandler ! bloomFilterNetworkMsg
+ }
+
+ /** Awaits for a [[GetDataMessage]] that requested a transaction. We can also fire off more [[GetDataMessage]] inside of this context */
+ def awaitTransactionGetDataMessage(
+ hash: Sha256Hash160Digest,
+ peerMessageHandler: ActorRef): Receive = LoggingReceive {
+ case txMsg: TransactionMessage =>
+ //check to see if any of the outputs on this tx match our hash
+ val outputs = txMsg.transaction.outputs.filter(o =>
+ o.scriptPubKey.asm.filter(_.bytes == hash.bytes).nonEmpty)
+
+ if (outputs.nonEmpty) {
+ logger.debug(
+ "matched transaction inside of awaitTransactionGetDataMsg: " + txMsg.transaction.hex)
+ logger.debug("Matched txid: " + txMsg.transaction.txId.hex)
+ logger.debug("Switching to awaitBlockAnnouncement")
+ context.become(
+ awaitBlockAnnouncement(hash,
+ txMsg.transaction.txId,
+ peerMessageHandler))
+ }
+ //otherwise we do nothing and wait for another transaction message
+ case invMsg: InventoryMessage =>
+ //txs are broadcast by nodes on the network when they are seen by a node
+ //filter out the txs we do not care about
+ val txInventories =
+ invMsg.inventories.filter(_.typeIdentifier == TypeIdentifier.MsgTx)
+ handleTransactionInventoryMessages(txInventories, peerMessageHandler)
+ }
+
+ /** Sends a [[GetDataMessage]] to get the full transaction for a transaction inventory message */
+ private def handleTransactionInventoryMessages(
+ inventory: Seq[Inventory],
+ peerMessageHandler: ActorRef): Unit = {
+ for {
+ txInv <- inventory
+ inventory = GetDataMessage(txInv)
+ } yield peerMessageHandler ! inventory
+
+ ()
+ }
+
+ /** This context waits for a block announcement on the network,
+ * then constructs a [[MerkleBlockMessage]] to check
+ * if the txid was included in that block */
+ def awaitBlockAnnouncement(
+ hash: Sha256Hash160Digest,
+ txId: DoubleSha256Digest,
+ peerMessageHandler: ActorRef): Receive = LoggingReceive {
+ case invMsg: InventoryMessage =>
+ val blockHashes =
+ invMsg.inventories
+ .filter(_.typeIdentifier == TypeIdentifier.MsgBlock)
+ .map(_.hash)
+ if (blockHashes.nonEmpty) {
+ //construct a merkle block message to verify that the txIds was in the block
+ val merkleBlockInventory =
+ Inventory(TypeIdentifier.MsgFilteredBlock, blockHashes.head)
+ val getDataMsg = GetDataMessage(merkleBlockInventory)
+ val getDataNetworkMessage =
+ NetworkMessage(Constants.networkParameters, getDataMsg)
+ peerMessageHandler ! getDataNetworkMessage
+ logger.debug("Switching to awaitMerkleBlockMessage")
+ context.become(
+ awaitMerkleBlockMessage(hash, txId, blockHashes, peerMessageHandler))
+ }
+ //else do nothing and wait for another block announcement
+
+ }
+
+ /** This context waits for a [[MerkleBlockMessage]] from our peer on the network, then checks
+ * if the given txid is contained inside of the block. If it is included, send a [[PaymentActor.SuccessfulPayment]]
+ * message back to the actor that created this actor, else send a [[PaymentActor.FailedPayment]] message back to
+ * the actor that created this actor
+ * @param hash
+ * @param txId
+ * @param blockHashes
+ * @param peerMessageHandler
+ * @return
+ */
+ def awaitMerkleBlockMessage(
+ hash: Sha256Hash160Digest,
+ txId: DoubleSha256Digest,
+ blockHashes: Seq[DoubleSha256Digest],
+ peerMessageHandler: ActorRef): Receive = LoggingReceive {
+ case merkleBlockMsg: MerkleBlockMessage =>
+ val result = merkleBlockMsg.merkleBlock.partialMerkleTree.extractMatches
+ .contains(txId)
+ if (result) {
+ val successfulPayment =
+ PaymentActor.SuccessfulPayment(hash,
+ txId,
+ blockHashes,
+ merkleBlockMsg.merkleBlock)
+ logger.info("Received successful payment: " + successfulPayment)
+ context.parent ! successfulPayment
+ } else context.parent ! PaymentActor.FailedPayment(hash)
+ peerMessageHandler ! Tcp.Close
+ context.stop(self)
+ }
+}
+
+object PaymentActor {
+ private case class PaymentActorImpl(peerMsgHandler: ActorRef)
+ extends PaymentActor
+
+ def props(peerMsgHandler: ActorRef): Props =
+ Props(classOf[PaymentActorImpl], peerMsgHandler)
+
+ def apply(peerMsgHandler: ActorRef)(
+ implicit context: ActorRefFactory): ActorRef =
+ context.actorOf(props(peerMsgHandler),
+ BitcoinSpvNodeUtil.createActorName(this.getClass))
+
+ sealed trait PaymentActorMessage
+ case class SuccessfulPayment(
+ hash: Sha256Hash160Digest,
+ txId: DoubleSha256Digest,
+ blockHash: Seq[DoubleSha256Digest],
+ merkleBlock: MerkleBlock)
+ extends PaymentActorMessage
+
+ case class FailedPayment(hash: Sha256Hash160Digest)
+ extends PaymentActorMessage
+}
diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala
new file mode 100644
index 0000000000..ded8a1fb12
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala
@@ -0,0 +1,36 @@
+package org.bitcoins.node.networking.peer
+
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.messages._
+
+import scala.concurrent.ExecutionContext
+
+class ControlMessageHandler()(implicit ec: ExecutionContext)
+ extends BitcoinSLogger {
+
+ def handleControlPayload(
+ controlMsg: ControlPayload,
+ peerMsgSender: PeerMessageSender): Unit = {
+ controlMsg match {
+ case _: PingMessage =>
+ ()
+
+ case SendHeadersMessage =>
+ //not implemented as of now
+ ()
+ case _: AddrMessage =>
+ ()
+ case _ @(_: FilterAddMessage | _: FilterLoadMessage |
+ FilterClearMessage) =>
+ ()
+ case _ @(GetAddrMessage | VerAckMessage | _: VersionMessage |
+ _: PongMessage) =>
+ ()
+ case _: RejectMessage =>
+ ()
+
+ case _: FeeFilterMessage =>
+ ()
+ }
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala
new file mode 100644
index 0000000000..78360c8847
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala
@@ -0,0 +1,53 @@
+package org.bitcoins.node.networking.peer
+
+import org.bitcoins.chain.api.ChainApi
+import org.bitcoins.chain.blockchain.ChainHandler
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.chain.models.BlockHeaderDAO
+import org.bitcoins.core.util.{BitcoinSLogger, FutureUtil}
+import org.bitcoins.node.messages.{
+ DataPayload,
+ HeadersMessage,
+ InventoryMessage
+}
+
+import scala.concurrent.{ExecutionContext, Future}
+
+/** This actor is meant to handle a [[org.bitcoins.node.messages.DataPayload]]
+ * that a peer to sent to us on the p2p network, for instance, if we a receive a
+ * [[HeadersMessage]] we should store those headers in our database
+ */
+class DataMessageHandler(appConfig: ChainAppConfig)(
+ implicit ec: ExecutionContext)
+ extends BitcoinSLogger {
+
+ private val blockHeaderDAO: BlockHeaderDAO = BlockHeaderDAO(appConfig)
+
+ def handleDataPayload(
+ payload: DataPayload,
+ peerMsgSender: PeerMessageSender): Future[Unit] = {
+ payload match {
+ case headersMsg: HeadersMessage =>
+ val headers = headersMsg.headers
+ val chainApi: ChainApi =
+ ChainHandler(blockHeaderDAO, chainConfig = appConfig)
+ val chainApiF = chainApi.processHeaders(headers)
+
+ chainApiF.map { _ =>
+ val lastHash = headers.last.hash
+ peerMsgSender.sendGetHeadersMessage(lastHash)
+ }
+ case invMsg: InventoryMessage =>
+ handleInventoryMsg(invMsg = invMsg, peerMsgSender = peerMsgSender)
+ }
+ }
+
+ private def handleInventoryMsg(
+ invMsg: InventoryMessage,
+ peerMsgSender: PeerMessageSender): Future[Unit] = {
+ logger.info(s"Received inv=${invMsg}")
+
+ FutureUtil.unit
+
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala
new file mode 100644
index 0000000000..9a78d2b86f
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala
@@ -0,0 +1,63 @@
+package org.bitcoins.node.networking.peer
+
+/*
+abstract class PeerHandler extends BitcoinSLogger {
+ implicit val system: ActorSystem
+ implicit val ec: ExecutionContext = system.dispatcher
+ implicit val timeout: Timeout
+
+ def socket: InetSocketAddress
+
+ def dbConfig: DbConfig
+
+ def peerMsgSender: PeerMessageSender
+
+ def getHeaders(getHeadersMsg: GetHeadersMessage): Unit = {
+ sendToPeer(getHeadersMsg)
+ }
+
+ /** Connects with our peer*/
+ def connect(): Future[Unit] = {
+ pee
+ }
+
+ /** Checks if we are connected with our peer */
+ def isConnected: Boolean = ???
+
+ /** Closes our connection with our peer */
+ def close(): Future[Unit] = {
+ val closedF = (peerMsgSender.actor ? Tcp.Close).mapTo[Tcp.Closed.type]
+
+ closedF.map(_ => ())
+ }
+
+}
+
+object PeerHandler {
+ private case class PeerHandlerImpl(
+ peerMsgSender: PeerMessageSender,
+ socket: InetSocketAddress,
+ dbConfig: DbConfig)(
+ override implicit val system: ActorSystem,
+ val timeout: Timeout)
+ extends PeerHandler
+
+ def apply(
+ peerMsgSender: PeerMessageSender,
+ socket: InetSocketAddress,
+ dbConfig: DbConfig)(
+ implicit system: ActorSystem,
+ timeout: Timeout): PeerHandler = {
+ PeerHandlerImpl(peerMsgSender, socket, dbConfig)(system, timeout)
+ }
+
+ /* def apply(peer: Peer, dbConfig: DbConfig)(implicit system: ActorSystem, timeout: Timeout): PeerHandler = {
+ val actorRef = PeerMessageHandler(dbConfig = dbConfig)
+ PeerHandler(actorRef,peer.socket,dbConfig)
+ }*/
+}
+ */
+
+case class PeerHandler(
+ peerMsgRecv: PeerMessageReceiver,
+ peerMsgSender: PeerMessageSender)
diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala
new file mode 100644
index 0000000000..bce7d5205c
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala
@@ -0,0 +1,244 @@
+package org.bitcoins.node.networking.peer
+
+import akka.actor.ActorRefFactory
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.config.NodeAppConfig
+import org.bitcoins.node.messages._
+import org.bitcoins.node.models.Peer
+import org.bitcoins.node.networking.Client
+import org.bitcoins.node.networking.peer.PeerMessageReceiverState.{
+ Disconnected,
+ Initializing,
+ Normal,
+ Preconnection
+}
+
+import scala.util.{Failure, Success, Try}
+
+/**
+ * Responsible for receiving messages from a peer on the
+ * p2p network. This is called by [[Client]] when doing the p2p
+ * handshake and during the [[PeerMessageReceiverState.Normal Normal]]
+ * operations. This is the entry point for handling all received
+ * [[NetworkMessage]]
+ */
+class PeerMessageReceiver(
+ state: PeerMessageReceiverState,
+ nodeAppConfig: NodeAppConfig,
+ chainAppConfig: ChainAppConfig)(implicit ref: ActorRefFactory)
+ extends BitcoinSLogger {
+
+ import ref.dispatcher
+
+ //TODO: Really bad to just modify this internal state
+ //not async safe at all
+ private var internalState: PeerMessageReceiverState = state
+
+ /** The peer we are connected to. */
+ private var peerOpt: Option[Peer] = None
+
+ /** This method is called when we have received
+ * a [[akka.io.Tcp.Connected]] message from our peer
+ * This means we have opened a Tcp connection,
+ * but have NOT started the handshake
+ * This method will initiate the handshake
+ */
+ protected[networking] def connect(client: Client): Try[Unit] = {
+
+ internalState match {
+ case bad @ (_: Initializing | _: Normal | _: Disconnected) =>
+ Failure(
+ new RuntimeException(s"Cannot call connect when in state=${bad}")
+ )
+ case Preconnection =>
+ peerOpt = Some(client.peer)
+
+ logger.info(s"Connection established with peer=${peerOpt.get}")
+
+ val newState = Preconnection.toInitializing(client)
+
+ val _ = toState(newState)
+
+ logger.debug(s"new state ${internalState}")
+ logger.debug(s"isConnected=${isConnected}")
+ val peerMsgSender = PeerMessageSender(client, chainAppConfig.network)
+
+ peerMsgSender.sendVersionMessage()
+
+ Success(())
+ }
+ }
+
+ protected[networking] def disconnect(): Try[Unit] = {
+
+ internalState match {
+ case bad @ (_: Initializing | _: Disconnected | Preconnection) =>
+ Failure(
+ new RuntimeException(
+ s"Cannot disconnect from peer=${peerOpt.get} when in state=${bad}")
+ )
+
+ case good: Normal =>
+ logger.debug(s"Disconnected bitcoin peer=${peerOpt.get}")
+ val newState = Disconnected(
+ clientConnectP = good.clientConnectP,
+ clientDisconnectP = good.clientDisconnectP.success(()),
+ versionMsgP = good.versionMsgP,
+ verackMsgP = good.verackMsgP
+ )
+
+ val _ = toState(newState)
+ Success(())
+ }
+ }
+
+ def isConnected: Boolean = internalState.isConnected
+
+ def isDisconnected: Boolean = internalState.isDisconnected
+
+ def hasReceivedVersionMsg: Boolean =
+ internalState.hasReceivedVersionMsg.isCompleted
+
+ def hasReceivedVerackMsg: Boolean =
+ internalState.hasReceivedVerackMsg.isCompleted
+
+ def isInitialized: Boolean = internalState.isInitialized
+
+ def handleNetworkMessageReceived(
+ networkMsgRecv: PeerMessageReceiver.NetworkMessageReceived): Unit = {
+
+ //create a way to send a response if we need too
+ val peerMsgSender =
+ PeerMessageSender(networkMsgRecv.client, chainAppConfig.network)
+
+ logger.info(
+ s"Received message=${networkMsgRecv.msg.header.commandName} from peer=${peerOpt
+ .map(_.socket)} ")
+ networkMsgRecv.msg.payload match {
+ case controlPayload: ControlPayload =>
+ handleControlPayload(payload = controlPayload, sender = peerMsgSender)
+ ()
+ case dataPayload: DataPayload =>
+ handleDataPayload(payload = dataPayload, sender = peerMsgSender)
+ }
+ }
+
+ /**
+ * Handles a [[DataPayload]] message. It checks if the sender is the parent
+ * actor, it sends it to our peer on the network. If the sender was the
+ * peer on the network, forward to the actor that spawned our actor
+ *
+ * @param payload
+ * @param sender
+ */
+ private def handleDataPayload(
+ payload: DataPayload,
+ sender: PeerMessageSender): Unit = {
+ val dataMsgHandler = new DataMessageHandler(chainAppConfig)
+ //else it means we are receiving this data payload from a peer,
+ //we need to handle it
+ dataMsgHandler.handleDataPayload(payload, sender)
+ }
+
+ /**
+ * Handles control payloads defined here https://bitcoin.org/en/developer-reference#control-messages
+ *
+ * @param payload the payload we need to do something with
+ * @param sender the [[PeerMessageSender]] we can use to initialize an subsequent messages that need to be sent
+ * @return the requests with the request removed for which the @payload is responding too
+ */
+ private def handleControlPayload(
+ payload: ControlPayload,
+ sender: PeerMessageSender): Try[Unit] = {
+ payload match {
+
+ case versionMsg: VersionMessage =>
+ logger.debug(
+ s"Received version message from peer=${peerOpt.get} msg=${versionMsg}")
+
+ internalState match {
+ case bad @ (_: Disconnected | _: Normal | Preconnection) =>
+ Failure(
+ new RuntimeException(
+ s"Cannot handle version message while in state=${bad}"))
+
+ case good: Initializing =>
+ internalState = good.withVersionMsg(versionMsg)
+
+ sender.sendVerackMessage()
+
+ //we want peers to just send us headers
+ //we don't want to have to request them manually
+ sender.sendHeadersMessage()
+
+ Success(())
+ }
+
+ case VerAckMessage =>
+ logger.debug(s"Received verack message from peer=${peerOpt.get}")
+
+ internalState match {
+ case bad @ (_: Disconnected | _: Normal | Preconnection) =>
+ Failure(
+ new RuntimeException(
+ s"Cannot handle version message while in state=${bad}"))
+
+ case good: Initializing =>
+ internalState = good.toNormal(VerAckMessage)
+ Success(())
+ }
+
+ case _: PingMessage =>
+ Success(())
+ case SendHeadersMessage =>
+ //not implemented as of now
+ Success(())
+ case _: AddrMessage =>
+ Success(())
+ case _ @(_: FilterAddMessage | _: FilterLoadMessage |
+ FilterClearMessage) =>
+ Success(())
+ case _ @(GetAddrMessage | _: PongMessage) =>
+ Success(())
+ case _: RejectMessage =>
+ Success(())
+ case _: FeeFilterMessage =>
+ Success(())
+ }
+ }
+
+ private def toState(state: PeerMessageReceiverState): Unit = {
+ internalState = state
+ }
+}
+
+object PeerMessageReceiver {
+
+ sealed abstract class PeerMessageReceiverMsg {
+
+ /** Who we need to use to send a reply to our peer
+ * if a response is needed for this message
+ */
+ def client: Client
+ }
+
+ case class NetworkMessageReceived(msg: NetworkMessage, client: Client)
+ extends PeerMessageReceiverMsg
+
+ def apply(
+ state: PeerMessageReceiverState,
+ nodeAppConfig: NodeAppConfig,
+ chainAppConfig: ChainAppConfig)(
+ implicit ref: ActorRefFactory): PeerMessageReceiver = {
+ new PeerMessageReceiver(state, nodeAppConfig, chainAppConfig)(ref)
+ }
+
+ def newReceiver(nodeAppConfig: NodeAppConfig, chainAppConfig: ChainAppConfig)(
+ implicit ref: ActorRefFactory): PeerMessageReceiver = {
+ new PeerMessageReceiver(state = PeerMessageReceiverState.fresh(),
+ nodeAppConfig,
+ chainAppConfig)(ref)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala
new file mode 100644
index 0000000000..bca88013ce
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala
@@ -0,0 +1,181 @@
+package org.bitcoins.node.networking.peer
+
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.messages.{VerAckMessage, VersionMessage}
+import org.bitcoins.node.networking.Client
+
+import scala.concurrent.{Future, Promise}
+
+sealed abstract class PeerMessageReceiverState extends BitcoinSLogger {
+
+ /** This promise gets completed when we receive a
+ * [[akka.io.Tcp.Connected]] message from [[Client]]
+ */
+ def clientConnectP: Promise[Client]
+
+ /** The [[org.bitcoins.node.networking.Client]] we are
+ * connected to. This isn't initiated until the client
+ * has called [[PeerMessageReceiver.connect()]]
+ */
+ private val clientConnectF: Future[Client] = clientConnectP.future
+
+ /** This promise is completed in the [[PeerMessageReceiver.disconnect()]]
+ * when a [[Client]] initiates a disconnections from
+ * our peer on the p2p network
+ */
+ def clientDisconnectP: Promise[Unit]
+
+ private val clientDisconnectF: Future[Unit] = clientDisconnectP.future
+
+ /** If this future is completed, we are
+ * connected to our client. Note, there is
+ * no timeout on this future and no guarantee
+ * that some one has actually initiated
+ * a connection with a [[Client]]
+ * @return
+ */
+ def isConnected: Boolean = {
+ clientConnectF.isCompleted && !clientDisconnectF.isCompleted
+ }
+
+ def isDisconnected: Boolean = {
+ clientDisconnectF.isCompleted
+ }
+
+ def versionMsgP: Promise[VersionMessage]
+
+ /** This future is completed when our peer has sent
+ * us their [[VersionMessage]] indicating what protocol
+ * features they support
+ */
+ def hasReceivedVersionMsg: Future[VersionMessage] = {
+ versionMsgP.future
+ }
+
+ def verackMsgP: Promise[VerAckMessage.type]
+
+ /** This future completes when we have received a
+ * [[VerAckMessage]] from our peer. This means our
+ * peer has accepted our [[VersionMessage]] and is
+ * willing to connect with us
+ * @return
+ */
+ def hasReceivedVerackMsg: Future[VerAckMessage.type] = {
+ verackMsgP.future
+ }
+
+ /** Indicates we have connected and completed the initial
+ * handshake that is required to connect to the bitcoin p2p network
+ * If this is true, we can start sending and receiving normal
+ * [[NetworkMessage]] with our peer on the network
+ * @return
+ */
+ def isInitialized: Boolean = {
+ hasReceivedVersionMsg.isCompleted && hasReceivedVerackMsg.isCompleted
+ }
+}
+
+object PeerMessageReceiverState {
+
+ /** Represents a [[org.bitcoins.node.networking.peer.PeerMessageReceiverState]]
+ * where the peer is not connected to the p2p network
+ */
+ final case object Preconnection extends PeerMessageReceiverState {
+ def clientConnectP: Promise[Client] = Promise[Client]()
+
+ //should this be completed since the client is disconnected???
+ def clientDisconnectP: Promise[Unit] = Promise[Unit]()
+ def versionMsgP: Promise[VersionMessage] = Promise[VersionMessage]()
+ def verackMsgP: Promise[VerAckMessage.type] = Promise[VerAckMessage.type]()
+
+ /** Converts [[org.bitcoins.node.networking.peer.PeerMessageReceiverState.Preconnection]] to [[Initializing]] */
+ def toInitializing(client: Client): Initializing = {
+ val p = clientConnectP
+ p.success(client)
+ Initializing(
+ clientConnectP = p,
+ clientDisconnectP = clientDisconnectP,
+ versionMsgP = versionMsgP,
+ verackMsgP = verackMsgP
+ )
+ }
+ }
+
+ /** Means that our [[org.bitcoins.node.networking.peer.PeerMessageReceiver]]
+ * is still going through the initilization process. This means
+ * we still need to receive a [[VersionMessage]] or [[VerAckMessage]]
+ * from our peer on the p2p network
+ */
+ case class Initializing(
+ clientConnectP: Promise[Client],
+ clientDisconnectP: Promise[Unit],
+ versionMsgP: Promise[VersionMessage],
+ verackMsgP: Promise[VerAckMessage.type]
+ ) extends PeerMessageReceiverState {
+ require(
+ isConnected,
+ "We cannot have a PeerMessageReceiverState.Initializng if we are not connected")
+
+ /** Helper method to modifing the state of [[org.bitcoins.node.networking.peer.PeerMessageReceiverState.Initializing]]
+ * when we receive a [[VersionMessage]]. This completes versoinMsgP
+ * @return
+ */
+ def withVersionMsg(versionMsg: VersionMessage): Initializing = {
+ PeerMessageReceiverState.Initializing(
+ clientConnectP = clientConnectP,
+ clientDisconnectP = clientDisconnectP,
+ versionMsgP = versionMsgP.success(versionMsg),
+ verackMsgP = verackMsgP
+ )
+ }
+
+ /** Completes the verack message promise and transitions
+ * our [[PeerMessageReceiverState]] to [[PeerMessageReceiverState.Normal]]
+ */
+ def toNormal(verAckMessage: VerAckMessage.type): Normal = {
+ Normal(
+ clientConnectP = clientConnectP,
+ clientDisconnectP = clientDisconnectP,
+ versionMsgP = versionMsgP,
+ verackMsgP = verackMsgP.success(verAckMessage)
+ )
+ }
+ }
+
+ /** This represents a [[org.bitcoins.node.networking.peer.PeerMessageReceiverState]]
+ * where the peer has been fully initialized and is ready to send messages to
+ * the peer on the network
+ */
+ case class Normal(
+ clientConnectP: Promise[Client],
+ clientDisconnectP: Promise[Unit],
+ versionMsgP: Promise[VersionMessage],
+ verackMsgP: Promise[VerAckMessage.type]
+ ) extends PeerMessageReceiverState {
+ require(
+ isConnected,
+ s"We cannot have a PeerMessageReceiverState.Normal if the Peer is not connected")
+ require(
+ isInitialized,
+ s"We cannot have a PeerMessageReceiverState.Normal if the Peer is not initialized")
+ }
+
+ case class Disconnected(
+ clientConnectP: Promise[Client],
+ clientDisconnectP: Promise[Unit],
+ versionMsgP: Promise[VersionMessage],
+ verackMsgP: Promise[VerAckMessage.type])
+ extends PeerMessageReceiverState {
+ require(
+ isDisconnected,
+ "We cannot be in the disconnected state if a peer is not disconnected")
+ }
+
+ def fresh(): PeerMessageReceiverState.Preconnection.type = {
+ PeerMessageReceiverState.Preconnection
+ }
+
+}
+
+object Initializing {}
diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala
new file mode 100644
index 0000000000..407854733d
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala
@@ -0,0 +1,97 @@
+package org.bitcoins.node.networking.peer
+
+import akka.actor.ActorRef
+import akka.io.Tcp
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.messages._
+import org.bitcoins.node.messages.control.{PongMessage, VersionMessage}
+import org.bitcoins.node.messages.data.GetHeadersMessage
+import org.bitcoins.node.models.Peer
+import org.bitcoins.node.networking.Client
+
+/**
+ * Created by chris on 6/7/16.
+ * This actor is the middle man between our [[Client]] and higher level actors such as
+ * [[org.bitcoins.node.networking.BlockActor]]. When it receives a message, it tells [[Client]] to create connection to a peer,
+ * then it exchanges [[VersionMessage]], [[VerAckMessage]] and [[org.bitcoins.node.messages.PingMessage]]/[[PongMessage]] message
+ * with our peer on the network. When the Client finally responds to the [[NetworkMessage]] we originally
+ * sent it sends that [[NetworkMessage]] back to the actor that requested it.
+ */
+class PeerMessageSender(client: Client)(implicit np: NetworkParameters)
+ extends BitcoinSLogger {
+ private val socket = client.peer.socket
+
+ /** Initiates a connection with the given [[Peer]] */
+ def connect(): Unit = {
+ logger.info(s"Attempting to connect to peer=$socket")
+ (client.actor ! Tcp.Connect(socket))
+ }
+
+ def disconnect(): Unit = {
+ logger.info(s"Disconnecting peer at socket=${socket}")
+ (client.actor ! Tcp.Close)
+ }
+
+ /** Sends a [[org.bitcoins.node.messages.VersionMessage VersionMessage]] to our peer */
+ def sendVersionMessage(): Unit = {
+ val versionMsg = VersionMessage(client.peer.socket, np)
+ sendMsg(versionMsg)
+ }
+
+ def sendVerackMessage(): Unit = {
+ val verackMsg = VerAckMessage
+ sendMsg(verackMsg)
+ }
+
+ def sendGetHeadersMessage(lastHash: DoubleSha256Digest): Unit = {
+ val headersMsg = GetHeadersMessage(lastHash)
+ sendMsg(headersMsg)
+ }
+
+ def sendHeadersMessage(): Unit = {
+ val sendHeadersMsg = SendHeadersMessage
+ sendMsg(sendHeadersMsg)
+ }
+
+ private def sendMsg(msg: NetworkPayload): Unit = {
+ logger.debug(
+ s"PeerMessageSender sending to peer=${socket} msg=${msg.commandName}")
+ val newtworkMsg = NetworkMessage(np, msg)
+ client.actor ! newtworkMsg
+ }
+}
+
+object PeerMessageSender {
+
+ private case class PeerMessageSenderImpl(client: Client)(
+ implicit np: NetworkParameters)
+ extends PeerMessageSender(client)(np)
+
+ sealed abstract class PeerMessageHandlerMsg
+
+ /**
+ * For when we are done with exchanging version and verack messages
+ * This means we can send normal p2p messages now
+ */
+ case object HandshakeFinished extends PeerMessageHandlerMsg
+
+ case class SendToPeer(msg: NetworkMessage) extends PeerMessageHandlerMsg
+
+ /** Accumulators network messages while we are doing a handshake with our peer
+ * and caches a peer handler actor so we can send a [[HandshakeFinished]]
+ * message back to the actor when we are fully connected
+ *
+ * @param networkMsgs
+ * @param peerHandler
+ */
+ case class MessageAccumulator(
+ networkMsgs: Vector[(ActorRef, NetworkMessage)],
+ peerHandler: ActorRef)
+
+ def apply(client: Client, np: NetworkParameters): PeerMessageSender = {
+ PeerMessageSenderImpl(client)(np)
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/peer/ConnectedPeerManager.scala b/node/src/main/scala/org/bitcoins/node/peer/ConnectedPeerManager.scala
new file mode 100644
index 0000000000..ed6b0684fe
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/peer/ConnectedPeerManager.scala
@@ -0,0 +1,32 @@
+package org.bitcoins.node.peer
+
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.models.Peer
+
+/** Manages all peers we have active connections with */
+class ConnectedPeerManager extends BitcoinSLogger {
+ private var connectedPeers: Vector[Peer] = Vector.empty
+
+ def add(peer: Peer): ConnectedPeerManager = {
+ logger.debug(s"Adding peer=${peer} to connected peers")
+
+ connectedPeers = connectedPeers.+:(peer)
+
+ this
+ }
+
+ def delete(peer: Peer): Option[ConnectedPeerManager] = {
+ val currentPeers = connectedPeers
+ val newPeers = currentPeers.filterNot(_ == peer)
+ if (newPeers.length != currentPeers.length) {
+ connectedPeers = newPeers
+ Some(this)
+ } else {
+ None
+ }
+ }
+
+ def empty: ConnectedPeerManager = {
+ new ConnectedPeerManager
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala
new file mode 100644
index 0000000000..f58721994b
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala
@@ -0,0 +1,28 @@
+package org.bitcoins.node.serializers
+
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.headers.NetworkHeader
+import org.bitcoins.node.messages.NetworkPayload
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.headers.NetworkHeader
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/11/16.
+ */
+trait RawNetworkMessageSerializer extends RawBitcoinSerializer[NetworkMessage] {
+
+ def read(bytes: ByteVector): NetworkMessage = {
+ //first 24 bytes are the header
+ val header = NetworkHeader(bytes.take(24))
+ val payload = NetworkPayload(header, bytes.slice(24, bytes.size))
+ NetworkMessage(header, payload)
+ }
+
+ def write(networkMessage: NetworkMessage): ByteVector = {
+ networkMessage.header.bytes ++ networkMessage.payload.bytes
+ }
+}
+
+object RawNetworkMessageSerializer extends RawNetworkMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala
new file mode 100644
index 0000000000..1ae207baed
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala
@@ -0,0 +1,51 @@
+package org.bitcoins.node.serializers.headers
+
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.headers.NetworkHeader
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 5/31/16.
+ * Reads and writes a message header on the peer-to-peer network
+ * https://bitcoin.org/en/developer-reference#message-headers
+ */
+trait RawNetworkHeaderSerializer
+ extends RawBitcoinSerializer[NetworkHeader]
+ with BitcoinSLogger {
+
+ /**
+ * Transforms a sequence of bytes into a message header
+ * @param bytes the byte representation for a MessageHeader on the peer-to-peer network
+ * @return the native object for the MessageHeader
+ */
+ def read(bytes: ByteVector): NetworkHeader = {
+ val network = bytes.take(4)
+ //.trim removes the null characters appended to the command name
+ val commandName = bytes.slice(4, 16).toArray.map(_.toChar).mkString.trim
+ val payloadSize = UInt32(bytes.slice(16, 20).reverse)
+ val checksum = bytes.slice(20, 24)
+ NetworkHeader(network, commandName, payloadSize, checksum)
+ }
+
+ /**
+ * Takes in a message header and serializes it to hex
+ * @param messageHeader the message header to be serialized
+ * @return the hexadecimal representation of the message header
+ */
+ def write(messageHeader: NetworkHeader): ByteVector = {
+ val network = messageHeader.network
+ val commandNameNoPadding = messageHeader.commandName.map(_.toByte)
+ //command name needs to be 12 bytes in size, or 24 chars in hex
+ val commandName = ByteVector(commandNameNoPadding).padRight(12)
+ val checksum = messageHeader.checksum
+ network ++
+ commandName ++
+ messageHeader.payloadSize.bytes.reverse ++
+ checksum
+ }
+
+}
+
+object RawNetworkHeaderSerializer extends RawNetworkHeaderSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala
new file mode 100644
index 0000000000..090ad5acd1
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala
@@ -0,0 +1,23 @@
+package org.bitcoins.node.serializers.messages
+
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.TypeIdentifier
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 5/31/16.
+ * Reads and writes a type identifier on a peer-to-peer network
+ * https://bitcoin.org/en/developer-reference#data-messages
+ */
+trait RawTypeIdentifierSerializer extends RawBitcoinSerializer[TypeIdentifier] {
+
+ override def read(bytes: ByteVector): TypeIdentifier = {
+ TypeIdentifier(UInt32(bytes.reverse))
+ }
+
+ override def write(typeIdentifier: TypeIdentifier): ByteVector = {
+ typeIdentifier.num.bytes.reverse
+ }
+}
+object RawTypeIdentifierSerializer extends RawTypeIdentifierSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala
new file mode 100644
index 0000000000..3aa41c6f7f
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala
@@ -0,0 +1,63 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper}
+import org.bitcoins.node.messages.AddrMessage
+import org.bitcoins.node.messages.control.AddrMessage
+import org.bitcoins.node.util.NetworkIpAddress
+import scodec.bits.ByteVector
+
+import scala.annotation.tailrec
+
+/**
+ * Created by chris on 6/3/16.
+ * Responsible for the serialization and deserialization of AddrMessages
+ * https://bitcoin.org/en/developer-reference#addr
+ */
+trait RawAddrMessageSerializer extends RawBitcoinSerializer[AddrMessage] {
+
+ override def read(bytes: ByteVector): AddrMessage = {
+ val ipCount = CompactSizeUInt.parseCompactSizeUInt(bytes)
+ val ipAddressBytes = bytes.slice(ipCount.size.toInt, bytes.size)
+ val (networkIpAddresses, _) =
+ parseNetworkIpAddresses(ipCount, ipAddressBytes)
+ AddrMessage(ipCount, networkIpAddresses)
+ }
+
+ override def write(addrMessage: AddrMessage): ByteVector = {
+ addrMessage.ipCount.bytes ++
+ RawSerializerHelper.write(
+ ts = addrMessage.addresses,
+ serializer = RawNetworkIpAddressSerializer.write)
+ }
+
+ /**
+ * Parses ip addresses inside of an AddrMessage
+ * @param ipCount the number of ip addresses we need to parse from the AddrMessage
+ * @param bytes the bytes from which we need to parse the ip addresses
+ * @return the parsed ip addresses and the remaining bytes
+ */
+ private def parseNetworkIpAddresses(
+ ipCount: CompactSizeUInt,
+ bytes: ByteVector): (Seq[NetworkIpAddress], ByteVector) = {
+ @tailrec
+ def loop(
+ remainingAddresses: BigInt,
+ remainingBytes: ByteVector,
+ accum: List[NetworkIpAddress]): (Seq[NetworkIpAddress], ByteVector) = {
+ if (remainingAddresses <= 0) (accum.reverse, remainingBytes)
+ else {
+ val networkIpAddress =
+ RawNetworkIpAddressSerializer.read(remainingBytes)
+ val newRemainingBytes =
+ remainingBytes.slice(networkIpAddress.size, remainingBytes.size)
+ loop(remainingAddresses - 1,
+ newRemainingBytes,
+ networkIpAddress :: accum)
+ }
+ }
+ loop(ipCount.num.toInt, bytes, List())
+ }
+}
+
+object RawAddrMessageSerializer extends RawAddrMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala
new file mode 100644
index 0000000000..ea924f3eaa
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala
@@ -0,0 +1,25 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.currency.Satoshis
+import org.bitcoins.core.number.Int64
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.core.wallet.fee.SatoshisPerKiloByte
+import org.bitcoins.node.messages.FeeFilterMessage
+import org.bitcoins.node.messages.control.FeeFilterMessage
+import scodec.bits.ByteVector
+
+sealed abstract class RawFeeFilterMessageSerializer extends RawBitcoinSerializer[FeeFilterMessage] {
+
+ override def read(bytes: ByteVector): FeeFilterMessage = {
+ val i64 = Int64.fromBytes(bytes.take(8).reverse)
+ val sat = Satoshis(i64)
+ val satPerKb = SatoshisPerKiloByte(sat)
+ FeeFilterMessage(satPerKb)
+ }
+
+ override def write(feeFilterMessage: FeeFilterMessage): ByteVector = {
+ feeFilterMessage.feeRate.currencyUnit.bytes.reverse
+ }
+}
+
+object RawFeeFilterMessageSerializer extends RawFeeFilterMessageSerializer
\ No newline at end of file
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala
new file mode 100644
index 0000000000..d934bc99f8
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.FilterAddMessage
+import org.bitcoins.node.messages.control.FilterAddMessage
+import org.bitcoins.node.messages.FilterAddMessage
+import org.bitcoins.node.messages.control.FilterAddMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 8/26/16.
+ * Responsible for serializing and deserializing a [[FilterAddMessage]]
+ * [[https://bitcoin.org/en/developer-reference#filteradd]]
+ */
+trait RawFilterAddMessageSerializer
+ extends RawBitcoinSerializer[FilterAddMessage] {
+
+ override def read(bytes: ByteVector): FilterAddMessage = {
+ val elementSize = CompactSizeUInt.parseCompactSizeUInt(bytes)
+ val element = bytes.slice(elementSize.size.toInt, bytes.size)
+ FilterAddMessage(elementSize, element)
+ }
+
+ override def write(filterAddMessage: FilterAddMessage): ByteVector = {
+ filterAddMessage.elementSize.bytes ++ filterAddMessage.element
+ }
+}
+
+object RawFilterAddMessageSerializer extends RawFilterAddMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala
new file mode 100644
index 0000000000..228bc287f0
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala
@@ -0,0 +1,27 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.core.serializers.bloom.RawBloomFilterSerializer
+import org.bitcoins.node.messages.FilterLoadMessage
+import org.bitcoins.node.messages.control.FilterLoadMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/19/16.
+ * Serializes and deserializes a [[FilterLoadMessage]]
+ * https://bitcoin.org/en/developer-reference#filterload
+ */
+trait RawFilterLoadMessageSerializer
+ extends RawBitcoinSerializer[FilterLoadMessage] {
+
+ override def read(bytes: ByteVector): FilterLoadMessage = {
+ val filter = RawBloomFilterSerializer.read(bytes)
+ FilterLoadMessage(filter)
+ }
+
+ override def write(filterLoadMessage: FilterLoadMessage): ByteVector = {
+ RawBloomFilterSerializer.write(filterLoadMessage.bloomFilter)
+ }
+}
+
+object RawFilterLoadMessageSerializer extends RawFilterLoadMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala
new file mode 100644
index 0000000000..85830fafcf
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala
@@ -0,0 +1,42 @@
+package org.bitcoins.node.serializers.messages.control
+
+import java.net.InetAddress
+
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.core.util.{BitcoinSLogger, NumberUtil}
+import org.bitcoins.node.messages.control.ServiceIdentifier
+import org.bitcoins.node.util.{BitcoinSpvNodeUtil, NetworkIpAddress}
+import org.bitcoins.node.util.{BitcoinSpvNodeUtil, NetworkIpAddress}
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * Responsible for serializing and deserializing network ip address objects on the p2p network
+ * https://bitcoin.org/en/developer-reference#addr
+ */
+trait RawNetworkIpAddressSerializer
+ extends RawBitcoinSerializer[NetworkIpAddress]
+ with BitcoinSLogger {
+
+ def read(bytes: ByteVector): NetworkIpAddress = {
+ val time = UInt32(bytes.take(4).reverse)
+ val services = ServiceIdentifier(bytes.slice(4, 12))
+ val ipBytes = bytes.slice(12, 28)
+ val ipAddress = InetAddress.getByAddress(ipBytes.toArray)
+ val port = NumberUtil.toLong(bytes.slice(28, 30)).toInt
+ NetworkIpAddress(time, services, ipAddress, port)
+ }
+
+ def write(networkIpAddress: NetworkIpAddress): ByteVector = {
+ val time = networkIpAddress.time.bytes.reverse
+ val services = networkIpAddress.services.bytes
+ val ipAddress = BitcoinSpvNodeUtil.writeAddress(networkIpAddress.address)
+ //uint16s are only 4 hex characters
+ val port = ByteVector.fromShort(networkIpAddress.port.toShort)
+ time ++ services ++ ipAddress ++ port
+ }
+
+}
+
+object RawNetworkIpAddressSerializer extends RawNetworkIpAddressSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala
new file mode 100644
index 0000000000..3986e4be9e
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala
@@ -0,0 +1,26 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.PingMessage
+import org.bitcoins.node.messages.control.PingMessage
+import org.bitcoins.node.messages.PingMessage
+import org.bitcoins.node.messages.control.PingMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/29/16.
+ * https://bitcoin.org/en/developer-reference#ping
+ */
+trait RawPingMessageSerializer extends RawBitcoinSerializer[PingMessage] {
+
+ override def read(bytes: ByteVector): PingMessage = {
+ val nonce = UInt64(bytes.take(8))
+ PingMessage(nonce)
+ }
+
+ override def write(pingMessage: PingMessage): ByteVector =
+ pingMessage.nonce.bytes
+}
+
+object RawPingMessageSerializer extends RawPingMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala
new file mode 100644
index 0000000000..4894eb926b
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala
@@ -0,0 +1,25 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.PongMessage
+import org.bitcoins.node.messages.control.PongMessage
+import org.bitcoins.node.messages.PongMessage
+import org.bitcoins.node.messages.control.PongMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/5/16.
+ */
+trait RawPongMessageSerializer extends RawBitcoinSerializer[PongMessage] {
+
+ override def read(bytes: ByteVector): PongMessage = {
+ PongMessage(UInt64(bytes.take(8)))
+ }
+
+ override def write(pongMessage: PongMessage): ByteVector = {
+ pongMessage.nonce.bytes
+ }
+}
+
+object RawPongMessageSerializer extends RawPongMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala
new file mode 100644
index 0000000000..c0dbc45623
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala
@@ -0,0 +1,51 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.RejectMessage
+import org.bitcoins.node.messages.control.RejectMessage
+import org.bitcoins.node.messages.RejectMessage
+import org.bitcoins.node.messages.control.RejectMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 8/31/16.
+ */
+trait RawRejectMessageSerializer extends RawBitcoinSerializer[RejectMessage] {
+
+ def read(bytes: ByteVector): RejectMessage = {
+ val messageSize = CompactSizeUInt.parseCompactSizeUInt(bytes)
+ val message: String = bytes
+ .slice(messageSize.size.toInt,
+ messageSize.size.toInt +
+ messageSize.num.toInt)
+ .toArray
+ .map(_.toChar)
+ .mkString
+ val code: Char = bytes(messageSize.size.toInt + messageSize.num.toInt).toChar
+ val reasonSizeStartIndex = messageSize.size.toInt + messageSize.num.toInt + 1
+ val reasonSize = CompactSizeUInt.parseCompactSizeUInt(
+ bytes.slice(reasonSizeStartIndex.toInt, bytes.size))
+ val reason = bytes
+ .slice(
+ (reasonSizeStartIndex + reasonSize.size).toInt,
+ (reasonSizeStartIndex + reasonSize.size.toInt + reasonSize.num.toInt))
+ .toArray
+ .map(_.toChar)
+ .mkString
+ val extraStartIndex = (reasonSizeStartIndex + reasonSize.size.toInt + reasonSize.num.toInt)
+ val extra = bytes.slice(extraStartIndex, bytes.size)
+ RejectMessage(messageSize, message, code, reasonSize, reason, extra)
+ }
+
+ def write(rejectMessage: RejectMessage): ByteVector = {
+ rejectMessage.messageSize.bytes ++
+ ByteVector(rejectMessage.message.map(_.toByte)) ++
+ ByteVector.fromByte(rejectMessage.code.toByte) ++
+ rejectMessage.reasonSize.bytes ++
+ ByteVector(rejectMessage.reason.map(_.toByte)) ++
+ rejectMessage.extra
+ }
+}
+
+object RawRejectMessageSerializer extends RawRejectMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala
new file mode 100644
index 0000000000..f55681f99d
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.node.serializers.messages.control
+
+import org.bitcoins.core.number.UInt64
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.control.ServiceIdentifier
+import org.bitcoins.node.messages.control.ServiceIdentifier
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * Responsible for serializing and deserializing the
+ * service identifier in a network message
+ * https://bitcoin.org/en/developer-reference#version
+ */
+trait RawServiceIdentifierSerializer
+ extends RawBitcoinSerializer[ServiceIdentifier] {
+
+ override def read(bytes: ByteVector): ServiceIdentifier = {
+ val serviceBytes = bytes.take(8)
+ //since bitcoin uses big endian for numbers, we need to convert to little endian
+ ServiceIdentifier(UInt64(serviceBytes.reverse))
+ }
+
+ override def write(serviceIdentifier: ServiceIdentifier): ByteVector = {
+ serviceIdentifier.num.bytes.reverse
+ }
+
+}
+
+object RawServiceIdentifierSerializer extends RawServiceIdentifierSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala
new file mode 100644
index 0000000000..6b50f58ec2
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala
@@ -0,0 +1,109 @@
+package org.bitcoins.node.serializers.messages.control
+
+import java.net.InetAddress
+
+import org.bitcoins.core.number.{Int32, Int64, UInt32, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.messages.VersionMessage
+import org.bitcoins.node.messages.control.{ServiceIdentifier, VersionMessage}
+import org.bitcoins.node.util.BitcoinSpvNodeUtil
+import org.bitcoins.node.versions.ProtocolVersion
+import org.bitcoins.node.messages.control.{ServiceIdentifier, VersionMessage}
+import org.bitcoins.node.util.BitcoinSpvNodeUtil
+import org.bitcoins.node.versions.ProtocolVersion
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * Responsible for serialization and deserialization of VersionMessages on the p2p network
+ * https://bitcoin.org/en/developer-reference#version
+ */
+trait RawVersionMessageSerializer
+ extends RawBitcoinSerializer[VersionMessage]
+ with BitcoinSLogger {
+
+ def read(bytes: ByteVector): VersionMessage = {
+ val version = ProtocolVersion(bytes.take(4))
+
+ val services = ServiceIdentifier(bytes.slice(4, 12))
+
+ val timestamp = Int64(bytes.slice(12, 20).reverse)
+
+ val addressReceiveServices = ServiceIdentifier(bytes.slice(20, 28))
+
+ val addressReceiveIpAddress =
+ InetAddress.getByAddress(bytes.slice(28, 44).toArray)
+
+ val addressReceivePort = UInt32(bytes.slice(44, 46)).toInt
+
+ val addressTransServices = ServiceIdentifier(bytes.slice(46, 54))
+
+ val addressTransIpAddress =
+ InetAddress.getByAddress(bytes.slice(54, 70).toArray)
+
+ val addressTransPort = UInt32(bytes.slice(70, 72)).toInt
+
+ val nonce = UInt64(bytes.slice(72, 80))
+
+ val userAgentSize =
+ CompactSizeUInt.parseCompactSizeUInt(bytes.slice(80, bytes.size))
+
+ val userAgentBytesStartIndex = 80 + userAgentSize.size.toInt
+
+ val userAgentBytes = bytes.slice(
+ userAgentBytesStartIndex,
+ userAgentBytesStartIndex + userAgentSize.num.toInt)
+
+ val userAgent = userAgentBytes.toArray.map(_.toChar).mkString
+
+ val startHeightStartIndex = (userAgentBytesStartIndex + userAgentSize.num.toInt)
+
+ val startHeight = Int32(
+ bytes.slice(startHeightStartIndex, startHeightStartIndex + 4).reverse)
+
+ val relay = bytes(startHeightStartIndex + 4) != 0
+
+ VersionMessage(
+ version = version,
+ services = services,
+ timestamp = timestamp,
+ addressReceiveServices = addressReceiveServices,
+ addressReceiveIpAddress = addressReceiveIpAddress,
+ addressReceivePort = addressReceivePort,
+ addressTransServices = addressTransServices,
+ addressTransIpAddress = addressTransIpAddress,
+ addressTransPort = addressTransPort,
+ nonce = nonce,
+ userAgent = userAgent,
+ startHeight = startHeight,
+ relay = relay
+ )
+ }
+
+ def write(versionMessage: VersionMessage): ByteVector = {
+ versionMessage.version.bytes ++
+ versionMessage.services.bytes ++
+ versionMessage.timestamp.bytes.reverse ++
+ versionMessage.addressReceiveServices.bytes ++
+ BitcoinSpvNodeUtil.writeAddress(versionMessage.addressReceiveIpAddress) ++
+ //encode hex returns 8 characters, but we only need the last 4 since port number is a uint16
+ //check for precision loss here?
+ ByteVector.fromShort(versionMessage.addressReceivePort.toShort) ++
+ versionMessage.addressTransServices.bytes ++
+ BitcoinSpvNodeUtil.writeAddress(versionMessage.addressTransIpAddress) ++
+ //encode hex returns 8 characters, but we only need the last 4 since port number is a uint16
+ //check for precision loss here?
+ ByteVector.fromShort(versionMessage.addressTransPort.toShort) ++
+ versionMessage.nonce.bytes ++
+ versionMessage.userAgentSize.bytes ++
+ ByteVector(versionMessage.userAgent.getBytes) ++
+ versionMessage.startHeight.bytes.reverse ++
+ (if (versionMessage.relay) ByteVector.fromByte(1.toByte)
+ else ByteVector.fromByte(0.toByte))
+ }
+
+}
+
+object RawVersionMessageSerializer extends RawVersionMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala
new file mode 100644
index 0000000000..2b852ec0ca
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala
@@ -0,0 +1,24 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.protocol.blockchain.Block
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.BlockMessage
+import org.bitcoins.node.messages.data.BlockMessage
+import org.bitcoins.node.messages.BlockMessage
+import org.bitcoins.node.messages.data.BlockMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/8/16.
+ */
+trait RawBlockMessageSerializer extends RawBitcoinSerializer[BlockMessage] {
+
+ def read(bytes: ByteVector): BlockMessage = {
+ val block = Block.fromBytes(bytes)
+ BlockMessage(block)
+ }
+
+ def write(blockMsg: BlockMessage): ByteVector = blockMsg.block.bytes
+}
+
+object RawBlockMessageSerializer extends RawBlockMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala
new file mode 100644
index 0000000000..15413c64e7
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala
@@ -0,0 +1,73 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper}
+import org.bitcoins.node.messages.GetBlocksMessage
+import org.bitcoins.node.messages.data.GetBlocksMessage
+import org.bitcoins.node.versions.ProtocolVersion
+import org.bitcoins.node.messages.GetBlocksMessage
+import org.bitcoins.node.messages.data.GetBlocksMessage
+import org.bitcoins.node.versions.ProtocolVersion
+import scodec.bits.ByteVector
+
+import scala.annotation.tailrec
+
+/**
+ * Created by chris on 6/1/16.
+ * This trait is responsible for the serialization and deserialization of
+ * getblocks messages in on the p2p network
+ * https://bitcoin.org/en/developer-reference#getblocks
+ */
+trait RawGetBlocksMessageSerializer
+ extends RawBitcoinSerializer[GetBlocksMessage] {
+
+ def read(bytes: ByteVector): GetBlocksMessage = {
+ val version = ProtocolVersion(bytes.take(4))
+ val hashCount =
+ CompactSizeUInt.parseCompactSizeUInt(bytes.slice(4, bytes.size))
+ val blockHeaderStartByte = (hashCount.size + 4).toInt
+ val blockHeaderBytesStopHash = bytes.slice(blockHeaderStartByte, bytes.size)
+ val (blockHashHeaders, remainingBytes) =
+ parseBlockHeaders(blockHeaderBytesStopHash, hashCount)
+ val stopHash = DoubleSha256Digest(remainingBytes.slice(0, 32))
+ GetBlocksMessage(version, hashCount, blockHashHeaders, stopHash)
+ }
+
+ def write(getBlocksMessage: GetBlocksMessage): ByteVector = {
+ getBlocksMessage.protocolVersion.bytes ++
+ getBlocksMessage.hashCount.bytes ++
+ RawSerializerHelper.writeNetworkElements(
+ getBlocksMessage.blockHeaderHashes) ++
+ getBlocksMessage.stopHash.bytes
+ }
+
+ /**
+ * Helper function to parse block headers from a sequence of bytes
+ * Hashes are 32 bytes
+ * @param bytes the bytes which need to be parsed into BlockHeader hashes
+ * @param compactSizeUInt the p2p network object used to indicate how many block header hashes there are
+ * @return the sequence of hashes and the remaining bytes that need to be parsed
+ */
+ private def parseBlockHeaders(
+ bytes: ByteVector,
+ compactSizeUInt: CompactSizeUInt): (List[DoubleSha256Digest], ByteVector) = {
+ @tailrec
+ def loop(
+ remainingHeaders: Long,
+ accum: List[DoubleSha256Digest],
+ remainingBytes: ByteVector): (List[DoubleSha256Digest], ByteVector) = {
+ if (remainingHeaders <= 0) (accum.reverse, remainingBytes)
+ else {
+ val dsha256 = DoubleSha256Digest(remainingBytes.slice(0, 32))
+ val rem = remainingBytes.slice(32, remainingBytes.size)
+ loop(remainingHeaders = remainingHeaders - 1,
+ accum = dsha256 :: accum,
+ remainingBytes = rem)
+ }
+ }
+ loop(compactSizeUInt.num.toInt, List.empty, bytes)
+ }
+}
+
+object RawGetBlocksMessageSerializer extends RawGetBlocksMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala
new file mode 100644
index 0000000000..aeaeb02a11
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala
@@ -0,0 +1,29 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.GetDataMessage
+import org.bitcoins.node.messages.data.{GetDataMessage, InventoryMessage}
+import org.bitcoins.node.messages.data.{GetDataMessage, InventoryMessage}
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 7/8/16.
+ * https://bitcoin.org/en/developer-reference#getdata
+ */
+trait RawGetDataMessageSerializer extends RawBitcoinSerializer[GetDataMessage] {
+ //InventoryMessages & GetDataMessages have the same structure and are serialized the same
+ //so we can piggy back off of the serialilzers for InventoryMessages
+
+ def read(bytes: ByteVector): GetDataMessage = {
+ val inv = InventoryMessage(bytes)
+ GetDataMessage(inv.inventoryCount, inv.inventories)
+ }
+
+ def write(getDataMessage: GetDataMessage): ByteVector = {
+ val inv = InventoryMessage(getDataMessage.inventoryCount,
+ getDataMessage.inventories)
+ inv.bytes
+ }
+}
+
+object RawGetDataMessageSerializer extends RawGetDataMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala
new file mode 100644
index 0000000000..d426e0b7a4
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala
@@ -0,0 +1,68 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper}
+import org.bitcoins.node.messages.GetHeadersMessage
+import org.bitcoins.node.messages.data.GetHeadersMessage
+import org.bitcoins.node.versions.ProtocolVersion
+import org.bitcoins.node.messages.GetHeadersMessage
+import org.bitcoins.node.messages.data.GetHeadersMessage
+import org.bitcoins.node.versions.ProtocolVersion
+import scodec.bits.ByteVector
+
+import scala.annotation.tailrec
+
+/**
+ * Created by chris on 6/29/16.
+ */
+trait RawGetHeadersMessageSerializer
+ extends RawBitcoinSerializer[GetHeadersMessage] {
+
+ override def read(bytes: ByteVector): GetHeadersMessage = {
+ val version = ProtocolVersion(bytes.take(4))
+ val hashCount =
+ CompactSizeUInt.parseCompactSizeUInt(bytes.slice(4, bytes.length))
+ val hashesStartIndex = (hashCount.size + 4).toInt
+ val (hashes, remainingBytes) =
+ parseHashes(bytes.slice(hashesStartIndex, bytes.length), hashCount)
+ val hashStop = DoubleSha256Digest(remainingBytes.take(32))
+ GetHeadersMessage(version, hashCount, hashes, hashStop)
+ }
+
+ override def write(getHeadersMessage: GetHeadersMessage): ByteVector = {
+ getHeadersMessage.version.bytes ++
+ getHeadersMessage.hashCount.bytes ++
+ RawSerializerHelper.writeNetworkElements(getHeadersMessage.hashes) ++
+ getHeadersMessage.hashStop.bytes
+ }
+
+ /**
+ * Parses hashes inside of [[GetHeadersMessage]]
+ *
+ * @param bytes the bytes which the hashes are parsed from
+ * @param numHashes the number of hases that need to be parsed
+ * @return the parsed hases and the remaining bytes in the network message
+ */
+ private def parseHashes(
+ bytes: ByteVector,
+ numHashes: CompactSizeUInt): (List[DoubleSha256Digest], ByteVector) = {
+ @tailrec
+ def loop(
+ remainingBytes: ByteVector,
+ remainingHashes: Long,
+ accum: List[DoubleSha256Digest]): (List[DoubleSha256Digest], ByteVector) = {
+ if (remainingHashes <= 0) (accum.reverse, remainingBytes)
+ else {
+ val hash = DoubleSha256Digest(remainingBytes.take(32))
+ loop(remainingBytes.slice(32, remainingBytes.length),
+ remainingHashes - 1,
+ hash :: accum)
+ }
+ }
+
+ loop(bytes, numHashes.num.toInt, List.empty)
+ }
+}
+
+object RawGetHeadersMessageSerializer extends RawGetHeadersMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala
new file mode 100644
index 0000000000..d1311a754b
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala
@@ -0,0 +1,60 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.HeadersMessage
+import org.bitcoins.node.messages.data.HeadersMessage
+import org.bitcoins.node.messages.HeadersMessage
+import org.bitcoins.node.messages.data.HeadersMessage
+import scodec.bits.ByteVector
+
+import scala.annotation.tailrec
+
+/**
+ * Created by chris on 7/5/16.
+ */
+trait RawHeadersMessageSerializer extends RawBitcoinSerializer[HeadersMessage] {
+
+ def read(bytes: ByteVector): HeadersMessage = {
+ val compactSizeUInt = CompactSizeUInt.parseCompactSizeUInt(bytes)
+ val headerStartIndex = compactSizeUInt.size.toInt
+ val headerBytes = bytes.slice(headerStartIndex, bytes.length)
+ val headers = parseBlockHeaders(headerBytes, compactSizeUInt)
+ HeadersMessage(compactSizeUInt, headers)
+ }
+
+ def write(headersMessage: HeadersMessage): ByteVector = {
+ val z = ByteVector.fromByte(0.toByte)
+ val headerBytes = headersMessage.headers.foldLeft(ByteVector.empty) {
+ case (accum, msg) =>
+ accum ++ msg.bytes ++ z
+ }
+ headersMessage.count.bytes ++ headerBytes
+ }
+
+ private def parseBlockHeaders(
+ bytes: ByteVector,
+ compactSizeUInt: CompactSizeUInt): Vector[BlockHeader] = {
+ @tailrec
+ def loop(
+ remainingBytes: ByteVector,
+ remainingHeaders: Long,
+ accum: List[BlockHeader]): List[BlockHeader] = {
+ if (remainingHeaders <= 0) accum
+ //81 is because HeadersMessage appends 0x00 at the end of every block header for some reason
+ //read https://bitcoin.org/en/developer-reference#headers
+ else {
+ require(
+ remainingBytes.size >= 80,
+ "We do not have enough bytes for another block header, this probably means a tcp frame was not aligned")
+ loop(remainingBytes = remainingBytes.slice(81, remainingBytes.length),
+ remainingHeaders = remainingHeaders - 1,
+ accum = BlockHeader(remainingBytes.take(80)) :: accum)
+ }
+ }
+ loop(bytes, compactSizeUInt.num.toInt, List.empty).reverse.toVector
+ }
+}
+
+object RawHeadersMessageSerializer extends RawHeadersMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala
new file mode 100644
index 0000000000..358c1a6bfd
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala
@@ -0,0 +1,70 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper}
+import org.bitcoins.node.messages.InventoryMessage
+import org.bitcoins.node.messages.data.{Inventory, InventoryMessage}
+import org.bitcoins.node.messages.data.{Inventory, InventoryMessage}
+import scodec.bits.ByteVector
+
+import scala.annotation.tailrec
+
+/**
+ * Created by chris on 5/31/16.
+ * Serializes and deserializes inventory objects on the peer-to-peer network
+ * https://bitcoin.org/en/developer-reference#inv
+ */
+trait RawInventoryMessageSerializer
+ extends RawBitcoinSerializer[InventoryMessage] {
+
+ /**
+ * Transforms a sequence of bytes into a Inventory object
+ * @param bytes
+ * @return
+ */
+ override def read(bytes: ByteVector): InventoryMessage = {
+ val inventoryCount = CompactSizeUInt.parseCompactSizeUInt(bytes)
+ val inventoryStart = inventoryCount.size.toInt
+ val remainingBytes = bytes.slice(inventoryStart, bytes.size)
+ val (inventories, _) = parseInventories(remainingBytes, inventoryCount)
+ InventoryMessage(inventoryCount, inventories)
+ }
+
+ /**
+ * Tranforms an inventory object into a hexadecimal string
+ * @param inventoryMessage
+ * @return
+ */
+ override def write(inventoryMessage: InventoryMessage): ByteVector = {
+ val msgBytes =
+ RawSerializerHelper.writeNetworkElements(inventoryMessage.inventories)
+ inventoryMessage.inventoryCount.bytes ++ msgBytes
+ }
+
+ /**
+ * Parses the sequence of bytes into a sequence of inventories inside of the inventory message
+ * @param bytes the bytes that need to be parsed into Inventories
+ * @param requiredInventories the num of inventories inside this sequence of bytes
+ * @return the sequence of inventories and the remaining bytes
+ */
+ private def parseInventories(
+ bytes: ByteVector,
+ requiredInventories: CompactSizeUInt): (List[Inventory], ByteVector) = {
+ @tailrec
+ def loop(
+ remainingInventories: Long,
+ remainingBytes: ByteVector,
+ accum: List[Inventory]): (List[Inventory], ByteVector) = {
+ if (remainingInventories <= 0) (accum.reverse, remainingBytes)
+ else {
+ val inventory = RawInventorySerializer.read(remainingBytes.slice(0, 36))
+ loop(remainingInventories - 1,
+ remainingBytes.slice(36, remainingBytes.size),
+ inventory :: accum)
+ }
+ }
+ loop(requiredInventories.num.toInt, bytes, List.empty)
+ }
+}
+
+object RawInventoryMessageSerializer extends RawInventoryMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala
new file mode 100644
index 0000000000..b0539ace82
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala
@@ -0,0 +1,29 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.crypto.DoubleSha256Digest
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.TypeIdentifier
+import org.bitcoins.node.messages.data.Inventory
+import org.bitcoins.node.messages.TypeIdentifier
+import org.bitcoins.node.messages.data.Inventory
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/1/16.
+ * Serializes/deserializes a inventory
+ * https://bitcoin.org/en/developer-reference#term-inventory
+ */
+trait RawInventorySerializer extends RawBitcoinSerializer[Inventory] {
+
+ override def read(bytes: ByteVector): Inventory = {
+ val typeIdentifier = TypeIdentifier(bytes.take(4))
+ val hash = DoubleSha256Digest(bytes.slice(4, bytes.size))
+ Inventory(typeIdentifier, hash)
+ }
+
+ override def write(inventory: Inventory): ByteVector = {
+ inventory.typeIdentifier.bytes ++ inventory.hash.bytes
+ }
+}
+
+object RawInventorySerializer extends RawInventorySerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala
new file mode 100644
index 0000000000..89bc403989
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala
@@ -0,0 +1,30 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.protocol.blockchain.MerkleBlock
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.messages.MerkleBlockMessage
+import org.bitcoins.node.messages.data.MerkleBlockMessage
+import org.bitcoins.node.messages.MerkleBlockMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * Responsible for serialization and deserialization of MerkleBlockMessages
+ * https://bitcoin.org/en/developer-reference#merkleblock
+ */
+trait RawMerkleBlockMessageSerializer
+ extends RawBitcoinSerializer[MerkleBlockMessage]
+ with BitcoinSLogger {
+
+ def read(bytes: ByteVector): MerkleBlockMessage = {
+ val merkleBlock = MerkleBlock(bytes)
+ MerkleBlockMessage(merkleBlock)
+ }
+
+ def write(merkleBlockMessage: MerkleBlockMessage): ByteVector =
+ merkleBlockMessage.merkleBlock.bytes
+
+}
+
+object RawMerkleBlockMessageSerializer extends RawMerkleBlockMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala
new file mode 100644
index 0000000000..814554619c
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala
@@ -0,0 +1,39 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.NotFoundMessage
+import org.bitcoins.node.messages.data.{InventoryMessage, NotFoundMessage}
+import org.bitcoins.node.messages.NotFoundMessage
+import org.bitcoins.node.messages.data.{InventoryMessage, NotFoundMessage}
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * Responsible for the serialization and deserialization of a NotFound message on the p2p network
+ * https://bitcoin.org/en/developer-reference#notfound
+ */
+trait RawNotFoundMessageSerializer
+ extends RawBitcoinSerializer[NotFoundMessage] {
+
+ override def read(bytes: ByteVector): NotFoundMessage = {
+ //this seems funky, but according to the documentation inventory messages
+ //and NotFoundMessages have the same structure, therefore we can piggy back
+ //off of the serializer used by InventoryMessage
+ val inventoryMessage = InventoryMessage(bytes)
+ NotFoundMessage(inventoryMessage.inventoryCount,
+ inventoryMessage.inventories)
+
+ }
+
+ override def write(notFoundMessage: NotFoundMessage): ByteVector = {
+ //Since InventoryMessages and NotFoundMessages have the same format
+ //we can just create an inventory message then piggy back off of the
+ //serializer used by inventory message
+ val inventoryMessage = InventoryMessage(notFoundMessage.inventoryCount,
+ notFoundMessage.inventories)
+ inventoryMessage.bytes
+ }
+
+}
+
+object RawNotFoundMessageSerializer extends RawNotFoundMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala
new file mode 100644
index 0000000000..975b03d03e
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala
@@ -0,0 +1,28 @@
+package org.bitcoins.node.serializers.messages.data
+
+import org.bitcoins.core.protocol.transaction.Transaction
+import org.bitcoins.core.serializers.RawBitcoinSerializer
+import org.bitcoins.node.messages.TransactionMessage
+import org.bitcoins.node.messages.data.TransactionMessage
+import org.bitcoins.node.messages.TransactionMessage
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/2/16.
+ * Responsible for serializing and deserializing TransactionMessage network objects
+ * https://bitcoin.org/en/developer-reference#tx
+ */
+trait RawTransactionMessageSerializer
+ extends RawBitcoinSerializer[TransactionMessage] {
+
+ def read(bytes: ByteVector): TransactionMessage = {
+ val transaction = Transaction(bytes)
+ TransactionMessage(transaction)
+ }
+
+ def write(transactionMessage: TransactionMessage): ByteVector = {
+ transactionMessage.transaction.bytes
+ }
+}
+
+object RawTransactionMessageSerializer extends RawTransactionMessageSerializer
diff --git a/node/src/main/scala/org/bitcoins/node/store/BlockHeaderStore.scala b/node/src/main/scala/org/bitcoins/node/store/BlockHeaderStore.scala
new file mode 100644
index 0000000000..aa7e33be97
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/store/BlockHeaderStore.scala
@@ -0,0 +1,52 @@
+package org.bitcoins.node.store
+
+import java.io.FileOutputStream
+
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.node.constant.Constants
+import org.bitcoins.node.constant.Constants
+
+import scala.io.Source
+
+/**
+ * Created by chris on 9/5/16.
+ */
+trait BlockHeaderStore {
+
+ /** Appends block headers to the given file */
+ def append(headers: Seq[BlockHeader], file: java.io.File): Unit = {
+ printToFile(file) { p =>
+ headers.map(_.hex).foreach(p.println)
+ }
+ }
+
+ /** Appends block headers to the default blockheader file */
+ def append(headers: Seq[BlockHeader]): Unit =
+ append(headers, Constants.blockHeaderFile)
+
+ /** Reads block headers from the given file */
+ def read(file: java.io.File): Seq[BlockHeader] =
+ (for {
+ line <- Source.fromFile(file).getLines()
+ } yield BlockHeader(line)).toSeq
+
+ /** Reads block headers from the default [[BlockHeader]] file */
+ def read: Seq[BlockHeader] = read(Constants.blockHeaderFile)
+
+ /** Returns the last [[BlockHeader]] in the block header store */
+ def lastHeader: Option[BlockHeader] = lastHeader(Constants.blockHeaderFile)
+
+ /** Returns the last [[BlockHeader]] in the block header store */
+ def lastHeader(file: java.io.File): Option[BlockHeader] = {
+ val headers = read(file)
+ if (headers.isEmpty) None else Some(headers.last)
+ }
+
+ private def printToFile(f: java.io.File)(
+ op: java.io.PrintWriter => Unit): Unit = {
+ val p = new java.io.PrintWriter(new FileOutputStream(f, true))
+ try { op(p) } finally { p.close() }
+ }
+}
+
+object BlockHeaderStore extends BlockHeaderStore
diff --git a/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala b/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala
new file mode 100644
index 0000000000..d2421d445e
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala
@@ -0,0 +1,114 @@
+package org.bitcoins.node.util
+
+import java.net.InetAddress
+
+import akka.util.{ByteString, CompactByteString}
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.NetworkMessage
+import scodec.bits.ByteVector
+
+import scala.annotation.tailrec
+import scala.util.{Failure, Success, Try}
+
+/**
+ * Created by chris on 6/3/16.
+ */
+trait BitcoinSpvNodeUtil extends BitcoinSLogger {
+
+ /**
+ * Writes an ip address to the representation that the p2p network requires
+ * An IPv6 address is in big endian byte order
+ * An IPv4 address has to be mapped to an IPv6 address
+ * https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
+ *
+ * @param iNetAddress
+ * @return
+ */
+ def writeAddress(iNetAddress: InetAddress): ByteVector = {
+ if (iNetAddress.getAddress.size == 4) {
+ //this means we need to convert the IPv4 address to an IPv6 address
+ //first we have an 80 bit prefix of zeros
+ val zeroBytes = Array.fill(10)(0.toByte)
+ //the next 16 bits are ones
+ val oneBytes = List(0xff.toByte, 0xff.toByte)
+
+ val prefix: ByteVector = ByteVector(zeroBytes) ++ ByteVector(oneBytes)
+ val addr = prefix ++ ByteVector(iNetAddress.getAddress)
+ addr
+ } else {
+ ByteVector(iNetAddress.getAddress)
+ }
+ }
+
+ /**
+ * Akka sends messages as one byte stream. There is not a 1 to 1 relationship between byte streams received and
+ * bitcoin protocol messages. This function parses our byte stream into individual network messages
+ * @param bytes the bytes that need to be parsed into individual messages
+ * @return the parsed [[NetworkMessage]]'s and the unaligned bytes that did not parse to a message
+ */
+ def parseIndividualMessages(
+ bytes: ByteVector): (List[NetworkMessage], ByteVector) = {
+ @tailrec
+ def loop(
+ remainingBytes: ByteVector,
+ accum: List[NetworkMessage]): (List[NetworkMessage], ByteVector) = {
+ if (remainingBytes.length <= 0) {
+ (accum.reverse, remainingBytes)
+ } else {
+ val messageTry = Try(NetworkMessage(remainingBytes))
+ messageTry match {
+ case Success(message) =>
+ if (message.header.payloadSize.toInt != message.payload.bytes.size) {
+ //this means our tcp frame was not aligned, therefore put the message back in the
+ //buffer and wait for the remaining bytes
+ (accum.reverse, remainingBytes)
+ } else {
+ val newRemainingBytes = remainingBytes.slice(
+ message.bytes.length,
+ remainingBytes.length)
+ loop(newRemainingBytes, message :: accum)
+ }
+ case Failure(exception) =>
+ logger.debug(
+ "Failed to parse network message, could be because tcp frame isn't aligned")
+ logger.debug(exception.getMessage)
+ //this case means that our TCP frame was not aligned with bitcoin protocol
+ //return the unaligned bytes so we can apply them to the next tcp frame of bytes we receive
+ //http://stackoverflow.com/a/37979529/967713
+ (accum.reverse, remainingBytes)
+ }
+ }
+ }
+ val (messages, remainingBytes) = loop(bytes, Nil)
+ (messages, remainingBytes)
+ }
+
+ /**
+ * Wraps our ByteVector into an akka [[ByteString]] object
+ * @param bytes
+ * @return
+ */
+ def buildByteString(bytes: ByteVector): ByteString = {
+ CompactByteString(bytes.toArray)
+ }
+
+ /**
+ * Creates a unique actor name for a actor
+ * @param className
+ * @return
+ */
+ def createActorName(className: String): String = {
+ s"${className}-${System.currentTimeMillis()}"
+ }
+
+ /**
+ * Creates a unique actor name for a given class
+ * @param className
+ * @return
+ */
+ def createActorName(className: Class[_]): String =
+ createActorName(className.getSimpleName)
+}
+
+object BitcoinSpvNodeUtil extends BitcoinSpvNodeUtil
diff --git a/node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala b/node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala
new file mode 100644
index 0000000000..0353e3ee92
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala
@@ -0,0 +1,90 @@
+package org.bitcoins.node.util
+
+import java.net.{InetAddress, InetSocketAddress}
+
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.NetworkElement
+import org.bitcoins.core.util.Factory
+import org.bitcoins.node.messages.control.{NodeNetwork, ServiceIdentifier}
+import org.bitcoins.node.messages.control.ServiceIdentifier
+import org.bitcoins.node.serializers.messages.control.RawNetworkIpAddressSerializer
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 5/31/16.
+ * Encapsulated network IP address currently uses the following structure
+ * https://bitcoin.org/en/developer-reference#addr
+ */
+sealed abstract class NetworkIpAddress extends NetworkElement {
+
+ /**
+ * Added in protocol version 31402.
+ * A time in Unix epoch time format. Nodes advertising their own IP address set this to the current time.
+ * Nodes advertising IP addresses they’ve connected to set this to the last time they connected to that node.
+ * Other nodes just relaying the IP address should not change the time.
+ * Nodes can use the time field to avoid relaying old addr messages.
+ * Malicious nodes may change times or even set them in the future.
+ *
+ * @return
+ */
+ def time: UInt32
+
+ /**
+ * The services the node advertised in its version message.
+ *
+ * @return
+ */
+ def services: ServiceIdentifier
+
+ /**
+ * IPv6 address in big endian byte order.
+ * IPv4 addresses can be provided as IPv4-mapped IPv6 addresses
+ *
+ * @return
+ */
+ def address: InetAddress
+
+ /**
+ * Port number in big endian byte order.
+ * Note that Bitcoin Core will only connect to nodes with non-standard port numbers as
+ * a last resort for finding peers. This is to prevent anyone from trying to use the
+ * network to disrupt non-Bitcoin services that run on other ports.
+ *
+ * @return
+ */
+ def port: Int
+
+ override def bytes: ByteVector = RawNetworkIpAddressSerializer.write(this)
+}
+
+object NetworkIpAddress extends Factory[NetworkIpAddress] {
+ private case class NetworkIpAddressImpl(
+ time: UInt32,
+ services: ServiceIdentifier,
+ address: InetAddress,
+ port: Int)
+ extends NetworkIpAddress
+
+ def apply(
+ time: UInt32,
+ services: ServiceIdentifier,
+ address: InetAddress,
+ port: Int): NetworkIpAddress = {
+ NetworkIpAddressImpl(time, services, address, port)
+ }
+
+ def fromBytes(bytes: ByteVector): NetworkIpAddress =
+ RawNetworkIpAddressSerializer.read(bytes)
+
+ def fromInetSocketAddress(socket: InetSocketAddress): NetworkIpAddress = {
+ //TODO: this might be wrong, read this time documentation above
+ val timestamp = UInt32(System.currentTimeMillis() / 1000)
+
+ NetworkIpAddress(
+ time = timestamp,
+ services = NodeNetwork,
+ address = socket.getAddress,
+ port = socket.getPort
+ )
+ }
+}
diff --git a/node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala b/node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala
new file mode 100644
index 0000000000..4ec502c975
--- /dev/null
+++ b/node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala
@@ -0,0 +1,163 @@
+package org.bitcoins.node.versions
+
+import org.bitcoins.core.protocol.NetworkElement
+import org.bitcoins.core.util.Factory
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/1/16.
+ * The peer to peer network has versions to allow for new operations
+ * Here are the currently protocol versions in the network
+ * [[https://bitcoin.org/en/developer-reference#protocol-versions]]
+ */
+sealed trait ProtocolVersion extends NetworkElement
+
+object ProtocolVersion extends Factory[ProtocolVersion] {
+
+ val versions: Seq[ProtocolVersion] = List(
+ ProtocolVersion106,
+ ProtocolVersion209,
+ ProtocolVersion311,
+ ProtocolVersion31402,
+ ProtocolVersion31800,
+ ProtocolVersion60000,
+ ProtocolVersion60001,
+ ProtocolVersion60002,
+ ProtocolVersion70001,
+ ProtocolVersion70002,
+ ProtocolVersion70012
+ )
+
+ def fromBytes(bytes: ByteVector): ProtocolVersion = {
+ //TODO: Should we default to the latest protocol version if the bytes don't match???
+ versions.find(v => v.bytes == bytes).getOrElse(ProtocolVersion70015)
+ }
+}
+
+/**
+ * Added receive IP address fields to version message.
+ * Bitcoin Core 0.1.6 (Oct 2009)
+ */
+case object ProtocolVersion106 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("6a000000").get
+}
+
+/**
+ * Added checksum field to message headers.
+ * Bitcoin Core 0.2.9 (May 2010)
+ */
+case object ProtocolVersion209 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("d1000000").get
+}
+
+/**
+ * Added alert message
+ * Bitcion Core 0.3.11 (Aug 2010)
+ */
+case object ProtocolVersion311 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("37010000").get
+}
+
+/**
+ * Added time field to addr message.
+ * Bitcoin Core 0.3.15 (Oct 2010)
+ */
+case object ProtocolVersion31402 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("aa7a0000").get
+}
+
+/**
+ * Added getheaders message and headers message.
+ * Bitcoin Core 0.3.18 (Dec 2010)
+ */
+case object ProtocolVersion31800 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("387c0000").get
+}
+
+/**
+ * BIP14: Separated protocol version from Bitcoin Core version
+ * Bitcoin Core 0.6.0 (Mar 2012)
+ */
+case object ProtocolVersion60000 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("60ea0000").get
+}
+
+/**
+ * BIP31: Added nonce field to ping message, Added pong message
+ * Bitcoin Core 0.6.1 (May 2012)
+ */
+case object ProtocolVersion60001 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("61ea0000").get
+}
+
+/**
+ * BIP35: Added mempool message.
+ *• Extended getdata message to allow download of memory pool transactions
+ * Bitcoin Core 0.7.0 (Sep 2012)
+ */
+case object ProtocolVersion60002 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("62ea0000").get
+}
+
+/**
+ * Added notfound message.
+ * BIP37:
+ *• Added filterload message.
+ *• Added filteradd message.
+ *• Added filterclear message.
+ *• Added merkleblock message.
+ *• Added relay field to version message
+ *• Added MSG_FILTERED_BLOCK inventory type to getdata message.
+ * Bitcoin Core 0.8.0 (Feb 2013)
+ */
+case object ProtocolVersion70001 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("71110100").get
+}
+
+/**
+ * Send multiple inv messages in response to a mempool message if necessary
+ * BIP61: Add reject message
+ * Bitcoin Core 0.9.0 (Mar 2014)
+ */
+case object ProtocolVersion70002 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("72110100").get
+}
+
+/**
+ * BIP130: Add sendheaders message
+ * Bitcoin Core 0.12.0
+ */
+case object ProtocolVersion70012 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("7c110100").get
+}
+
+/**
+ * Added feefilter message.
+ * Removed alert message system. See Alert System Retirement
+ * Bitcoin Core 0.13.0 (August 2016)
+ */
+case object ProtocolVersion70013 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("7d110100").get
+}
+
+/**
+ * BIP152
+ * Added sendcmpct, cmpctblock, getblocktxn, blocktxn messages
+ * Added MSG_CMPCT_BLOCK inventory type to getdata message.
+ * Bitcoin Core 0.13.0 (August 2016)
+ */
+case object ProtocolVersion70014 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("7e110100").get
+}
+
+/**
+ * New banning behavior for invalid compact blocks #9026 in v0.14.0, Backported to v0.13.2 in #9048.
+ * Bitcoin Core 0.13.2 (January 2017)
+ */
+case object ProtocolVersion70015 extends ProtocolVersion {
+ override val bytes: ByteVector = ByteVector.fromHex("7f110100").get
+}
+
+
+
+
diff --git a/project/Deps.scala b/project/Deps.scala
index 1eb29e3197..eff3bf040b 100644
--- a/project/Deps.scala
+++ b/project/Deps.scala
@@ -9,7 +9,7 @@ object Deps {
val scalaTest = "3.0.5"
val slf4j = "1.7.5"
val spray = "1.3.2"
- val zeromq = "0.4.3"
+ val zeromq = "0.5.1"
val akkav = "10.1.7"
val akkaStreamv = "2.5.21"
val playv = "2.7.0"
@@ -18,7 +18,14 @@ object Deps {
val nativeLoaderV = "2.3.2"
val typesafeConfigV = "1.3.3"
val ammoniteV = "1.6.2"
+
val asyncV = "0.9.7"
+ val jodaV = "2.9.4"
+ val postgresV = "9.4.1210"
+ val akkaActorV = akkaStreamv
+ val slickV = "3.3.0"
+ val sqliteV = "3.8.11.2"
+ val uJsonV = "0.7.1"
}
object Compile {
@@ -28,6 +35,7 @@ object Deps {
val zeromq = "org.zeromq" % "jeromq" % V.zeromq withSources () withJavadoc ()
val akkaHttp = "com.typesafe.akka" %% "akka-http" % V.akkav withSources () withJavadoc ()
val akkaStream = "com.typesafe.akka" %% "akka-stream" % V.akkaStreamv withSources () withJavadoc ()
+ val akkaActor = "com.typesafe.akka" %% "akka-actor" % V.akkaStreamv withSources () withJavadoc ()
val playJson = "com.typesafe.play" %% "play-json" % V.playv withSources () withJavadoc ()
val typesafeConfig = "com.typesafe" % "config" % V.typesafeConfigV withSources () withJavadoc ()
@@ -36,6 +44,18 @@ object Deps {
//for loading secp256k1 natively
val nativeLoader = "org.scijava" % "native-lib-loader" % V.nativeLoaderV withSources () withJavadoc ()
val ammonite = "com.lihaoyi" %% "ammonite" % V.ammoniteV cross CrossVersion.full
+
+ //node deps
+ val joda = "joda-time" % "joda-time" % V.jodaV
+
+ val slick = "com.typesafe.slick" %% "slick" % V.slickV withSources () withJavadoc ()
+ val slickHikari = "com.typesafe.slick" %% "slick-hikaricp" % V.slickV
+ val sqlite = "org.xerial" % "sqlite-jdbc" % V.sqliteV
+ val postgres = "org.postgresql" % "postgresql" % V.postgresV
+ val uJson = "com.lihaoyi" %% "ujson" % V.uJsonV
+
+ val scalacheck = "org.scalacheck" %% "scalacheck" % V.scalacheck withSources () withJavadoc ()
+ val scalaTest = "org.scalatest" %% "scalatest" % V.scalaTest withSources () withJavadoc ()
}
object Test {
@@ -44,20 +64,31 @@ object Deps {
val bitcoinj = ("org.bitcoinj" % "bitcoinj-core" % "0.14.4" % "test")
.exclude("org.slf4j", "slf4j-api")
val junitInterface = "com.novocode" % "junit-interface" % V.junitV % "test" withSources () withJavadoc ()
- val logback = "ch.qos.logback" % "logback-classic" % V.logback % "test" withSources () withJavadoc ()
- val scalacheck = "org.scalacheck" %% "scalacheck" % V.scalacheck % "test" withSources () withJavadoc ()
- val scalaTest = "org.scalatest" %% "scalatest" % V.scalaTest % "test" withSources () withJavadoc ()
+ val logback = Compile.logback % "test"
+ val scalacheck = Compile.scalacheck % "test"
+ val scalaTest = Compile.scalaTest % "test"
val spray = "io.spray" %% "spray-json" % V.spray % "test" withSources () withJavadoc ()
val akkaHttp = "com.typesafe.akka" %% "akka-http-testkit" % V.akkav % "test" withSources () withJavadoc ()
val akkaStream = "com.typesafe.akka" %% "akka-stream-testkit" % V.akkaStreamv % "test" withSources () withJavadoc ()
val ammonite = Compile.ammonite % "test"
val playJson = Compile.playJson % "test"
+ val akkaTestkit = "com.typesafe.akka" %% "akka-testkit" % V.akkaActorV withSources () withJavadoc ()
}
val root = List(
Test.ammonite
)
+ val chain = List(
+ Compile.slf4j,
+ Test.ammonite
+ )
+
+ val chainTest = List(
+ Test.ammonite,
+ Test.logback
+ )
+
val core = List(
Compile.bouncycastle,
Compile.scodec,
@@ -115,6 +146,13 @@ object Deps {
Test.ammonite
)
+ val dbCommons = List(
+ Compile.slick,
+ Compile.sqlite,
+ Compile.slickHikari,
+ Test.ammonite
+ )
+
val eclairRpc = List(
Compile.akkaHttp,
Compile.akkaStream,
@@ -132,14 +170,47 @@ object Deps {
Test.ammonite
)
+ val node = List(
+ Compile.akkaActor,
+ Compile.logback,
+ Compile.joda,
+ Compile.slick,
+ Compile.slickHikari,
+ Compile.sqlite,
+ Test.ammonite
+ )
+
+ val nodeTest = List(
+ Test.akkaTestkit,
+ Test.logback,
+ Test.scalaTest,
+ Test.ammonite
+ )
+
val testkit = List(
Compile.slf4j,
- "org.scalacheck" %% "scalacheck" % V.scalacheck withSources () withJavadoc (),
- "org.scalatest" %% "scalatest" % V.scalaTest withSources () withJavadoc (),
+ Compile.scalacheck,
+ Compile.scalaTest,
Test.ammonite
)
val scripts = List(
+ Compile.ammonite,
+ Compile.logback
+ )
+
+ val wallet = List(
+ Test.ammonite,
+ Compile.uJson
+ )
+
+ val walletTest = List(
+ Test.logback,
+ Test.akkaTestkit,
+ Test.ammonite
+ )
+
+ val doc = List(
Compile.ammonite,
Compile.logback,
Test.scalaTest,
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 5e4ca2b592..0e585e677a 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -25,3 +25,5 @@ addSbtPlugin("com.geirsson" % "sbt-ci-release" % "1.2.6")
// write markdown files with type-checked Scala
addSbtPlugin("org.scalameta" % "sbt-mdoc" % "1.3.0")
+
+addSbtPlugin("io.github.davidmweber" % "flyway-sbt" % "5.2.0")
diff --git a/secp256k1jni/natives/linux_64/libsecp256k1.la b/secp256k1jni/natives/linux_64/libsecp256k1.la
deleted file mode 120000
index 6036d76b90..0000000000
--- a/secp256k1jni/natives/linux_64/libsecp256k1.la
+++ /dev/null
@@ -1 +0,0 @@
-../libsecp256k1.la
\ No newline at end of file
diff --git a/testkit/src/main/resources/application.conf b/testkit/src/main/resources/application.conf
new file mode 100644
index 0000000000..49800e5ab0
--- /dev/null
+++ b/testkit/src/main/resources/application.conf
@@ -0,0 +1,19 @@
+bitcoin-s {
+ datadir = ${HOME}/.bitcoin-s/.unittest
+
+ database {
+ db {
+ # run against a file-based database
+ # url="jdbc:sqlite:"${dbPath}${dbName}
+
+ # run against an in-memory database
+ # cache=shared is needed to make it persist across DB connections
+ # (each query is one connection). DB is wiped on JVM being killed
+ # with this option set.
+ url = "jdbc:sqlite:file::memory:?cache=shared"
+
+ connectionPool = disabled
+ keepAliveConnection = true
+ }
+ }
+}
\ No newline at end of file
diff --git a/testkit/src/main/resources/logback-test.xml b/testkit/src/main/resources/logback-test.xml
new file mode 100644
index 0000000000..a84a24c11d
--- /dev/null
+++ b/testkit/src/main/resources/logback-test.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/BlockHeaderHelper.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/BlockHeaderHelper.scala
new file mode 100644
index 0000000000..1d14987d97
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/BlockHeaderHelper.scala
@@ -0,0 +1,137 @@
+package org.bitcoins.testkit.chain
+
+import org.bitcoins.chain.models.{BlockHeaderDb, BlockHeaderDbHelper}
+import org.bitcoins.chain.validation.TipValidation
+import org.bitcoins.core.crypto.{
+ DoubleSha256Digest,
+ DoubleSha256DigestBE,
+ ECPrivateKey
+}
+import org.bitcoins.core.number.{Int32, UInt32}
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+
+import scala.annotation.tailrec
+
+/** Useful helper methods for getting
+ * block header related data for
+ * unit tests.
+ */
+abstract class BlockHeaderHelper {
+
+ /**
+ * The previous block to this was [[header2]]
+ * @see [[https://blockstream.info/block/0000000000000000002339403dedc19ae93f6f3912d364b42f568afa1ba7cfec height #566,093]]
+ */
+ val header1: BlockHeader = {
+ val hex =
+ "00000020b45e33a345ad08ad2902cdd4101632fcbec009694b0c2500000000000000000016c99a795d8e0105d86f361341c7858d223fac261718bd608052822c5b4ae3cfd782815c505b2e17a56bb90b"
+ BlockHeader.fromHex(hex)
+ }
+
+ val header1Db: BlockHeaderDb = {
+ BlockHeaderDbHelper.fromBlockHeader(566093, header1)
+ }
+
+ /**
+ * The next block is [[header1]] after this block
+ * 000000000000000000250c4b6909c0befc321610d4cd0229ad08ad45a3335eb4
+ * @see [[https://blockstream.info/block/000000000000000000250c4b6909c0befc321610d4cd0229ad08ad45a3335eb4 #566,092]]
+ */
+ val header2: BlockHeader = {
+ val hex =
+ "00000020a82ff9c62e69a6cbed277b7f2a9ac9da3c7133a59a6305000000000000000000f6cd5708a6ba38d8501502b5b4e5b93627e8dcc9bd13991894c6e04ade262aa99582815c505b2e17479a751b"
+ BlockHeader.fromHex(hex)
+ }
+
+ val header2Db: BlockHeaderDb = {
+ BlockHeaderDbHelper.fromBlockHeader(566092, header2)
+ }
+
+ lazy val twoValidHeaders: Vector[BlockHeader] = {
+ //https://blockstream.info/block/0000000000000000002339403dedc19ae93f6f3912d364b42f568afa1ba7cfec?expand
+ val headers = Vector(header1, header2)
+ headers
+ }
+
+ /** Gives us a block header that has a bad prev hash (can't connect to anything */
+ lazy val badPrevHash: BlockHeader = {
+ BlockHeaderHelper.withPrevhash(bh = header1,
+ newPrevHash = DoubleSha256DigestBE.empty)
+ }
+
+ lazy val badNonce: BlockHeader = {
+ BlockHeaderHelper.withNonce(bh = header1, newNonce = UInt32.zero)
+ }
+
+ lazy val badNBits: BlockHeader = {
+ BlockHeaderHelper.withNBits(bh = header1, newNBits = UInt32.zero)
+ }
+
+ /** Modifies the given block header with the newPrevHash */
+ def withPrevhash(
+ bh: BlockHeader,
+ newPrevHash: DoubleSha256DigestBE): BlockHeader = {
+ BlockHeader(version = bh.version,
+ previousBlockHash = newPrevHash.flip,
+ merkleRootHash = bh.merkleRootHash,
+ time = bh.time,
+ nBits = bh.nBits,
+ nonce = bh.nonce)
+ }
+
+ /** Modifies the given block header with the new nonce */
+ def withNonce(bh: BlockHeader, newNonce: UInt32): BlockHeader = {
+ BlockHeader(version = bh.version,
+ previousBlockHash = bh.previousBlockHash,
+ merkleRootHash = bh.merkleRootHash,
+ time = bh.time,
+ nBits = bh.nBits,
+ nonce = newNonce)
+ }
+
+ /** Modifies the given block header with the new nBits */
+ def withNBits(bh: BlockHeader, newNBits: UInt32): BlockHeader = {
+ BlockHeader(version = bh.version,
+ previousBlockHash = bh.previousBlockHash,
+ merkleRootHash = bh.merkleRootHash,
+ time = bh.time,
+ nBits = newNBits,
+ nonce = bh.nonce)
+ }
+
+ /** Buidls a block header on top the given prev header
+ * The only consensus requirement that this method adheres to
+ * with the returned [[BlockHeaderDb]] is that
+ * 1. We reference the [[prevHeader.blockHeader.hash]] correct
+ * 2. We increment the height of [[prevHeader]] by one
+ * @param prevHeader
+ * @return
+ */
+ @tailrec
+ final def buildNextHeader(prevHeader: BlockHeaderDb): BlockHeaderDb = {
+ val prevHash = prevHeader.blockHeader.hash
+ val blockHeader = {
+ BlockHeader(
+ version = Int32.one,
+ previousBlockHash = prevHash,
+ //get random 32 bytes
+ merkleRootHash =
+ DoubleSha256Digest.fromBytes(ECPrivateKey.freshPrivateKey.bytes),
+ time = prevHeader.time + UInt32.one,
+ nBits = prevHeader.nBits,
+ //generate random uint32 for nonce
+ nonce =
+ UInt32(Math.abs(scala.util.Random.nextInt() % UInt32.max.toLong))
+ )
+ }
+
+ //check if header meets pow requirement, if it doesn't generate another
+ if (TipValidation.isBadNonce(blockHeader)) {
+ buildNextHeader(prevHeader)
+ } else {
+ BlockHeaderDbHelper.fromBlockHeader(prevHeader.height + 1, blockHeader)
+ }
+ }
+}
+
+object BlockHeaderHelper extends BlockHeaderHelper
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainTestUtil.scala
new file mode 100644
index 0000000000..72274ef90c
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainTestUtil.scala
@@ -0,0 +1,84 @@
+package org.bitcoins.testkit.chain
+
+import org.bitcoins.chain.models.{BlockHeaderDb, BlockHeaderDbHelper}
+import org.bitcoins.core.crypto
+import org.bitcoins.core.crypto.DoubleSha256DigestBE
+import org.bitcoins.core.protocol.blockchain.{
+ BlockHeader,
+ MainNetChainParams,
+ RegTestNetChainParams
+}
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+
+import scala.concurrent.{ExecutionContext, Future}
+
+sealed abstract class ChainTestUtil {
+ lazy val regTestChainParams: RegTestNetChainParams.type =
+ RegTestNetChainParams
+ lazy val regTestHeader: BlockHeader =
+ regTestChainParams.genesisBlock.blockHeader
+ lazy val regTestGenesisHeaderDb: BlockHeaderDb = {
+ BlockHeaderDbHelper.fromBlockHeader(height = 0, bh = regTestHeader)
+ }
+
+ lazy val mainnetChainParam: MainNetChainParams.type = MainNetChainParams
+
+ lazy val blockHeader562375 = BlockHeader.fromHex(
+ "0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c")
+
+ lazy val blockHeader562462 = BlockHeader.fromHex(
+ "0100000053fb045b4d3ca149faca8e7ea53cdb3168bc58b875e47196b3a6b3f100000000406468307c915485a9c9eabe31cc853e68311176e07e71475c3e26888fb7b7ed30846949ffff001d2b740f74")
+
+ lazy val blockHeader562463 = BlockHeader.fromHex(
+ "010000003ce6c27ae14022e4b6ea0a5c3633d156e3e3a47509c1adf085371ba300000000f01258747019514aa5c475cddd59a309347280ead98d19d8df8f9f99eb56757938866949ffff001d18bcb4f8")
+
+ lazy val blockHeader562464 = BlockHeader.fromHex(
+ "010000004bd0b78e90c6b0f361f395535ac170980de0c8214380daefce31fd1100000000282c9db8313817b4835efab229872eae2b8b5011c2e90ed14e57192984da062359896949ffff001d15c6aed8")
+
+ /** Contains block headers where a proof of work change is valid */
+ object ValidPOWChange {
+
+ //this is the first block in the 2016 block proof of work difficulty change interval
+ //https://blockstream.info/block/0000000000000000002567dc317da20ddb0d7ef922fe1f9c2375671654f9006c
+ lazy val blockHeader564480 = BlockHeader.fromHex(
+ "000000200cd536b3eb1cd9c028e081f1455006276b293467c3e5170000000000000000007bc1b27489db01c85d38a4bc6d2280611e9804f506d83ad00d2a33ebd663992f76c7725c505b2e174fb90f55")
+
+ lazy val blockHeaderDb564480 =
+ BlockHeaderDbHelper.fromBlockHeader(564480, blockHeader564480)
+
+ lazy val blockHeader566494 = BlockHeader.fromHex(
+ "00000020ea2cb07d670ddb7a158e72ddfcfd9e1b9bf4459278bb240000000000000000004fb33054d79de69bb84b4d5c7dd87d80473c416320427a882c72108f7e43fd0c3d3e855c505b2e178f328fe2")
+
+ lazy val blockHeaderDb566494 =
+ BlockHeaderDbHelper.fromBlockHeader(566594, blockHeader566494)
+
+ lazy val blockHeader566495 = BlockHeader.fromHex(
+ "000000202164d8c4e5246ab003fdebe36c697b9418aa454ec4190d00000000000000000059134ad5aaad38a0e75946c7d4cb09b3ad45b459070195dd564cde193cf0ef29c33e855c505b2e17f61af734")
+
+ lazy val blockHeaderDb566495 =
+ BlockHeaderDbHelper.fromBlockHeader(566495, blockHeader566495)
+
+ //https://blockstream.info/block/00000000000000000015fea169c62eb0a1161aba36932ca32bc3785cbb3480bf
+ lazy val blockHeader566496 = BlockHeader.fromHex(
+ "000000201b61e8961710991a47ff8187d946d93e4fb33569c09622000000000000000000d0098658f53531e6e67fc9448986b5a8f994da42d746079eabe10f55e561e243103f855c17612e1735c4afdb")
+
+ lazy val blockHeaderDb566496 =
+ BlockHeaderDbHelper.fromBlockHeader(566496, blockHeader566496)
+ }
+
+ /** Creates a best block header function for [[org.bitcoins.chain.blockchain.sync.ChainSync.sync() ChainSync.sync]] */
+ def bestBlockHashFnRpc(bitcoindF: Future[BitcoindRpcClient])(
+ implicit ec: ExecutionContext): () => Future[DoubleSha256DigestBE] = {
+ () =>
+ bitcoindF.flatMap(_.getBestBlockHash)
+ }
+
+ /** Creates a getBlocKHeader function for [[org.bitcoins.chain.blockchain.sync.ChainSync.sync() ChainSync.sync]] */
+ def getBlockHeaderFnRpc(bitcoindF: Future[BitcoindRpcClient])(
+ implicit ec: ExecutionContext): DoubleSha256DigestBE => Future[
+ BlockHeader] = { hash: crypto.DoubleSha256DigestBE =>
+ bitcoindF.flatMap(_.getBlockHeader(hash).map(_.blockHeader))
+ }
+}
+
+object ChainTestUtil extends ChainTestUtil
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainUnitTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainUnitTest.scala
new file mode 100644
index 0000000000..d1987ae346
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainUnitTest.scala
@@ -0,0 +1,419 @@
+package org.bitcoins.testkit.chain
+
+import java.net.InetSocketAddress
+
+import akka.actor.ActorSystem
+import com.typesafe.config.ConfigFactory
+import org.bitcoins.chain.blockchain.ChainHandler
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.chain.db.ChainDbManagement
+import org.bitcoins.chain.models.{
+ BlockHeaderDAO,
+ BlockHeaderDb,
+ BlockHeaderDbHelper
+}
+import org.bitcoins.core.protocol.blockchain.{Block, BlockHeader, ChainParams}
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.db.AppConfig
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+import org.bitcoins.testkit.chain
+import org.bitcoins.testkit.chain.fixture._
+import org.bitcoins.testkit.fixtures.BitcoinSFixture
+import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
+import org.bitcoins.zmq.ZMQSubscriber
+import org.scalatest._
+import play.api.libs.json.{JsError, JsSuccess, Json}
+import scodec.bits.ByteVector
+
+import scala.annotation.tailrec
+import scala.concurrent.duration._
+import scala.concurrent.{ExecutionContext, Future}
+
+trait ChainUnitTest
+ extends org.scalatest.fixture.AsyncFlatSpec
+ with BitcoinSFixture
+ with ChainFixtureHelper
+ with MustMatchers
+ with BitcoinSLogger
+ with BeforeAndAfter
+ with BeforeAndAfterAll {
+
+ implicit def system: ActorSystem
+
+ val timeout: FiniteDuration = 10.seconds
+
+ implicit lazy val chainParam: ChainParams = appConfig.chain
+
+ implicit lazy val appConfig: ChainAppConfig = ChainAppConfig()
+
+ /**
+ * Behaves exactly like the default conf, execpt
+ * network is set to mainnet
+ */
+ lazy val mainnetAppConfig: ChainAppConfig = {
+ val defaultConfig = ChainAppConfig()
+ val mainnetConf = ConfigFactory.parseString("bitcoin-s.network = mainnet")
+ defaultConfig.withOverrides(mainnetConf)
+ }
+
+ override def beforeAll(): Unit = {
+ AppConfig.throwIfDefaultDatadir(appConfig)
+ }
+
+ implicit def ec: ExecutionContext =
+ system.dispatcher
+
+ /**
+ * All untagged tests will be given this tag. Override this if you are using
+ * ChainFixture and the plurality of tests use some fixture other than Empty.
+ */
+ val defaultTag: ChainFixtureTag = ChainFixtureTag.Empty
+
+ def withChainFixture(test: OneArgAsyncTest): FutureOutcome = {
+ val stringTag =
+ test.tags.headOption.getOrElse(ChainFixtureTag.defaultTag.name)
+
+ val fixtureTag: ChainFixtureTag = ChainFixtureTag.from(stringTag)
+
+ val fixtureF: Future[ChainFixture] = createFixture(fixtureTag)
+
+ val outcomeF = fixtureF.flatMap(fixture =>
+ test(fixture.asInstanceOf[FixtureParam]).toFuture)
+
+ val fixtureTakeDownF = outcomeF.flatMap { outcome =>
+ val destroyedF =
+ fixtureF.flatMap(fixture => destroyFixture(fixture))
+
+ destroyedF.map(_ => outcome)
+ }
+
+ new FutureOutcome(fixtureTakeDownF)
+ }
+
+ /**
+ * This is a wrapper for a tagged test statement that adds a def inFixtured
+ * to replace the use of in, which only accepts a FixtureParam => Future[Assertion],
+ * whereas inFixtured accepts a PartialFunction and fails the test if it is not
+ * defined on the input.
+ *
+ * This is nothing more than syntactic sugar.
+ *
+ * This functionality is added using language.implicitConversions below
+ */
+ final class SugaryItVerbStringTaggedAs(
+ itVerbStringTaggedAs: ItVerbStringTaggedAs) {
+
+ def inFixtured(
+ partialTestFun: PartialFunction[
+ FixtureParam,
+ Future[compatible.Assertion]])(
+ implicit pos: org.scalactic.source.Position): Unit = {
+ val testFun: FixtureParam => Future[compatible.Assertion] = {
+ fixture: FixtureParam =>
+ partialTestFun.applyOrElse[FixtureParam, Future[Assertion]](fixture, {
+ _: FixtureParam =>
+ Future.successful(fail("Incorrect tag/fixture for this test"))
+ })
+ }
+
+ itVerbStringTaggedAs.in(testFun)(pos)
+ }
+ }
+
+ /**
+ * This is a wrapper for a tagged test statement that adds a def inFixtured
+ * to replace the use of in, which only accepts a FixtureParam => Future[Assertion],
+ * whereas inFixtured accepts a PartialFunction and fails the test if it is not
+ * defined on the input.
+ *
+ * This is nothing more than syntactic sugar.
+ *
+ * This functionality is added using language.implicitConversions below
+ */
+ final class SugaryItVerbString(itVerbString: ItVerbString) {
+
+ def inFixtured(
+ partialTestFun: PartialFunction[
+ FixtureParam,
+ Future[compatible.Assertion]])(
+ implicit pos: org.scalactic.source.Position): Unit = {
+ val testFun: FixtureParam => Future[compatible.Assertion] = {
+ fixture: FixtureParam =>
+ partialTestFun.applyOrElse[FixtureParam, Future[Assertion]](fixture, {
+ _: FixtureParam =>
+ Future.successful(fail("Incorrect tag/fixture for this test"))
+ })
+ }
+
+ itVerbString.in(testFun)(pos)
+ }
+ }
+
+ import language.implicitConversions
+
+ implicit def itVerbStringTaggedAsToSugaryItVerbStringTaggedAs(
+ itVerbStringTaggedAs: ItVerbStringTaggedAs): SugaryItVerbStringTaggedAs =
+ new SugaryItVerbStringTaggedAs(itVerbStringTaggedAs)
+
+ implicit def itVerbStringToSugaryItVerbString(
+ itVerbString: ItVerbString): SugaryItVerbString =
+ new SugaryItVerbString(itVerbString)
+
+ /**
+ * Fixture that creates a [[org.bitcoins.chain.models.BlockHeaderTable]]
+ * with one row inserted into it, the [[org.bitcoins.core.protocol.blockchain.RegTestNetChainParams]]
+ * genesis block
+ */
+ def withBlockHeaderDAO(test: OneArgAsyncTest): FutureOutcome = {
+ makeFixture(build = () => ChainUnitTest.createBlockHeaderDAO,
+ destroy = () => ChainUnitTest.destroyHeaderTable)(test)
+ }
+
+ def withPopulatedBlockHeaderDAO(test: OneArgAsyncTest): FutureOutcome = {
+ makeFixture(build = () => ChainUnitTest.createPopulatedBlockHeaderDAO,
+ destroy = () => ChainUnitTest.destroyHeaderTable)(test)
+ }
+
+ def withChainHandler(test: OneArgAsyncTest): FutureOutcome = {
+ makeFixture(() => ChainUnitTest.createChainHandler,
+ () => ChainUnitTest.destroyHeaderTable)(test)
+ }
+
+ /** Creates and populates BlockHeaderTable with block headers 562375 to 571375 */
+ def createPopulatedChainHandler(): Future[ChainHandler] = {
+ for {
+ blockHeaderDAO <- ChainUnitTest.createPopulatedBlockHeaderDAO()
+ } yield ChainHandler(blockHeaderDAO = blockHeaderDAO, appConfig)
+ }
+
+ def withPopulatedChainHandler(test: OneArgAsyncTest): FutureOutcome = {
+ makeFixture(() => createPopulatedChainHandler,
+ () => ChainUnitTest.destroyHeaderTable)(test)
+ }
+
+ def createChainHandlerWithBitcoindZmq(
+ bitcoind: BitcoindRpcClient): Future[(ChainHandler, ZMQSubscriber)] = {
+ val (chainHandler, genesisHeaderF) =
+ ChainUnitTest.setupHeaderTableWithGenesisHeader()
+
+ val zmqRawBlockUriOpt: Option[InetSocketAddress] =
+ bitcoind.instance.zmqConfig.rawBlock
+
+ val handleRawBlock: ByteVector => Unit = { bytes: ByteVector =>
+ val block = Block.fromBytes(bytes)
+ chainHandler.processHeader(block.blockHeader)
+
+ ()
+ }
+
+ val socket = zmqRawBlockUriOpt.get
+ val zmqSubscriber =
+ new ZMQSubscriber(socket = socket,
+ hashTxListener = None,
+ hashBlockListener = None,
+ rawTxListener = None,
+ rawBlockListener = Some(handleRawBlock))
+ zmqSubscriber.start()
+ Thread.sleep(1000)
+
+ genesisHeaderF.map(_ => (chainHandler, zmqSubscriber))
+ }
+
+ def createChainApiWithBitcoindRpc(
+ bitcoind: BitcoindRpcClient): Future[BitcoindChainHandlerViaRpc] = {
+ val (handler, genesisHeaderF) =
+ ChainUnitTest.setupHeaderTableWithGenesisHeader()
+
+ genesisHeaderF.map { _ =>
+ chain.fixture.BitcoindChainHandlerViaRpc(bitcoind, handler)
+ }
+
+ }
+
+ def createBitcoindChainHandlerViaZmq(): Future[BitcoindChainHandlerViaZmq] = {
+ composeBuildersAndWrap(() => createBitcoind,
+ createChainHandlerWithBitcoindZmq,
+ BitcoindChainHandlerViaZmq.apply)()
+ }
+
+ def destroyBitcoindChainHandlerViaZmq(
+ bitcoindChainHandler: BitcoindChainHandlerViaZmq): Future[Unit] = {
+
+ //piggy back off of rpc destructor
+ val rpc = chain.fixture.BitcoindChainHandlerViaRpc(
+ bitcoindChainHandler.bitcoindRpc,
+ bitcoindChainHandler.chainHandler)
+
+ destroyBitcoindChainApiViaRpc(rpc).map { _ =>
+ bitcoindChainHandler.zmqSubscriber.stop
+ }
+ }
+
+ def destroyBitcoindChainApiViaRpc(
+ bitcoindChainHandler: BitcoindChainHandlerViaRpc): Future[Unit] = {
+ val stopBitcoindF =
+ BitcoindRpcTestUtil.stopServer(bitcoindChainHandler.bitcoindRpc)
+ val dropTableF = ChainUnitTest.destroyHeaderTable()
+ stopBitcoindF.flatMap(_ => dropTableF)
+ }
+
+ /**
+ * Creates a [[BitcoindRpcClient bitcoind]] that is linked to our [[ChainHandler bitcoin-s chain handler]]
+ * via a [[org.bitcoins.zmq.ZMQSubscriber zmq]]. This means messages are passed between bitcoin and our chain handler
+ * with a zmq pub/sub message passing
+ * @param test the test to be executed with bitcoind and chain handler via zmq
+ * @param system
+ * @return
+ */
+ def withBitcoindChainHandlerViaZmq(test: OneArgAsyncTest)(
+ implicit system: ActorSystem): FutureOutcome = {
+ val builder: () => Future[BitcoindChainHandlerViaZmq] =
+ composeBuildersAndWrap(builder = () => createBitcoind,
+ dependentBuilder =
+ createChainHandlerWithBitcoindZmq,
+ wrap = BitcoindChainHandlerViaZmq.apply)
+
+ makeDependentFixture(builder, destroyBitcoindChainHandlerViaZmq)(test)
+ }
+
+ def withBitcoindChainHandlerViaRpc(test: OneArgAsyncTest)(
+ implicit system: ActorSystem): FutureOutcome = {
+ val builder: () => Future[BitcoindChainHandlerViaRpc] = { () =>
+ createBitcoind().flatMap(createChainApiWithBitcoindRpc(_))
+ }
+
+ makeDependentFixture(builder, destroyBitcoindChainApiViaRpc)(test)
+ }
+
+ override def afterAll(): Unit = {
+ system.terminate()
+ ()
+ }
+}
+
+object ChainUnitTest extends BitcoinSLogger {
+
+ /** Height of the first block in populated fixtures */
+ val FIRST_BLOCK_HEIGHT: Int = 562375
+
+ val FIRST_POW_CHANGE: Int = (FIRST_BLOCK_HEIGHT / 2016 + 1) * 2016
+
+ val genesisHeaderDb: BlockHeaderDb = ChainTestUtil.regTestGenesisHeaderDb
+
+ def createChainHandler()(
+ implicit ec: ExecutionContext,
+ appConfig: ChainAppConfig): Future[ChainHandler] = {
+ val (chainHandler, genesisHeaderF) = setupHeaderTableWithGenesisHeader()
+ genesisHeaderF.map(_ => chainHandler)
+ }
+
+ def createBlockHeaderDAO()(
+ implicit ec: ExecutionContext,
+ appConfig: ChainAppConfig): Future[BlockHeaderDAO] = {
+ val (chainHandler, genesisHeaderF) = setupHeaderTableWithGenesisHeader()
+
+ genesisHeaderF.map(_ => chainHandler.blockHeaderDAO)
+ }
+
+ /** Creates and populates BlockHeaderTable with block headers 562375 to 571375 */
+ def createPopulatedBlockHeaderDAO()(
+ implicit appConfig: ChainAppConfig,
+ ec: ExecutionContext): Future[BlockHeaderDAO] = {
+ // The height of the first block in the json file
+ val OFFSET: Int = FIRST_BLOCK_HEIGHT
+
+ val tableSetupF = ChainUnitTest.setupHeaderTable()
+
+ val source =
+ scala.io.Source.fromURL(getClass.getResource("/block_headers.json"))
+ val arrStr = source.getLines.next
+ source.close()
+
+ import org.bitcoins.rpc.serializers.JsonReaders.BlockHeaderReads
+ val headersResult = Json.parse(arrStr).validate[Vector[BlockHeader]]
+
+ headersResult match {
+ case err: JsError =>
+ logger.error(s"Failed to parse headers from block_headers.json: $err")
+ Future.failed(new RuntimeException(err.toString))
+ case JsSuccess(headers, _) =>
+ val dbHeaders = headers.zipWithIndex.map {
+ case (header, height) =>
+ BlockHeaderDbHelper.fromBlockHeader(height + OFFSET, header)
+ }
+
+ @tailrec
+ def splitIntoBatches(
+ batchSize: Int,
+ dbHeaders: Vector[BlockHeaderDb],
+ batchesSoFar: Vector[Vector[BlockHeaderDb]]): Vector[
+ Vector[BlockHeaderDb]] = {
+ if (dbHeaders.isEmpty) {
+ batchesSoFar
+ } else if (dbHeaders.length < batchSize) {
+ batchesSoFar.:+(dbHeaders)
+ } else {
+ val (batch, nextDbHeaders) = dbHeaders.splitAt(batchSize)
+ val nextBatchesSoFar = batchesSoFar.:+(batch)
+
+ splitIntoBatches(batchSize, nextDbHeaders, nextBatchesSoFar)
+ }
+ }
+
+ val batchedDbHeaders = splitIntoBatches(batchSize = 500,
+ dbHeaders = dbHeaders,
+ batchesSoFar = Vector.empty)
+
+ val chainHandler = ChainUnitTest.makeChainHandler()
+
+ val insertedF = tableSetupF.flatMap { _ =>
+ batchedDbHeaders.foldLeft(
+ Future.successful[Vector[BlockHeaderDb]](Vector.empty)) {
+ case (fut, batch) =>
+ fut.flatMap(_ => chainHandler.blockHeaderDAO.createAll(batch))
+ }
+ }
+
+ insertedF.map(_ => chainHandler.blockHeaderDAO)
+ }
+ }
+
+ def destroyHeaderTable()(implicit appConfig: AppConfig): Future[Unit] = {
+ ChainDbManagement.dropHeaderTable()
+ }
+
+ def destroyBitcoind(bitcoind: BitcoindRpcClient)(
+ implicit system: ActorSystem): Future[Unit] = {
+ BitcoindRpcTestUtil.stopServer(bitcoind)
+ }
+
+ /** Creates the [[org.bitcoins.chain.models.BlockHeaderTable]] */
+ private def setupHeaderTable()(
+ implicit appConfig: AppConfig): Future[Unit] = {
+ ChainDbManagement.createHeaderTable(createIfNotExists = true)
+ }
+
+ /** Creates the [[org.bitcoins.chain.models.BlockHeaderTable]] and inserts the genesis header */
+ def setupHeaderTableWithGenesisHeader()(
+ implicit ec: ExecutionContext,
+ appConfig: ChainAppConfig): (ChainHandler, Future[BlockHeaderDb]) = {
+ val tableSetupF = setupHeaderTable()
+
+ val chainHandler = makeChainHandler()
+
+ val genesisHeaderF = tableSetupF.flatMap { _ =>
+ chainHandler.blockHeaderDAO.create(genesisHeaderDb)
+ }
+
+ (chainHandler, genesisHeaderF)
+ }
+
+ def makeChainHandler()(
+ implicit appConfig: ChainAppConfig,
+ ec: ExecutionContext): ChainHandler = {
+ lazy val blockHeaderDAO = BlockHeaderDAO(appConfig)
+
+ ChainHandler(blockHeaderDAO = blockHeaderDAO, appConfig)
+ }
+
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaRpc.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaRpc.scala
new file mode 100644
index 0000000000..3c69cdb5db
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaRpc.scala
@@ -0,0 +1,9 @@
+package org.bitcoins.testkit.chain.fixture
+
+import org.bitcoins.chain.blockchain.ChainHandler
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+
+/** Represents a bitcoind instance paired with a chain handler via zmq */
+case class BitcoindChainHandlerViaRpc(
+ bitcoindRpc: BitcoindRpcClient,
+ chainHandler: ChainHandler)
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaZmq.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaZmq.scala
new file mode 100644
index 0000000000..afec4a79ab
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaZmq.scala
@@ -0,0 +1,23 @@
+package org.bitcoins.testkit.chain.fixture
+
+import org.bitcoins.chain.blockchain.ChainHandler
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+import org.bitcoins.testkit.chain.fixture
+import org.bitcoins.zmq.ZMQSubscriber
+
+/** Represents a bitcoind instance paired with a chain handler via zmq */
+case class BitcoindChainHandlerViaZmq(
+ bitcoindRpc: BitcoindRpcClient,
+ chainHandler: ChainHandler,
+ zmqSubscriber: ZMQSubscriber)
+
+object BitcoindChainHandlerViaZmq {
+
+ def apply(
+ bitcoindRpc: BitcoindRpcClient,
+ pair: (ChainHandler, ZMQSubscriber)): BitcoindChainHandlerViaZmq = {
+ val (chainHandler, zmqSubscriber) = pair
+
+ fixture.BitcoindChainHandlerViaZmq(bitcoindRpc, chainHandler, zmqSubscriber)
+ }
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixture.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixture.scala
new file mode 100644
index 0000000000..120bf853d7
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixture.scala
@@ -0,0 +1,31 @@
+package org.bitcoins.testkit.chain.fixture
+
+import org.bitcoins.chain.blockchain.ChainHandler
+import org.bitcoins.chain.models.BlockHeaderDAO
+
+/**
+ * This ADT represents all Chain test fixtures. If you set this type to be your
+ * FixtureParam and override withFixture to be withChainFixutre, then simply tag
+ * tests to specify which fixture that test should receive and then use inFixutred
+ * which takes a PartialFunction[ChainFixture, Future[Assertion] ] (i.e. just
+ * specify the relevant case for your expected fixture)
+ */
+sealed trait ChainFixture
+
+object ChainFixture {
+ case object Empty extends ChainFixture
+
+ case class GenisisBlockHeaderDAO(dao: BlockHeaderDAO) extends ChainFixture
+
+ case class PopulatedBlockHeaderDAO(dao: BlockHeaderDAO) extends ChainFixture
+
+ case class GenisisChainHandler(chainHandler: ChainHandler)
+ extends ChainFixture
+
+ case class PopulatedChainHandler(chainHandler: ChainHandler)
+ extends ChainFixture
+
+ case class BitcoindZmqChainHandlerWithBlock(
+ bitcoindChainHandler: BitcoindChainHandlerViaZmq)
+ extends ChainFixture
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureHelper.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureHelper.scala
new file mode 100644
index 0000000000..46c98b3e4b
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureHelper.scala
@@ -0,0 +1,48 @@
+package org.bitcoins.testkit.chain.fixture
+
+import org.bitcoins.testkit.chain.ChainUnitTest
+import org.bitcoins.testkit.chain.fixture.ChainFixture.{
+ BitcoindZmqChainHandlerWithBlock,
+ Empty,
+ GenisisBlockHeaderDAO,
+ GenisisChainHandler,
+ PopulatedBlockHeaderDAO,
+ PopulatedChainHandler
+}
+
+import scala.concurrent.Future
+
+trait ChainFixtureHelper { this: ChainUnitTest =>
+
+ def createFixture(tag: ChainFixtureTag): Future[ChainFixture] = {
+ tag match {
+ case ChainFixtureTag.Empty => Future.successful(ChainFixture.Empty)
+ case ChainFixtureTag.GenisisBlockHeaderDAO =>
+ ChainUnitTest.createBlockHeaderDAO().map(GenisisBlockHeaderDAO.apply)
+ case ChainFixtureTag.PopulatedBlockHeaderDAO =>
+ ChainUnitTest
+ .createPopulatedBlockHeaderDAO()
+ .map(PopulatedBlockHeaderDAO.apply)
+ case ChainFixtureTag.GenisisChainHandler =>
+ ChainUnitTest.createChainHandler().map(GenisisChainHandler.apply)
+ case ChainFixtureTag.PopulatedChainHandler =>
+ createPopulatedChainHandler().map(
+ ChainFixture.PopulatedChainHandler.apply)
+ case ChainFixtureTag.BitcoindZmqChainHandlerWithBlock =>
+ createBitcoindChainHandlerViaZmq().map(
+ BitcoindZmqChainHandlerWithBlock.apply)
+ }
+ }
+
+ def destroyFixture(fixture: ChainFixture): Future[Any] = {
+ fixture match {
+ case Empty => Future.successful(())
+ case GenisisBlockHeaderDAO(_) => ChainUnitTest.destroyHeaderTable()
+ case PopulatedBlockHeaderDAO(_) => ChainUnitTest.destroyHeaderTable()
+ case GenisisChainHandler(_) => ChainUnitTest.destroyHeaderTable()
+ case PopulatedChainHandler(_) => ChainUnitTest.destroyHeaderTable()
+ case BitcoindZmqChainHandlerWithBlock(bitcoindHandler) =>
+ destroyBitcoindChainHandlerViaZmq(bitcoindHandler)
+ }
+ }
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureTag.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureTag.scala
new file mode 100644
index 0000000000..a957ac6e3b
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureTag.scala
@@ -0,0 +1,45 @@
+package org.bitcoins.testkit.chain.fixture
+
+import org.scalatest.Tag
+
+/**
+ * If a test file uses ChainFixture as its FixtureParam, then
+ * using these tags will determine which fixture the test will get.
+ *
+ * Simply add taggedAs FixtureTag._ to your test before calling inFixtured.
+ */
+sealed abstract class ChainFixtureTag(name: String) extends Tag(name)
+
+object ChainFixtureTag {
+ case object Empty extends ChainFixtureTag("Empty")
+
+ case object GenisisBlockHeaderDAO
+ extends ChainFixtureTag("GenisisBlockHeaderDAO")
+
+ case object PopulatedBlockHeaderDAO
+ extends ChainFixtureTag("PopulatedBlockHeaderDAO")
+
+ case object GenisisChainHandler extends ChainFixtureTag("GenisisChainHandler")
+
+ case object PopulatedChainHandler
+ extends ChainFixtureTag("PopulatedChainHandler")
+
+ case object BitcoindZmqChainHandlerWithBlock
+ extends ChainFixtureTag("BitcoindZmqChainHandlerWithBlock")
+
+ val defaultTag: ChainFixtureTag = ChainFixtureTag.Empty
+
+ def from(tag: String): ChainFixtureTag = {
+ tag match {
+ case Empty.name => Empty
+ case GenisisBlockHeaderDAO.name => GenisisBlockHeaderDAO
+ case PopulatedBlockHeaderDAO.name => PopulatedBlockHeaderDAO
+ case GenisisChainHandler.name => GenisisChainHandler
+ case PopulatedChainHandler.name => PopulatedChainHandler
+ case BitcoindZmqChainHandlerWithBlock.name =>
+ BitcoindZmqChainHandlerWithBlock
+ case _: String =>
+ throw new IllegalArgumentException(s"$tag is not a valid tag")
+ }
+ }
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/core/gen/HDGenerators.scala b/testkit/src/main/scala/org/bitcoins/testkit/core/gen/HDGenerators.scala
index f829a52400..9cc0821429 100644
--- a/testkit/src/main/scala/org/bitcoins/testkit/core/gen/HDGenerators.scala
+++ b/testkit/src/main/scala/org/bitcoins/testkit/core/gen/HDGenerators.scala
@@ -135,12 +135,12 @@ object HDGenerators {
accountIndex = accountIndex,
chainType = chainType)
- def hdPath: Gen[HDPath[_]] =
+ def hdPath: Gen[HDPath] =
Gen.oneOf(legacyHdPath, segwithHdPath, nestedSegwithHdPath)
- type HDPathConstructor = Vector[BIP32Node] => Try[HDPath[_]]
+ type HDPathConstructor = Vector[BIP32Node] => Try[HDPath]
- def hdPathWithConstructor: Gen[(HDPath[_], HDPathConstructor)] =
+ def hdPathWithConstructor: Gen[(HDPath, HDPathConstructor)] =
for {
path <- hdPath
} yield
@@ -150,4 +150,21 @@ object HDGenerators {
case segwit: SegWitHDPath => (segwit, SegWitHDPath(_))
}
+ /**
+ * Generates a pair of paths that can be diffed.
+ *
+ * In code, this means that this is always true:
+ * {{{
+ * diffableHDPaths.map {
+ * case (short. long) => short.diff(long).isDefined
+ * }
+ * }}}
+ *
+ */
+ def diffableHDPaths: Gen[(BIP32Path, BIP32Path)] = {
+ for {
+ path <- bip32Path.suchThat(_.path.length > 1)
+ n <- Gen.chooseNum(0, path.path.length - 1)
+ } yield (BIP32Path(path.path.dropRight(n)), path)
+ }
}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/fixtures/BitcoinSFixture.scala b/testkit/src/main/scala/org/bitcoins/testkit/fixtures/BitcoinSFixture.scala
new file mode 100644
index 0000000000..0c0e5619b2
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/fixtures/BitcoinSFixture.scala
@@ -0,0 +1,131 @@
+package org.bitcoins.testkit.fixtures
+
+import akka.actor.ActorSystem
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
+import org.scalatest._
+
+import scala.concurrent.{Future, Promise}
+import scala.util.{Failure, Success}
+
+trait BitcoinSFixture extends fixture.AsyncFlatSpec {
+
+ /**
+ * Given functions to build and destroy a fixture, returns a OneArgAsyncTest => FutureOutcome
+ * (this version gives the destroy function access to the fixture)
+ *
+ * Example:
+ * {{{
+ * makeDependentFixture(createBitcoindChainHandler, destroyBitcoindChainHandler)
+ * }}}
+ */
+ def makeDependentFixture[T](
+ build: () => Future[T],
+ destroy: T => Future[Any])(test: OneArgAsyncTest): FutureOutcome = {
+ val fixtureF = build()
+
+ val outcomeF = fixtureF.flatMap { fixture =>
+ test(fixture.asInstanceOf[FixtureParam]).toFuture
+ }
+
+ val destroyP = Promise[Unit]()
+ outcomeF.onComplete { _ =>
+ fixtureF.foreach { fixture =>
+ destroy(fixture).onComplete {
+ case Success(_) => destroyP.success(())
+ case Failure(err) => destroyP.failure(err)
+ }
+ }
+ }
+
+ val outcomeAfterDestroyF = destroyP.future.flatMap(_ => outcomeF)
+
+ new FutureOutcome(outcomeAfterDestroyF)
+ }
+
+ /**
+ * Given functions to build and destroy a fixture, returns a OneArgAsyncTest => FutureOutcome
+ * (this version does not give the destroy function access to the fixture, see makeDependentFixture)
+ *
+ * Example:
+ * {{{
+ * makeFixture(createBlockHeaderDAO, destroyBlockHeaderTable)
+ * }}}
+ */
+ def makeFixture[T](build: () => Future[T], destroy: () => Future[Any])(
+ test: OneArgAsyncTest): FutureOutcome = {
+ val outcomeF = build().flatMap { fixture =>
+ test(fixture.asInstanceOf[FixtureParam]).toFuture
+ }
+
+ val destroyP = Promise[Unit]()
+ outcomeF.onComplete { _ =>
+ destroy().onComplete {
+ case Success(_) => destroyP.success(())
+ case Failure(err) => destroyP.failure(err)
+ }
+ }
+
+ val outcomeAfterDestroyF = destroyP.future.flatMap(_ => outcomeF)
+
+ new FutureOutcome(outcomeAfterDestroyF)
+ }
+
+ /**
+ * Given two fixture building methods (one dependent on the other), returns a single
+ * fixture building method where the fixture is the pair of the two.
+ *
+ * Example:
+ * {{{
+ * composeBuilders(createBlockHeaderDAO, createChainHandlerFromBlockHeaderDAO)
+ * }}}
+ */
+ def composeBuilders[T, U](
+ builder: () => Future[T],
+ dependentBuilder: T => Future[U]): () => Future[(T, U)] = () => {
+ builder().flatMap { first =>
+ dependentBuilder(first).map { second =>
+ (first, second)
+ }
+ }
+ }
+
+ /**
+ * Given two fixture building methods (one dependent on the other) and a wrapper
+ * for their pair type, returns a single fixture building method where the fixture is wrapper.
+ *
+ * Example:
+ * {{{
+ * composeBuildersAndWrap(
+ * createBitcoind,
+ * createChainHandlerWithBitcoindZmq,
+ * BitcoindChainHandler.apply)
+ * }}}
+ */
+ def composeBuildersAndWrap[T, U, C](
+ builder: () => Future[T],
+ dependentBuilder: T => Future[U],
+ wrap: (T, U) => C): () => Future[C] = () => {
+ composeBuilders(builder, dependentBuilder)().map {
+ case (first, second) => wrap(first, second)
+ }
+ }
+
+ def createBitcoindWithFunds()(
+ implicit system: ActorSystem): Future[BitcoindRpcClient] = {
+ for {
+ bitcoind <- createBitcoind()
+ address <- bitcoind.getNewAddress
+ _ <- bitcoind.generateToAddress(blocks = 101, address)
+ } yield bitcoind
+ }
+
+ /** Creates a new bitcoind instance */
+ def createBitcoind()(
+ implicit system: ActorSystem): Future[BitcoindRpcClient] = {
+ val instance = BitcoindRpcTestUtil.instance()
+ val bitcoind = new BitcoindRpcClient(instance)
+
+ bitcoind.start().map(_ => bitcoind)
+ }
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/fixtures/EmptyFixture.scala b/testkit/src/main/scala/org/bitcoins/testkit/fixtures/EmptyFixture.scala
new file mode 100644
index 0000000000..67f5731549
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/fixtures/EmptyFixture.scala
@@ -0,0 +1,11 @@
+package org.bitcoins.testkit.fixtures
+
+import org.scalatest.FutureOutcome
+
+trait EmptyFixture extends BitcoinSFixture {
+
+ final override type FixtureParam = Unit
+
+ final override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ test(())
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala b/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala
new file mode 100644
index 0000000000..abb7f17910
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala
@@ -0,0 +1,161 @@
+package org.bitcoins.testkit.gen
+
+import java.net.{InetAddress, InetSocketAddress}
+
+import org.bitcoins.core.number.{UInt32, UInt64}
+import org.bitcoins.core.protocol.CompactSizeUInt
+import org.bitcoins.node.messages._
+import org.bitcoins.node.messages.control._
+import org.bitcoins.node.versions.ProtocolVersion
+import org.bitcoins.testkit.core.gen.{
+ BloomFilterGenerator,
+ CryptoGenerators,
+ NumberGenerator,
+ StringGenerators
+}
+import org.scalacheck.Gen
+import scodec.bits.ByteVector
+
+/**
+ * Created by chris on 6/27/16.
+ */
+trait ControlMessageGenerator {
+
+ /**
+ * Generates a random [[VersionMessage]]
+ * [[https://bitcoin.org/en/developer-reference#version]]
+ *
+ * @return
+ */
+ def versionMessage: Gen[VersionMessage] =
+ for {
+ version <- protocolVersion
+ identifier <- serviceIdentifier
+ timestamp <- NumberGenerator.int64s
+ addressReceiveServices <- serviceIdentifier
+ addressReceiveIpAddress <- inetAddress
+ addressReceivePort <- portNumber
+ addressTransServices <- serviceIdentifier
+ addressTransIpAddress <- inetAddress
+ addressTransPort <- portNumber
+ nonce <- NumberGenerator.uInt64s
+ userAgent <- StringGenerators.genString
+ startHeight <- NumberGenerator.int32s
+ relay = scala.util.Random.nextInt() % 2 == 0
+ } yield
+ VersionMessage(
+ version,
+ identifier,
+ timestamp,
+ addressReceiveServices,
+ addressReceiveIpAddress,
+ addressReceivePort,
+ addressTransServices,
+ addressTransIpAddress,
+ addressTransPort,
+ nonce,
+ userAgent,
+ startHeight,
+ relay
+ )
+
+ /**
+ * Generates a [[PingMessage]]
+ * [[https://bitcoin.org/en/developer-reference#ping]]
+ *
+ * @return
+ */
+ def pingMessage: Gen[PingMessage] =
+ for {
+ uInt64 <- NumberGenerator.uInt64s
+ } yield PingMessage(uInt64)
+
+ /**
+ * Generates a [[PongMessage]]
+ * [[https://bitcoin.org/en/developer-reference#pong]]
+ *
+ * @return
+ */
+ def pongMessage: Gen[PongMessage] =
+ for {
+ uInt64 <- NumberGenerator.uInt64s
+ } yield PongMessage(uInt64)
+
+ /**
+ * Generates a random [[ProtocolVersion]]
+ * [[https://bitcoin.org/en/developer-reference#protocol-versions]]
+ *
+ * @return
+ */
+ def protocolVersion: Gen[ProtocolVersion] =
+ for {
+ randomNum <- Gen.choose(0, ProtocolVersion.versions.length - 1)
+ } yield ProtocolVersion.versions(randomNum)
+
+ /**
+ * Generates a [[ServiceIdentifier]]
+ * [[https://bitcoin.org/en/developer-reference#version]]
+ *
+ * @return
+ */
+ def serviceIdentifier: Gen[ServiceIdentifier] =
+ for {
+ //service identifiers can only be NodeNetwork or UnnamedService
+ randomNum <- Gen.choose(0, 1)
+ } yield ServiceIdentifier(randomNum)
+
+ def inetAddress: Gen[InetAddress] =
+ for {
+ socketAddress <- inetSocketAddress
+ } yield socketAddress.getAddress
+
+ def inetSocketAddress: Gen[InetSocketAddress] =
+ for {
+ p <- portNumber
+ } yield new InetSocketAddress(p)
+
+ def portNumber: Gen[Int] = Gen.choose(0, 65535)
+
+ /**
+ * Creates a [[FilterLoadMessage]]
+ * [[https://bitcoin.org/en/developer-reference#filterload]]
+ *
+ * @return
+ */
+ def filterLoadMessage: Gen[FilterLoadMessage] =
+ for {
+ filter <- NumberGenerator.bytes
+ hashFuncs <- Gen.choose(0, 50)
+ tweak <- NumberGenerator.uInt32s
+ flags <- BloomFilterGenerator.bloomFlag
+ } yield
+ FilterLoadMessage(ByteVector(filter), UInt32(hashFuncs), tweak, flags)
+
+ /**
+ * Creates a [[FilterAddMessage]]
+ * [[https://bitcoin.org/en/developer-reference#filteradd]]
+ *
+ * @return
+ */
+ def filterAddMessage: Gen[FilterAddMessage] =
+ for {
+ element <- CryptoGenerators.doubleSha256Digest
+ elementSize = CompactSizeUInt(UInt64(element.bytes.size))
+ } yield FilterAddMessage(elementSize, element.bytes)
+
+ /**
+ * Creates a [[RejectMessage]]
+ * [[https://bitcoin.org/en/developer-reference#reject]]
+ *
+ * @return
+ */
+ def rejectMessage: Gen[RejectMessage] =
+ for {
+ message <- StringGenerators.genString
+ code <- StringGenerators.strChar
+ reason <- StringGenerators.genString
+ extra <- CryptoGenerators.doubleSha256Digest
+ } yield RejectMessage(message, code, reason, extra.bytes)
+}
+
+object ControlMessageGenerator extends ControlMessageGenerator
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala b/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala
new file mode 100644
index 0000000000..d3ebf0d72a
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala
@@ -0,0 +1,108 @@
+package org.bitcoins.testkit.gen
+
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.node.messages._
+import org.bitcoins.node.messages.data._
+import org.bitcoins.testkit.core.gen.{
+ BlockchainElementsGenerator,
+ CryptoGenerators,
+ MerkleGenerator,
+ TransactionGenerators
+}
+import org.scalacheck.Gen
+
+/**
+ * Created by chris on 6/29/16.
+ * Responsible for generating random [[DataMessage]]
+ * [[https://bitcoin.org/en/developer-reference#data-messages]]
+ */
+trait DataMessageGenerator {
+
+ /**
+ * Generates a random [[GetHeadersMessage]]
+ * [[https://bitcoin.org/en/developer-reference#getheaders]]
+ *
+ * @return
+ */
+ def getHeaderMessages: Gen[GetHeadersMessage] =
+ for {
+ version <- ControlMessageGenerator.protocolVersion
+ numHashes <- Gen.choose(0, 2000)
+ hashes <- CryptoGenerators.doubleSha256DigestSeq(numHashes)
+ hashStop <- CryptoGenerators.doubleSha256Digest
+ } yield GetHeadersMessage(version, hashes, hashStop)
+
+ def headersMessage: Gen[HeadersMessage] =
+ for {
+ randomNum <- Gen.choose(1, 10)
+ //we have a maximum of 2000 block headers in a HeadersMessage
+ blockHeaders <- Gen
+ .listOfN(randomNum, BlockchainElementsGenerator.blockHeader)
+ .suchThat(_.size <= 10)
+ } yield HeadersMessage(blockHeaders.toVector)
+
+ /**
+ * Generates a random [[TypeIdentifier]]
+ * [[https://bitcoin.org/en/developer-reference#data-messages]]
+ *
+ * @return
+ */
+ def typeIdentifier: Gen[TypeIdentifier] =
+ for {
+ num <- Gen.choose(1, 3)
+ } yield TypeIdentifier(UInt32(num))
+
+ /**
+ * Generates a random [[Inventory]]
+ * [[https://bitcoin.org/en/developer-reference#term-inventory]]
+ *
+ * @return
+ */
+ def inventory: Gen[Inventory] =
+ for {
+ identifier <- typeIdentifier
+ hash <- CryptoGenerators.doubleSha256Digest
+ } yield Inventory(identifier, hash)
+
+ /**
+ * Generates a random [[InventoryMessage]]
+ * [[https://bitcoin.org/en/developer-reference#inv]]
+ * @return
+ */
+ def inventoryMessages: Gen[InventoryMessage] =
+ for {
+ numInventories <- Gen.choose(0, 500)
+ inventories <- Gen.listOfN(numInventories, inventory)
+ } yield InventoryMessage(inventories)
+
+ /**
+ * Generate a random [[GetDataMessage]]
+ * [[https://bitcoin.org/en/developer-reference#getdata]]
+ * @return
+ */
+ def getDataMessages: Gen[GetDataMessage] =
+ for {
+ invMsgs <- inventoryMessages
+ } yield GetDataMessage(invMsgs.inventoryCount, invMsgs.inventories)
+
+ /**
+ * Generates a random [[MerkleBlockMessage]]
+ * [[https://bitcoin.org/en/developer-reference#merkleblock]]
+ * @return
+ */
+ def merkleBlockMessage: Gen[MerkleBlockMessage] =
+ for {
+ (merkleBlock, _, _) <- MerkleGenerator.merkleBlockWithInsertedTxIds
+ } yield MerkleBlockMessage(merkleBlock)
+
+ /** Generates a [[TransactionMessage]]
+ * [[https://bitcoin.org/en/developer-reference#tx]]
+ * */
+ def transactionMessage: Gen[TransactionMessage] =
+ for {
+ tx <- TransactionGenerators.transaction
+ txMsg = TransactionMessage(tx)
+ } yield txMsg
+}
+
+object DataMessageGenerator extends DataMessageGenerator
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala
new file mode 100644
index 0000000000..df829b6faa
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala
@@ -0,0 +1,102 @@
+package org.bitcoins.testkit.node
+
+import java.net.InetSocketAddress
+
+import akka.actor.ActorRefFactory
+import org.bitcoins.core.protocol.blockchain.BlockHeader
+import org.bitcoins.core.protocol.transaction.Transaction
+import org.bitcoins.node.NetworkMessage
+import org.bitcoins.node.config.NodeAppConfig
+import org.bitcoins.node.messages.control.VersionMessage
+import org.bitcoins.node.messages.data.GetHeadersMessage
+import org.bitcoins.node.models.Peer
+import org.bitcoins.node.networking.Client
+import org.bitcoins.node.networking.peer.PeerMessageReceiver
+import org.bitcoins.node.util.NetworkIpAddress
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+
+/**
+ * Created by chris on 6/2/16.
+ */
+abstract class NodeTestUtil {
+
+ //txid on testnet 44e504f5b7649d215be05ad9f09026dee95201244a3b218013c504a6a49a26ff
+ //this tx has multiple inputs and outputs
+ def rawTransaction =
+ "01000000" +
+ "02df80e3e6eba7dcd4650281d3c13f140dafbb823a7227a78eb6ee9f6cedd040011b0000006a473044022040f91c48f4011bf2e2edb6621bfa8fb802241de939cb86f1872c99c580ef0fe402204fc27388bc525e1b655b5f5b35f9d601d28602432dd5672f29e0a47f5b8bbb26012102c114f376c98d12a0540c3a81ab99bb1c5234245c05e8239d09f48229f9ebf011ffffffff" +
+ "df80e3e6eba7dcd4650281d3c13f140dafbb823a7227a78eb6ee9f6cedd04001340000006b483045022100cf317c320d078c5b884c44e7488825dab5bcdf3f88c66314ac925770cd8773a7022033fde60d33cc2842ea73fce5d9cf4f8da6fadf414a75b7085efdcd300407f438012102605c23537b27b80157c770cd23e066cd11db3800d3066a38b9b592fc08ae9c70ffffffff" +
+ "02c02b00000000000017a914b0b06365c482eb4eabe6e0630029fb8328ea098487e81c0000000000001976a914938da2b50fd6d8acdfa20e30df0e7d8092f0bc7588ac00000000"
+ def transaction = Transaction(rawTransaction)
+
+ /**
+ * Random version message bitcoins created when connecting to a testnet seed
+ * This does not include the header
+ * @return
+ */
+ def rawVersionMessage =
+ "7c1101000000000000000000d805833655010000000000000000000000000000000000000000ffff0a940106479d010000000000000000000000000000000000ffff739259bb479d0000000000000000182f626974636f696e732d7370762d6e6f64652f302e302e310000000000"
+ def versionMessage = VersionMessage(rawVersionMessage)
+
+ /**
+ * This is a raw network message indicating the version a node is using on the p2p network
+ * This has BOTH the header and the payload
+ * @return
+ */
+ def rawNetworkMessage =
+ "0b11090776657273696f6e0000000000660000002f6743da721101000100000000000000e0165b5700000000010000000000000000000000000000000000ffffad1f27a8479d010000000000000000000000000000000000ffff00000000479d68dc32a9948d149b102f5361746f7368693a302e31312e322f7f440d0001"
+ def networkMessage = NetworkMessage(rawNetworkMessage)
+
+ /**
+ * This is a get headers message taken from wireshark off of a node that sent the message
+ * @return
+ */
+ def rawGetHeadersMsg =
+ "721101001f693a1ceb6eabcd03f7f7e22a763efec0f4fd1618a50558283b23600000000000e933b17e7f39aa00f24cabbae1e618ecbfbd70a3ecc4f63072dc790000000000e53160d1edccfd7feed401233c274fbc229f7f0d2b6152735344ec0000000000110274616c7161a8aca8390e1a472f22de7470368e5066f20d050000000000008f98d517947a765069f976de05f910a65743fbac59a430aaf30d350000000000572b328dc2155a853157bebcc616fc82fd6996cb348d6a3cd929c500000000007d2c3eca25e06b684132325c85673675b928c3d0ee2eec553c01000000000000a5e239f5b4c6998078e71a065bd71216583e88bf80a93d170253460000000000b6c926f4cb309d2d87f40d4790905f3f29cd05f3ea26854e060700000000000032668e2de62f181cdeabad351318008288993b3db3e411216aad70000000000079f9e80a6ffe62ab13daa65e6410c8d36d513e198fc161b90cd1d40000000000bbf6a01b2faeb102d177ab03131263166790548181ff3cb04308000000000000b90ef011e62cd6c259939ac4ad372c5f395718a93ade933fd5503b0000000000f346a56f2fa278919c40cdde7ea424058543ce2237f6c9df174e2300000000002fd1795f0dbbc70f7a41d369d4b89c56bf1c6cf2c43ef8f8ed00000000000000643a31c93787ab66b51a4ccfc2ce867d855f4ad64b2a3136e1a12d00000000001323867c8b11027eac79e0cc71fce91f24b1066c6423e69ec409000000000000d1eb1916bab3839da423f1e5aa1c271204bd5564bac6fefd498e0f0000000000a4dcf02c42a71b5b10433917dda89a0d34984a065c0b05a52d03000000000000c57477df9128ef4f71366c4a89e432445d94b0c2b02e7a9ccb060000000000004c45281d6afa17835d264cc8ba181b8c51501247c128d644e2000000000000005c6d201f400a544250bae463ff28f47d53f32d97ae27b5b73b5f580000000000b1def34939f027654943457d69e104304c9798c0af837a7e1f1500000000000069164c8213a0d6b38fe1d9a2c63bcfb5808b65f6e50376726a120000000000002893d0fdafe84e3670a31b22ba80edfb841746462417bad024ac5e0000000000063015920d27befb9ff25f9a1989cda07e4ce62fa9ac8ec0f5b401000000000040a936762fbde4b51bea3ad59dfe202f16dd220761235172960c000000000000332d487a5cc80c00296c43c5bec6b6b1a41a499ce2efd6b6d8514b00000000009400a26083d0551175374c45746488d1c9eaea8d891e69f2e57c5712000000005d62facd94114f5ee55ab6e6797a5c6a8d0e0626b9200ffdf647f15c0000000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000000000000000000000000000000000000000000000000000000000000000000"
+ def getHeadersMsg = GetHeadersMessage(rawGetHeadersMsg)
+
+ /** These are the first 5 block headers on testnet, this does NOT include the genesis block header */
+ lazy val firstFiveTestNetBlockHeaders: List[BlockHeader] = {
+ List(
+ BlockHeader(
+ "0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b672"),
+ BlockHeader(
+ "0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d23534"),
+ BlockHeader(
+ "0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b6"),
+ BlockHeader(
+ "0100000010befdc16d281e40ecec65b7c9976ddc8fd9bc9752da5827276e898b000000004c976d5776dda2da30d96ee810cd97d23ba852414990d64c4c720f977e651f2daae7494dffff001d02a97640"),
+ BlockHeader(
+ "01000000dde5b648f594fdd2ec1c4083762dd13b197bb1381e74b1fff90a5d8b00000000b3c6c6c1118c3b6abaa17c5aa74ee279089ad34dc3cec3640522737541cb016818e8494dffff001d02da84c0")
+ )
+ }
+
+ def nodeAppConfig: NodeAppConfig = NodeAppConfig()
+
+ def client(peer: Peer, peerMsgReceiver: PeerMessageReceiver)(
+ implicit ref: ActorRefFactory): Client = {
+ Client.apply(ref, peer, peerMsgReceiver)
+ }
+
+ /** Helper method to get the [[java.net.InetSocketAddress]]
+ * we need to connect to to make a p2p connection with bitcoind
+ * @param bitcoindRpcClient
+ * @return
+ */
+ def getBitcoindSocketAddress(
+ bitcoindRpcClient: BitcoindRpcClient): InetSocketAddress = {
+ val instance = bitcoindRpcClient.instance
+ new InetSocketAddress(instance.uri.getHost, instance.p2pPort)
+ }
+
+ /** Gets the [[Peer]] that
+ * corresponds to [[org.bitcoins.rpc.client.common.BitcoindRpcClient]] */
+ def getBitcoindPeer(bitcoindRpcClient: BitcoindRpcClient): Peer = {
+ val socket = getBitcoindSocketAddress(bitcoindRpcClient)
+ val networkIpAddress = NetworkIpAddress.fromInetSocketAddress(socket)
+ Peer.fromNetworkIpAddress(networkIpAddress)
+ }
+
+}
+
+object NodeTestUtil extends NodeTestUtil
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala
new file mode 100644
index 0000000000..b280271d7f
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala
@@ -0,0 +1,167 @@
+package org.bitcoins.testkit.node
+
+import java.net.InetSocketAddress
+
+import akka.actor.ActorSystem
+import org.bitcoins.chain.config.ChainAppConfig
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.db.AppConfig
+import org.bitcoins.node.SpvNode
+import org.bitcoins.node.config.NodeAppConfig
+import org.bitcoins.node.models.Peer
+import org.bitcoins.node.networking.peer.{
+ PeerHandler,
+ PeerMessageReceiver,
+ PeerMessageSender
+}
+import org.bitcoins.node.util.NetworkIpAddress
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+import org.bitcoins.testkit.chain.ChainUnitTest
+import org.bitcoins.testkit.fixtures.BitcoinSFixture
+import org.bitcoins.testkit.node.fixture.SpvNodeConnectedWithBitcoind
+import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
+import org.scalatest.{
+ BeforeAndAfter,
+ BeforeAndAfterAll,
+ FutureOutcome,
+ MustMatchers
+}
+
+import scala.concurrent.duration._
+import scala.concurrent.{ExecutionContext, Future}
+
+trait NodeUnitTest
+ extends BitcoinSFixture
+ with MustMatchers
+ with BitcoinSLogger
+ with BeforeAndAfter
+ with BeforeAndAfterAll {
+
+ override def beforeAll(): Unit = {
+ AppConfig.throwIfDefaultDatadir(nodeAppConfig)
+ }
+
+ override def afterAll(): Unit = {
+ system.terminate()
+ ()
+ }
+
+ implicit lazy val system: ActorSystem = {
+ ActorSystem(s"${getClass.getSimpleName}-${System.currentTimeMillis}")
+ }
+
+ implicit lazy val ec: ExecutionContext =
+ system.dispatcher
+
+ val timeout: FiniteDuration = 10.seconds
+
+ implicit lazy val nodeAppConfig: NodeAppConfig = NodeAppConfig()
+ implicit lazy val chainAppConfig: ChainAppConfig = ChainAppConfig()
+ implicit val np: NetworkParameters = nodeAppConfig.network
+
+ lazy val startedBitcoindF = BitcoindRpcTestUtil.startedBitcoindRpcClient()
+
+ lazy val bitcoindPeerF = startedBitcoindF.map(NodeTestUtil.getBitcoindPeer)
+
+ def buildPeerMessageReceiver(): PeerMessageReceiver = {
+ val receiver =
+ PeerMessageReceiver.newReceiver(nodeAppConfig, chainAppConfig)
+ receiver
+ }
+
+ def buildPeerHandler(): Future[PeerHandler] = {
+ bitcoindPeerF.map { peer =>
+ val peerMsgReceiver = buildPeerMessageReceiver()
+ //the problem here is the 'self', this needs to be an ordinary peer message handler
+ //that can handle the handshake
+ val peerMsgSender: PeerMessageSender = {
+ val client = NodeTestUtil.client(peer, peerMsgReceiver)
+ PeerMessageSender(client, np)
+ }
+
+ PeerHandler(peerMsgReceiver, peerMsgSender)
+ }
+
+ }
+
+ def peerSocketAddress(
+ bitcoindRpcClient: BitcoindRpcClient): InetSocketAddress = {
+ NodeTestUtil.getBitcoindSocketAddress(bitcoindRpcClient)
+ }
+
+ def createPeer(bitcoind: BitcoindRpcClient): Peer = {
+ val socket = peerSocketAddress(bitcoind)
+ val nip = NetworkIpAddress.fromInetSocketAddress(socket)
+ Peer(id = None, networkIpAddress = nip)
+ }
+
+ def createSpvNode(bitcoind: BitcoindRpcClient): Future[SpvNode] = {
+ val chainApiF = ChainUnitTest.createChainHandler()
+ val peer = createPeer(bitcoind)
+ for {
+ chainApi <- chainApiF
+ } yield SpvNode(peer = peer, chainApi = chainApi)
+ }
+
+ def withSpvNode(test: OneArgAsyncTest)(
+ implicit system: ActorSystem): FutureOutcome = {
+
+ val spvBuilder: () => Future[SpvNode] = { () =>
+ val bitcoindF = createBitcoind()
+ bitcoindF.flatMap { bitcoind =>
+ createSpvNode(bitcoind).flatMap(_.start())
+ }
+ }
+
+ makeDependentFixture(
+ build = spvBuilder,
+ destroy = NodeUnitTest.destroySpvNode
+ )(test)
+ }
+
+ def withSpvNodeConnectedToBitcoind(test: OneArgAsyncTest)(
+ implicit system: ActorSystem): FutureOutcome = {
+ val spvWithBitcoindBuilder: () => Future[SpvNodeConnectedWithBitcoind] = {
+ () =>
+ val bitcoindF = createBitcoind()
+ bitcoindF.flatMap { bitcoind =>
+ val startedSpv = createSpvNode(bitcoind).flatMap(_.start())
+
+ startedSpv.map(spv => SpvNodeConnectedWithBitcoind(spv, bitcoind))
+ }
+ }
+
+ makeDependentFixture(
+ build = spvWithBitcoindBuilder,
+ destroy = NodeUnitTest.destorySpvNodeConnectedWithBitcoind
+ )(test)
+ }
+
+}
+
+object NodeUnitTest {
+
+ def destroySpvNode(spvNode: SpvNode)(
+ implicit appConfig: NodeAppConfig,
+ ec: ExecutionContext): Future[Unit] = {
+ val stopF = spvNode.stop()
+ stopF.flatMap(_ => ChainUnitTest.destroyHeaderTable())
+ }
+
+ def destorySpvNodeConnectedWithBitcoind(
+ spvNodeConnectedWithBitcoind: SpvNodeConnectedWithBitcoind)(
+ implicit system: ActorSystem,
+ appConfig: NodeAppConfig): Future[Unit] = {
+ import system.dispatcher
+ val spvNode = spvNodeConnectedWithBitcoind.spvNode
+ val bitcoind = spvNodeConnectedWithBitcoind.bitcoind
+ val spvNodeDestroyF = destroySpvNode(spvNode)
+ val bitcoindDestroyF = ChainUnitTest.destroyBitcoind(bitcoind)
+
+ for {
+ _ <- spvNodeDestroyF
+ _ <- bitcoindDestroyF
+ } yield ()
+ }
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/NodeFixture.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/NodeFixture.scala
new file mode 100644
index 0000000000..3b3425c973
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/NodeFixture.scala
@@ -0,0 +1,11 @@
+package org.bitcoins.testkit.node.fixture
+
+sealed trait NodeFixture
+
+object NodeFixture {
+
+ /** Gives us a fixture that has a spv node connected with the bitcoind instance */
+ case class SpvNodeConnectedWithBitcoindFixture(
+ spvNodeConnectedWithBitcoind: SpvNodeConnectedWithBitcoind)
+ extends NodeFixture
+}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/SpvNodeConnectedWithBitcoind.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/SpvNodeConnectedWithBitcoind.scala
new file mode 100644
index 0000000000..cc995a7dfb
--- /dev/null
+++ b/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/SpvNodeConnectedWithBitcoind.scala
@@ -0,0 +1,9 @@
+package org.bitcoins.testkit.node.fixture
+
+import org.bitcoins.node.SpvNode
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+
+/** Gives us a fixture that has a spv node connected with the bitcoind instance */
+case class SpvNodeConnectedWithBitcoind(
+ spvNode: SpvNode,
+ bitcoind: BitcoindRpcClient)
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala
index e4f522fe73..2546f0125b 100644
--- a/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala
+++ b/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala
@@ -5,6 +5,7 @@ import java.nio.file.Paths
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
+
import org.bitcoins.core.config.RegTest
import org.bitcoins.core.crypto.{
DoubleSha256Digest,
@@ -75,6 +76,12 @@ trait BitcoindRpcTestUtil extends BitcoinSLogger {
}
}
+ def tmpDir(): File = {
+ val f = Paths.get(Properties.tmpDir, randomDirName).toFile
+ f.mkdirs()
+ f
+ }
+
/**
* Standard config used for testing purposes
*/
@@ -94,48 +101,24 @@ trait BitcoindRpcTestUtil extends BitcoinSLogger {
val pass = randomDirName
val username = "random_user_name"
val conf = s"""
- |regtest=1
- |daemon=1
- |server=1
- |
- |rpcuser=$username
- |rpcpassword=$pass
- |rpcport=${rpcUri.getPort}
- |port=${uri.getPort}
- |debug=1
- |walletbroadcast=1
- |txindex=${if (pruneMode) 0 else 1 /* pruning and txindex are not compatible */}
- |zmqpubhashtx=tcp://127.0.0.1:$zmqPort
- |zmqpubhashblock=tcp://127.0.0.1:$zmqPort
- |zmqpubrawtx=tcp://127.0.0.1:$zmqPort
- |zmqpubrawblock=tcp://127.0.0.1:$zmqPort
- |prune=${if (pruneMode) 1 else 0}
+ |regtest=1
+ |daemon=1
+ |server=1
+ |
+ |rpcuser=$username
+ |rpcpassword=$pass
+ |rpcport=${rpcUri.getPort}
+ |port=${uri.getPort}
+ |debug=1
+ |walletbroadcast=1
+ |txindex=${if (pruneMode) 0 else 1 /* pruning and txindex are not compatible */}
+ |zmqpubhashtx=tcp://127.0.0.1:$zmqPort
+ |zmqpubhashblock=tcp://127.0.0.1:$zmqPort
+ |zmqpubrawtx=tcp://127.0.0.1:$zmqPort
+ |zmqpubrawblock=tcp://127.0.0.1:$zmqPort
+ |prune=${if (pruneMode) 1 else 0}
""".stripMargin
- BitcoindConfig(conf)
- }
-
- /**
- * Writes the config to the data directory within it, it it doesn't
- * exist. Returns the written file. Assumes the config has a datadir.
- */
- def writeConfigToFile(config: BitcoindConfig): Path = {
-
- val confStr = config.lines.mkString("\n")
-
- val datadir = config.datadir
- .getOrElse(
- throw new IllegalArgumentException(
- "Provided bitcoind config does not have datadir field!"))
- .toPath
-
- val confFile = datadir.resolve("bitcoin.conf")
-
- Files.createDirectories(datadir)
- if (!Files.exists(confFile)) {
- Files.write(confFile, confStr.getBytes)
- }
-
- confFile
+ BitcoindConfig(config = conf, datadir = BitcoindRpcTestUtil.tmpDir())
}
/**
@@ -151,15 +134,8 @@ trait BitcoindRpcTestUtil extends BitcoinSLogger {
): Path = {
val conf = config(uri, rpcUri, zmqPort, pruneMode)
- val configWithDatadir =
- if (conf.datadir.isDefined) {
- conf
- } else {
- val tempDir = Paths.get(Properties.tmpDir, randomDirName)
- conf.withOption("datadir", tempDir.toString)
- }
-
- val written = writeConfigToFile(configWithDatadir)
+ val datadir = conf.datadir
+ val written = BitcoindConfig.writeConfigToFile(conf, datadir)
logger.debug(s"Wrote conf to ${written}")
written
}
diff --git a/testkit/src/main/scala/org/bitcoins/testkit/util/BitcoinSUnitTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/util/BitcoinSUnitTest.scala
index 497f136661..6115d61098 100644
--- a/testkit/src/main/scala/org/bitcoins/testkit/util/BitcoinSUnitTest.scala
+++ b/testkit/src/main/scala/org/bitcoins/testkit/util/BitcoinSUnitTest.scala
@@ -1,7 +1,5 @@
package org.bitcoins.testkit.util
-import java.math.BigInteger
-
import org.scalactic.anyvals.PosInt
import org.scalatest.prop.PropertyChecks
import org.scalatest.{FlatSpec, MustMatchers}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/EncryptedMnemonicTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/EncryptedMnemonicTest.scala
new file mode 100644
index 0000000000..5106467491
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/EncryptedMnemonicTest.scala
@@ -0,0 +1,45 @@
+package org.bitcoins.wallet
+
+import org.bitcoins.core.crypto.{AesPassword, MnemonicCode}
+import org.bitcoins.testkit.core.gen.CryptoGenerators
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+
+import scala.util.{Failure, Success}
+
+class EncryptedMnemonicTest extends BitcoinSUnitTest {
+ behavior of "EncryptedMnemonic"
+
+ it must "fail to decrypt with a bad password" in {
+ val password = AesPassword("good")
+ val badPassword = AesPassword("bad")
+
+ def getMnemonic(): MnemonicCode =
+ CryptoGenerators.mnemonicCode.sample.getOrElse(getMnemonic())
+
+ val mnemonic = getMnemonic()
+ val encrypted = EncryptedMnemonicHelper.encrypt(mnemonic, password) match {
+ case Success(value) => value
+ case Failure(exception) => fail(exception)
+ }
+
+ val decrypted = encrypted.toMnemonic(badPassword)
+
+ assert(decrypted.isFailure)
+
+ }
+
+ it must "have encryption/decryption symmetry" in {
+ forAll(CryptoGenerators.mnemonicCode, CryptoGenerators.aesPassword) {
+ (code, password) =>
+ val encrypted = EncryptedMnemonicHelper.encrypt(code, password) match {
+ case Success(e) => e
+ case Failure(exception) => fail(exception)
+ }
+ val decrypted = encrypted.toMnemonic(password) match {
+ case Success(clear) => clear
+ case Failure(exc) => fail(exc)
+ }
+ assert(decrypted == code)
+ }
+ }
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/WalletAppConfigTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletAppConfigTest.scala
new file mode 100644
index 0000000000..ea24515366
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletAppConfigTest.scala
@@ -0,0 +1,34 @@
+package org.bitcoins.wallet
+
+import org.bitcoins.testkit.util.BitcoinSUnitTest
+import org.bitcoins.node.config.NodeAppConfig
+import org.bitcoins.core.config.TestNet3
+import com.typesafe.config.Config
+import com.typesafe.config.ConfigFactory
+import org.bitcoins.core.config.RegTest
+import org.bitcoins.core.config.MainNet
+import org.bitcoins.wallet.config.WalletAppConfig
+
+class WalletAppConfigTest extends BitcoinSUnitTest {
+ val config = WalletAppConfig()
+
+ it must "be overridable" in {
+ assert(config.network == RegTest)
+
+ val otherConf = ConfigFactory.parseString("bitcoin-s.network = testnet3")
+ val withOther: WalletAppConfig = config.withOverrides(otherConf)
+ assert(withOther.network == TestNet3)
+
+ val mainnetConf = ConfigFactory.parseString("bitcoin-s.network = mainnet")
+ val mainnet: WalletAppConfig = withOther.withOverrides(mainnetConf)
+ assert(mainnet.network == MainNet)
+ }
+
+ it must "be overridable with multiple levels" in {
+ val testnet = ConfigFactory.parseString("bitcoin-s.network = testnet3")
+ val mainnet = ConfigFactory.parseString("bitcoin-s.network = mainnet")
+ val overriden: WalletAppConfig = config.withOverrides(testnet, mainnet)
+ assert(overriden.network == MainNet)
+
+ }
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/WalletIntegrationTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletIntegrationTest.scala
new file mode 100644
index 0000000000..bbde0d2ed9
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletIntegrationTest.scala
@@ -0,0 +1,77 @@
+package org.bitcoins.wallet
+
+import org.bitcoins.core.currency._
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.wallet.fee.SatoshisPerByte
+import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
+import org.bitcoins.wallet.api.{AddUtxoError, AddUtxoSuccess, WalletApi}
+import org.bitcoins.wallet.util.BitcoinSWalletTest
+import org.scalatest.FutureOutcome
+
+import scala.concurrent.Future
+
+class WalletIntegrationTest extends BitcoinSWalletTest {
+
+ override type FixtureParam = WalletWithBitcoind
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withNewWalletAndBitcoind(test)
+
+ behavior of "Wallet - integration test"
+
+ val feeRate = SatoshisPerByte(Satoshis.one)
+
+ it should ("create an address, receive funds to it from bitcoind, import the"
+ + " UTXO and construct a valid, signed transaction that's"
+ + " broadcast and confirmed by bitcoind") in { walletWithBitcoind =>
+ val WalletWithBitcoind(wallet, bitcoind) = walletWithBitcoind
+ val valueFromBitcoind = Bitcoins.one
+
+ val addUtxoF: Future[Unit] = for {
+ addr <- wallet.getNewAddress()
+
+ txid <- bitcoind.sendToAddress(addr, valueFromBitcoind)
+ _ <- bitcoind.generate(6)
+ tx <- bitcoind.getRawTransaction(txid)
+
+ addUtxoRes <- {
+ val voutOpt = tx.vout.find { rpcOut =>
+ val addressesOpt = rpcOut.scriptPubKey.addresses
+ addressesOpt.exists(_.contains(addr))
+ }
+
+ val vout = voutOpt.getOrElse(
+ throw new IllegalArgumentException(
+ "Could not find ouput that spent to our address!"))
+
+ wallet.addUtxo(tx.hex, UInt32(vout.n))
+ }
+ } yield {
+ addUtxoRes match {
+ case err: AddUtxoError => fail(err)
+ case AddUtxoSuccess(w: WalletApi) => () // continue test
+ }
+ }
+
+ for {
+ _ <- addUtxoF
+
+ utxos <- wallet.listUtxos()
+ _ = assert(utxos.nonEmpty)
+
+ balance <- wallet.getBalance()
+ _ = assert(balance > Bitcoins.zero)
+
+ addressFromBitcoind <- bitcoind.getNewAddress
+ signedTx <- wallet.sendToAddress(addressFromBitcoind,
+ Bitcoins(0.5),
+ feeRate)
+
+ txid <- bitcoind.sendRawTransaction(signedTx)
+ _ <- bitcoind.generate(1)
+ tx <- bitcoind.getRawTransaction(txid)
+ } yield {
+ assert(tx.confirmations.exists(_ > 0))
+ }
+ }
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/WalletStorageTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletStorageTest.scala
new file mode 100644
index 0000000000..df6daf5037
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletStorageTest.scala
@@ -0,0 +1,102 @@
+package org.bitcoins.wallet
+
+import org.bitcoins.wallet.util.BitcoinSWalletTest
+import org.scalatest.FutureOutcome
+import org.bitcoins.testkit.fixtures.EmptyFixture
+import org.bitcoins.testkit.core.gen.CryptoGenerators
+import javassist.bytecode.Mnemonic
+import org.bitcoins.core.crypto.MnemonicCode
+import org.bitcoins.core.crypto.AesPassword
+import scala.util.Success
+import java.nio.file.Files
+import akka.compat.Future
+import akka.compat.Future
+import scala.concurrent.Future
+import scala.collection.JavaConverters._
+import java.nio.file.Path
+import org.scalatest.BeforeAndAfterEach
+import java.nio.file.Paths
+import org.bitcoins.wallet.ReadMnemonicError.DecryptionError
+import java.{util => ju}
+import org.bitcoins.wallet.ReadMnemonicError.JsonParsingError
+
+class WalletStorageTest
+ extends BitcoinSWalletTest
+ with BeforeAndAfterEach
+ with EmptyFixture {
+
+ val datadir = appConfig.datadir
+
+ override def beforeEach(): Unit = {
+ Files
+ .walk(datadir)
+ .iterator()
+ .asScala
+ .filter((p: Path) => p != datadir)
+ .foreach(Files.delete(_))
+ }
+
+ behavior of "WalletStorage"
+
+ val passphrase = AesPassword("this_is_secret")
+ val badPassphrase = AesPassword("this_is_also_secret")
+
+ def getMnemonic: MnemonicCode =
+ CryptoGenerators.mnemonicCode.sample.getOrElse(getMnemonic)
+
+ def getAndWriteMnemonic(): MnemonicCode = {
+ val mnemonic = getMnemonic
+ val Success(encrypted) =
+ EncryptedMnemonicHelper.encrypt(mnemonic, passphrase)
+
+ val _ =
+ WalletStorage.writeMnemonicToDisk(encrypted)
+
+ mnemonic
+ }
+
+ it must "write and read a mnemonic to disk" in { _ =>
+ val writtenMnemonic = getAndWriteMnemonic()
+ val read =
+ WalletStorage.decryptMnemonicFromDisk(passphrase)
+
+ read match {
+ case ReadMnemonicSuccess(readMnemonic) =>
+ assert(writtenMnemonic == readMnemonic)
+ case err: ReadMnemonicError => fail(err.toString)
+ }
+ }
+
+ it must "fail to read a mnemonic with bad password" in { _ =>
+ val writtenMnemonic = getAndWriteMnemonic()
+ val read = WalletStorage.decryptMnemonicFromDisk(badPassphrase)
+
+ read match {
+ case ReadMnemonicSuccess(mnemonic) =>
+ fail("Wrote and read with different passwords")
+ case DecryptionError => succeed
+ case err: ReadMnemonicError => fail(err.toString)
+ }
+ }
+
+ it must "fail to read a mnemonic that has bad JSON in it" in { _ =>
+ val badJson =
+ """
+ | {
+ | "iv":"ba7722683dad8067df8d069ee04530cc",
+ | "cipherText":,
+ | "salt":"2b7e7d718139518070a87fbbda03ea33cdcda83b555020e9344774e6e7d08af2"
+ | }
+ """.stripMargin
+ Files.write(datadir.resolve(WalletStorage.ENCRYPTED_SEED_FILE_NAME),
+ badJson.getBytes())
+
+ val read =
+ WalletStorage.decryptMnemonicFromDisk(passphrase)
+
+ read match {
+ case JsonParsingError(_) => succeed
+ case res: ReadMnemonicResult => fail(res.toString())
+ }
+ }
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/WalletUnitTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletUnitTest.scala
new file mode 100644
index 0000000000..e948c3f085
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletUnitTest.scala
@@ -0,0 +1,72 @@
+package org.bitcoins.wallet
+
+import org.bitcoins.wallet.api.UnlockedWalletApi
+import org.bitcoins.wallet.util.BitcoinSWalletTest
+import org.scalatest.FutureOutcome
+import org.bitcoins.wallet.api.UnlockWalletError.BadPassword
+import org.bitcoins.wallet.api.UnlockWalletError.JsonParsingError
+import org.bitcoins.wallet.api.UnlockWalletSuccess
+import org.bitcoins.core.crypto.AesPassword
+import org.bitcoins.wallet.api.UnlockWalletError.MnemonicNotFound
+
+class WalletUnitTest extends BitcoinSWalletTest {
+
+ override type FixtureParam = UnlockedWalletApi
+
+ override def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ withNewWallet(test)
+
+ behavior of "Wallet - unit test"
+
+ it should "create a new wallet" in { wallet: UnlockedWalletApi =>
+ for {
+ accounts <- wallet.listAccounts()
+ addresses <- wallet.listAddresses()
+ } yield {
+ assert(accounts.length == 1)
+ assert(addresses.isEmpty)
+ }
+ }
+
+ // eventually this test should NOT succeed, as BIP44
+ // requires a limit to addresses being generated when
+ // they haven't received any funds
+ it should "generate addresses" in { wallet: UnlockedWalletApi =>
+ for {
+ addr <- wallet.getNewAddress()
+ otherAddr <- wallet.getNewAddress()
+ allAddrs <- wallet.listAddresses()
+ } yield {
+ assert(allAddrs.length == 2)
+ assert(allAddrs.exists(_.address == addr))
+ assert(allAddrs.exists(_.address == otherAddr))
+ }
+ }
+
+ it should "lock and unlock the wallet" in { wallet: UnlockedWalletApi =>
+ val passphrase = wallet.passphrase
+ val locked = wallet.lock()
+ val unlocked = wallet.unlock(passphrase) match {
+ case MnemonicNotFound => fail(MnemonicNotFound)
+ case BadPassword => fail(BadPassword)
+ case JsonParsingError(message) => fail(message)
+ case UnlockWalletSuccess(unlockedWalletApi) => unlockedWalletApi
+ }
+
+ assert(wallet.mnemonicCode == unlocked.mnemonicCode)
+ }
+
+ it should "fail to unlock the wallet with a bad password" in {
+ wallet: UnlockedWalletApi =>
+ val badpassphrase = AesPassword("bad")
+ val locked = wallet.lock()
+ wallet.unlock(badpassphrase) match {
+ case MnemonicNotFound => fail(MnemonicNotFound)
+ case BadPassword => succeed
+ case JsonParsingError(message) => fail(message)
+ case UnlockWalletSuccess(_) =>
+ fail("Unlocked wallet with bad password!")
+ }
+ }
+
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AccountDAOFixture.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AccountDAOFixture.scala
new file mode 100644
index 0000000000..7f69506af7
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AccountDAOFixture.scala
@@ -0,0 +1,25 @@
+package org.bitcoins.wallet.fixtures
+
+import org.bitcoins.wallet.db.WalletDbManagement
+import org.bitcoins.wallet.models.AccountDAO
+import org.bitcoins.wallet.util.BitcoinSWalletTest
+import org.scalatest._
+
+import scala.concurrent.Future
+
+trait AccountDAOFixture extends fixture.AsyncFlatSpec with BitcoinSWalletTest {
+ override final type FixtureParam = AccountDAO
+
+ override final def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ makeDependentFixture(createAccountTable, dropAccountTable)(test)
+
+ private def dropAccountTable(accountDAO: AccountDAO): Future[Unit] = {
+ WalletDbManagement.dropTable(accountDAO.table)
+ }
+
+ private def createAccountTable(): Future[AccountDAO] = {
+ val dao = AccountDAO()
+ WalletDbManagement.createTable(dao.table).map(_ => dao)
+ }
+
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AddressDAOFixture.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AddressDAOFixture.scala
new file mode 100644
index 0000000000..935bb7daf1
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AddressDAOFixture.scala
@@ -0,0 +1,46 @@
+package org.bitcoins.wallet.fixtures
+
+import scala.concurrent.Future
+
+import org.bitcoins.wallet.db.WalletDbManagement
+import org.bitcoins.wallet.models.{AccountDAO, AddressDAO}
+import org.bitcoins.wallet.util.BitcoinSWalletTest
+import org.scalatest._
+
+/**
+ * This fixture has a tuple of DAOs, because
+ * addresses require an account to be valid
+ */
+trait AddressDAOFixture extends fixture.AsyncFlatSpec with BitcoinSWalletTest {
+
+ override final type FixtureParam = (AccountDAO, AddressDAO)
+
+ override final def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ makeDependentFixture(createTables, dropTables)(test)
+
+ private def dropTables(daos: FixtureParam): Future[Unit] = {
+ val (account, address) = daos
+ val dropAccountF = WalletDbManagement.dropTable(account.table)
+ val dropAddressF = WalletDbManagement.dropTable(address.table)
+ for {
+ _ <- dropAccountF
+ _ <- dropAddressF
+ } yield ()
+
+ }
+
+ private def createTables(): Future[FixtureParam] = {
+ val accountDAO = AccountDAO()
+ val addressDAO = AddressDAO()
+
+ val createAccountF =
+ WalletDbManagement.createTable(accountDAO.table)
+ val createTableF =
+ WalletDbManagement.createTable(addressDAO.table)
+ for {
+ _ <- createAccountF
+ _ <- createTableF
+ } yield (accountDAO, addressDAO)
+ }
+
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/DAOFixture.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/DAOFixture.scala
new file mode 100644
index 0000000000..52ab19d401
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/DAOFixture.scala
@@ -0,0 +1,42 @@
+package org.bitcoins.wallet.fixtures
+
+import org.bitcoins.wallet.db.WalletDbManagement
+import org.bitcoins.wallet.util.BitcoinSWalletTest
+import org.scalatest._
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.language.reflectiveCalls
+import scala.concurrent.{Await, Future}
+
+private[fixtures] trait DAOFixture
+ extends fixture.AsyncFlatSpec
+ with BeforeAndAfterAll
+ with BitcoinSWalletTest { this: Suite =>
+ import DAOFixture.HasTable
+
+ private[fixtures] val daoAccumulator =
+ Vector.newBuilder[HasTable]
+
+ override def beforeAll(): Unit = {
+ val tables = daoAccumulator.result()
+
+ val dropTablesF =
+ Future.sequence(
+ tables.map((dao: HasTable) => WalletDbManagement.dropTable(dao.table)))
+
+ val createTablesF =
+ dropTablesF.flatMap { _ =>
+ Future.sequence(tables.map((dao: HasTable) =>
+ WalletDbManagement.createTable(dao.table)))
+ }
+
+ Await.result(createTablesF, timeout)
+
+ super.beforeAll()
+ }
+
+}
+private[fixtures] object DAOFixture {
+
+ type HasTable = { def table[T <: Table[_]]: TableQuery[T] }
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/UtxoDAOFixture.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/UtxoDAOFixture.scala
new file mode 100644
index 0000000000..6bc84b40d8
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/UtxoDAOFixture.scala
@@ -0,0 +1,26 @@
+package org.bitcoins.wallet.fixtures
+
+import org.bitcoins.wallet.db.WalletDbManagement
+import org.bitcoins.wallet.models.UTXOSpendingInfoDAO
+import org.bitcoins.wallet.util.BitcoinSWalletTest
+import org.scalatest._
+
+import scala.concurrent.Future
+
+trait UtxoDAOFixture extends fixture.AsyncFlatSpec with BitcoinSWalletTest {
+
+ override final type FixtureParam = UTXOSpendingInfoDAO
+
+ override final def withFixture(test: OneArgAsyncTest): FutureOutcome =
+ makeDependentFixture(createUtxoTable, dropUtxoTable)(test)
+
+ private def dropUtxoTable(utxoDAO: FixtureParam): Future[Unit] = {
+ WalletDbManagement.dropTable(utxoDAO.table)
+ }
+
+ private def createUtxoTable(): Future[UTXOSpendingInfoDAO] = {
+ val dao = UTXOSpendingInfoDAO()
+ WalletDbManagement.createTable(dao.table).map(_ => dao)
+ }
+
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/models/AccountDAOTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/models/AccountDAOTest.scala
new file mode 100644
index 0000000000..59e9a7e310
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/models/AccountDAOTest.scala
@@ -0,0 +1,23 @@
+package org.bitcoins.wallet.models
+
+import org.bitcoins.testkit.core.gen.CryptoGenerators
+import org.bitcoins.wallet.fixtures.AccountDAOFixture
+import org.bitcoins.wallet.util.{BitcoinSWalletTest, WalletTestUtil}
+
+class AccountDAOTest extends BitcoinSWalletTest with AccountDAOFixture {
+
+ it should "insert and read an account into the database" in { accountDAO =>
+ for {
+ created <- {
+ val account = WalletTestUtil.firstAccount
+
+ val xpub = CryptoGenerators.extPublicKey.sample.get
+
+ val accountDb = AccountDb(xpub, account)
+ accountDAO.create(accountDb)
+ }
+ found <- accountDAO.read(
+ (created.hdAccount.coin, created.hdAccount.index))
+ } yield assert(found.contains(created))
+ }
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/models/AddressDAOTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/models/AddressDAOTest.scala
new file mode 100644
index 0000000000..2414eb7b92
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/models/AddressDAOTest.scala
@@ -0,0 +1,71 @@
+package org.bitcoins.wallet.models
+
+import java.sql.SQLException
+
+import org.bitcoins.core.config.RegTest
+import org.bitcoins.core.crypto.ECPublicKey
+import org.bitcoins.core.protocol.P2SHAddress
+import org.bitcoins.core.script.ScriptType
+import org.bitcoins.core.util.CryptoUtil
+import org.bitcoins.wallet.fixtures.AddressDAOFixture
+import org.bitcoins.wallet.util.{BitcoinSWalletTest, WalletTestUtil}
+import org.bitcoins.core.hd.HDChainType
+import org.bitcoins.core.hd.SegWitHDPath
+import org.bitcoins.wallet.Wallet
+import org.bitcoins.core.protocol.script.WitnessScriptPubKeyV0
+import org.bitcoins.core.protocol.script.P2WPKHWitnessSPKV0
+import org.bitcoins.core.protocol.script.ScriptPubKey
+import org.bitcoins.core.protocol.Bech32Address
+import org.bitcoins.core.protocol.script.P2WPKHWitnessV0
+
+class AddressDAOTest extends BitcoinSWalletTest with AddressDAOFixture {
+
+ // todo: do this with an actual working address
+ // todo: with script witness + redeem script
+ private def getAddressDb(account: AccountDb): AddressDb = {
+ val path = SegWitHDPath(WalletTestUtil.hdCoinType,
+ chainType = HDChainType.External,
+ accountIndex = account.hdAccount.index,
+ addressIndex = 0)
+ val pubkey: ECPublicKey = ECPublicKey.freshPublicKey
+ val hashedPubkey = CryptoUtil.sha256Hash160(pubkey.bytes)
+ val wspk = P2WPKHWitnessSPKV0(pubkey)
+ val scriptWitness = P2WPKHWitnessV0(pubkey)
+ val address = Bech32Address.apply(wspk, WalletTestUtil.networkParam)
+
+ SegWitAddressDb(path = path,
+ ecPublicKey = pubkey,
+ hashedPubkey,
+ address,
+ scriptWitness)
+ }
+
+ behavior of "AddressDAO"
+
+ it should "fail to insert and read an address into the database without a corresponding account" in {
+ daos =>
+ val (_, addressDAO) = daos
+ val readF = {
+ val addressDb = getAddressDb(WalletTestUtil.firstAccountDb)
+ addressDAO.create(addressDb)
+ }
+
+ recoverToSucceededIf[SQLException](readF)
+ }
+
+ it should "insert and read an address into the database with a corresponding account" in {
+ daos =>
+ val (accountDAO, addressDAO) = daos
+ for {
+ createdAccount <- {
+ val account = WalletTestUtil.firstAccountDb
+ accountDAO.create(account)
+ }
+ createdAddress <- {
+ val addressDb = getAddressDb(createdAccount)
+ addressDAO.create(addressDb)
+ }
+ readAddress <- addressDAO.read(createdAddress.address)
+ } yield assert(readAddress.contains(createdAddress))
+ }
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAOTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAOTest.scala
new file mode 100644
index 0000000000..e7943f0b59
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAOTest.scala
@@ -0,0 +1,41 @@
+package org.bitcoins.wallet.models
+
+import org.bitcoins.core.currency.Bitcoins
+import org.bitcoins.core.protocol.transaction.{
+ TransactionOutPoint,
+ TransactionOutput
+}
+import org.bitcoins.wallet.fixtures.UtxoDAOFixture
+import org.bitcoins.wallet.util.{BitcoinSWalletTest, WalletTestUtil}
+
+class UTXOSpendingInfoDAOTest extends BitcoinSWalletTest with UtxoDAOFixture {
+ behavior of "UTXOSpendingInfoDAO"
+
+ it should "insert a segwit UTXO and read it" in { utxoDAO =>
+ val outpoint =
+ TransactionOutPoint(WalletTestUtil.sampleTxid, WalletTestUtil.sampleVout)
+ val output = TransactionOutput(Bitcoins.one, WalletTestUtil.sampleSPK)
+ val scriptWitness = WalletTestUtil.sampleScriptWitness
+ val privkeyPath = WalletTestUtil.sampleSegwitPath
+ val utxo =
+ SegWitUTOXSpendingInfodb(
+ id = None,
+ outPoint = outpoint,
+ output = output,
+ privKeyPath = privkeyPath,
+ scriptWitness = scriptWitness) // todo test this properly
+
+ for {
+ created <- utxoDAO.create(utxo)
+ read <- utxoDAO.read(created.id.get)
+ } yield assert(read.contains(created))
+ }
+
+ it should "insert a legacy UTXO and read it" ignore { _ =>
+ ???
+ }
+
+ it should "insert a nested segwit UTXO and read it" ignore { _ =>
+ ???
+ }
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/util/BitcoinSWalletTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/util/BitcoinSWalletTest.scala
new file mode 100644
index 0000000000..a17e89dc84
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/util/BitcoinSWalletTest.scala
@@ -0,0 +1,98 @@
+package org.bitcoins.wallet.util
+
+import akka.actor.ActorSystem
+import akka.testkit.TestKit
+import org.bitcoins.core.config.RegTest
+import org.bitcoins.core.crypto.MnemonicCode
+import org.bitcoins.core.protocol.blockchain.ChainParams
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.rpc.client.common.BitcoindRpcClient
+import org.bitcoins.testkit.fixtures.BitcoinSFixture
+import org.bitcoins.wallet.Wallet
+import org.bitcoins.wallet.api.{
+ InitializeWalletError,
+ InitializeWalletSuccess,
+ UnlockedWalletApi
+}
+import org.bitcoins.wallet.config.WalletAppConfig
+import org.bitcoins.wallet.db.{WalletDbManagement}
+import org.scalatest._
+
+import scala.concurrent.duration.{DurationInt, FiniteDuration}
+import scala.concurrent.{ExecutionContext, Future}
+import org.bitcoins.db.AppConfig
+
+trait BitcoinSWalletTest
+ extends fixture.AsyncFlatSpec
+ with BitcoinSFixture
+ with BeforeAndAfterAll
+ with BitcoinSLogger {
+ implicit val actorSystem: ActorSystem = ActorSystem(getClass.getSimpleName)
+ implicit val ec: ExecutionContext = actorSystem.dispatcher
+
+ protected lazy val chainParams: ChainParams = WalletTestUtil.chainParams
+ protected implicit lazy val appConfig: WalletAppConfig = WalletAppConfig()
+
+ /** Timeout for async operations */
+ protected val timeout: FiniteDuration = 10.seconds
+
+ protected val networkParam: RegTest.type = WalletTestUtil.networkParam
+
+ override protected def afterAll(): Unit = {
+ TestKit.shutdownActorSystem(actorSystem)
+ }
+
+ override def beforeAll(): Unit = {
+ AppConfig.throwIfDefaultDatadir(appConfig)
+ }
+
+ def destroyWallet(wallet: UnlockedWalletApi): Future[Unit] =
+ WalletDbManagement.dropAll().map(_ => ())
+
+ def createNewWallet(): Future[UnlockedWalletApi] = {
+
+ for {
+ _ <- WalletDbManagement.createAll()
+ wallet <- Wallet.initialize().map {
+ case InitializeWalletSuccess(wallet) => wallet
+ case err: InitializeWalletError => fail(err)
+ }
+ } yield wallet
+ }
+
+ def withNewWallet(test: OneArgAsyncTest): FutureOutcome =
+ makeDependentFixture(build = createNewWallet, destroy = destroyWallet)(test)
+
+ case class WalletWithBitcoind(
+ wallet: UnlockedWalletApi,
+ bitcoind: BitcoindRpcClient)
+
+ def createWalletWithBitcoind(
+ wallet: UnlockedWalletApi): Future[WalletWithBitcoind] = {
+ val bitcoindF = createBitcoindWithFunds()
+ bitcoindF.map(WalletWithBitcoind(wallet, _))
+ }
+
+ def destroyWalletWithBitcoind(
+ walletWithBitcoind: WalletWithBitcoind): Future[Unit] = {
+ val WalletWithBitcoind(wallet, bitcoind) = walletWithBitcoind
+ val stopF = bitcoind.stop()
+ val destroyWalletF = destroyWallet(wallet)
+ for {
+ _ <- stopF
+ _ <- destroyWalletF
+ } yield ()
+ }
+
+ def withNewWalletAndBitcoind(test: OneArgAsyncTest): FutureOutcome = {
+ val builder: () => Future[WalletWithBitcoind] = composeBuildersAndWrap(
+ createNewWallet,
+ createWalletWithBitcoind,
+ (_: UnlockedWalletApi, walletWithBitcoind: WalletWithBitcoind) =>
+ walletWithBitcoind
+ )
+
+ makeDependentFixture(builder, destroy = destroyWalletWithBitcoind)(test)
+ }
+
+}
diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/util/WalletTestUtil.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/util/WalletTestUtil.scala
new file mode 100644
index 0000000000..4f901bc1bc
--- /dev/null
+++ b/wallet-test/src/test/scala/org/bitcoins/wallet/util/WalletTestUtil.scala
@@ -0,0 +1,63 @@
+package org.bitcoins.wallet.util
+
+import org.bitcoins.core.config.RegTest
+import org.bitcoins.core.crypto._
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.blockchain.{
+ ChainParams,
+ RegTestNetChainParams
+}
+import org.bitcoins.core.protocol.script.ScriptPubKey
+import org.bitcoins.testkit.core.gen.CryptoGenerators
+import org.bitcoins.wallet.models.AccountDb
+import org.bitcoins.wallet.HDUtil
+import scodec.bits.HexStringSyntax
+import org.bitcoins.core.hd._
+import org.bitcoins.core.protocol.script.ScriptWitness
+import org.bitcoins.core.protocol.script.P2WPKHWitnessV0
+
+object WalletTestUtil {
+
+ val chainParams: ChainParams = RegTestNetChainParams
+ val networkParam: RegTest.type = RegTest
+
+ val hdCoinType: HDCoinType = HDCoinType.Testnet
+
+ /**
+ * Useful if you want wallet test runs
+ * To use the same key values each time
+ */
+ val sampleMnemonic =
+ MnemonicCode.fromWords(
+ Vector("portion",
+ "uniform",
+ "owner",
+ "crime",
+ "duty",
+ "floor",
+ "sketch",
+ "stumble",
+ "outer",
+ "south",
+ "relax",
+ "car"))
+
+ lazy val sampleSegwitPath =
+ SegWitHDPath(hdCoinType,
+ accountIndex = 0,
+ HDChainType.External,
+ addressIndex = 0)
+
+ def freshXpub: ExtPublicKey =
+ CryptoGenerators.extPublicKey.sample.getOrElse(freshXpub)
+
+ val firstAccount = HDAccount(HDCoin(HDPurposes.SegWit, hdCoinType), 0)
+ def firstAccountDb = AccountDb(freshXpub, firstAccount)
+
+ lazy val sampleTxid: DoubleSha256Digest = DoubleSha256Digest(
+ hex"a910523c0b6752fbcb9c24303b4e068c505825d074a45d1c787122efb4649215")
+ lazy val sampleVout: UInt32 = UInt32.zero
+ lazy val sampleSPK: ScriptPubKey =
+ ScriptPubKey.fromAsmBytes(hex"001401b2ac67587e4b603bb3ad709a8102c30113892d")
+ lazy val sampleScriptWitness: ScriptWitness = P2WPKHWitnessV0(freshXpub.key)
+}
diff --git a/wallet/README.md b/wallet/README.md
new file mode 100644
index 0000000000..2ab5269073
--- /dev/null
+++ b/wallet/README.md
@@ -0,0 +1,44 @@
+### wallet
+
+This is meant to be a stand alone project that can be used as a cold storage wallet _and_ hot wallet.
+
+#### Features
+
+- utxo storage
+- key storage
+- key generation
+- coin selection
+- transaction building
+- fee calculation
+
+#### Design choices
+
+- Private key material is just stored once, as the mnemonic code used to initialize the
+ wallet
+- Addresses we hand out to users are stored with their
+ [BIP44/BIP49/BIP84 paths](../core/src/main/scala/org/bitcoins/core/hd/HDPath.scala)
+ and script types, so that everything we need for spending the money sent to an address
+ is derivable.
+
+#### Mnemonic encryption
+
+The mnemonic seed to the Bitcoin-S wallet is written to disk, encrypted. The file name is
+`$HOME/.bitcoin-s/$NETWORK/encrypted_bitcoin-s_seed.json`. We store it in a JSON object
+that looks like this:
+
+```json
+{
+ "iv": "initializationVector",
+ "cipherText": "encryptedCipherText",
+ "salt": "saltUsedInEncryption"
+}
+```
+
+The parts that's relevant to this part of the wallet is `WalletStorage.scala` (where we handle
+the actual reading from and writing to disk), `EncryptedMnemonic.scala` (where we convert an
+encrypted mnemonic to a cleartext mnemonic) and `AesCrypt.scala` (where do the actual
+encryption/decryption).
+
+We use AES encryption for this, block cipher mode and PKCS5 padding. The wallet password is fed
+into the PBKDF2 key stretching function, using SHA512 as the HMAC function. This happens in
+`PBKDF2.scala`.
diff --git a/wallet/src/main/resources/wallet.conf b/wallet/src/main/resources/wallet.conf
new file mode 100644
index 0000000000..bf755e8785
--- /dev/null
+++ b/wallet/src/main/resources/wallet.conf
@@ -0,0 +1,5 @@
+bitcoin-s {
+ database {
+ name = "walletdb.sqlite"
+ }
+}
\ No newline at end of file
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/EncryptedMnemonic.scala b/wallet/src/main/scala/org/bitcoins/wallet/EncryptedMnemonic.scala
new file mode 100644
index 0000000000..a29ab4ab32
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/EncryptedMnemonic.scala
@@ -0,0 +1,41 @@
+package org.bitcoins.wallet
+
+import java.nio.charset.StandardCharsets
+
+import org.bitcoins.core.crypto.{
+ AesCrypt,
+ AesEncryptedData,
+ AesPassword,
+ MnemonicCode
+}
+import scodec.bits.ByteVector
+
+import scala.util.Try
+
+case class EncryptedMnemonic(value: AesEncryptedData) {
+ import org.bitcoins.core.util.EitherUtil.EitherOps._
+
+ def toMnemonic(passphrase: AesPassword): Try[MnemonicCode] = {
+ AesCrypt.decrypt(value, passphrase).toTry.map { decrypted =>
+ val wordsStr = new String(decrypted.toArray, StandardCharsets.UTF_8)
+ val wordsVec = wordsStr.split(" ").toVector
+ MnemonicCode.fromWords(wordsVec)
+ }
+ }
+}
+
+object EncryptedMnemonicHelper {
+ import org.bitcoins.core.util.EitherUtil.EitherOps._
+
+ def encrypt(
+ mnemonicCode: MnemonicCode,
+ passphrase: AesPassword): Try[EncryptedMnemonic] = {
+ val wordsStr = mnemonicCode.words.mkString(" ")
+ val Right(clearText) = ByteVector.encodeUtf8(wordsStr)
+
+ AesCrypt
+ .encrypt(clearText, passphrase)
+ .toTry
+ .map(EncryptedMnemonic(_))
+ }
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/HDUtil.scala b/wallet/src/main/scala/org/bitcoins/wallet/HDUtil.scala
new file mode 100644
index 0000000000..46c2cd37e8
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/HDUtil.scala
@@ -0,0 +1,78 @@
+package org.bitcoins.wallet
+
+import org.bitcoins.core.hd._
+import org.bitcoins.core.crypto._
+import org.bitcoins.core.config._
+import org.bitcoins.db.AppConfig
+
+private[wallet] object HDUtil {
+
+ /** Gets the xpriv version required for the given HD purpose */
+ def getXprivVersion(hdPurpose: HDPurpose)(
+ implicit config: AppConfig): ExtKeyPrivVersion = {
+ import config.network
+ import org.bitcoins.core.hd.HDPurposes._
+ import ExtKeyVersion._
+
+ (hdPurpose, network) match {
+ case (SegWit, MainNet) => SegWitMainNetPriv
+ case (SegWit, TestNet3 | RegTest) => SegWitTestNet3Priv
+ case (NestedSegWit, MainNet) => NestedSegWitMainNetPriv
+ case (NestedSegWit, TestNet3 | RegTest) => NestedSegWitTestNet3Priv
+ case (Legacy, MainNet) => LegacyMainNetPriv
+ case (Legacy, TestNet3 | RegTest) => LegacyTestNet3Priv
+ case (unknown: HDPurpose, _) =>
+ throw new IllegalArgumentException(s"Got unknown HD purpose $unknown")
+ }
+ }
+
+ /** Gets the xpub version required for the given HD purpose */
+ def getXpubVersion(hdPurpose: HDPurpose)(
+ implicit config: AppConfig): ExtKeyPubVersion = {
+ import config.network
+ import org.bitcoins.core.hd.HDPurposes._
+ import ExtKeyVersion._
+
+ (hdPurpose, network) match {
+ case (SegWit, MainNet) => SegWitMainNetPub
+ case (SegWit, TestNet3 | RegTest) => SegWitTestNet3Pub
+ case (NestedSegWit, MainNet) => NestedSegWitMainNetPub
+ case (NestedSegWit, TestNet3 | RegTest) => NestedSegWitTestNet3Pub
+ case (Legacy, MainNet) => LegacyMainNetPub
+ case (Legacy, TestNet3 | RegTest) => LegacyTestNet3Pub
+ case (unknown: HDPurpose, _) =>
+ throw new IllegalArgumentException(s"Got unknown HD purpose $unknown")
+ }
+ }
+
+ /** Gets the matching xpriv version to this xpub version */
+ def getMatchingExtKeyVersion(version: ExtKeyPubVersion): ExtKeyPrivVersion = {
+ import ExtKeyVersion._
+ version match {
+ case LegacyMainNetPub => LegacyMainNetPriv
+ case LegacyTestNet3Pub => LegacyTestNet3Priv
+ case NestedSegWitMainNetPub => NestedSegWitMainNetPriv
+ case NestedSegWitTestNet3Pub => NestedSegWitTestNet3Priv
+ case SegWitMainNetPub => SegWitMainNetPriv
+ case SegWitTestNet3Pub => SegWitTestNet3Priv
+ }
+ }
+
+ /** Gets the matching xpub version to this xpriv version */
+ def getMatchingExtKeyVersion(version: ExtKeyPrivVersion): ExtKeyPubVersion = {
+ import ExtKeyVersion._
+ version match {
+ case LegacyMainNetPriv => LegacyMainNetPub
+ case LegacyTestNet3Priv => LegacyTestNet3Pub
+ case NestedSegWitMainNetPriv => NestedSegWitMainNetPub
+ case NestedSegWitTestNet3Priv => NestedSegWitTestNet3Pub
+ case SegWitMainNetPriv => SegWitMainNetPub
+ case SegWitTestNet3Priv => SegWitTestNet3Pub
+ }
+ }
+
+ def getCoinType(network: NetworkParameters): HDCoinType = network match {
+ case MainNet => HDCoinType.Bitcoin
+ case TestNet3 | RegTest => HDCoinType.Testnet
+ }
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/LockedWallet.scala b/wallet/src/main/scala/org/bitcoins/wallet/LockedWallet.scala
new file mode 100644
index 0000000000..df6f6756f3
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/LockedWallet.scala
@@ -0,0 +1,271 @@
+package org.bitcoins.wallet
+
+import org.bitcoins.core.crypto._
+import org.bitcoins.core.hd._
+import org.bitcoins.core.currency._
+import org.bitcoins.core.protocol.blockchain._
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.BitcoinAddress
+import org.bitcoins.core.protocol.script.ScriptPubKey
+import org.bitcoins.core.protocol.transaction.{
+ Transaction,
+ TransactionOutPoint,
+ TransactionOutput
+}
+import org.bitcoins.core.util.{BitcoinSLogger, EitherUtil}
+import org.bitcoins.wallet.api.AddUtxoError.{AddressNotFound, BadSPK}
+import org.bitcoins.wallet.api._
+import org.bitcoins.wallet.models._
+
+import scala.concurrent.Future
+import scala.util.Success
+import scala.util.Failure
+import org.bitcoins.db.AppConfig
+import scala.concurrent.ExecutionContext
+import org.bitcoins.wallet.ReadMnemonicError.DecryptionError
+import org.bitcoins.wallet.ReadMnemonicError.JsonParsingError
+
+abstract class LockedWallet extends LockedWalletApi with BitcoinSLogger {
+
+ protected val addressDAO: AddressDAO = AddressDAO()
+ protected val accountDAO: AccountDAO = AccountDAO()
+ protected val utxoDAO: UTXOSpendingInfoDAO = UTXOSpendingInfoDAO()
+
+ override def getBalance(): Future[CurrencyUnit] = listUtxos().map { utxos =>
+ utxos.map(_.value).fold(0.bitcoin)(_ + _)
+ }
+
+ /** The default HD coin */
+ private lazy val DEFAULT_HD_COIN: HDCoin = {
+ val coinType = chainParams match {
+ case MainNetChainParams => HDCoinType.Bitcoin
+ case RegTestNetChainParams | TestNetChainParams => HDCoinType.Testnet
+ }
+ HDCoin(Wallet.DEFAULT_HD_PURPOSE, coinType)
+ }
+
+ /**
+ * @inheritdoc
+ */
+ override def unlock(passphrase: AesPassword): UnlockWalletResult = {
+ logger.debug(s"Trying to unlock wallet")
+ val result = WalletStorage.decryptMnemonicFromDisk(passphrase)
+ result match {
+ case DecryptionError =>
+ logger.error(s"Bad password for unlocking wallet!")
+ UnlockWalletError.BadPassword
+ case JsonParsingError(message) =>
+ logger.error(s"JSON parsing error when unlocking wallet: $message")
+ UnlockWalletError.JsonParsingError(message)
+ case ReadMnemonicError.NotFoundError =>
+ logger.error(s"Encrypted mnemonic not found when unlocking the wallet!")
+ UnlockWalletError.MnemonicNotFound
+
+ case ReadMnemonicSuccess(mnemonic) =>
+ logger.debug(s"Successfully uunlocked wallet")
+ UnlockWalletSuccess(Wallet(mnemonic))
+ }
+ }
+
+ override def listAccounts(): Future[Vector[AccountDb]] =
+ accountDAO.findAll()
+
+ override def listAddresses(): Future[Vector[AddressDb]] =
+ addressDAO.findAll()
+
+ /**
+ * Tries to convert the provided spk to an address, and then checks if we have
+ * it in our address table
+ */
+ private def findAddress(
+ spk: ScriptPubKey): Future[Either[AddUtxoError, AddressDb]] =
+ BitcoinAddress.fromScriptPubKey(spk, networkParameters) match {
+ case Success(address) =>
+ addressDAO.findAddress(address).map {
+ case Some(addrDb) => Right(addrDb)
+ case None => Left(AddressNotFound)
+ }
+ case Failure(_) => Future.successful(Left(BadSPK))
+ }
+
+ private def writeUtxo(
+ output: TransactionOutput,
+ outPoint: TransactionOutPoint,
+ addressDb: AddressDb): Future[UTXOSpendingInfoDb] = {
+
+ val utxo: UTXOSpendingInfoDb = addressDb match {
+ case segwitAddr: SegWitAddressDb =>
+ SegWitUTOXSpendingInfodb(
+ id = None,
+ outPoint = outPoint,
+ output = output,
+ privKeyPath = segwitAddr.path,
+ scriptWitness = segwitAddr.witnessScript
+ )
+ case otherAddr @ (_: LegacyAddressDb | _: NestedSegWitAddressDb) =>
+ throw new IllegalArgumentException(
+ s"Bad utxo $otherAddr. Note: Only Segwit is implemented")
+ }
+
+ utxoDAO.create(utxo).map { written =>
+ val writtenOut = written.outPoint
+ logger.info(
+ s"Successfully inserted UTXO ${writtenOut.txId.hex}:${writtenOut.vout.toInt} into DB")
+ logger.info(s"UTXO details: ${written.output}")
+ written
+ }
+ }
+
+ /**
+ * @inheritdoc
+ */
+ override def addUtxo(
+ transaction: Transaction,
+ vout: UInt32): Future[AddUtxoResult] = {
+ import AddUtxoError._
+ import org.bitcoins.core.util.EitherUtil.EitherOps._
+
+ logger.info(s"Adding UTXO to wallet: ${transaction.txId.hex}:${vout.toInt}")
+
+ // first check: does the provided vout exist in the tx?
+ val voutIndexOutOfBounds: Boolean = {
+ val voutLength = transaction.outputs.length
+ val outOfBunds = voutLength <= vout.toInt
+
+ if (outOfBunds)
+ logger.error(
+ s"TX with TXID ${transaction.txId.hex} only has $voutLength, got request to add vout ${vout.toInt}!")
+ outOfBunds
+ }
+
+ if (voutIndexOutOfBounds) {
+ Future.successful(VoutIndexOutOfBounds)
+ } else {
+
+ val output = transaction.outputs(vout.toInt)
+ val outPoint = TransactionOutPoint(transaction.txId, vout)
+
+ // second check: do we have an address associated with the provided
+ // output in our DB?
+ val addressDbEitherF: Future[Either[AddUtxoError, AddressDb]] =
+ findAddress(output.scriptPubKey)
+
+ // insert the UTXO into the DB
+ addressDbEitherF.flatMap { addressDbE =>
+ val biasedE: Either[AddUtxoError, Future[UTXOSpendingInfoDb]] = for {
+ addressDb <- addressDbE
+ } yield writeUtxo(output, outPoint, addressDb)
+
+ EitherUtil.liftRightBiasedFutureE(biasedE)
+ } map {
+ case Right(_) => AddUtxoSuccess(this)
+ case Left(e) => e
+ }
+ }
+ }
+
+ /**
+ * @inheritdoc
+ */
+ // override def updateUtxo: Future[WalletApi] = ???
+
+ override def listUtxos(): Future[Vector[UTXOSpendingInfoDb]] =
+ utxoDAO.findAllUTXOs()
+
+ /**
+ * @param account Account to generate address from
+ * @param chainType What chain do we generate from? Internal change vs. external
+ */
+ private def getNewAddressHelper(
+ account: AccountDb,
+ chainType: HDChainType
+ ): Future[BitcoinAddress] = {
+
+ val accountIndex = account.hdAccount.index
+
+ val lastAddrOptF = chainType match {
+ case HDChainType.External =>
+ addressDAO.findMostRecentExternal(accountIndex)
+ case HDChainType.Change =>
+ addressDAO.findMostRecentChange(accountIndex)
+ }
+
+ lastAddrOptF.flatMap { lastAddrOpt =>
+ val addrPath: HDPath = lastAddrOpt match {
+ case Some(addr) =>
+ addr.path.next
+ case None =>
+ val account = HDAccount(DEFAULT_HD_COIN, accountIndex)
+ val chain = account.toChain(chainType)
+ val address = HDAddress(chain, 0)
+ address.toPath
+ }
+
+ val addressDb =
+ addrPath match {
+ case segwitPath: SegWitHDPath =>
+ val pathDiff = account.hdAccount.diff(segwitPath) match {
+ case Some(value) => value
+ case None =>
+ throw new RuntimeException(
+ s"Could not diff ${account.hdAccount} and $segwitPath")
+ }
+
+ val pubkey = account.xpub.deriveChildPubKey(pathDiff) match {
+ case Failure(exception) => throw exception
+ case Success(value) => value.key
+ }
+
+ AddressDbHelper
+ .getP2WPKHAddress(pubkey, segwitPath, networkParameters)
+ case _: HDPath =>
+ throw new IllegalArgumentException(
+ "P2PKH and nested segwit P2PKH not yet implemented")
+ }
+ val writeF = addressDAO.create(addressDb)
+ writeF.foreach { written =>
+ logger.info(
+ s"Got ${chainType} address ${written.address} at key path ${written.path} with pubkey ${written.ecPublicKey}")
+ }
+
+ writeF.map(_.address)
+ }
+ }
+
+ /**
+ * right now only generates P2WPKH addresses
+ *
+ * @inheritdoc
+ */
+ override def getNewAddress(account: AccountDb): Future[BitcoinAddress] = {
+ getNewAddressHelper(account, HDChainType.External)
+ }
+
+ /** Generates a new change address */
+ override protected[wallet] def getNewChangeAddress(
+ account: AccountDb): Future[BitcoinAddress] = {
+ getNewAddressHelper(account, HDChainType.Change)
+ }
+
+ /** @inheritdoc */
+ override protected[wallet] def getDefaultAccount(): Future[AccountDb] = {
+ for {
+ account <- accountDAO.read((DEFAULT_HD_COIN, 0))
+ } yield
+ account.getOrElse(
+ throw new RuntimeException(
+ s"Could not find account with ${DEFAULT_HD_COIN.purpose.constant} " +
+ s"purpose field and ${DEFAULT_HD_COIN.coinType.toInt} coin field"))
+ }
+
+}
+
+object LockedWallet {
+ private case class LockedWalletImpl()(
+ implicit val ec: ExecutionContext,
+ val walletConfig: AppConfig)
+ extends LockedWallet
+
+ def apply()(implicit ec: ExecutionContext, config: AppConfig): LockedWallet =
+ LockedWalletImpl()
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala b/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala
new file mode 100644
index 0000000000..07af071cc2
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala
@@ -0,0 +1,201 @@
+package org.bitcoins.wallet
+
+import org.bitcoins.core.config.BitcoinNetwork
+import org.bitcoins.core.crypto._
+import org.bitcoins.core.currency._
+import org.bitcoins.core.protocol.BitcoinAddress
+import org.bitcoins.core.protocol.transaction._
+import org.bitcoins.core.util.{BitcoinSLogger, EitherUtil}
+import org.bitcoins.core.wallet.builder.BitcoinTxBuilder
+import org.bitcoins.core.wallet.fee.FeeUnit
+import org.bitcoins.core.wallet.utxo.BitcoinUTXOSpendingInfo
+import org.bitcoins.wallet.api._
+import org.bitcoins.wallet.models._
+import scodec.bits.BitVector
+
+import scala.concurrent.{ExecutionContext, Future}
+import scala.util.{Failure, Success, Try}
+import org.bitcoins.core.hd._
+import org.bitcoins.db.AppConfig
+
+sealed abstract class Wallet
+ extends LockedWallet
+ with UnlockedWalletApi
+ with BitcoinSLogger {
+
+ /**
+ * @inheritdoc
+ */
+ override def lock(): LockedWalletApi = {
+ logger.debug(s"Locking wallet")
+ val encryptedT = EncryptedMnemonicHelper.encrypt(mnemonicCode, passphrase)
+ val encrypted = encryptedT match {
+ case Failure(exception) =>
+ throw new RuntimeException(s"Could not encrypt mnemonic: $exception")
+ case Success(value) => value
+ }
+
+ WalletStorage.writeMnemonicToDisk(encrypted)
+ logger.debug("Locked wallet")
+ LockedWallet()
+ }
+
+ override def sendToAddress(
+ address: BitcoinAddress,
+ amount: CurrencyUnit,
+ feeRate: FeeUnit,
+ fromAccount: AccountDb): Future[Transaction] = {
+ logger.info(s"Sending $amount to $address at feerate $feeRate")
+ for {
+ change <- getNewChangeAddress(fromAccount)
+ walletUtxos <- listUtxos()
+ txBuilder <- {
+ val destinations: Seq[TransactionOutput] = List(
+ TransactionOutput(amount, address.scriptPubKey))
+
+ // currencly just grabs one utxos, throws if can't find big enough
+ // todo: implement coin selection
+ val utxos: List[BitcoinUTXOSpendingInfo] =
+ List(
+ walletUtxos
+ .find(_.value >= amount)
+ .get
+ .toUTXOSpendingInfo(fromAccount, seed))
+
+ logger.info(s"Spending UTXOs: ${utxos
+ .map { utxo =>
+ import utxo.outPoint
+ s"${outPoint.txId.hex}:${outPoint.vout.toInt}"
+ }
+ .mkString(", ")}")
+
+ utxos.zipWithIndex.foreach {
+ case (utxo, index) =>
+ logger.info(s"UTXO $index details: ${utxo.output}")
+ }
+
+ networkParameters match {
+ case b: BitcoinNetwork =>
+ BitcoinTxBuilder(destinations = destinations,
+ utxos = utxos,
+ feeRate = feeRate,
+ changeSPK = change.scriptPubKey,
+ network = b)
+ }
+
+ }
+ signed <- txBuilder.sign
+ /* todo: add change output to UTXO DB
+ _ <- {
+ val changeVout = ???
+ addUtxo(signed, changeVout)
+ } */
+ } yield {
+ signed
+ }
+ }
+
+}
+
+// todo: create multiple wallets, need to maintain multiple databases
+object Wallet extends CreateWalletApi with BitcoinSLogger {
+
+ // The default HD purpose of the bitcoin-s wallet. Can be
+ // one of segwit, nested segwit or legacy. Hard coded for
+ // now, could be make configurable in the future
+ private[wallet] val DEFAULT_HD_PURPOSE: HDPurpose = HDPurposes.SegWit
+
+ private case class WalletImpl(
+ mnemonicCode: MnemonicCode
+ )(
+ implicit override val walletConfig: AppConfig,
+ override val ec: ExecutionContext)
+ extends Wallet {
+
+ // todo: until we've figured out a better schem
+ override val passphrase: AesPassword = Wallet.badPassphrase
+ }
+
+ def apply(mnemonicCode: MnemonicCode)(
+ implicit config: AppConfig,
+ ec: ExecutionContext): Wallet =
+ WalletImpl(mnemonicCode)
+
+ // todo figure out how to handle password part of wallet
+ val badPassphrase = AesPassword("changeMe")
+
+ // todo fix signature
+ override def initializeWithEntropy(entropy: BitVector)(
+ implicit config: AppConfig,
+ ec: ExecutionContext): Future[InitializeWalletResult] = {
+ import org.bitcoins.core.util.EitherUtil.EitherOps._
+
+ logger.info(s"Initializing wallet on chain ${config.network}")
+
+ val mnemonicT = Try(MnemonicCode.fromEntropy(entropy))
+ val mnemonicE: Either[InitializeWalletError, MnemonicCode] =
+ mnemonicT match {
+ case Success(mnemonic) =>
+ logger.trace(s"Created mnemonic from entropy")
+ Right(mnemonic)
+ case Failure(err) =>
+ logger.error(s"Could not create mnemonic from entropy! $err")
+ Left(InitializeWalletError.BadEntropy)
+
+ }
+
+ val encryptedMnemonicE: Either[InitializeWalletError, EncryptedMnemonic] =
+ mnemonicE.flatMap { mnemonic =>
+ val encryptedT = EncryptedMnemonicHelper
+ .encrypt(mnemonic, badPassphrase)
+
+ val encryptedE: Either[Throwable, EncryptedMnemonic] =
+ encryptedT match {
+ case Failure(exception) => Left(exception)
+ case Success(value) => Right(value)
+ }
+
+ encryptedE.left
+ .map { err =>
+ logger.error(s"Encryption error when encrypting mnemonic: $err")
+ InitializeWalletError.EncryptionError(err)
+ }
+ }
+
+ val biasedFinalEither: Either[InitializeWalletError, Future[WalletImpl]] =
+ for {
+ mnemonic <- mnemonicE
+ encrypted <- encryptedMnemonicE
+ } yield {
+ val wallet = WalletImpl(mnemonic)
+ val coin =
+ HDCoin(DEFAULT_HD_PURPOSE, HDUtil.getCoinType(config.network))
+ val account = HDAccount(coin, 0)
+ val xpriv = wallet.xprivForPurpose(DEFAULT_HD_PURPOSE)
+
+ // safe since we're deriving from a priv
+ val xpub = xpriv.deriveChildPubKey(account).get
+ val accountDb = AccountDb(xpub, account)
+
+ val mnemonicPath =
+ WalletStorage.writeMnemonicToDisk(encrypted)
+ logger.debug(s"Saved encrypted wallet mnemonic to $mnemonicPath")
+
+ for {
+ _ <- wallet.accountDAO
+ .create(accountDb)
+ .map(_ => logger.trace(s"Saved account to DB"))
+ } yield wallet
+ }
+
+ val finalEither: Future[Either[InitializeWalletError, WalletImpl]] =
+ EitherUtil.liftRightBiasedFutureE(biasedFinalEither)
+
+ finalEither.map {
+ case Right(wallet) =>
+ logger.debug(s"Successfully initialized wallet")
+ InitializeWalletSuccess(wallet)
+ case Left(err) => err
+ }
+ }
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/WalletStorage.scala b/wallet/src/main/scala/org/bitcoins/wallet/WalletStorage.scala
new file mode 100644
index 0000000000..87a8aea236
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/WalletStorage.scala
@@ -0,0 +1,229 @@
+package org.bitcoins.wallet
+
+import scala.collection.JavaConverters._
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.core.crypto.AesPassword
+import java.nio.file.Files
+import org.bitcoins.core.crypto.MnemonicCode
+import scodec.bits.ByteVector
+import org.bitcoins.core.crypto.AesEncryptedData
+import org.bitcoins.core.crypto.AesSalt
+import scala.util.Failure
+import scala.util.Success
+import java.nio.file.Paths
+import java.nio.file.Path
+import scala.util.Try
+import org.bitcoins.db.AppConfig
+
+// what do we do if seed exists? error if they aren't equal?
+object WalletStorage extends BitcoinSLogger {
+
+ private[wallet] val ENCRYPTED_SEED_FILE_NAME: String =
+ "encrypted_bitcoin-s_seed.json"
+
+ private object MnemonicJsonKeys {
+ val IV = "iv"
+ val CIPHER_TEXT = "cipherText"
+ val SALT = "salt"
+ }
+
+ /**
+ * Writes the encrypted mnemonic to disk.
+ * If we encounter a file in the place we're about
+ * to write to, we move it to a backup location
+ * with the current epoch timestamp as part of
+ * the file name.
+ */
+ def writeMnemonicToDisk(mnemonic: EncryptedMnemonic)(
+ implicit config: AppConfig): Path = {
+ import mnemonic.{value => encrypted}
+
+ val jsObject = {
+ import MnemonicJsonKeys._
+ ujson.Obj(
+ IV -> encrypted.iv.toHex,
+ CIPHER_TEXT -> encrypted.cipherText.toHex,
+ SALT -> encrypted.salt.value.toHex
+ )
+ }
+
+ val path = config.datadir.resolve(ENCRYPTED_SEED_FILE_NAME)
+
+ logger.debug(s"Writing mnemonic to $path")
+
+ val writtenJs = ujson.write(jsObject)
+
+ def writeJsToDisk() = {
+ val writtenPath = Files.write(path, writtenJs.getBytes())
+ logger.trace(s"Wrote encrypted mnemonic to $path")
+
+ writtenPath
+ }
+
+ val foundMnemonicOpt: Option[EncryptedMnemonic] =
+ readEncryptedMnemonicFromDisk() match {
+ case Left(_) =>
+ None
+ case Right(mnemonic) => Some(mnemonic)
+ }
+
+ foundMnemonicOpt match {
+ case None =>
+ logger.trace(s"$path does not exist")
+ writeJsToDisk()
+ case Some(found) =>
+ logger.trace(s"$path already exists")
+ if (found == mnemonic) {
+ logger.trace(s"Found and provided mnemonics are the same, skipping")
+ path
+ } else {
+ logger.warn(
+ s"Found mnemonic on disk is not the same as mnemonic we're about to write")
+
+ val bakPath = {
+ val epoch = System.currentTimeMillis.toString
+ Paths.get(s"${path.toString()}-$epoch.bak")
+ }
+
+ logger.trace(s"Moving file to $bakPath")
+ Files.move(path, bakPath)
+
+ logger.warn(s"Moved $path to $bakPath")
+ writeJsToDisk()
+ }
+ }
+ }
+
+ /** Reads the raw encrypted mnemonic from disk,
+ * performing no decryption
+ */
+ private def readEncryptedMnemonicFromDisk()(
+ implicit config: AppConfig): Either[
+ ReadMnemonicError,
+ EncryptedMnemonic] = {
+
+ val path = {
+ config.datadir.resolve(ENCRYPTED_SEED_FILE_NAME)
+ }
+
+ val jsonE: Either[ReadMnemonicError, ujson.Value] = {
+ if (Files.isRegularFile(path)) {
+ val rawJson = Files.readAllLines(path).asScala.mkString("\n")
+ logger.debug(s"Read raw encrypted mnemonic from $path")
+
+ Try {
+ ujson.read(rawJson)
+ } match {
+ case Failure(ujson.ParseException(clue, _, _, _)) =>
+ Left(ReadMnemonicError.JsonParsingError(clue))
+ case Failure(exception) => throw exception
+
+ case Success(value) =>
+ logger.debug(s"Parsed $path into valid json")
+ Right(value)
+ }
+ } else {
+ logger.error(s"Encrypted mnemonic not found at $path")
+ Left(ReadMnemonicError.NotFoundError)
+ }
+ }
+
+ import org.bitcoins.core.util.EitherUtil.EitherOps._
+ import MnemonicJsonKeys._
+ import ReadMnemonicError._
+
+ val readJsonTupleEither: Either[
+ ReadMnemonicError,
+ (String, String, String)] = jsonE.flatMap { json =>
+ Try {
+ val ivString = json(IV).str
+ val cipherTextString = json(CIPHER_TEXT).str
+ val rawSaltString = json(SALT).str
+ (ivString, cipherTextString, rawSaltString)
+ } match {
+ case Success(value) => Right(value)
+ case Failure(value: ujson.Value.InvalidData) =>
+ logger.error(s"Error when parsing JSON file $path: ${value.msg}")
+ Left(JsonParsingError(value.msg))
+ case Failure(exception) => throw exception
+ }
+ }
+
+ val encryptedEither: Either[ReadMnemonicError, EncryptedMnemonic] =
+ readJsonTupleEither.flatMap {
+ case (rawIv, rawCipherText, rawSalt) =>
+ val encryptedOpt = for {
+ iv <- ByteVector.fromHex(rawIv)
+ cipherText <- ByteVector.fromHex(rawCipherText)
+ rawSalt <- ByteVector.fromHex(rawSalt)
+ salt = AesSalt(rawSalt)
+ } yield {
+ logger.debug(s"Parsed contents of $path into an EncryptedMnemonic")
+ EncryptedMnemonic(AesEncryptedData(cipherText, iv, salt))
+ }
+ encryptedOpt
+ .map(Right(_))
+ .getOrElse(
+ Left(JsonParsingError("JSON contents was not hex strings")))
+ }
+ encryptedEither
+ }
+
+ /**
+ * Reads the wallet mmemonic from disk and tries to parse and
+ * decrypt it
+ */
+ def decryptMnemonicFromDisk(passphrase: AesPassword)(
+ implicit
+ config: AppConfig): ReadMnemonicResult = {
+ val encryptedEither = readEncryptedMnemonicFromDisk()
+
+ import org.bitcoins.core.util.EitherUtil.EitherOps._
+ val decryptedEither: Either[ReadMnemonicError, MnemonicCode] =
+ encryptedEither.flatMap { encrypted =>
+ encrypted.toMnemonic(passphrase) match {
+ case Failure(exc) =>
+ logger.error(s"Error when decrypting $encrypted: $exc")
+ Left(ReadMnemonicError.DecryptionError)
+ case Success(value) =>
+ logger.debug(s"Decrypted $encrypted successfully")
+ Right(value)
+ }
+ }
+
+ decryptedEither match {
+ case Left(value) => value
+ case Right(value) => ReadMnemonicSuccess(value)
+ }
+ }
+}
+
+/**
+ * Represents the result of reading
+ * an encrypted mnemonic from disk
+ */
+sealed trait ReadMnemonicResult
+
+/** Represents the success case */
+case class ReadMnemonicSuccess(mnemonic: MnemonicCode)
+ extends ReadMnemonicResult
+
+sealed trait ReadMnemonicError extends ReadMnemonicResult
+
+object ReadMnemonicError {
+
+ /**
+ * Something went wrong while decrypting the mnemonic.
+ * Most likely the passphrase was bad
+ */
+ case object DecryptionError extends ReadMnemonicError
+
+ /**
+ * Something went wrong while parsing the encrypted
+ * mnemonic into valid JSON
+ */
+ case class JsonParsingError(message: String) extends ReadMnemonicError
+
+ /** The encrypted mnemonic was not found on disk */
+ case object NotFoundError extends ReadMnemonicError
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/AddUtxoResult.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/AddUtxoResult.scala
new file mode 100644
index 0000000000..691206d039
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/api/AddUtxoResult.scala
@@ -0,0 +1,34 @@
+package org.bitcoins.wallet.api
+
+sealed trait AddUtxoResult {
+ def flatMap(f: AddUtxoResult => AddUtxoResult) = ???
+ def map(success: AddUtxoSuccess => AddUtxoResult) = ???
+}
+
+case class AddUtxoSuccess(walletApi: WalletApi) extends AddUtxoResult
+
+/** Represents an error that might occur when adding an UTXO to the wallet */
+sealed trait AddUtxoError extends Error with AddUtxoResult
+
+object AddUtxoError {
+
+ /**
+ * The provided vout index does not exist in the given transaction
+ */
+ final case object VoutIndexOutOfBounds
+ extends Error("VoutIndexOutOfBounds")
+ with AddUtxoError
+
+ /**
+ * We could not convert the found ScriptPubKey into an address
+ */
+ final case object BadSPK extends Error("BadScriptPubKey") with AddUtxoError
+
+ /**
+ * The address associated with the provided UTXO could not be found
+ * in our DB of addresses
+ */
+ final case object AddressNotFound
+ extends Error("AddressNotFound")
+ with AddUtxoError
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/CreateWalletApi.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/CreateWalletApi.scala
new file mode 100644
index 0000000000..41e2a652cd
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/api/CreateWalletApi.scala
@@ -0,0 +1,53 @@
+package org.bitcoins.wallet.api
+
+import org.bitcoins.core.crypto.MnemonicCode
+import scodec.bits.BitVector
+
+import scala.concurrent.{ExecutionContext, Future}
+import org.bitcoins.db.AppConfig
+
+/**
+ * @define initialize
+ * Initializes the wallet, generating a wallet seed.
+ * This seed should be displayed to the user, so they
+ * can write it down. They should also be prompted
+ * to confirm at least parts of the code.
+ *
+ *
+ * @define initializeWithEnt
+ * Initializes the with a user-provided seed,
+ * generating a wallet seed.
+ * This seed should be displayed to the user, so they
+ * can write it down. They should also be prompted
+ * to confirm at least parts of the code.
+ */
+trait CreateWalletApi {
+
+ private def initializeInternal()(
+ implicit executionContext: ExecutionContext,
+ appConfig: AppConfig): Future[InitializeWalletResult] =
+ initializeWithEntropy(entropy = MnemonicCode.getEntropy256Bits)
+
+ /**
+ * $initialize
+ */
+ final def initialize()(
+ implicit executionContext: ExecutionContext,
+ appConfig: AppConfig): Future[InitializeWalletResult] =
+ initializeInternal()
+
+ /**
+ * $initializeWithEnt
+ */
+ def initializeWithEntropy(entropy: BitVector)(
+ implicit config: AppConfig,
+ executionContext: ExecutionContext): Future[InitializeWalletResult]
+
+ // todo: scaladoc
+ final def initializeWithMnemonic(mnemonicCode: MnemonicCode)(
+ implicit config: AppConfig,
+ executionContext: ExecutionContext): Future[InitializeWalletResult] = {
+ val entropy = mnemonicCode.toEntropy
+ initializeWithEntropy(entropy)
+ }
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/InitializeWalletResult.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/InitializeWalletResult.scala
new file mode 100644
index 0000000000..e53025f6c8
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/api/InitializeWalletResult.scala
@@ -0,0 +1,31 @@
+package org.bitcoins.wallet.api
+
+sealed trait InitializeWalletResult
+
+final case class InitializeWalletSuccess(wallet: UnlockedWalletApi)
+ extends InitializeWalletResult
+
+sealed trait InitializeWalletError extends Error with InitializeWalletResult
+
+object InitializeWalletError {
+ // todo add explanation of what good/bad entropy is
+ final case object BadEntropy
+ extends Error("Bad Entropy")
+ with InitializeWalletError
+
+ final case class EncryptionError(underlying: Throwable)
+ extends Error(underlying)
+ with InitializeWalletError
+
+ /**
+ * Wallet data was found in the
+ * specified data directory.
+ *
+ * @note `bitcoin-s` only supports one wallet
+ * per network at the moment.
+ */
+ final case object WalletAlreadyExists
+ extends Error("Wallet already exists")
+ with InitializeWalletError
+
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/UnlockWalletResult.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/UnlockWalletResult.scala
new file mode 100644
index 0000000000..d93b21930a
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/api/UnlockWalletResult.scala
@@ -0,0 +1,23 @@
+package org.bitcoins.wallet.api
+
+sealed trait UnlockWalletResult
+
+final case class UnlockWalletSuccess(unlockedWalletApi: UnlockedWalletApi)
+ extends UnlockWalletResult
+
+sealed trait UnlockWalletError extends Error with UnlockWalletResult
+
+object UnlockWalletError {
+
+ final case object MnemonicNotFound
+ extends Error("Mnemonic nout found")
+ with UnlockWalletResult
+
+ final case object BadPassword
+ extends Error("Bad password for unlocking wallet!")
+ with UnlockWalletError
+
+ final case class JsonParsingError(message: String)
+ extends Error(message)
+ with UnlockWalletError
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala
new file mode 100644
index 0000000000..4e02ae9542
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala
@@ -0,0 +1,174 @@
+package org.bitcoins.wallet.api
+
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.crypto._
+import org.bitcoins.core.currency.CurrencyUnit
+import org.bitcoins.core.hd.HDPurpose
+import org.bitcoins.core.number.UInt32
+import org.bitcoins.core.protocol.BitcoinAddress
+import org.bitcoins.core.protocol.blockchain.ChainParams
+import org.bitcoins.core.protocol.transaction.Transaction
+import org.bitcoins.core.wallet.fee.FeeUnit
+import org.bitcoins.wallet.HDUtil
+import org.bitcoins.wallet.models.{AccountDb, AddressDb, UTXOSpendingInfoDb}
+
+import scala.concurrent.Future
+import scala.concurrent.ExecutionContext
+import org.bitcoins.db.AppConfig
+
+/**
+ * API for the wallet project.
+ *
+ * This wallet API is BIP344 compliant.
+ *
+ * @see [[https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki BIP44]]
+ */
+sealed trait WalletApi {
+
+ implicit val walletConfig: AppConfig
+ implicit val ec: ExecutionContext
+
+ def chainParams: ChainParams = walletConfig.chain
+
+ def networkParameters: NetworkParameters = walletConfig.network
+}
+
+/**
+ * API for a locked wallet
+ */
+trait LockedWalletApi extends WalletApi {
+
+ /**
+ * Adds the provided UTXO to the wallet, making it
+ * available for spending.
+ */
+ def addUtxo(transaction: Transaction, vout: UInt32): Future[AddUtxoResult]
+
+ /** Sums up the value of all UTXOs in the wallet */
+ // noinspection AccessorLikeMethodIsEmptyParen
+ // async calls have side effects :-)
+ def getBalance(): Future[CurrencyUnit]
+
+ /**
+ * If a UTXO is spent outside of the wallet, we
+ * need to remove it from the database so it won't be
+ * attempted spent again by us.
+ */
+ // def updateUtxo: Future[WalletApi]
+
+ def listUtxos(): Future[Vector[UTXOSpendingInfoDb]]
+
+ def listAddresses(): Future[Vector[AddressDb]]
+
+ /**
+ * Gets a new external address from the specified
+ * account. Calling this method multiple
+ * times will return the same address, until it has
+ * received funds.
+ */
+ def getNewAddress(account: AccountDb): Future[BitcoinAddress]
+
+ /**
+ * Gets a new external address from the default account.
+ * Calling this method multiple
+ * times will return the same address, until it has
+ * received funds.
+ */
+ def getNewAddress(): Future[BitcoinAddress] = {
+ for {
+ account <- getDefaultAccount()
+ address <- getNewAddress(account)
+ } yield address
+ }
+
+ /** Generates a new change address */
+ protected[wallet] def getNewChangeAddress(
+ account: AccountDb): Future[BitcoinAddress]
+
+ /** Generates a new change address for the default account */
+ final protected[wallet] def getNewChangeAddress(): Future[BitcoinAddress] = {
+ for {
+ account <- getDefaultAccount
+ address <- getNewChangeAddress(account)
+
+ } yield address
+ }
+
+ /**
+ * Fetches the default account from the DB
+ */
+ protected[wallet] def getDefaultAccount(): Future[AccountDb]
+
+ /**
+ * Unlocks the wallet with the provided passphrase,
+ * making it possible to send transactions.
+ */
+ def unlock(passphrase: AesPassword): UnlockWalletResult
+
+ def listAccounts(): Future[Vector[AccountDb]]
+
+ /**
+ * Tries to create a new accoun in this wallet. Fails if the
+ * most recent account has no transaction history, as per
+ * BIP44
+ *
+ * @see [[https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account BIP44 account section]]
+ */
+ // def createNewAccount: Future[Try[WalletApi]]
+
+}
+
+trait UnlockedWalletApi extends LockedWalletApi {
+
+ def mnemonicCode: MnemonicCode
+
+ /** The wallet seed */
+ lazy val seed: BIP39Seed = BIP39Seed.fromMnemonic(mnemonicCode)
+
+ // TODO: come back to how to handle this
+ def passphrase: AesPassword
+
+ /** Derives the relevant xpriv for the given HD purpose */
+ private[wallet] def xprivForPurpose(purpose: HDPurpose): ExtPrivateKey = {
+ val seed = BIP39Seed.fromMnemonic(mnemonicCode, BIP39Seed.EMPTY_PASSWORD) // todo think more about this
+
+ val privVersion = HDUtil.getXprivVersion(purpose)
+ seed.toExtPrivateKey(privVersion)
+ }
+
+ /**
+ * Locks the wallet. After this operation is called,
+ * all sensitive material in the wallet should be
+ * encrypted and unaccessible
+ */
+ def lock(): LockedWalletApi
+
+ /**
+ *
+ * Sends money from the specified account
+ *
+ * todo: add error handling to signature
+ */
+ def sendToAddress(
+ address: BitcoinAddress,
+ amount: CurrencyUnit,
+ feeRate: FeeUnit,
+ fromAccount: AccountDb): Future[Transaction]
+
+ /**
+ * Sends money from the default account
+ *
+ * todo: add error handling to signature
+ */
+ def sendToAddress(
+ address: BitcoinAddress,
+ amount: CurrencyUnit,
+ feeRate: FeeUnit
+ ): Future[Transaction] = {
+ for {
+ account <- getDefaultAccount()
+ tx <- sendToAddress(address, amount, feeRate, account)
+ } yield tx
+ }
+
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala b/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala
new file mode 100644
index 0000000000..b7a5f8f720
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala
@@ -0,0 +1,12 @@
+package org.bitcoins.wallet.config
+
+import com.typesafe.config.Config
+import org.bitcoins.db.AppConfig
+
+case class WalletAppConfig(conf: Config*) extends AppConfig {
+ override val configOverrides: List[Config] = conf.toList
+ override def moduleConfigName: String = "wallet.conf"
+ override type ConfigType = WalletAppConfig
+ override def newConfigOfType(configs: List[Config]): WalletAppConfig =
+ WalletAppConfig(configs: _*)
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/db/WalletDbManagement.scala b/wallet/src/main/scala/org/bitcoins/wallet/db/WalletDbManagement.scala
new file mode 100644
index 0000000000..74694cebe8
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/db/WalletDbManagement.scala
@@ -0,0 +1,21 @@
+package org.bitcoins.wallet.db
+
+import org.bitcoins.db.DbManagement
+import org.bitcoins.wallet.models.{
+ AccountTable,
+ AddressTable,
+ UTXOSpendingInfoTable
+}
+import slick.jdbc.SQLiteProfile.api._
+
+sealed abstract class WalletDbManagement extends DbManagement {
+ private val accountTable = TableQuery[AccountTable]
+ private val addressTable = TableQuery[AddressTable]
+ private val utxoDAO = TableQuery[UTXOSpendingInfoTable]
+
+ override val allTables: List[TableQuery[_ <: Table[_]]] =
+ List(accountTable, addressTable, utxoDAO)
+
+}
+
+object WalletDbManagement extends WalletDbManagement
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/AccountDAO.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/AccountDAO.scala
new file mode 100644
index 0000000000..0da65b93c3
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/models/AccountDAO.scala
@@ -0,0 +1,46 @@
+package org.bitcoins.wallet.models
+
+import org.bitcoins.core.hd._
+import org.bitcoins.wallet.config._
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.concurrent.{Future}
+import org.bitcoins.db.CRUD
+import org.bitcoins.db.SlickUtil
+import org.bitcoins.db.AppConfig
+import scala.concurrent.ExecutionContext
+
+case class AccountDAO()(implicit val ec: ExecutionContext)
+ extends CRUD[AccountDb, (HDCoin, Int)] {
+
+ import org.bitcoins.db.DbCommonsColumnMappers._
+
+ override def appConfig: WalletAppConfig = WalletAppConfig()
+
+ override val table: TableQuery[AccountTable] = TableQuery[AccountTable]
+
+ override def createAll(ts: Vector[AccountDb]): Future[Vector[AccountDb]] =
+ SlickUtil.createAllNoAutoInc(ts, database, table)
+
+ override protected def findByPrimaryKeys(
+ ids: Vector[(HDCoin, Int)]): Query[Table[_], AccountDb, Seq] = ???
+
+ override def findByPrimaryKey(
+ id: (HDCoin, Int)): Query[Table[_], AccountDb, Seq] = {
+ val (coin, index) = id
+ table
+ .filter(_.coinType === coin.coinType)
+ .filter(_.purpose === coin.purpose)
+ .filter(_.index === index)
+ }
+
+ override def findAll(
+ accounts: Vector[AccountDb]): Query[Table[_], AccountDb, Seq] =
+ findByPrimaryKeys(
+ accounts.map(acc => (acc.hdAccount.coin, acc.hdAccount.index)))
+
+ def findAll(): Future[Vector[AccountDb]] = {
+ val query = table.result
+ database.run(query).map(_.toVector)
+ }
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/AccountTable.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/AccountTable.scala
new file mode 100644
index 0000000000..05c07bfcd6
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/models/AccountTable.scala
@@ -0,0 +1,50 @@
+package org.bitcoins.wallet.models
+
+import org.bitcoins.core.crypto.ExtPublicKey
+import org.bitcoins.core.hd._
+import slick.jdbc.SQLiteProfile.api._
+import slick.lifted.{PrimaryKey, ProvenShape}
+import org.bitcoins.core.crypto._
+
+import org.bitcoins.wallet.HDUtil
+
+case class AccountDb(xpub: ExtPublicKey, hdAccount: HDAccount) {
+ def xpubVersion: ExtKeyPubVersion = xpub.version
+
+ def xprivVersion: ExtKeyPrivVersion =
+ HDUtil.getMatchingExtKeyVersion(xpubVersion)
+
+}
+
+class AccountTable(tag: Tag) extends Table[AccountDb](tag, "wallet_accounts") {
+
+ import org.bitcoins.db.DbCommonsColumnMappers._
+
+ def purpose: Rep[HDPurpose] = column[HDPurpose]("hd_purpose")
+
+ def xpub: Rep[ExtPublicKey] = column[ExtPublicKey]("xpub")
+
+ def coinType: Rep[HDCoinType] = column[HDCoinType]("coin")
+
+ def index: Rep[Int] = column[Int]("account_index")
+
+ private type AccountTuple = (HDPurpose, ExtPublicKey, HDCoinType, Int)
+
+ private val fromTuple: AccountTuple => AccountDb = {
+ case (purpose, pub, coin, index) =>
+ AccountDb(pub, HDAccount(HDCoin(purpose, coin), index))
+ }
+
+ private val toTuple: AccountDb => Option[AccountTuple] = account =>
+ Some(
+ (account.hdAccount.purpose,
+ account.xpub,
+ account.hdAccount.coin.coinType,
+ account.hdAccount.index))
+
+ def * : ProvenShape[AccountDb] =
+ (purpose, xpub, coinType, index) <> (fromTuple, toTuple)
+
+ def primaryKey: PrimaryKey =
+ primaryKey("pk_account", (coinType, index))
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/AddressDAO.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/AddressDAO.scala
new file mode 100644
index 0000000000..251737b6ea
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/models/AddressDAO.scala
@@ -0,0 +1,70 @@
+package org.bitcoins.wallet.models
+
+import org.bitcoins.core.protocol.BitcoinAddress
+import org.bitcoins.db.{CRUD, SlickUtil}
+import slick.dbio.Effect
+import slick.jdbc.SQLiteProfile.api._
+import slick.lifted.TableQuery
+import slick.sql.SqlAction
+
+import scala.concurrent.{ExecutionContext, Future}
+import org.bitcoins.core.hd.HDChainType
+import org.bitcoins.db.AppConfig
+import org.bitcoins.wallet.config.WalletAppConfig
+
+case class AddressDAO()(
+ implicit val ec: ExecutionContext
+) extends CRUD[AddressDb, BitcoinAddress] {
+ import org.bitcoins.db.DbCommonsColumnMappers._
+
+ override def appConfig: WalletAppConfig = WalletAppConfig()
+
+ override val table: TableQuery[AddressTable] = TableQuery[AddressTable]
+
+ override def createAll(ts: Vector[AddressDb]): Future[Vector[AddressDb]] =
+ SlickUtil.createAllNoAutoInc(ts, database, table)
+
+ /** Finds the rows that correlate to the given primary keys */
+ override def findByPrimaryKeys(
+ addresses: Vector[BitcoinAddress]): Query[Table[_], AddressDb, Seq] =
+ table.filter(_.address.inSet(addresses))
+
+ override def findAll(ts: Vector[AddressDb]): Query[Table[_], AddressDb, Seq] =
+ findByPrimaryKeys(ts.map(_.address))
+
+ def findAddress(addr: BitcoinAddress): Future[Option[AddressDb]] = {
+ val query = findByPrimaryKey(addr).result
+ database.run(query).map(_.headOption)
+ }
+
+ def findAll(): Future[Vector[AddressDb]] = {
+ val query = table.result
+ database.run(query).map(_.toVector)
+ }
+
+ private def addressesForAccountQuery(
+ accountIndex: Int): Query[AddressTable, AddressDb, Seq] =
+ table.filter(_.accountIndex === accountIndex)
+
+ def findMostRecentChange(accountIndex: Int): Future[Option[AddressDb]] = {
+ val query = findMostRecentForChain(accountIndex, HDChainType.Change)
+
+ database.run(query)
+ }
+
+ private def findMostRecentForChain(
+ accountIndex: Int,
+ chain: HDChainType): SqlAction[Option[AddressDb], NoStream, Effect.Read] = {
+ addressesForAccountQuery(accountIndex)
+ .filter(_.accountChainType === chain)
+ .sortBy(_.addressIndex.desc)
+ .take(1)
+ .result
+ .headOption
+ }
+
+ def findMostRecentExternal(accountIndex: Int): Future[Option[AddressDb]] = {
+ val query = findMostRecentForChain(accountIndex, HDChainType.External)
+ database.run(query)
+ }
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/AddressTable.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/AddressTable.scala
new file mode 100644
index 0000000000..ab9cc5032e
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/models/AddressTable.scala
@@ -0,0 +1,205 @@
+package org.bitcoins.wallet.models
+
+import org.bitcoins.core.config.NetworkParameters
+import org.bitcoins.core.hd._
+import org.bitcoins.core.crypto.{ECPublicKey, Sha256Hash160Digest}
+import org.bitcoins.core.protocol.script.{
+ P2WPKHWitnessSPKV0,
+ P2WPKHWitnessV0,
+ ScriptWitness
+}
+import org.bitcoins.core.protocol.{Bech32Address, BitcoinAddress}
+import org.bitcoins.core.script.ScriptType
+import slick.jdbc.SQLiteProfile.api._
+import slick.lifted.ProvenShape
+import org.bitcoins.core.protocol.P2SHAddress
+import org.bitcoins.core.protocol.P2PKHAddress
+
+sealed trait AddressDb {
+ protected type PathType <: HDPath
+
+ def path: PathType
+ def ecPublicKey: ECPublicKey
+ def hashedPubKey: Sha256Hash160Digest
+ def address: BitcoinAddress
+ def scriptType: ScriptType
+ def witnessScriptOpt: Option[ScriptWitness]
+}
+
+/** Segwit P2PKH */
+case class SegWitAddressDb(
+ path: SegWitHDPath,
+ ecPublicKey: ECPublicKey,
+ hashedPubKey: Sha256Hash160Digest,
+ address: Bech32Address,
+ witnessScript: ScriptWitness
+) extends AddressDb {
+ override type PathType = SegWitHDPath
+
+ override val scriptType = ScriptType.WITNESS_V0_KEYHASH
+ override val witnessScriptOpt = Some(witnessScript)
+}
+
+/** Segwit P2PKH-in-P2SH */
+case class NestedSegWitAddressDb(
+ path: NestedSegWitHDPath,
+ ecPublicKey: ECPublicKey,
+ hashedPubKey: Sha256Hash160Digest,
+ address: P2SHAddress
+) extends AddressDb {
+ override type PathType = NestedSegWitHDPath
+
+ override val scriptType = ScriptType.SCRIPTHASH
+ override val witnessScriptOpt = None
+}
+
+/** P2PKH */
+case class LegacyAddressDb(
+ path: LegacyHDPath,
+ ecPublicKey: ECPublicKey,
+ hashedPubKey: Sha256Hash160Digest,
+ address: P2PKHAddress
+) extends AddressDb {
+ override type PathType = LegacyHDPath
+
+ override val scriptType = ScriptType.PUBKEYHASH
+ override val witnessScriptOpt = None
+}
+// todo: make ADT for different addresses in DB, seeing as they have different fields
+// todo: indicate whether or not address has been spent to
+
+object AddressDbHelper {
+
+ /** Get a Segwit pay-to-pubkeyhash address */
+ def getP2WPKHAddress(
+ pub: ECPublicKey,
+ path: SegWitHDPath,
+ np: NetworkParameters): SegWitAddressDb = {
+
+ val witnessSpk = P2WPKHWitnessSPKV0(pub)
+ val scriptWitness = P2WPKHWitnessV0(pub)
+ val addr = Bech32Address(witnessSpk, np)
+ SegWitAddressDb(
+ path = path,
+ ecPublicKey = pub,
+ hashedPubKey = witnessSpk.pubKeyHash,
+ address = addr,
+ witnessScript = scriptWitness
+ )
+ }
+}
+
+/**
+ * todo: this needs design rework.
+ * todo: https://github.com/bitcoin-s/bitcoin-s-core/pull/391#discussion_r274188334
+ */
+class AddressTable(tag: Tag) extends Table[AddressDb](tag, "addresses") {
+ import org.bitcoins.db.DbCommonsColumnMappers._
+
+ def purpose: Rep[HDPurpose] = column[HDPurpose]("hd_purpose")
+
+ def accountIndex: Rep[Int] = column[Int]("account_index")
+
+ def accountCoin: Rep[HDCoinType] = column[HDCoinType]("hd_coin")
+
+ def accountChainType: Rep[HDChainType] =
+ column[HDChainType]("hd_chain_type")
+
+ def addressIndex: Rep[Int] = column[Int]("address_index")
+
+ def address: Rep[BitcoinAddress] =
+ column[BitcoinAddress]("address", O.PrimaryKey)
+
+ def ecPublicKey: Rep[ECPublicKey] = column[ECPublicKey]("pubkey")
+
+ def hashedPubKey: Rep[Sha256Hash160Digest] =
+ column[Sha256Hash160Digest]("hashed_pubkey")
+
+ def scriptType: Rep[ScriptType] = column[ScriptType]("script_type")
+
+ def scriptWitness: Rep[Option[ScriptWitness]] =
+ column[Option[ScriptWitness]]("script_witness")
+
+ private type AddressTuple = (
+ HDPurpose,
+ Int,
+ HDCoinType,
+ HDChainType,
+ BitcoinAddress,
+ Option[ScriptWitness],
+ Int,
+ ECPublicKey,
+ Sha256Hash160Digest,
+ ScriptType)
+
+ private val fromTuple: AddressTuple => AddressDb = {
+ case (
+ purpose,
+ accountIndex,
+ accountCoin,
+ accountChain,
+ address,
+ scriptWitnessOpt,
+ addressIndex,
+ pubKey,
+ hashedPubKey,
+ scriptType @ _ // what should we do about this? scriptType is inferrable from purpose
+ ) =>
+ (purpose, address, scriptWitnessOpt) match {
+ case (HDPurposes.SegWit,
+ bechAddr: Bech32Address,
+ Some(scriptWitness)) =>
+ val path =
+ SegWitHDPath(coinType = accountCoin,
+ accountIndex = accountIndex,
+ chainType = accountChain,
+ addressIndex = addressIndex)
+
+ SegWitAddressDb(path,
+ ecPublicKey = pubKey,
+ hashedPubKey = hashedPubKey,
+ address = bechAddr,
+ witnessScript = scriptWitness)
+ case (purpose: HDPurpose, address: BitcoinAddress, scriptWitnessOpt) =>
+ throw new IllegalArgumentException(
+ s"Got invalid combination of HD purpose, address and script witness: $purpose, $address, $scriptWitnessOpt" +
+ s"Note: Currently only segwit addreses are implemented")
+ }
+ }
+
+ private val toTuple: AddressDb => Option[AddressTuple] = {
+ case SegWitAddressDb(path, pubKey, hashedPubKey, address, scriptWitness) =>
+ Some(
+ (path.purpose,
+ path.account.index,
+ path.coin.coinType,
+ path.chain.chainType,
+ address,
+ Some(scriptWitness),
+ path.address.index,
+ pubKey,
+ hashedPubKey,
+ ScriptType.WITNESS_V0_KEYHASH))
+ case other => throw new RuntimeException(s"$other is not implemented yet")
+
+ }
+
+ override def * : ProvenShape[AddressDb] =
+ (purpose,
+ accountIndex,
+ accountCoin,
+ accountChainType,
+ address,
+ scriptWitness,
+ addressIndex,
+ ecPublicKey,
+ hashedPubKey,
+ scriptType) <> (fromTuple, toTuple)
+
+ val accounts = TableQuery[AccountTable]
+
+ // for some reason adding a type annotation here causes compile error
+ def fk =
+ foreignKey("fk_account", (accountCoin, accountIndex), accounts)(
+ accountTable => (accountTable.coinType, accountTable.index))
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAO.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAO.scala
new file mode 100644
index 0000000000..99af848be3
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAO.scala
@@ -0,0 +1,21 @@
+package org.bitcoins.wallet.models
+
+import org.bitcoins.db.CRUDAutoInc
+import org.bitcoins.wallet.config._
+import slick.jdbc.SQLiteProfile.api._
+
+import scala.concurrent.Future
+import scala.concurrent.ExecutionContext
+import org.bitcoins.db.AppConfig
+
+case class UTXOSpendingInfoDAO()(implicit val ec: ExecutionContext)
+ extends CRUDAutoInc[UTXOSpendingInfoDb] {
+
+ override def appConfig: WalletAppConfig = WalletAppConfig()
+
+ /** The table inside our database we are inserting into */
+ override val table = TableQuery[UTXOSpendingInfoTable]
+
+ def findAllUTXOs(): Future[Vector[UTXOSpendingInfoDb]] =
+ database.run(table.result).map(_.toVector)
+}
diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoTable.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoTable.scala
new file mode 100644
index 0000000000..dd194b4965
--- /dev/null
+++ b/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoTable.scala
@@ -0,0 +1,146 @@
+package org.bitcoins.wallet.models
+
+import org.bitcoins.core.crypto.Sign
+import org.bitcoins.core.currency.CurrencyUnit
+import org.bitcoins.core.protocol.script.{ScriptPubKey, ScriptWitness}
+import org.bitcoins.core.protocol.transaction.{
+ TransactionOutPoint,
+ TransactionOutput
+}
+import org.bitcoins.core.script.crypto.HashType
+import org.bitcoins.core.wallet.utxo.BitcoinUTXOSpendingInfo
+import org.bitcoins.db.{DbRowAutoInc, TableAutoInc}
+import slick.jdbc.SQLiteProfile.api._
+import slick.lifted.ProvenShape
+import org.bitcoins.core.hd.HDPath
+
+import org.bitcoins.core.hd.SegWitHDPath
+import org.bitcoins.core.crypto.BIP39Seed
+import org.bitcoins.core.util.BitcoinSLogger
+import org.bitcoins.core.hd.LegacyHDPath
+import org.bitcoins.core.hd.NestedSegWitHDPath
+
+case class SegWitUTOXSpendingInfodb(
+ id: Option[Long],
+ outPoint: TransactionOutPoint,
+ output: TransactionOutput,
+ privKeyPath: SegWitHDPath,
+ scriptWitness: ScriptWitness
+) extends UTXOSpendingInfoDb {
+ override def redeemScriptOpt: Option[ScriptPubKey] = None
+ override def scriptWitnessOpt: Option[ScriptWitness] = Some(scriptWitness)
+
+ override type PathType = SegWitHDPath
+
+ override def copyWithId(id: Long): SegWitUTOXSpendingInfodb =
+ copy(id = Some(id))
+}
+
+// TODO add case for nested segwit
+// and legacy
+sealed trait UTXOSpendingInfoDb
+ extends DbRowAutoInc[UTXOSpendingInfoDb]
+ with BitcoinSLogger {
+
+ protected type PathType <: HDPath
+
+ def id: Option[Long]
+ def outPoint: TransactionOutPoint
+ def output: TransactionOutput
+ def privKeyPath: PathType
+ def redeemScriptOpt: Option[ScriptPubKey]
+ def scriptWitnessOpt: Option[ScriptWitness]
+
+ val hashType: HashType = HashType.sigHashAll
+
+ def value: CurrencyUnit = output.value
+
+ def toUTXOSpendingInfo(
+ account: AccountDb,
+ walletSeed: BIP39Seed): BitcoinUTXOSpendingInfo = {
+
+ val rootXpriv = walletSeed.toExtPrivateKey(account.xprivVersion)
+ val xprivAtPath = rootXpriv.deriveChildPrivKey(privKeyPath)
+ val privKey = xprivAtPath.key
+ val pubAtPath = privKey.publicKey
+
+ val sign: Sign = Sign(privKey.signFunction, pubAtPath)
+
+ logger.info({
+ val shortStr = s"${outPoint.txId.hex}:${outPoint.vout.toInt}"
+ val detailsStr =
+ s"scriptPubKey=${output.scriptPubKey}, amount=${output.value}, keyPath=${privKeyPath}, pubKey=${pubAtPath}"
+ s"Converting DB UTXO $shortStr ($detailsStr) to spending info"
+ })
+
+ BitcoinUTXOSpendingInfo(outPoint,
+ output,
+ List(sign),
+ redeemScriptOpt,
+ scriptWitnessOpt,
+ hashType)
+ }
+
+}
+
+case class UTXOSpendingInfoTable(tag: Tag)
+ extends TableAutoInc[UTXOSpendingInfoDb](tag, "utxos") {
+ import org.bitcoins.db.DbCommonsColumnMappers._
+
+ def outPoint: Rep[TransactionOutPoint] =
+ column[TransactionOutPoint]("tx_outpoint")
+
+ def output: Rep[TransactionOutput] =
+ column[TransactionOutput]("tx_output")
+
+ def privKeyPath: Rep[HDPath] = column[HDPath]("hd_privkey_path")
+
+ def redeemScriptOpt: Rep[Option[ScriptPubKey]] =
+ column[Option[ScriptPubKey]]("nullable_redeem_script")
+
+ def scriptWitnessOpt: Rep[Option[ScriptWitness]] =
+ column[Option[ScriptWitness]]("script_witness")
+
+ private type UTXOTuple = (
+ Option[Long],
+ TransactionOutPoint,
+ TransactionOutput,
+ HDPath,
+ Option[ScriptPubKey],
+ Option[ScriptWitness])
+
+ private val fromTuple: UTXOTuple => UTXOSpendingInfoDb = {
+ case (id,
+ outpoint,
+ output,
+ path: SegWitHDPath,
+ None,
+ Some(scriptWitness)) =>
+ SegWitUTOXSpendingInfodb(id, outpoint, output, path, scriptWitness)
+ .asInstanceOf[UTXOSpendingInfoDb]
+
+ case (id,
+ outpoint,
+ output,
+ path @ (_: LegacyHDPath | _: NestedSegWitHDPath),
+ spkOpt,
+ swOpt) =>
+ throw new IllegalArgumentException(
+ "Could not construct UtxoSpendingInfoDb from bad tuple:"
+ + s" ($id, $outpoint, $output, $path, $spkOpt, $swOpt) . Note: Only Segwit is implemented")
+
+ }
+
+ private val toTuple: UTXOSpendingInfoDb => Option[UTXOTuple] =
+ utxo =>
+ Some(
+ (utxo.id,
+ utxo.outPoint,
+ utxo.output,
+ utxo.privKeyPath,
+ utxo.redeemScriptOpt,
+ utxo.scriptWitnessOpt))
+
+ def * : ProvenShape[UTXOSpendingInfoDb] =
+ (id.?, outPoint, output, privKeyPath, redeemScriptOpt, scriptWitnessOpt) <> (fromTuple, toTuple)
+}
diff --git a/zmq/src/main/scala/org/bitcoins/zmq/ZMQSubscriber.scala b/zmq/src/main/scala/org/bitcoins/zmq/ZMQSubscriber.scala
index 8209909a74..6f9831ad5c 100644
--- a/zmq/src/main/scala/org/bitcoins/zmq/ZMQSubscriber.scala
+++ b/zmq/src/main/scala/org/bitcoins/zmq/ZMQSubscriber.scala
@@ -3,7 +3,7 @@ package org.bitcoins.zmq
import java.net.InetSocketAddress
import org.bitcoins.core.util.BitcoinSLogger
-import org.zeromq.{ZMQ, ZMsg}
+import org.zeromq.{SocketType, ZMQ, ZMQException, ZMsg}
import scodec.bits.ByteVector
/**
@@ -19,22 +19,26 @@ import scodec.bits.ByteVector
* @param rawBlockListener
*/
class ZMQSubscriber(
- socket: InetSocketAddress,
- hashTxListener: Option[ByteVector => Unit],
- hashBlockListener: Option[ByteVector => Unit],
- rawTxListener: Option[ByteVector => Unit],
- rawBlockListener: Option[ByteVector => Unit]) {
- private val logger = BitcoinSLogger.logger
+ socket: InetSocketAddress,
+ hashTxListener: Option[ByteVector => Unit],
+ hashBlockListener: Option[ByteVector => Unit],
+ rawTxListener: Option[ByteVector => Unit],
+ rawBlockListener: Option[ByteVector => Unit])
+ extends BitcoinSLogger {
private var running = true
private val context = ZMQ.context(1)
- private val subscriber = context.socket(ZMQ.SUB)
+ private val subscriber: ZMQ.Socket = context.socket(SocketType.SUB)
+
+
+
private val uri = socket.getHostString + ":" + socket.getPort
private case object SubscriberRunnable extends Runnable {
override def run(): Unit = {
-
+ logger.info(s"ZmqSubscriber connecting to uri=${uri}")
+ subscriber.setLinger(2000)
val isConnected = subscriber.connect(uri)
if (isConnected) {
@@ -58,16 +62,26 @@ class ZMQSubscriber(
logger.debug("subscribed to raw block stream from zmq")
}
- while (running) {
- val zmsg = ZMsg.recvMsg(subscriber, ZMQ.NOBLOCK)
- if (zmsg != null) {
- val notificationTypeStr = zmsg.pop().getString(ZMQ.CHARSET)
- val body = zmsg.pop().getData
- processMsg(notificationTypeStr, body)
- } else {
- Thread.sleep(1)
+ while (running && !subscriberThread.isInterrupted) {
+ try {
+ val zmsg = ZMsg.recvMsg(subscriber, ZMQ.NOBLOCK)
+ if (zmsg != null) {
+ val notificationTypeStr = zmsg.pop().getString(ZMQ.CHARSET)
+ val body = zmsg.pop().getData
+ processMsg(notificationTypeStr, body)
+ } else {
+ Thread.sleep(100)
+ }
+ } catch {
+ case e: ZMQException if e.getErrorCode == ZMQ.Error.ETERM.getCode =>
+ context.term()
+ logger.info(s"Done terminating zmq context msg=${e.getMessage}")
+ case e: Exception =>
+ context.term()
+ logger.info(s"Done terminating zmq context msg=${e.getMessage}")
}
}
+ logger.info(s"Terminated")
} else {
logger.error(s"Failed to connect to zmq socket ${uri}")
throw new RuntimeException(s"Failed to connect to zmq socket ${uri}")
@@ -77,7 +91,7 @@ class ZMQSubscriber(
}
private val subscriberThread = new Thread(SubscriberRunnable)
- subscriberThread.setName("ZMQSubscriber-thread")
+ subscriberThread.setName(s"ZMQSubscriber-thread-${System.currentTimeMillis()}")
subscriberThread.setDaemon(true)
def start(): Unit = {
@@ -89,13 +103,17 @@ class ZMQSubscriber(
* Stops running the zmq subscriber and cleans up after zmq
* http://zguide.zeromq.org/java:psenvsub
*/
- def stop: Unit = {
+ def stop(): Unit = {
+ logger.info(s"Stopping zmq")
//i think this could technically not work, because currently we are blocking
//on Zmsg.recvMsg in our while loop. If we don't get another message we won't
//be able toe evaluate the while loop again. Moving forward with this for now.
running = false
subscriber.close()
+ logger.info("Attempting to terminate context")
context.term()
+ logger.info(s"Done with closing zmq")
+ ()
}
/**