diff --git a/CMakeLists.txt b/CMakeLists.txt index e0f604d25..edd52021a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,10 @@ endif() project(daphne-prototype LANGUAGES CXX C) +# Write the absolute repo root next to the daphne binary at build time +file(WRITE ${CMAKE_BINARY_DIR}/bin/.daphne_repo_root "${PROJECT_SOURCE_DIR}\n") + + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON) set(CMAKE_CXX_STANDARD 20 CACHE STRING "C++ standard to conform to") diff --git a/eval_runner.sh b/eval_runner.sh new file mode 100755 index 000000000..6a8f3b212 --- /dev/null +++ b/eval_runner.sh @@ -0,0 +1,584 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ------------------------------------------------------------ +# Where we are (script at repo root: /daphne) +# ------------------------------------------------------------ +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # /daphne +REPO_ROOT="$SCRIPT_DIR" +cd "$REPO_ROOT" # ensure CWD is repo root so relative catalogs resolve + +# ------------------------------------------------------------ +# Arrow/Daphne runtime linking (adjust if paths differ) +# ------------------------------------------------------------ +DAPHNE_ROOT="${DAPHNE_ROOT:-$REPO_ROOT}" +TP_LIB_DIR="${TP_LIB_DIR:-$DAPHNE_ROOT/thirdparty/installed/lib}" +DS_LIB_DIR="${DS_LIB_DIR:-$DAPHNE_ROOT/build/src/runtime/local/datastructures}" +export LD_LIBRARY_PATH="$TP_LIB_DIR:$DS_LIB_DIR:${LD_LIBRARY_PATH:-}" +export LIBRARY_PATH="$TP_LIB_DIR:${LIBRARY_PATH:-}" +export CPATH="${DAPHNE_ROOT}/thirdparty/installed/include:${CPATH:-}" + +# ------------------------------------------------------------ +# Find Daphne binary +# ------------------------------------------------------------ +if [[ -z "${DAPHNE_BIN:-}" ]]; then + for c in "$REPO_ROOT/bin/daphne" "$REPO_ROOT/build/bin/daphne"; do + [[ -x "$c" ]] && { DAPHNE_BIN="$c"; break; } + done + [[ -n "${DAPHNE_BIN:-}" ]] || { echo "[error] daphne not found in $REPO_ROOT/bin or $REPO_ROOT/build/bin. Set \$DAPHNE_BIN."; exit 1; } +fi + +# ------------------------------------------------------------ +# Daphne DSL + extension JSONs +# ------------------------------------------------------------ +SCRIPT_ROOT="${SCRIPT_ROOT:-$REPO_ROOT/scripts/examples/extensions/experiment}" +DSL_DIR_MATRIX="$SCRIPT_ROOT/matrix" +[[ -d "$DSL_DIR_MATRIX" ]] || { echo "[error] DSL folder not found at $DSL_DIR_MATRIX"; exit 1; } + +CSV_EXT_JSON="${CSV_EXT_JSON:-$REPO_ROOT/scripts/examples/extensions/csv/csv.json}" +PARQUET_EXT_JSON="${PARQUET_EXT_JSON:-$REPO_ROOT/scripts/examples/extensions/parquetReader/parquet.json}" + +# CSV +CSV_SCRIPTS_NORMAL=( + "$DSL_DIR_MATRIX/csv_eval.daphne" + "$DSL_DIR_MATRIX/csv_small_eval.daphne" +) +CSV_SCRIPTS_PLUGIN=( + "$DSL_DIR_MATRIX/csv_plugin_eval.daphne" + "$DSL_DIR_MATRIX/csv_plugin_small_eval.daphne" +) + +# Parquet +PARQUET_SCRIPTS_NORMAL=( + "$DSL_DIR_MATRIX/parquet_small_eval.daphne" +) +PARQUET_SCRIPTS_PLUGIN=( + "$DSL_DIR_MATRIX/parquet_plugin_small_eval.daphne" + "$DSL_DIR_MATRIX/parquet_single_thread_eval.daphne" + "$DSL_DIR_MATRIX/parquet_multi_thread_eval.daphne" +) + +# ------------------------------------------------------------ +# Generator + Meta binaries (live in /daphne/experiment) +# ------------------------------------------------------------ +GEN_DATA_BIN="${GEN_DATA_BIN:-$REPO_ROOT/experiment/gen_data}" +GEN_META_BIN="${GEN_META_BIN:-$REPO_ROOT/experiment/gen_meta}" +[[ -x "$GEN_DATA_BIN" ]] || { echo "[error] generator not found or not executable at: $GEN_DATA_BIN"; exit 1; } +[[ -x "$GEN_META_BIN" ]] || { echo "[error] gen_meta not found or not executable at: $GEN_META_BIN"; exit 1; } + +# ------------------------------------------------------------ +# Optional: show downloader +# ------------------------------------------------------------ +if command -v curl >/dev/null 2>&1; then + echo "[net] using curl" +elif command -v wget >/dev/null 2>&1; then + echo "[net] using wget" +else + echo "[net] using python urllib (no curl/wget found)" +fi + +# ------------------------------------------------------------ +# CLI / defaults +# ------------------------------------------------------------ +TARGET_MB=1500 +FORMATS=("csv" "parquet") +ONLY="" +KEEP=0 +SKIP_KNOWN=0 +SKIP_GENERATED=0 +OUTDIR="" + +usage() { + cat <&2; usage; exit 1;; + esac +done +[[ -n "$ONLY" ]] && FORMATS=("$ONLY") + +# ------------------------------------------------------------ +# Workspace (fixed name) + persistent data cache +# ------------------------------------------------------------ +DEFAULT_OUTDIR="$REPO_ROOT/experiment/eval" # fixed name (no timestamp) +WORKDIR="${OUTDIR:-$DEFAULT_OUTDIR}" +DATA_DIR="$REPO_ROOT/experiment/data" # persistent cache for known datasets +LOGDIR="$WORKDIR/logs" +mkdir -p "$WORKDIR" "$DATA_DIR" "$LOGDIR" +echo "[workdir] $WORKDIR" +echo "[cache ] $DATA_DIR" + +# ------------------------------------------------------------ +# Helpers +# ------------------------------------------------------------ +have_cmd() { command -v "$1" >/dev/null 2>&1; } +bytes() { stat --printf="%s" "$1" 2>/dev/null || wc -c <"$1"; } +mb() { awk -v b="$1" 'BEGIN{printf "%.1f", b/1024/1024}'; } + +# High-precision monotonic-ish timestamp in nanoseconds +now_ns() { + if ts="$(date +%s%N 2>/dev/null)"; then + printf '%s\n' "$ts" + else + python3 - <<'PY' +import time +print(int(time.time()*1_000_000_000)) +PY + fi +} + +# ----- Configurable sampling interval (seconds, float ok) ----- +MEM_SAMPLE_INTERVAL="${MEM_SAMPLE_INTERVAL:-0.05}" + +# Return current RSS (kB) for a PID (parent only; threads included) +rss_kb_of_pid() { + local pid="$1" + ps -o rss= -p "$pid" 2>/dev/null | tr -d ' ' || echo "" +} + +# Robust downloader: curl → wget → Python stdlib +download() { # url outpath + local url="$1" out="$2" + # If file already exists and is non-empty, skip + if [[ -s "$out" ]]; then + echo "[cache] found $(basename "$out") ($(mb "$(bytes "$out")") MB) – skip download" + return 0 + fi + echo "[download] $(basename "$out") from: $url" + if have_cmd curl; then + # try resume if partial exists + curl -L --fail --retry 3 -C - -o "$out" "$url" + elif have_cmd wget; then + wget -c -q -O "$out" "$url" + else + python3 - "$url" "$out" <<'PY' +import sys, urllib.request +url, out = sys.argv[1], sys.argv[2] +with urllib.request.urlopen(url, timeout=1800) as r, open(out, 'wb') as f: + while True: + chunk = r.read(1024*1024) + if not chunk: break + f.write(chunk) +PY + fi +} + +# ------------------------------------------------------------ +# Portable time(1) detection + Linux RSS sampler fallback +# ------------------------------------------------------------ +TIME_BIN=""; TIME_MODE="" # {GNU_V,GNU_F,BSD_L,PS_SAMPLER} + +# GNU time -v +if [[ -x /usr/bin/time ]]; then + if /usr/bin/time -v true >/dev/null 2>"$WORKDIR/.time_test" || grep -qi "Command exited" "$WORKDIR/.time_test"; then + TIME_BIN="/usr/bin/time -v"; TIME_MODE="GNU_V" + fi +fi +# Homebrew gtime -v +if [[ -z "$TIME_MODE" ]] && command -v gtime >/dev/null 2>&1; then + TIME_BIN="gtime -v"; TIME_MODE="GNU_V" +fi +# GNU time -f '%M' (kB) +if [[ -z "$TIME_MODE" ]] && command -v /usr/bin/time >/dev/null 2>&1; then + if /usr/bin/time -f "%M" true >/dev/null 2>"$WORKDIR/.time_test2"; then + TIME_BIN="/usr/bin/time -f %M"; TIME_MODE="GNU_F" + fi +fi +# BSD/macOS time -l +if [[ -z "$TIME_MODE" ]] && command -v /usr/bin/time >/dev/null 2>&1; then + if /usr/bin/time -l true >/dev/null 2>"$WORKDIR/.time_test3"; then + TIME_BIN="/usr/bin/time -l"; TIME_MODE="BSD_L" + fi +fi +# Linux fallback: sample RSS via ps every MEM_SAMPLE_INTERVAL +if [[ -z "$TIME_MODE" && "$(uname -s)" == "Linux" ]]; then + TIME_MODE="PS_SAMPLER" +fi + +rm -f "$WORKDIR/.time_test" "$WORKDIR/.time_test2" "$WORKDIR/.time_test3" +echo "[measure] using: ${TIME_BIN:-ps sampler} (${TIME_MODE})" + +# ------------------------------------------------------------ +# OFF → CSV (no quotes, no internal commas, fixed column count) +# - Preserves all rows +# - Sanitizes cells: ','→';', remove '"', CR/LF/TAB→space, strip +# - Enforces constant #columns: trims trailing empties, folds overflow +# - Emits CSV with QUOTE_NONE (no quotes) +# ------------------------------------------------------------ +fetch_off_as_csv_noquotes_fixedcols() { # url outpath + local url="$1" out="$2" + + if [[ -s "$out" ]]; then + echo "[cache] found $(basename "$out") ($(mb "$(bytes "$out")") MB) – skip OFF conversion" + return 0 + fi + + local raw_path="$DATA_DIR/off_raw.tmp" + echo "[download] OFF raw -> $(basename "$raw_path")" + download "$url" "$raw_path" + + echo "[convert] OFF (TSV/CSV -> CSV, NO QUOTES, sanitized, fixed cols) -> $(basename "$out")" + python3 - "$raw_path" "$out" <<'PY' +import sys, csv, re + +src, dst = sys.argv[1], sys.argv[2] + +# Large field support +try: + csv.field_size_limit(sys.maxsize) +except Exception: + pass + +def sniff_delimiter(path): + with open(path, 'r', encoding='utf-8', errors='replace', newline='') as f: + head = f.read(131072) + if head.count('\t') >= head.count(',') and '\t' in head: + return '\t' + return ',' + +src_delim = sniff_delimiter(src) +_ws_re = re.compile(r'[\r\n\t]+') + +def sanitize(cell: str) -> str: + if not isinstance(cell, str): + cell = '' if cell is None else str(cell) + cell = _ws_re.sub(' ', cell) # normalize CR/LF/TAB to space + cell = cell.replace('"', '') # remove quotes + cell = cell.replace(',', ';') # remove commas (preserve delimiter safety) + return cell.strip() + +with open(src, 'r', encoding='utf-8', errors='replace', newline='') as fin, \ + open(dst, 'w', encoding='utf-8', newline='') as fout: + + reader = csv.reader(fin, delimiter=src_delim) + writer = csv.writer( + fout, delimiter=',', quotechar='"', + quoting=csv.QUOTE_NONE, escapechar='\\', lineterminator='\n' + ) + + # Read header to lock column count + try: + raw_header = next(reader) + except StopIteration: + # empty file: still emit empty file + sys.exit(0) + + header = [sanitize(c) for c in raw_header] + ncols = len(header) + writer.writerow(header) + + for raw_row in reader: + row = [sanitize(c) for c in raw_row] + if len(row) == ncols: + writer.writerow(row) + continue + + if len(row) > ncols: + # If the overflow cells are all empty → drop them (handles trailing delimiters) + overflow = row[ncols:] + if all(c == '' for c in overflow): + row = row[:ncols] + else: + # fold non-empty overflow back into the last column using ';' + keep = row[:ncols-1] + last = row[ncols-1] + folded = last + (';' if last and overflow else '') + ';'.join(x for x in overflow if x != '') + row = keep + [folded] + else: # len(row) < ncols → pad with empties + row.extend([''] * (ncols - len(row))) + + writer.writerow(row) + +print("[csv-known] wrote sanitized, unquoted, fixed-cols CSV:", dst) +PY +} + +# ------------------------------------------------------------ +# Make a safe --args with quoted filePath and optional extras +# ------------------------------------------------------------ +make_args() { # filepath extras + local p="$1"; local extras="${2:-}" + if [[ -n "$extras" ]]; then + echo "--args 'filePath=\"${p}\"; ${extras}'" + else + echo "--args 'filePath=\"${p}\"'" + fi +} + +# ------------------------------------------------------------ +# Execute a Daphne command; record timing + memory + status +# Capture full program logs into $LOGDIR and print them if the run FAILs +# ------------------------------------------------------------ +run_eval() { # format which filepath label full_command + local fmt="$1" which="$2" path="$3" label="$4" fullcmd="$5" + local start_ns end_ns elapsed_ns elapsed_s rc mem_mb="-" + + # log files + local safe_label="$(echo "${label}_${fmt}_${which}" | tr -c 'A-Za-z0-9._-' '_')" + local lfile="$LOGDIR/${safe_label}.log" # program stdout+stderr + local tfile="$LOGDIR/${safe_label}.time" # time(1) stderr / sampler notes + + start_ns="$(now_ns)" + set +e + pushd "$REPO_ROOT" >/dev/null + + case "$TIME_MODE" in + GNU_V|GNU_F|BSD_L) + # Redirect program output inside the shell so time's own stderr is clean in $tfile + # We double-nest bash -lc to preserve user's $fullcmd context. + $TIME_BIN bash -lc "exec bash -lc \"$fullcmd\" >\"$lfile\" 2>&1" 2> "$tfile" + rc=$? + ;; + PS_SAMPLER) + # Run command with logs captured; sample RSS while it runs + bash -lc "$fullcmd" >"$lfile" 2>&1 & + local pid=$! + local max_kb=0 cur + while kill -0 "$pid" 2>/dev/null; do + cur="$(rss_kb_of_pid "$pid")" + if [[ -n "$cur" ]]; then + (( cur > max_kb )) && max_kb="$cur" + fi + sleep "$MEM_SAMPLE_INTERVAL" + done + wait "$pid"; rc=$? + cur="$(rss_kb_of_pid "$pid")" + if [[ -n "$cur" && "$cur" -gt "$max_kb" ]]; then max_kb="$cur"; fi + if [[ "$max_kb" -gt 0 ]]; then + mem_mb="$(awk -v k="$max_kb" 'BEGIN{printf("%.1f", k/1024)}')" + fi + # write a small sampler note + printf 'ps_sampler_max_kb=%s\n' "${max_kb:-0}" > "$tfile" + ;; + *) + bash -lc "$fullcmd" >"$lfile" 2>&1 + rc=$? + ;; + esac + + popd >/dev/null + set -e + end_ns="$(now_ns)" + + # elapsed seconds with 5 decimals + elapsed_ns=$(( end_ns - start_ns )) + elapsed_s="$(awk -v ns="$elapsed_ns" 'BEGIN{printf("%.5f", ns/1e9)}')" + + # Parse memory for time(1) modes + if [[ "$TIME_MODE" == "GNU_V" ]]; then + mem_mb="$(awk -F: '/Maximum resident set size/ {gsub(/^[ \t]+/,"",$2); printf("%.1f", $2/1024)}' "$tfile" || true)" + elif [[ "$TIME_MODE" == "GNU_F" ]]; then + kb="$(tr -dc '0-9\n' < "$tfile" | tail -n1)"; [[ -n "$kb" ]] && mem_mb="$(awk -v k="$kb" 'BEGIN{printf("%.1f", k/1024)}')" + elif [[ "$TIME_MODE" == "BSD_L" ]]; then + b="$(awk -F: 'BEGIN{IGNORECASE=1} /maximum resident set size/ {gsub(/[^0-9]/,"",$2); print $2}' "$tfile")" + if [[ -n "$b" ]]; then + if (( b > 1024*1024 )); then mem_mb="$(awk -v x="$b" 'BEGIN{printf("%.1f", x/1024/1024)}')" + else mem_mb="$(awk -v k="$b" 'BEGIN{printf("%.1f", k/1024)}')" + fi + fi + fi + [[ -z "${mem_mb:-}" ]] && mem_mb="-" + + local status="FAIL"; [[ $rc -eq 0 ]] && status="OK" + + # If FAILED, print the logs to the terminal (last 200 lines to keep noise down) + if [[ "$status" == "FAIL" ]]; then + echo + echo "----- RUN FAILED: ${label} (${fmt}/${which}) -----" + echo "Command : $fullcmd" + echo "Log file : $lfile" + echo "Time info : $tfile" + echo "----------- BEGIN LAST 200 LINES OF LOG -----------" + if [[ -s "$lfile" ]]; then + tail -n 200 "$lfile" + else + echo "(no program output captured)" + fi + echo "---------------------- END LOG ---------------------" + echo + fi + + echo -e "$fmt\t$which\t$label\t$elapsed_s\t$mem_mb\t$status\t$rc\t$path" >> "$WORKDIR/summary.tsv" +} + +# ------------------------------------------------------------ +# Known dataset sources (cached) +# ------------------------------------------------------------ +OFF_URL="https://static.openfoodfacts.org/data/en.openfoodfacts.org.products.csv" + +NYC_TLC_MONTHS=( + "https://huggingface.co/datasets/openfoodfacts/product-database/resolve/main/food.parquet" + # add more months/urls if you want larger known parquet total +) + +fetch_tlc_parquet_bundle() { # outdir target_mb + local outdir="$1" target="$2"; mkdir -p "$outdir" + local accum=0 + for url in "${NYC_TLC_MONTHS[@]}"; do + local fn="$outdir/$(basename "$url")" + if [[ -s "$fn" ]]; then + local sz; sz=$(bytes "$fn") + echo "[cache] found $(basename "$fn") ($(mb "$sz") MB) – skip download" + else + echo "[download] $url -> $(basename "$fn")" + download "$url" "$fn" + fi + local sz; sz=$(bytes "$fn") + echo " size: $(mb "$sz") MB (accum $(mb "$accum") MB)" + "$GEN_META_BIN" "$fn" + accum=$((accum + sz)) + if (( accum >= target*1024*1024 )); then break; fi + done +} + +# ------------------------------------------------------------ +# Generate (C++ generator) + Known downloads +# ------------------------------------------------------------ +SUMMARY="$WORKDIR/summary.tsv" +printf "format\twhich\tlabel\ttime_s\tmax_rss_mb\tstatus\texit_code\tfile\n" > "$SUMMARY" + +declare -A GEN_PATH +declare -A KNOWN_PATH + +if (( SKIP_GENERATED == 0 )); then + echo "[gen] calling gen_data (C++/Arrow) for CSV/Parquet..." + "$GEN_DATA_BIN" --outdir "$WORKDIR" --target-size-mb "$TARGET_MB" --cols 8 + GEN_PATH[csv]="$WORKDIR/gen.csv" + GEN_PATH[parquet]="$WORKDIR/gen.parquet" +fi + +if (( SKIP_KNOWN == 0 )); then + for f in "${FORMATS[@]}"; do + case "$f" in + csv) + out="$DATA_DIR/known_off_clean.csv" + # Lossless conversion (no trimming); works for TSV or CSV source. + fetch_off_as_csv_noquotes_fixedcols "$OFF_URL" "$out" + KNOWN_PATH[csv]="$out" + "$GEN_META_BIN" "$out" + ;; + parquet) + outdir="$DATA_DIR/known_tlc_parquet" + fetch_tlc_parquet_bundle "$outdir" "$TARGET_MB" + ;; + esac + done +fi + +# ------------------------------------------------------------ +# Evaluate (CSV×2, Parquet×2) +# ------------------------------------------------------------ +for f in "${FORMATS[@]}"; do + case "$f" in + csv) + CSV_EXTRAS_GEN="" + CSV_EXTRAS_KNOWN="" + + if (( SKIP_GENERATED == 0 )) && [[ ${GEN_PATH[csv]+x} ]]; then + fp="${GEN_PATH[csv]-}" + args_normal=$(make_args "$fp" "$CSV_EXTRAS_GEN") + for scr in "${CSV_SCRIPTS_NORMAL[@]}"; do + cmd="$DAPHNE_BIN $args_normal \"$scr\"" + run_eval "csv" "generated" "$fp" "$(basename "$scr")" "$cmd" + done + for scr in "${CSV_SCRIPTS_PLUGIN[@]}"; do + cmd="$DAPHNE_BIN $args_normal --FileIO-ext \"$CSV_EXT_JSON\" \"$scr\"" + run_eval "csv" "generated" "$fp" "$(basename "$scr")" "$cmd" + done + fi + + if (( SKIP_KNOWN == 0 )) && [[ ${KNOWN_PATH[csv]+x} ]]; then + fp="${KNOWN_PATH[csv]-}" + args_known=$(make_args "$fp" "$CSV_EXTRAS_KNOWN") + for scr in "${CSV_SCRIPTS_NORMAL[@]}"; do + cmd="$DAPHNE_BIN $args_known \"$scr\"" + run_eval "csv" "known" "$fp" "$(basename "$scr")" "$cmd" + done + for scr in "${CSV_SCRIPTS_PLUGIN[@]}"; do + cmd="$DAPHNE_BIN $args_known --FileIO-ext \"$CSV_EXT_JSON\" \"$scr\"" + run_eval "csv" "known" "$fp" "$(basename "$scr")" "$cmd" + done + fi + ;; + parquet) + PARQUET_EXTRAS_GEN="" + PARQUET_EXTRAS_KNOWN="" + + if (( SKIP_GENERATED == 0 )) && [[ ${GEN_PATH[parquet]+x} ]] && [[ -f "${GEN_PATH[parquet]-}" ]]; then + fp="${GEN_PATH[parquet]-}" + args_normal=$(make_args "$fp" "$PARQUET_EXTRAS_GEN") + for scr in "${PARQUET_SCRIPTS_NORMAL[@]}"; do + cmd="$DAPHNE_BIN $args_normal --FileIO-ext \"$PARQUET_EXT_JSON\" \"$scr\"" + run_eval "parquet" "generated" "$fp" "$(basename "$scr")" "$cmd" + done + for scr in "${PARQUET_SCRIPTS_PLUGIN[@]}"; do + cmd="$DAPHNE_BIN $args_normal --FileIO-ext \"$PARQUET_EXT_JSON\" \"$scr\"" + run_eval "parquet" "generated" "$fp" "$(basename "$scr")" "$cmd" + done + fi + + if (( SKIP_KNOWN == 0 )) && [[ -d "$DATA_DIR/known_tlc_parquet" ]]; then + shopt -s nullglob + for fp in "$DATA_DIR"/known_tlc_parquet/*.parquet; do + args_known=$(make_args "$fp" "$PARQUET_EXTRAS_KNOWN") + for scr in "${PARQUET_SCRIPTS_NORMAL[@]}"; do + cmd="$DAPHNE_BIN $args_known --FileIO-ext \"$PARQUET_EXT_JSON\" \"$scr\"" + run_eval "parquet" "known" "$fp" "$(basename "$scr")" "$cmd" + done + for scr in "${PARQUET_SCRIPTS_PLUGIN[@]}"; do + cmd="$DAPHNE_BIN $args_known --FileIO-ext \"$PARQUET_EXT_JSON\" \"$scr\"" + run_eval "parquet" "known" "$fp" "$(basename "$scr")" "$cmd" + done + done + shopt -u nullglob + fi + ;; + esac +done + +# ------------------------------------------------------------ +# FINAL RESULTS +# ------------------------------------------------------------ +echo +echo "=== RESULTS (time & memory) ===" +if command -v column >/dev/null 2>&1; then + column -t -s $'\t' "$WORKDIR/summary.tsv" +else + cat "$WORKDIR/summary.tsv" +fi + +echo +echo "TSV saved at: $WORKDIR/summary.tsv" +echo "Logs in : $LOGDIR" + +# ------------------------------------------------------------ +# Cleanup or keep +# ------------------------------------------------------------ +if (( KEEP )); then + echo "[keep] Files preserved at $WORKDIR" +else + # Keep logs even on cleanup + find "$WORKDIR" -mindepth 1 -maxdepth 1 ! -name logs -exec rm -rf {} + + echo "[cleanup] Removed all work files except logs at $LOGDIR" + echo "[note ] Cached data kept at $DATA_DIR" +fi diff --git a/experiment/Makefile b/experiment/Makefile new file mode 100644 index 000000000..4585c7f8f --- /dev/null +++ b/experiment/Makefile @@ -0,0 +1,44 @@ +# Makefile for gen_data and gen_meta (Arrow/Parquet C++) +# Adjust DAPHNE_ROOT if needed + +DAPHNE_ROOT := /home/yazan/daphneFork/daphne +TP_INC_DIR := $(DAPHNE_ROOT)/thirdparty/installed/include +TP_LIB_DIR := $(DAPHNE_ROOT)/thirdparty/installed/lib + +CXX := g++ +CXXFLAGS := -std=c++17 -O3 -fPIC -Wall -Wextra \ + -I$(TP_INC_DIR) +LDFLAGS := -L$(TP_LIB_DIR) -Wl,-rpath,$(TP_LIB_DIR) +# Common Arrow/Parquet dependencies; add -lzstd/-llz4 here if your Arrow build needs them +LDLIBS := -lparquet -larrow \ + -lz -lbz2 -pthread + +# Binaries +BINS := gen_data gen_meta + +all: $(BINS) + +# ---------------------------------------------------------------------- +# gen_data +# ---------------------------------------------------------------------- +gen_data: gen_data.o + $(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) + +gen_data.o: gen_data.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +# ---------------------------------------------------------------------- +# gen_meta +# ---------------------------------------------------------------------- +gen_meta: gen_meta.o + $(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) + +gen_meta.o: gen_meta.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +# ---------------------------------------------------------------------- +# housekeeping +# ---------------------------------------------------------------------- +.PHONY: clean +clean: + rm -f $(BINS) gen_data.o gen_meta.o diff --git a/experiment/ReadParquet1.parquet b/experiment/ReadParquet1.parquet new file mode 100644 index 000000000..d95dc4e93 Binary files /dev/null and b/experiment/ReadParquet1.parquet differ diff --git a/experiment/ReadParquet1.parquet.meta b/experiment/ReadParquet1.parquet.meta new file mode 100644 index 000000000..f00dce68e --- /dev/null +++ b/experiment/ReadParquet1.parquet.meta @@ -0,0 +1,5 @@ +{ + "numRows": 2, + "numCols": 4, + "valueType": "f64" +} \ No newline at end of file diff --git a/experiment/bench_build.log b/experiment/bench_build.log new file mode 100644 index 000000000..37cae20f3 --- /dev/null +++ b/experiment/bench_build.log @@ -0,0 +1,4 @@ +/daphne/experiment/bench_io_harness.cpp:30:10: fatal error: runtime/local/io/FileIOCatalogParser.h: No such file or directory + 30 | #include "runtime/local/io/FileIOCatalogParser.h" + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +compilation terminated. diff --git a/experiment/data.csv b/experiment/data.csv new file mode 100644 index 000000000..452d899ff --- /dev/null +++ b/experiment/data.csv @@ -0,0 +1,3 @@ +Alice,30,60000.0 +Bob,25,55000.5 +Charlie,35,70000.75 \ No newline at end of file diff --git a/experiment/data.csv.meta b/experiment/data.csv.meta new file mode 100644 index 000000000..25bf5cff6 --- /dev/null +++ b/experiment/data.csv.meta @@ -0,0 +1,5 @@ +{ + "numRows": 3, + "numCols": 3, + "valueType": "str" +} diff --git a/experiment/experiment1.daphne b/experiment/experiment1.daphne new file mode 100644 index 000000000..3f99bbe20 --- /dev/null +++ b/experiment/experiment1.daphne @@ -0,0 +1,15 @@ +opts = {"engine": ["Daphne"], "threads": ["16"]}; +t1 = now(); +m = readFrame("experiment/data/known_off_clean.csv",opts); +t2 = now(); + +opts2 = {"engine": ["builtin"]}; +t3 = now(); +m2 = readFrame("experiment/data/known_off_clean.csv",opts2); +t4 = now(); + +print(t2-t1); + +print(t4-t3); + +//print(m == m2); \ No newline at end of file diff --git a/experiment/experiment2.daphne b/experiment/experiment2.daphne new file mode 100644 index 000000000..4b6e9c358 --- /dev/null +++ b/experiment/experiment2.daphne @@ -0,0 +1,5 @@ +t3 = now(); +m = readMatrix("experiment/ReadParquet1.parquet"); +t4 = now(); + +print(t4-t3); \ No newline at end of file diff --git a/experiment/gen_data b/experiment/gen_data new file mode 100755 index 000000000..af80e361c Binary files /dev/null and b/experiment/gen_data differ diff --git a/experiment/gen_data.cpp b/experiment/gen_data.cpp new file mode 100644 index 000000000..dfb4bb9f7 --- /dev/null +++ b/experiment/gen_data.cpp @@ -0,0 +1,273 @@ +// gen_data.cpp +// Build: see Makefile below +// Usage: ./gen_data --outdir /path --target-size-mb 1500 --cols 8 +// +// Outputs (in --outdir): +// - gen.csv (row-safe; no partial lines) + gen.csv.meta +// - gen.mtx (Matrix Market; line-safe; correct nnz) + gen.mtx.meta +// - gen.parquet (Arrow/Parquet C++; row groups; no truncation) + gen.parquet.meta +// +// The *.meta files have the shape: +// { +// "numRows": , +// "numCols": , +// "valueType": "" +// } +// Here, all generated numeric data are double precision → "f64". +// For Matrix Market we use n×n (valueType "f64" via 'real' banner). + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ------------------------------------------------------------ +static inline long long fsize_bytes(const std::string& p) { + struct stat st{}; + if (stat(p.c_str(), &st) == 0) return static_cast(st.st_size); + return 0LL; +} +static inline long long mb_to_bytes(long long mb) { return mb * 1024LL * 1024LL; } + +// ------------------------------------------------------------ +// Meta writer: writes .meta with required JSON +static inline void write_meta(const std::string& data_path, long long numRows, long long numCols, const std::string& valueType) { + std::ofstream meta(data_path + ".meta", std::ios::out | std::ios::trunc); + if(!meta) throw std::runtime_error("Cannot open meta for write: " + data_path + ".meta"); + meta << "{\n" + << " \"numRows\": " << numRows << ",\n" + << " \"numCols\": " << numCols << ",\n" + << " \"valueType\": \"" << valueType << "\"\n" + << "}\n"; + meta.close(); +} + +// ------------------------------------------------------------ +// CSV generator (row-safe, portable: never writes a partial row) +// Returns number of data rows written (excludes header) +long long gen_csv_linesafe(const std::string& path, long long target_mb, int cols, uint32_t seed=42) { + const long long target = mb_to_bytes(target_mb); + std::mt19937 rng(seed); + std::uniform_real_distribution dist(0.0, 1e6); + + std::ofstream out(path, std::ios::out | std::ios::trunc); + if(!out) throw std::runtime_error("Cannot open CSV for write: " + path); + + // header + std::ostringstream hdr; + for(int c=0;c(header.size()) > target) { + throw std::runtime_error("Target size smaller than header"); + } + out << header; + + // rows + long long rows_written = 0; + while(true){ + std::ostringstream row; + for(int c=0;c(pos) + static_cast(s.size()); + if(next > target) break; + + out << s; + if(!out.good()) throw std::runtime_error("CSV write failed"); + ++rows_written; + } + out.close(); + return rows_written; +} + + +// ------------------------------------------------------------ +// Matrix Market generator (line-safe, correct nnz) +// Returns n (matrix dimension; rows=cols=n) +// We write the entries to a temp data file first to avoid keeping 1–2 GB in RAM, +// then stitch the final file with a correct header. +int gen_mm_linesafe(const std::string& out_path, long long target_mb, int n=200000, uint32_t seed=42) { + const long long target = mb_to_bytes(target_mb); + const std::string tmp_data = out_path + ".data.tmp"; + + std::mt19937 rng(seed); + std::uniform_int_distribution uni_idx(1, n); + std::uniform_real_distribution uni_val(-1.0, 1.0); + + std::ofstream data(tmp_data, std::ios::out | std::ios::trunc); + if(!data) throw std::runtime_error("Cannot open temp MM data: " + tmp_data); + + long long bytes = 0; + long long nnz = 0; + while(true){ + int i = uni_idx(rng); + int j = uni_idx(rng); + double v = std::round(uni_val(rng)*1e6)/1e6; + + std::ostringstream line; + line << i << " " << j << " " << std::fixed << std::setprecision(6) << v << "\n"; + auto s = line.str(); + if(bytes + static_cast(s.size()) > target) break; + + data << s; + if(!data.good()) throw std::runtime_error("MM write failed"); + bytes += static_cast(s.size()); + ++nnz; + } + data.close(); + + // Stitch final file with correct header + std::ifstream in(tmp_data, std::ios::in | std::ios::binary); + if(!in) throw std::runtime_error("Cannot reopen temp MM data"); + std::ofstream out(out_path, std::ios::out | std::ios::trunc | std::ios::binary); + if(!out) throw std::runtime_error("Cannot open MM output: " + out_path); + + out << "%%MatrixMarket matrix coordinate real general\n%\n"; + out << n << " " << n << " " << nnz << "\n"; + out << in.rdbuf(); + out.close(); + in.close(); + std::remove(tmp_data.c_str()); + return n; +} + +// ------------------------------------------------------------ +// Parquet generator (Arrow C++; write row groups until size >= target) +// Returns total row count written +// NOTE: No appending. We keep the writer open and check sink->Tell() after each row group. +long long gen_parquet_arrow(const std::string& path, long long target_mb, int cols, + int64_t batch_rows = 250000, uint32_t seed = 42) { + const int64_t target = mb_to_bytes(target_mb); + + // Schema: cols of float64 + std::vector> fields; + fields.reserve(cols); + for (int c = 0; c < cols; ++c) { + fields.emplace_back(arrow::field("c" + std::to_string(c + 1), arrow::float64())); + } + auto schema = std::make_shared(fields); + + // Output sink and writer (single open) + PARQUET_ASSIGN_OR_THROW(auto sink, arrow::io::FileOutputStream::Open(path)); + + parquet::WriterProperties::Builder wpb; + wpb.compression(parquet::Compression::ZSTD); // adjust if your toolchain lacks zstd + auto writer_props = wpb.build(); + + std::unique_ptr writer; + PARQUET_THROW_NOT_OK(parquet::arrow::FileWriter::Open( + *schema, arrow::default_memory_pool(), sink, writer_props, &writer)); + + std::mt19937 rng(seed); + std::uniform_real_distribution dist(0.0, 1e6); + + long long total_rows = 0; + while (true) { + // Build one row group + std::vector> arrays; + arrays.reserve(cols); + for (int c = 0; c < cols; ++c) { + arrow::DoubleBuilder b; + PARQUET_THROW_NOT_OK(b.Reserve(batch_rows)); + for (int64_t r = 0; r < batch_rows; ++r) { + double v = std::round(dist(rng) * 1e6) / 1e6; + b.UnsafeAppend(v); + } + std::shared_ptr arr; + PARQUET_THROW_NOT_OK(b.Finish(&arr)); + arrays.emplace_back(std::move(arr)); + } + auto table = arrow::Table::Make(schema, arrays, batch_rows); + + // Write the row group + PARQUET_THROW_NOT_OK(writer->WriteTable(*table, batch_rows)); + total_rows += batch_rows; + + // Check current file size without closing + PARQUET_ASSIGN_OR_THROW(int64_t pos, sink->Tell()); + if (pos >= target) break; + } + + // Clean close + PARQUET_THROW_NOT_OK(writer->Close()); + PARQUET_THROW_NOT_OK(sink->Close()); + + return total_rows; +} + + +// ------------------------------------------------------------ +int main(int argc, char** argv){ + // Minimal CLI + std::string outdir; + long long target_mb = 1500; + int cols = 8; + + for(int i=1;i " << pq_path << " (~" << target_mb << " MB)\n"; + long long pq_rows = gen_parquet_arrow(pq_path, target_mb, cols); + write_meta(pq_path, pq_rows, cols, "f64");*/ + + std::cout << "[gen] CSV -> " << csv_path << " (~" << target_mb << " MB)\n"; + long long csv_rows = gen_csv_linesafe(csv_path, target_mb, cols); + // rows exclude header (data rows only) + write_meta(csv_path, csv_rows, cols, "f64"); + /* + std::cout << "[gen] MM -> " << mm_path << " (~" << target_mb << " MB)\n"; + int mm_n = gen_mm_linesafe(mm_path, target_mb); + write_meta(mm_path, mm_n, mm_n, "f64");*/ + + + std::cout << "[done]\n" << csv_path << "\n" << pq_path << "\n" << mm_path << "\n"; + } catch (const std::exception& ex){ + std::cerr << "[error] " << ex.what() << "\n"; + return 2; + } + return 0; +} diff --git a/experiment/gen_data.o b/experiment/gen_data.o new file mode 100644 index 000000000..050b07f27 Binary files /dev/null and b/experiment/gen_data.o differ diff --git a/experiment/gen_meta b/experiment/gen_meta new file mode 100755 index 000000000..d03fd6730 Binary files /dev/null and b/experiment/gen_meta differ diff --git a/experiment/gen_meta.cpp b/experiment/gen_meta.cpp new file mode 100644 index 000000000..49ef693e9 --- /dev/null +++ b/experiment/gen_meta.cpp @@ -0,0 +1,239 @@ +// gen_meta.cpp +// Usage: ./gen_meta file1.csv file2.parquet file3.mtx ... +// Writes .meta with: +// { +// "numRows": N, +// "numCols": M, +// "valueType": "" +// } + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static inline bool file_exists(const std::string& p) { + struct stat st{}; + return stat(p.c_str(), &st) == 0 && S_ISREG(st.st_mode); +} +static inline std::string to_lower(std::string s) { + for (auto &ch : s) ch = static_cast(std::tolower(static_cast(ch))); + return s; +} +static inline std::string trim(const std::string& s) { + size_t b = 0, e = s.size(); + while (b < e && std::isspace(static_cast(s[b]))) ++b; + while (e > b && std::isspace(static_cast(s[e-1]))) --e; + return s.substr(b, e-b); +} +static bool is_numeric(const std::string& s_in) { + std::string s = trim(s_in); + if (s.empty()) return false; + std::string sl = to_lower(s); + if (sl == "nan" || sl == "+nan" || sl == "-nan" || + sl == "inf" || sl == "+inf" || sl == "-inf") return false; + char* endp = nullptr; + errno = 0; + std::strtod(s.c_str(), &endp); + if (endp == s.c_str() || errno == ERANGE) return false; + while (endp && *endp) { + if (!std::isspace(static_cast(*endp))) return false; + ++endp; + } + return true; +} + +static long long count_lines_fast(const std::string& path) { + std::ifstream in(path, std::ios::binary); + if (!in) return 0; + const size_t BUFSZ = 1 << 20; + std::vector buf(BUFSZ); + long long cnt = 0; + while (in) { + in.read(buf.data(), buf.size()); + std::streamsize g = in.gcount(); + for (std::streamsize i = 0; i < g; ++i) if (buf[i] == '\n') ++cnt; + } + return cnt; +} + +// ---------------- Parquet (Arrow) ---------------- +static bool parquet_meta(const std::string& path, long long& rows, long long& cols, std::string& vtype) { + try { + auto infile_res = arrow::io::ReadableFile::Open(path); + if (!infile_res.ok()) return false; + std::shared_ptr infile = *infile_res; + + std::unique_ptr pq_reader = parquet::ParquetFileReader::Open(infile); + std::shared_ptr md = pq_reader->metadata(); + rows = md->num_rows(); + cols = md->num_columns(); + + std::unique_ptr arrow_reader; + auto st = parquet::arrow::OpenFile(infile, arrow::default_memory_pool(), &arrow_reader); + bool all_numeric = false; + if (st.ok() && arrow_reader) { + std::shared_ptr schema; + if (arrow_reader->GetSchema(&schema).ok() && schema) { + all_numeric = !schema->fields().empty(); + for (const auto& f : schema->fields()) { + using T = arrow::Type::type; + auto id = f->type()->id(); + bool is_num = + id == T::INT8 || id == T::INT16 || id == T::INT32 || id == T::INT64 || + id == T::UINT8 || id == T::UINT16 || id == T::UINT32 || id == T::UINT64 || + id == T::FLOAT || id == T::DOUBLE || id == T::HALF_FLOAT || + id == T::DECIMAL128 || id == T::DECIMAL256; + if (!is_num) { all_numeric = false; break; } + } + } + } + vtype = (cols > 0 && rows >= 0 && all_numeric) ? "f64" : "str"; + return true; + } catch (...) { + return false; + } +} + +// -------------- CSV (quote-free, header present) -------------- +static bool csv_meta(const std::string& path, long long& rows, long long& cols, std::string& vtype) { + // Count physical lines + long long lines = count_lines_fast(path); + if (lines <= 0) { rows = 0; cols = 0; vtype = "str"; return true; } + + std::ifstream in(path); + if (!in) return false; + + // Header (first line) + std::string header; + if (!std::getline(in, header)) { rows = 0; cols = 0; vtype = "str"; return true; } + + // Split header by comma (NO quoting expected) + cols = 0; + { + std::stringstream ss(header); + std::string tok; + while (std::getline(ss, tok, ',')) ++cols; + } + if (cols == 0) { rows = 0; vtype = "str"; return true; } + + // Rows = total lines - 1 (header) + rows = (lines > 0) ? (lines - 1) : 0; + + // Sample next up to N lines to infer numeric-ness; enforce width = cols + const long long MAX_SAMPLE = 2000; + bool all_numeric = true; + std::string line; + long long sampled = 0; + + while (sampled < MAX_SAMPLE && std::getline(in, line)) { + if (line.empty()) { ++sampled; continue; } + // split (quote-free) + std::vector fields; + fields.reserve(static_cast(cols)); + { + std::stringstream ss(line); + std::string tok; + while (std::getline(ss, tok, ',')) fields.emplace_back(std::move(tok)); + } + if (static_cast(fields.size()) != cols) { all_numeric = false; break; } + for (const auto& f : fields) { + if (!is_numeric(f)) { all_numeric = false; break; } + } + ++sampled; + if (!all_numeric) break; + } + + vtype = all_numeric ? "f64" : "str"; + return true; +} + +// -------------- Matrix Market (.mtx) -------------- +static bool mtx_meta(const std::string& path, long long& rows, long long& cols, std::string& vtype) { + std::ifstream in(path); + if (!in) return false; + std::string line; + + if (!std::getline(in, line)) return false; + std::string hl = to_lower(line); + if (hl.find("matrixmarket") == std::string::npos) return false; + + if (hl.find(" real ") != std::string::npos) vtype = "f64"; + else if (hl.find(" integer ") != std::string::npos) vtype = "si32"; + else vtype = "str"; + + while (std::getline(in, line)) { + if (!line.empty() && line[0] != '%') break; + } + std::istringstream iss(line); + long long r=0, c=0; + iss >> r >> c; + rows = r; cols = c; + return true; +} + +static void write_meta_file(const std::string& path, long long rows, long long cols, const std::string& vtype) { + std::ofstream out(path + ".meta", std::ios::out | std::ios::trunc); + if (!out) { + std::cerr << "[meta][error] cannot open " << path << ".meta for write\n"; + return; + } + out << "{\n" + << " \"numRows\": " << rows << ",\n" + << " \"numCols\": " << cols << ",\n" + << " \"valueType\": \"" << vtype << "\"\n" + << "}\n"; + out.close(); + std::cout << "[meta] wrote " << path << ".meta\n"; +} + +int main(int argc, char** argv) { + if (argc < 2) { + std::cerr << "Usage: " << argv[0] << " [file2 ...]\n"; + return 1; + } + + int rc_all = 0; + for (int i = 1; i < argc; ++i) { + std::string path = argv[i]; + if (!file_exists(path)) { + std::cerr << "[meta][warn] skip missing: " << path << "\n"; + rc_all = 2; continue; + } + std::string lower = to_lower(path); + long long rows = 0, cols = 0; + std::string vtype = "str"; + bool ok = false; + + if (lower.size() >= 8 && lower.substr(lower.size() - 8) == ".parquet") { + ok = parquet_meta(path, rows, cols, vtype); + } else if (lower.size() >= 4 && lower.substr(lower.size() - 4) == ".csv") { + ok = csv_meta(path, rows, cols, vtype); // header-aware, quote-free + } else if (lower.size() >= 4 && lower.substr(lower.size() - 4) == ".mtx") { + ok = mtx_meta(path, rows, cols, vtype); + } else { + std::cerr << "[meta][warn] unknown extension, skipping: " << path << "\n"; + rc_all = 3; continue; + } + + if (!ok) { + std::cerr << "[meta][error] failed to derive meta for: " << path << "\n"; + rc_all = 4; continue; + } + write_meta_file(path, rows, cols, vtype); + } + return rc_all; +} diff --git a/experiment/gen_meta.o b/experiment/gen_meta.o new file mode 100644 index 000000000..fa76a9f34 Binary files /dev/null and b/experiment/gen_meta.o differ diff --git a/scripts/examples/extensions/builtInIO/BuiltInPlugIns.cpp b/scripts/examples/extensions/builtInIO/BuiltInPlugIns.cpp new file mode 100644 index 000000000..a6e633e48 --- /dev/null +++ b/scripts/examples/extensions/builtInIO/BuiltInPlugIns.cpp @@ -0,0 +1,1560 @@ +/* + * Copyright 2021 The DAPHNE Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "runtime/local/io/FileIORegistry.h" +#include "runtime/local/io/MMFile.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include // for memcpy +#include // for malloc, free + +// one header/toggle for all your plugins +#ifndef DAPHNE_PLUGIN_API +# if defined(__GNUC__) || defined(__clang__) +# define DAPHNE_PLUGIN_API __attribute__((visibility("default"))) +# else +# define DAPHNE_PLUGIN_API +# endif +#endif + + +static std::unordered_map g_csvBackings; + + +typedef char MM_typecode[4]; + +char *mm_typecode_to_str(MM_typecode matcode); + +#include +using json = nlohmann::json; + + + +// **************************************************************************** +// Struct for partial template specialization +// **************************************************************************** + +template struct ReadCsvFile { + static void apply(DTRes *&res, const FileMetaData& fmd, File *file, IOOptions &opts, DaphneContext *ctx) = delete; +}; + +// **************************************************************************** +// Convenience function +// **************************************************************************** + +template +void readCsvFile(DTRes *&res, const FileMetaData& fmd, File *file, IOOptions &opts, DaphneContext *ctx) { + ReadCsvFile::apply(res, fmd, file, opts, ctx); +} + +template +void readCsvFromPath(DTRes *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) { + File *file = openFile(filename); + if (!file) + throw std::runtime_error("readCsvFromPath: could not open file"); + ReadCsvFile::apply(res, fmd, file, opts, ctx); + closeFile(file); +} + + +// **************************************************************************** +// (Partial) template specializations for different data/value types +// **************************************************************************** + +// ---------------------------------------------------------------------------- +// DenseMatrix +// ---------------------------------------------------------------------------- + +template +struct ReadCsvFile> { + static void apply(DenseMatrix *&res, const FileMetaData& fmd, struct File *file, IOOptions &opts, DaphneContext *ctx) { + // extract parameters + size_t numRows = fmd.numRows; + size_t numCols = fmd.numCols; + char delim = ','; + auto it = opts.extra.find("delimiter"); + if(it != opts.extra.end()) { + const auto &val = it->second; + if(val.size() != 1) throw std::runtime_error("Invalid delimiter"); + delim = val[0]; + } + if (!file) throw std::runtime_error("ReadCsvFile: requires a file (must not be nullptr)"); + if (numRows == 0) throw std::runtime_error("ReadCsvFile: numRows must be > 0"); + if (numCols == 0) throw std::runtime_error("ReadCsvFile: numCols must be > 0"); + if (!res) { + res = DataObjectFactory::create>(numRows, numCols, false); + } + size_t cell = 0; + VT *valuesRes = res->getValues(); + for (size_t r = 0; r < numRows; ++r) { + if (getFileLine(file) == -1) + throw std::runtime_error("ReadCsvFile::apply: getFileLine failed"); + size_t pos = 0; + for (size_t c = 0; c < numCols; ++c) { + VT val; + convertCstr(file->line + pos, &val); + valuesRes[cell++] = val; + if (c + 1 < numCols) { + while (file->line[pos] != delim) ++pos; + if (pos < file->read && file->line[pos] == delim) ++pos; + } + } + } + } +}; + +template <> +struct ReadCsvFile> { + static void apply(DenseMatrix *&res, const FileMetaData& fmd, struct File *file, IOOptions &opts, DaphneContext *ctx) { + size_t numRows = fmd.numRows; + size_t numCols = fmd.numCols; + char delim = ','; + auto it = opts.extra.find("delimiter"); + if(it != opts.extra.end()) { + const auto &val = it->second; + if(val.size() != 1) throw std::runtime_error("Invalid delimiter"); + delim = val[0]; + } + if (!file) throw std::runtime_error("ReadCsvFile: requires a file (must not be nullptr)"); + if (numRows == 0) throw std::runtime_error("ReadCsvFile: numRows must be > 0"); + if (numCols == 0) throw std::runtime_error("ReadCsvFile: numCols must be > 0"); + if (!res) { + res = DataObjectFactory::create>(numRows, numCols, false); + } + size_t cell = 0; + std::string *valuesRes = res->getValues(); + for (size_t r = 0; r < numRows; ++r) { + if (getFileLine(file) == -1) + throw std::runtime_error("ReadCsvFile::apply: getFileLine failed"); + size_t pos = 0; + for (size_t c = 0; c < numCols; ++c) { + std::string val(""); + pos = setCString(file, pos, &val, delim) + 1; + valuesRes[cell++] = val; + } + } + } +}; + +template <> +struct ReadCsvFile> { + static void apply(DenseMatrix *&res, const FileMetaData& fmd, File *file, IOOptions &opts, DaphneContext *ctx) { + size_t numRows = fmd.numRows; + size_t numCols = fmd.numCols; + char delim = ','; + auto it = opts.extra.find("delimiter"); + if(it != opts.extra.end()) { + const auto &val = it->second; + if(val.size() != 1) throw std::runtime_error("Invalid delimiter"); + delim = val[0]; + } + if (!file) throw std::runtime_error("ReadCsvFile: requires a file (must not be nullptr)"); + if (numRows == 0) throw std::runtime_error("ReadCsvFile: numRows must be > 0"); + if (numCols == 0) throw std::runtime_error("ReadCsvFile: numCols must be > 0"); + if (!res) { + res = DataObjectFactory::create>(numRows, numCols, false); + } + size_t cell = 0; + FixedStr16 *valuesRes = res->getValues(); + for (size_t r = 0; r < numRows; ++r) { + if (getFileLine(file) == -1) + throw std::runtime_error("ReadCsvFile::apply: getFileLine failed"); + size_t pos = 0; + for (size_t c = 0; c < numCols; ++c) { + std::string tmp; + pos = setCString(file, pos, &tmp, delim) + 1; + valuesRes[cell++].set(tmp.c_str()); + } + } + } +}; + +// ---------------------------------------------------------------------------- +// CSRMatrix +// ---------------------------------------------------------------------------- + +template +struct ReadCsvFile> { + static void apply(CSRMatrix *&res, const FileMetaData& fmd, struct File *file, IOOptions &opts, DaphneContext *ctx) { + size_t numRows = fmd.numRows; + size_t numCols = fmd.numCols; + ssize_t numNonZeros = (fmd.numNonZeros >= 0) ? fmd.numNonZeros : -1; + bool sorted = opts.extra.count("sorted") && opts.extra.at("sorted") == "true"; + char delim = ','; + auto it = opts.extra.find("delimiter"); + if(it != opts.extra.end()) { + const auto &val = it->second; + if(val.size() != 1) throw std::runtime_error("Invalid delimiter"); + delim = val[0]; + } + if (numNonZeros < 0) + throw std::runtime_error("ReadCsvFile: sparse reader requires numNonZeros >= 0"); + if (!res) + res = DataObjectFactory::create>(numRows, numCols, numNonZeros, false); + if (sorted) { + readCOOSorted(res, file, numRows, numCols, static_cast(numNonZeros), delim); + } else { + DenseMatrix *rowColumnPairs = nullptr; + readCsvFile(rowColumnPairs, fmd, file, opts, ctx); + readCOOUnsorted(res, rowColumnPairs, numRows, numCols, static_cast(numNonZeros)); + DataObjectFactory::destroy(rowColumnPairs); + } + } + + private: + static void readCOOSorted(CSRMatrix *&res, File *file, size_t numRows, [[maybe_unused]] size_t numCols, + size_t numNonZeros, char delim) { + auto *rowOffsets = res->getRowOffsets(); + // we first write number of non zeros for each row and then compute the + // cumulative sum + std::memset(rowOffsets, 0, (numRows + 1) * sizeof(size_t)); + auto *colIdxs = res->getColIdxs(); + auto *values = res->getValues(); + + size_t pos; + uint64_t row; + uint64_t col; + for (size_t i = 0; i < numNonZeros; ++i) { + if (getFileLine(file) == -1) + throw std::runtime_error("ReadCOOSorted::apply: getFileLine failed"); + convertCstr(file->line, &row); + pos = 0; + while (file->line[pos] != delim) + pos++; + pos++; // skip delimiter + convertCstr(file->line + pos, &col); + + rowOffsets[row + 1] += 1; + values[i] = 1; + colIdxs[i] = col; + } + // #pragma clang loop vectorize(enable) + PRAGMA_LOOP_VECTORIZE + for (size_t r = 1; r <= numRows; ++r) { + rowOffsets[r] += rowOffsets[r - 1]; + } + } + + static void readCOOUnsorted(CSRMatrix *&res, DenseMatrix *rowColumnPairs, size_t numRows, + size_t numCols, size_t numNonZeros) { + // pairs are ordered by first then by second argument (row, then col) + using RowColPos = std::pair; + std::priority_queue, std::greater<>> positions; + for (auto r = 0u; r < rowColumnPairs->getNumRows(); ++r) { + positions.emplace(rowColumnPairs->get(r, 0), rowColumnPairs->get(r, 1)); + } + + auto *rowOffsets = res->getRowOffsets(); + rowOffsets[0] = 0; + auto *colIdxs = res->getColIdxs(); + auto *values = res->getValues(); + size_t currValIdx = 0; + size_t rowIdx = 0; + while (!positions.empty()) { + auto pos = positions.top(); + if (pos.first >= res->getNumRows() || pos.second >= res->getNumCols()) { + throw std::runtime_error("Position [" + std::to_string(pos.first) + ", " + std::to_string(pos.second) + + "] is not part of matrix<" + std::to_string(res->getNumRows()) + ", " + + std::to_string(res->getNumCols()) + ">"); + } + while (rowIdx < pos.first) { + rowOffsets[rowIdx + 1] = currValIdx; + rowIdx++; + } + // TODO: valued COO files? + values[currValIdx] = 1; + colIdxs[currValIdx] = pos.second; + currValIdx++; + positions.pop(); + } + while (rowIdx < numRows) { + rowOffsets[rowIdx + 1] = currValIdx; + rowIdx++; + } + } +}; + +// ---------------------------------------------------------------------------- +// Frame +// ---------------------------------------------------------------------------- + +template <> +struct ReadCsvFile { + static void apply(Frame *&res, const FileMetaData& fmd, struct File *file, IOOptions &opts, DaphneContext *ctx) { + // --- Step 1: Parse basic options --- + size_t numRows = fmd.numRows; + size_t numCols = fmd.numCols; + + if (numRows == 0) throw std::runtime_error("ReadCsvFile: numRows must be > 0"); + if (numCols == 0) throw std::runtime_error("ReadCsvFile: numCols must be > 0"); + + // --- Step 2: Parse delimiter --- + char delim = ','; + auto it = opts.extra.find("delimiter"); + if(it != opts.extra.end()) { + const auto &val = it->second; + if(val.size() != 1) + throw std::runtime_error("Invalid delimiter: must be a single character."); + delim = val[0]; + } + + if (res == nullptr) { + res = DataObjectFactory::create(numRows, numCols, fmd.schema.data(), fmd.labels.data(), false); + } + + // --- Step 5: Get raw column data pointers --- + uint8_t **rawCols = new uint8_t *[numCols]; + ValueTypeCode *colTypes = new ValueTypeCode[numCols]; + + for (size_t i = 0; i < numCols; i++) { + rawCols[i] = reinterpret_cast(res->getColumnRaw(i)); + colTypes[i] = res->getColumnType(i); + } + + size_t row = 0; + size_t col = 0; + + + + while (1) { + ssize_t ret = getFileLine(file); + if (file->read == EOF) + break; + if (file->line == NULL) + break; + if (ret == -1) + throw std::runtime_error("ReadCsvFile::apply: getFileLine failed"); + + size_t pos = 0; + while (1) { + switch (colTypes[col]) { + case ValueTypeCode::SI8: + int8_t val_si8; + convertCstr(file->line + pos, &val_si8); + reinterpret_cast(rawCols[col])[row] = val_si8; + break; + case ValueTypeCode::SI32: + int32_t val_si32; + convertCstr(file->line + pos, &val_si32); + reinterpret_cast(rawCols[col])[row] = val_si32; + break; + case ValueTypeCode::SI64: + int64_t val_si64; + convertCstr(file->line + pos, &val_si64); + reinterpret_cast(rawCols[col])[row] = val_si64; + break; + case ValueTypeCode::UI8: + uint8_t val_ui8; + convertCstr(file->line + pos, &val_ui8); + reinterpret_cast(rawCols[col])[row] = val_ui8; + break; + case ValueTypeCode::UI32: + uint32_t val_ui32; + convertCstr(file->line + pos, &val_ui32); + reinterpret_cast(rawCols[col])[row] = val_ui32; + break; + case ValueTypeCode::UI64: + uint64_t val_ui64; + convertCstr(file->line + pos, &val_ui64); + reinterpret_cast(rawCols[col])[row] = val_ui64; + break; + case ValueTypeCode::F32: + float val_f32; + convertCstr(file->line + pos, &val_f32); + reinterpret_cast(rawCols[col])[row] = val_f32; + break; + case ValueTypeCode::F64: + double val_f64; + convertCstr(file->line + pos, &val_f64); + reinterpret_cast(rawCols[col])[row] = val_f64; + break; + case ValueTypeCode::STR: { + std::string val_str = ""; + pos = setCString(file, pos, &val_str, delim); + reinterpret_cast(rawCols[col])[row] = val_str; + break; + } + case ValueTypeCode::FIXEDSTR16: { + std::string val_str = ""; + pos = setCString(file, pos, &val_str, delim); + reinterpret_cast(rawCols[col])[row] = FixedStr16(val_str); + break; + } + default: + throw std::runtime_error("ReadCsvFile::apply: unknown value type code"); + } + + if (++col >= numCols) { + break; + } + + // TODO We could even exploit the fact that the strtoX functions + // can return a pointer to the first character after the parsed + // input, then we wouldn't have to search for that ourselves, + // just would need to check if it is really the delimiter. + while (file->line[pos] != delim) + pos++; + pos++; // skip delimiter + } + + if (++row >= numRows) { + break; + } + col = 0; + } + + delete[] rawCols; + delete[] colTypes; + } +}; + +// Parquet reader plugin-style wrapper (adjusted to your setup) + +template +struct ReadParquet { + static void apply(DTRes *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) = delete; +}; + +inline struct File *arrowToCsv(const char *filename) { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + arrow::fs::LocalFileSystem file_system; + std::shared_ptr input = file_system.OpenInputFile(filename).ValueOrDie(); + + std::unique_ptr arrow_reader; + if (!(parquet::arrow::OpenFile(input, pool, &arrow_reader).ok())) + throw std::runtime_error("Could not open Parquet file"); + + + std::shared_ptr table; + if (!(arrow_reader->ReadTable(&table)).ok()) + throw std::runtime_error("Could not read Parquet table"); + + auto output = arrow::io::BufferOutputStream::Create().ValueOrDie(); + if (!(arrow::csv::WriteCSV(*table, arrow::csv::WriteOptions::Defaults(), output.get())).ok()) + throw std::runtime_error("Could not write from Parquet to CSV format"); + + auto finishResult = output->Finish(); + + auto csv = finishResult.ValueOrDie()->ToString(); + void *ccsv = csv.data(); + + FILE *buf = fmemopen(ccsv, csv.size(), "r"); + struct File *file = openMemFile(buf); + if (getFileLine(file) == -1) // Parquet has headers, readCsv does not expect that. + throw std::runtime_error("arrowToCsv: getFileLine failed"); + + return file; +} + +// ---------------------------------------------------------------------------- +// DenseMatrix +// ---------------------------------------------------------------------------- +template +struct ReadParquet> { + static void apply(DenseMatrix *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) { + struct File *file = arrowToCsv(filename); + ReadCsvFile>::apply(res, fmd, file, opts, ctx); + closeFile(file); + } +}; + +// ---------------------------------------------------------------------------- +// CSRMatrix +// ---------------------------------------------------------------------------- +template +struct ReadParquet> { + static void apply(CSRMatrix *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) { + struct File *file = arrowToCsv(filename); + ReadCsvFile>::apply(res, fmd, file, opts, ctx); + closeFile(file); + } +}; + +// ---------------------------------------------------------------------------- +// Frame +// ---------------------------------------------------------------------------- +template <> +struct ReadParquet { + static void apply(Frame *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) { + struct File *file = arrowToCsv(filename); + ReadCsvFile::apply(res, fmd, file, opts, ctx); + closeFile(file); + } +}; + +template +struct ReadMM { + static void apply(DTRes *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) = delete; +}; + +// ---------------------------------------------------------------------------- +// DenseMatrix +// ---------------------------------------------------------------------------- +template +struct ReadMM> { + static void apply(DenseMatrix *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) { + MMFile mmfile(filename); + if (!res) + res = DataObjectFactory::create>( + mmfile.numberRows(), mmfile.numberCols(), + mmfile.entryCount() != mmfile.numberCols() * mmfile.numberRows()); + VT *valuesRes = res->getValues(); + for (auto &entry : mmfile) + valuesRes[entry.row * mmfile.numberCols() + entry.col] = entry.val; + } +}; + +// ---------------------------------------------------------------------------- +// CSRMatrix +// ---------------------------------------------------------------------------- +template +struct ReadMM> { + static void apply(CSRMatrix *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) { + MMFile mmfile(filename); + using entry_t = typename MMFile::Entry; + std::priority_queue, std::greater<>> entry_queue; + for (auto &entry : mmfile) + entry_queue.emplace(entry); + + if (!res) + res = DataObjectFactory::create>(mmfile.numberRows(), mmfile.numberCols(), entry_queue.size(), false); + + auto *rowOffsets = res->getRowOffsets(); + rowOffsets[0] = 0; + auto *colIdxs = res->getColIdxs(); + auto *values = res->getValues(); + size_t currValIdx = 0; + size_t rowIdx = 0; + + while (!entry_queue.empty()) { + auto &entry = entry_queue.top(); + while (rowIdx < entry.row) + rowOffsets[++rowIdx] = currValIdx; + values[currValIdx] = entry.val; + colIdxs[currValIdx] = entry.col; + currValIdx++; + entry_queue.pop(); + } + while (rowIdx < mmfile.numberRows()) + rowOffsets[++rowIdx] = currValIdx; + } +}; + +// ---------------------------------------------------------------------------- +// Frame +// ---------------------------------------------------------------------------- +template <> +struct ReadMM { + static void apply(Frame *&res, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) { + MMFile mmfile(filename); + if (!res) { + ValueTypeCode *types = new ValueTypeCode[mmfile.numberCols()]; + for (size_t i = 0; i < mmfile.numberCols(); i++) + types[i] = mmfile.elementType(); + res = DataObjectFactory::create( + mmfile.numberRows(), mmfile.numberCols(), types, nullptr, + mmfile.entryCount() != mmfile.numberCols() * mmfile.numberRows()); + } + + uint8_t **rawFrame = new uint8_t *[mmfile.numberCols()]; + for (size_t i = 0; i < mmfile.numberCols(); i++) + rawFrame[i] = reinterpret_cast(res->getColumnRaw(i)); + + for (auto &entry : mmfile) { + if (mmfile.elementType() == ValueTypeCode::SI64) + reinterpret_cast(rawFrame[entry.col])[entry.row] = static_cast(entry.val); + else + reinterpret_cast(rawFrame[entry.col])[entry.row] = entry.val; + } + + delete[] rawFrame; + } +}; + + + +extern "C" DAPHNE_PLUGIN_API void readCsvFromPath_Frame(void* &res, const FileMetaData& fmd, const char* filename, IOOptions &opts, DaphneContext* ctx) { + readCsvFromPath(reinterpret_cast(res), fmd, filename, opts, ctx); +} + +extern "C" DAPHNE_PLUGIN_API void readCsvFromPath_CSR(void* &res, const FileMetaData &fmd, const char* filename, IOOptions &opts, DaphneContext* ctx) { + // e.g. check an opts.extra flag, or peek at the file, etc. + + if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::F32) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI64) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI32) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI8) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI64) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI32) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI8) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else { + // Fallback: treat as double + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + +} + +extern "C" DAPHNE_PLUGIN_API void readCsvFromPath_Dense(void* &res, const FileMetaData &fmd, const char* filename, IOOptions &opts, DaphneContext* ctx) { + // e.g. check an opts.extra flag, or peek at the file, etc. + + if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::F64) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::F32) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI64) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI32) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI8) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI64) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI32) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI8) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::STR) { + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else { + // Fallback: treat as strings + readCsvFromPath>(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + +} + + + +extern "C" DAPHNE_PLUGIN_API void ReadParquet_Frame(void* &res, const FileMetaData& fmd, const char* filename, IOOptions &opts, DaphneContext* ctx) { + ReadParquet::apply(reinterpret_cast(res), fmd, filename, opts, ctx); +} + +extern "C" DAPHNE_PLUGIN_API void ReadParquet_CSR( + void* &res, const FileMetaData& fmd, const char* filename, IOOptions &opts, DaphneContext* ctx) +{ + // Choose VT by schema (single value type), default to double. + ValueTypeCode vt = ValueTypeCode::F64; + if (fmd.isSingleValueType && !fmd.schema.empty()) + vt = fmd.schema[0]; + + switch (vt) { + case ValueTypeCode::F64: + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + case ValueTypeCode::F32: + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + case ValueTypeCode::SI64: + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + case ValueTypeCode::SI32: + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + + // Optional: enable unsigned types if your kernel supports them. + case ValueTypeCode::UI64: + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + case ValueTypeCode::UI32: + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + + case ValueTypeCode::STR: + throw std::runtime_error("ReadParquet_CSR: string-valued sparse matrices are not supported"); + default: + // Sensible default + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + } +} + + +extern "C" DAPHNE_PLUGIN_API void ReadParquet_Dense(void* &res, const FileMetaData& fmd, const char* filename, IOOptions &opts, DaphneContext* ctx) { + if (fmd.isSingleValueType) { + if (fmd.schema[0] == ValueTypeCode::F64) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.schema[0] == ValueTypeCode::F32) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.schema[0] == ValueTypeCode::UI64) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.schema[0] == ValueTypeCode::UI32) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.schema[0] == ValueTypeCode::UI8) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.schema[0] == ValueTypeCode::SI64) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.schema[0] == ValueTypeCode::SI32) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.schema[0] == ValueTypeCode::SI8) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.schema[0] == ValueTypeCode::STR) { + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else { + // Default: treat as string matrix + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + } + else { + // Not a single value type? Fall back to a string matrix by default. + ReadParquet>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } +} + + +extern "C" DAPHNE_PLUGIN_API void ReadMM_Frame(void* &res, const FileMetaData& fmd, const char* filename, IOOptions &opts, DaphneContext* ctx) { + ReadMM::apply(reinterpret_cast(res), fmd, filename, opts, ctx); +} + +extern "C" DAPHNE_PLUGIN_API void ReadMM_Dense(void* &res, const FileMetaData& fmd, const char* filename, IOOptions &opts, DaphneContext* ctx) { + if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::F64) { + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::F32) { + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI64) { + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI32) { + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI8) { + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI64) { + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI32) { + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI8) { + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } + else if (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::STR) { + throw std::runtime_error("ReadMM_Dense: string-valued MatrixMarket files are not supported"); + } + else { + // Sensible default (or throw if you prefer strict typing) + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + } +} + +extern "C" DAPHNE_PLUGIN_API void ReadMM_CSR(void* &res, const FileMetaData& fmd, + const char* filename, IOOptions &opts, DaphneContext* ctx) { + // Choose VT by schema (single value type), default to double + ValueTypeCode vt = ValueTypeCode::F64; + if (fmd.isSingleValueType && !fmd.schema.empty()) + vt = fmd.schema[0]; + + switch (vt) { + case ValueTypeCode::F64: + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + case ValueTypeCode::F32: + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + case ValueTypeCode::SI64: + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + case ValueTypeCode::SI32: + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + default: + // You can extend with UI* if needed. For now, keep it simple: + ReadMM>::apply(reinterpret_cast*&>(res), fmd, filename, opts, ctx); + break; + } +} + + +//############################################################# +// CSV Writer +//############################################################# + +// ---- helper copied from WriteCsv.h (needed for strings) -------------------- +static inline std::string quoteStrCsvIf_inline(const std::string &s) { + if (s.find_first_of(",\n\r\"") != std::string::npos) { + std::stringstream strm; + strm << '"'; + for (size_t i = 0; i < s.length(); i++) { + char c = s[i]; + if (c == '"') strm << '"' << '"'; + else strm << c; + } + strm << '"'; + return strm.str(); + } else { + return s; + } +} + +// ======================= DenseMatrix writers ============================ + +template +static inline void dumpDenseToCsv_inline(const DenseMatrix* arg, File *file) { + if (file == nullptr) + throw std::runtime_error("WriteCsv: requires a file to be specified (must not be nullptr)"); + + const VT *valuesArg = arg->getValues(); + const size_t rowSkip = arg->getRowSkip(); + const size_t argNumCols = arg->getNumCols(); + + for (size_t i = 0; i < arg->getNumRows(); ++i) { + for (size_t j = 0; j < argNumCols; ++j) { + if constexpr (std::is_same::value) { + fprintf(file->identifier, "%s", quoteStrCsvIf_inline(valuesArg[i * rowSkip + j]).c_str()); + } else { + fprintf(file->identifier, + std::is_floating_point::value ? "%f" + : (std::is_same::value ? "%ld" : "%d"), + valuesArg[i * rowSkip + j]); + } + if (j < (arg->getNumCols() - 1)) fprintf(file->identifier, ","); + else fprintf(file->identifier, "\n"); + } + } +} + +template +static inline void writeCsvDenseBuiltin_inline(const DenseMatrix* arg, const char* filename) { + File *file = openFileForWrite(filename); + dumpDenseToCsv_inline(arg, file); + closeFile(file); +} + +extern "C" DAPHNE_PLUGIN_API void WriteCsv_Dense(void const *arg, + const FileMetaData &fmd, + const char *filename, + IOOptions &opts, + DaphneContext *ctx) +{ + + if(!arg) + throw std::runtime_error("WriteCsv_Dense: arg == nullptr"); + + if(!fmd.isSingleValueType || fmd.schema.empty()) + throw std::runtime_error("WriteCsv_Dense: expected single value type schema"); + + switch(fmd.schema[0]) { + case ValueTypeCode::F64: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI64: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::STR: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::F32: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI32: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI64: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI32: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg),filename); + break; + case ValueTypeCode::UI8: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI8: + writeCsvDenseBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + default: + throw std::runtime_error("WriteCsv_Dense: unsupported VT in schema[0]"); + } +} + +// ================================ Frame writer ============================== + +static inline void dumpFrameToCsv_inline(const Frame* arg, File *file) { + if (file == nullptr) + throw std::runtime_error("WriteCsv: requires a file to be specified (must not be nullptr)"); + + for (size_t i = 0; i < arg->getNumRows(); ++i) { + for (size_t j = 0; j < arg->getNumCols(); ++j) { + const void *array = arg->getColumnRaw(j); + ValueTypeCode vtc = arg->getColumnType(j); + switch (vtc) { + // SI8 as number (cast to int32 for formatting) + case ValueTypeCode::SI8: + fprintf(file->identifier, "%" PRId8, + static_cast(reinterpret_cast(array)[i])); + break; + case ValueTypeCode::SI32: + fprintf(file->identifier, "%" PRId32, reinterpret_cast(array)[i]); + break; + case ValueTypeCode::SI64: + fprintf(file->identifier, "%" PRId64, reinterpret_cast(array)[i]); + break; + // UI8 as number (cast to uint32 for formatting) + case ValueTypeCode::UI8: + fprintf(file->identifier, "%" PRIu8, + static_cast(reinterpret_cast(array)[i])); + break; + case ValueTypeCode::UI32: + fprintf(file->identifier, "%" PRIu32, reinterpret_cast(array)[i]); + break; + case ValueTypeCode::UI64: + fprintf(file->identifier, "%" PRIu64, reinterpret_cast(array)[i]); + break; + case ValueTypeCode::F32: + fprintf(file->identifier, "%f", reinterpret_cast(array)[i]); + break; + case ValueTypeCode::F64: + fprintf(file->identifier, "%f", reinterpret_cast(array)[i]); + break; + case ValueTypeCode::STR: + fprintf(file->identifier, "%s", + quoteStrCsvIf_inline(reinterpret_cast(array)[i]).c_str()); + break; + default: + throw std::runtime_error("unknown value type code"); + } + + if (j < (arg->getNumCols() - 1)) fprintf(file->identifier, ","); + else fprintf(file->identifier, "\n"); + } + } +} + +extern "C" DAPHNE_PLUGIN_API void WriteCsv_Frame( void const *arg, const FileMetaData &fmd, const char *filename, IOOptions &opts, DaphneContext *ctx) { + auto fr = reinterpret_cast(arg); + + File *file = openFileForWrite(filename); + if(!file) { + throw std::runtime_error(std::string("openFileForWrite failed for '") + + filename + "'"); + } + + std::vector vtcs; + std::vector labels; + vtcs.reserve(fr->getNumCols()); + labels.reserve(fr->getNumCols()); + for (size_t i = 0; i < fr->getNumCols(); i++) { + vtcs.push_back(fr->getSchema()[i]); + labels.push_back(fr->getLabels() ? fr->getLabels()[i] : std::string()); + } + + FileMetaData metaData(fr->getNumRows(), fr->getNumCols(), false, vtcs, labels); + MetaDataParser::writeMetaData(filename, metaData); + + dumpFrameToCsv_inline(fr, file); + closeFile(file); +} + +// ======================= Matrix writers ============================ + +template +static inline void dumpMatrixToCsv_inline(const Matrix* arg, File *file) { + if (file == nullptr) + throw std::runtime_error("WriteCsv: File required"); + + const size_t numRows = arg->getNumRows(); + const size_t numCols = arg->getNumCols(); + + for (size_t r = 0; r < numRows; ++r) { + for (size_t c = 0; c < numCols; ++c) { + fprintf(file->identifier, + std::is_floating_point::value ? "%f" + : (std::is_same::value ? "%ld" : "%d"), + arg->get(r, c)); + if (c < (numCols - 1)) + fprintf(file->identifier, ","); + else + fprintf(file->identifier, "\n"); + } + } +} + +template +static inline void writeCsvMatrixBuiltin_inline(const Matrix* arg, const char* filename) { + File *file = openFileForWrite(filename); + dumpMatrixToCsv_inline(arg, file); + closeFile(file); +} + +extern "C" DAPHNE_PLUGIN_API void WriteCsv_Matrix(void const *arg, + const FileMetaData &fmd, + const char *filename, + IOOptions &opts, + DaphneContext *ctx) +{ + if(!arg) + throw std::runtime_error("WriteCsv_Matrix: arg == nullptr"); + + if(!fmd.isSingleValueType || fmd.schema.empty()) + throw std::runtime_error("WriteCsv_Matrix: expected single value type schema"); + + switch(fmd.schema[0]) { + case ValueTypeCode::F64: + writeCsvMatrixBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::F32: + writeCsvMatrixBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI64: + writeCsvMatrixBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI32: + writeCsvMatrixBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI64: + writeCsvMatrixBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI32: + writeCsvMatrixBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI8: + writeCsvMatrixBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI8: + writeCsvMatrixBuiltin_inline(reinterpret_cast*>(arg), filename); + break; + default: + throw std::runtime_error("WriteCsv_Matrix: unsupported VT in schema[0]"); + } +} + + +//######################################################################################### +// Daphne Binary read +//######################################################################################### +template struct ReadDaphne { + static void apply(DTRes *&res, const char *filename) = delete; +}; + +template struct ReadDaphne> { + static void apply(DenseMatrix *&res, const char *filename) { + std::ifstream f; + f.open(filename, std::ios::in | std::ios::binary); + // TODO: check f.good() + + auto deser = DaphneDeserializerChunks>( + &res, DaphneSerializer>::DEFAULT_SERIALIZATION_BUFFER_SIZE); + for (auto it = deser.begin(); it != deser.end(); ++it) { + it->first = DaphneSerializer>::DEFAULT_SERIALIZATION_BUFFER_SIZE; + f.read(it->second->data(), it->first); + // in case we read less than that + it->first = f.gcount(); + } + + f.close(); + return; + } +}; + +template struct ReadDaphne> { + static void apply(CSRMatrix *&res, const char *filename) { + std::ifstream f; + f.open(filename, std::ios::in | std::ios::binary); + // TODO: check f.good() + + auto deser = DaphneDeserializerChunks>( + &res, DaphneSerializer>::DEFAULT_SERIALIZATION_BUFFER_SIZE); + for (auto it = deser.begin(); it != deser.end(); ++it) { + it->first = DaphneSerializer>::DEFAULT_SERIALIZATION_BUFFER_SIZE; + f.read(it->second->data(), it->first); + // in case we read less than that + it->first = f.gcount(); + } + + f.close(); + return; + } +}; + +template <> struct ReadDaphne { + static void apply(Frame *&res, const char *filename) { + std::ifstream f; + f.open(filename, std::ios::in | std::ios::binary); + // TODO: check f.good() + + // read commong part of the header + DF_header h; + f.read((char *)&h, sizeof(h)); + + if (h.dt == (uint8_t)DF_data_t::Frame_t) { + // read rest of the header + ValueTypeCode *schema = new ValueTypeCode[h.nbcols]; + for (uint64_t c = 0; c < h.nbcols; c++) { + f.read((char *)&(schema[c]), sizeof(ValueTypeCode)); + } + + std::string *labels = new std::string[h.nbcols]; + for (uint64_t c = 0; c < h.nbcols; c++) { + uint16_t len; + f.read((char *)&len, sizeof(len)); + f.read((char *)&(labels[c]), len); + } + + DF_body b; + f.read((char *)&b, sizeof(b)); + // b is ignored for now - assumed to be 0,0 + // TODO: consider multiple blocks + // Assuming a dense block representation + // TODO: Consider alternative representations for frames + + if (res == nullptr) { + res = DataObjectFactory::create(h.nbrows, h.nbcols, schema, nullptr, false); + } + + uint8_t **rawCols = new uint8_t *[h.nbcols]; + for (size_t i = 0; i < h.nbcols; i++) { + rawCols[i] = reinterpret_cast(res->getColumnRaw(i)); + } + + for (size_t r = 0; r < h.nbrows; r++) { + for (size_t c = 0; c < h.nbcols; c++) { + switch (schema[c]) { + case ValueTypeCode::SI8: + int8_t val_si8; + f.read((char *)&val_si8, sizeof(val_si8)); + reinterpret_cast(rawCols[c])[r] = val_si8; + break; + case ValueTypeCode::SI32: + int32_t val_si32; + f.read((char *)&val_si32, sizeof(val_si32)); + reinterpret_cast(rawCols[c])[r] = val_si32; + break; + case ValueTypeCode::SI64: + int64_t val_si64; + f.read((char *)&val_si64, sizeof(val_si64)); + reinterpret_cast(rawCols[c])[r] = val_si64; + break; + case ValueTypeCode::UI8: + uint8_t val_ui8; + f.read((char *)&val_ui8, sizeof(val_ui8)); + reinterpret_cast(rawCols[c])[r] = val_ui8; + break; + case ValueTypeCode::UI32: + uint32_t val_ui32; + f.read((char *)&val_ui32, sizeof(val_ui32)); + reinterpret_cast(rawCols[c])[r] = val_ui32; + break; + case ValueTypeCode::UI64: + uint64_t val_ui64; + f.read((char *)&val_ui64, sizeof(val_ui64)); + reinterpret_cast(rawCols[c])[r] = val_ui64; + break; + case ValueTypeCode::F32: + float val_f32; + f.read((char *)&val_f32, sizeof(val_f32)); + reinterpret_cast(rawCols[c])[r] = val_f32; + break; + case ValueTypeCode::F64: + double val_f64; + f.read((char *)&val_f64, sizeof(val_f64)); + reinterpret_cast(rawCols[c])[r] = val_f64; + break; + default: + throw std::runtime_error("ReadDaphne::apply: unknown value type code"); + } + } + } + + delete[] rawCols; + delete[] schema; + } + f.close(); + return; + } +}; +// ---------- Dense ---------- +extern "C" DAPHNE_PLUGIN_API void ReadDaphne_Dense( + void* &res, const FileMetaData& fmd, const char* filename, IOOptions&, DaphneContext*) +{ + // default to strings (safe) + ValueTypeCode vt = (fmd.isSingleValueType && !fmd.schema.empty()) + ? fmd.schema[0] : ValueTypeCode::STR; + + switch (vt) { + case ValueTypeCode::F64: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::F32: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::SI64: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::SI32: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::UI64: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::UI32: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::UI8: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::SI8: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::STR: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + default: + // fallback: string + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + } +} + +// ---------- CSR ---------- +extern "C" DAPHNE_PLUGIN_API void ReadDaphne_CSR( + void* &res, const FileMetaData& fmd, const char* filename, IOOptions&, DaphneContext*) +{ + // default to double + ValueTypeCode vt = (fmd.isSingleValueType && !fmd.schema.empty()) + ? fmd.schema[0] : ValueTypeCode::F64; + + switch (vt) { + case ValueTypeCode::F64: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::F32: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::SI64: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::SI32: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + // enable unsigned if your serializer supports it: + case ValueTypeCode::UI64: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::UI32: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + case ValueTypeCode::STR: + throw std::runtime_error("ReadDaphne_CSR: sparse string matrices not supported"); + default: + ReadDaphne>::apply(reinterpret_cast*&>(res), filename); + break; + } +} + +// ---------- Frame ---------- +extern "C" DAPHNE_PLUGIN_API void ReadDaphne_Frame( + void* &res, const FileMetaData&, const char* filename, IOOptions&, DaphneContext*) +{ + // Frame header carries its own schema; fmd not required. + ReadDaphne::apply(reinterpret_cast(res), filename); +} + + +//######################################################################################### +// Daphne Binary write +//######################################################################################### + +template struct WriteDaphne { + static void apply(const DTArg *arg, const char *filename) = delete; +}; + +// **************************************************************************** +// Convenience function +// **************************************************************************** + +template void writeDaphne(const DTArg *arg, const char *filename) { + WriteDaphne::apply(arg, filename); +} + +// **************************************************************************** +// (Partial) template specializations for different data/value types +// **************************************************************************** + +// ---------------------------------------------------------------------------- +// DenseMatrix +// ---------------------------------------------------------------------------- + +template struct WriteDaphne> { + static void apply(const DenseMatrix *arg, const char *filename) { + std::ofstream f; + f.open(filename, std::ios::out | std::ios::binary); + // TODO: check f.good() + + auto ser = DaphneSerializerChunks>( + arg, DaphneSerializer>::DEFAULT_SERIALIZATION_BUFFER_SIZE); + for (auto it = ser.begin(); it != ser.end(); ++it) { + f.write(it->second->data(), it->first); + } + + f.close(); + return; + } +}; + +// ---------------------------------------------------------------------------- +// CSRMatrix +// ---------------------------------------------------------------------------- + +template struct WriteDaphne> { + static void apply(const CSRMatrix *arg, const char *filename) { + std::ofstream f; + f.open(filename, std::ios::out | std::ios::binary); + // TODO: check f.good() + + auto ser = DaphneSerializerChunks>( + arg, DaphneSerializer>::DEFAULT_SERIALIZATION_BUFFER_SIZE); + for (auto it = ser.begin(); it != ser.end(); ++it) { + f.write(it->second->data(), it->first); + } + + f.close(); + return; + } +}; + +// ---------------------------------------------------------------------------- +// Frame +// ---------------------------------------------------------------------------- + +template <> struct WriteDaphne { + static void apply(const Frame *arg, const char *filename) { + + std::ofstream f; + f.open(filename, std::ios::out | std::ios::binary); + // TODO: check f.good() + + // write header + DF_header h; + h.version = 1; + h.dt = (uint8_t)DF_data_t::Frame_t; + h.nbrows = (uint64_t)arg->getNumRows(); + h.nbcols = (uint64_t)arg->getNumCols(); + f.write((const char *)&h, sizeof(h)); + + const ValueTypeCode *schema = arg->getSchema(); + const std::string *labels = arg->getLabels(); + + for (uint64_t c = 0; c < h.nbcols; c++) { + f.write((const char *)&(schema[c]), sizeof(ValueTypeCode)); + } + + for (uint64_t c = 0; c < h.nbcols; c++) { + uint16_t len = (labels[c]).length(); + f.write((const char *)&len, sizeof(len)); + f.write((const char *)&(labels[c]), len); + } + + DF_body b; + b.rx = 0; + b.cx = 0; + f.write((char *)&b, sizeof(b)); + // TODO: consider multiple blocks + // Assuming a dense block representation + // TODO: Consider alternative representations for frames + + void *vals[h.nbcols]; + for (size_t c = 0; c < h.nbcols; c++) { + vals[c] = const_cast(arg->getColumnRaw(c)); + } + + for (size_t r = 0; r < h.nbrows; r++) { + for (size_t c = 0; c < h.nbcols; c++) { + switch (schema[c]) { + case ValueTypeCode::SI8: + f.write((char *)&(reinterpret_cast(vals[c])[r]), sizeof(int8_t)); + break; + case ValueTypeCode::SI32: + f.write((char *)&(reinterpret_cast(vals[c])[r]), sizeof(int32_t)); + break; + case ValueTypeCode::SI64: + f.write((char *)&(reinterpret_cast(vals[c])[r]), sizeof(int64_t)); + break; + case ValueTypeCode::UI8: + f.write((char *)&(reinterpret_cast(vals[c])[r]), sizeof(uint8_t)); + break; + case ValueTypeCode::UI32: + f.write((char *)&(reinterpret_cast(vals[c])[r]), sizeof(uint32_t)); + break; + case ValueTypeCode::UI64: + f.write((char *)&(reinterpret_cast(vals[c])[r]), sizeof(uint64_t)); + break; + case ValueTypeCode::F32: + f.write((char *)&(reinterpret_cast(vals[c])[r]), sizeof(float)); + break; + case ValueTypeCode::F64: + f.write((char *)&(reinterpret_cast(vals[c])[r]), sizeof(double)); + break; + default: + throw std::runtime_error("WriteDaphne::apply: unknown value type code"); + } + } + } + + f.close(); + return; + } +}; + + + +extern "C" DAPHNE_PLUGIN_API void WriteDaphne_Dense( + void const *arg, const FileMetaData &fmd, const char *filename, IOOptions &, DaphneContext *) +{ + if(!arg) throw std::runtime_error("WriteDaphne_Dense: arg == nullptr"); + if(!fmd.isSingleValueType || fmd.schema.empty()) + throw std::runtime_error("WriteDaphne_Dense: expected single value type schema"); + + switch (fmd.schema[0]) { + case ValueTypeCode::F64: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::F32: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI64: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI32: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI8: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI64: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI32: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI8: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::STR: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + default: + throw std::runtime_error("WriteDaphne_Dense: unsupported VT in schema[0]"); + } +} + +// ========================= CSRMatrix writers ======================= +extern "C" DAPHNE_PLUGIN_API void WriteDaphne_CSR( + void const *arg, const FileMetaData &fmd, const char *filename, IOOptions &, DaphneContext *) +{ + if(!arg) throw std::runtime_error("WriteDaphne_CSR: arg == nullptr"); + if(!fmd.isSingleValueType || fmd.schema.empty()) + throw std::runtime_error("WriteDaphne_CSR: expected single value type schema"); + + switch (fmd.schema[0]) { + case ValueTypeCode::F64: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::F32: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI64: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI32: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + // enable if your serializer handles them: + case ValueTypeCode::UI64: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI32: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::UI8: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::SI8: + writeDaphne(reinterpret_cast*>(arg), filename); + break; + case ValueTypeCode::STR: + throw std::runtime_error("WriteDaphne_CSR: sparse string matrices not supported"); + default: + throw std::runtime_error("WriteDaphne_CSR: unsupported VT in schema[0]"); + } +} + +// ============================== Frame writer ======================= +extern "C" DAPHNE_PLUGIN_API void WriteDaphne_Frame( + void const *arg, const FileMetaData &, const char *filename, IOOptions &, DaphneContext *) +{ + if(!arg) throw std::runtime_error("WriteDaphne_Frame: arg == nullptr"); + writeDaphne(reinterpret_cast(arg), filename); +} diff --git a/scripts/examples/extensions/builtInIO/BuiltInPlugIns.o b/scripts/examples/extensions/builtInIO/BuiltInPlugIns.o new file mode 100644 index 000000000..cd73683f1 Binary files /dev/null and b/scripts/examples/extensions/builtInIO/BuiltInPlugIns.o differ diff --git a/scripts/examples/extensions/builtInIO/BuiltIns.json b/scripts/examples/extensions/builtInIO/BuiltIns.json new file mode 100644 index 000000000..7798203cd --- /dev/null +++ b/scripts/examples/extensions/builtInIO/BuiltIns.json @@ -0,0 +1,134 @@ +[ + { + "extension": ".csv", + "readerFuncName": "readCsvFromPath_Frame", + "writerFuncName": "WriteCsv_Frame", + "libPath": "libBuiltInPlugIns.so", + "type": "Frame", + "engine": "builtin", + "options": { + "delimiter": ",", + "sorted": "false", + "hasHeader": "false", + "useCols": "" + } + }, + { + "extension": ".csv", + "readerFuncName": "readCsvFromPath_Dense", + "writerFuncName": "WriteCsv_Dense", + "libPath": "libBuiltInPlugIns.so", + "type": "DenseMatrix", + "engine": "builtin", + "options": { + "delimiter": ",", + "hasHeader": "false" + } + }, + { + "extension": ".csv", + "readerFuncName": "readCsvFromPath_CSR", + "writerFuncName": "WriteCsv_Matrix", + "libPath": "libBuiltInPlugIns.so", + "type": "CSRMatrix", + "engine": "builtin", + "options": { + "delimiter": ",", + "sorted": "false", + "hasHeader": "false" + } + }, + { + "extension": ".parquet", + "readerFuncName": "ReadParquet_Frame", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "Frame", + "engine": "builtin", + "options": { + "threads": "1" + } + }, + { + "extension": ".parquet", + "readerFuncName": "ReadParquet_CSR", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "CSRMatrix", + "engine": "builtin", + "options": { + "threads": "1" + } + }, + { + "extension": ".parquet", + "readerFuncName": "ReadParquet_Dense", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "DenseMatrix", + "engine": "builtin", + "options": { + "threads": "1" + } + }, + { + "extension": ".mtx", + "readerFuncName": "ReadMM_Dense", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "DenseMatrix", + "engine": "builtin", + "options": { + } + }, + { + "extension": ".mtx", + "readerFuncName": "ReadMM_Frame", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "Frame", + "engine": "builtin", + "options": { + } + }, + { + "extension": ".mtx", + "readerFuncName": "ReadMM_CSR", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "CSRMatrix", + "engine": "builtin", + "options": { + } + }, + { + "extension": ".dbdf", + "readerFuncName": "ReadDaphne_Dense", + "writerFuncName": "WriteDaphne_Dense", + "libPath": "libBuiltInPlugIns.so", + "type": "DenseMatrix", + "engine": "builtin", + "options": { + } + }, + { + "extension": ".dbdf", + "readerFuncName": "ReadDaphne_CSR", + "writerFuncName": "WriteDaphne_CSR", + "libPath": "libBuiltInPlugIns.so", + "type": "CSRMatrix", + "engine": "builtin", + "options": { + } + }, + { + "extension": ".dbdf", + "readerFuncName": "ReadDaphne_Frame", + "writerFuncName": "WriteDaphne_Frame", + "libPath": "libBuiltInPlugIns.so", + "type": "Frame", + "engine": "builtin", + "options": { + } + } +] \ No newline at end of file diff --git a/scripts/examples/extensions/builtInIO/Makefile b/scripts/examples/extensions/builtInIO/Makefile new file mode 100644 index 000000000..1ebd8519c --- /dev/null +++ b/scripts/examples/extensions/builtInIO/Makefile @@ -0,0 +1,40 @@ +# Paths +DAPHNE_ROOT := /home/yazan/daphneFork/daphne +TP_INC_DIR := $(DAPHNE_ROOT)/thirdparty/installed/include +TP_LIB_DIR := $(DAPHNE_ROOT)/thirdparty/installed/lib +DS_LIB_DIR := $(DAPHNE_ROOT)/build/src/runtime/local/datastructures + +# Compiler & flags +CXX := g++ +CXXFLAGS := -std=c++17 -O3 -march=native -DNDEBUG -flto \ + -fPIC -fvisibility=hidden -fno-semantic-interposition -fno-plt \ + -ffunction-sections -fdata-sections \ + -I$(DAPHNE_ROOT)/src \ + -I$(TP_INC_DIR) \ + -I$(DAPHNE_ROOT)/src/runtime/local/io \ + -DSPDLOG_FMT_EXTERNAL + +# Linker & libraries +LDFLAGS := -shared -Wl,-rpath=$(TP_LIB_DIR) -Wl,--as-needed -Wl,-O2 \ + -Wl,--gc-sections -Wl,-Bsymbolic +LDLIBS := \ + -L$(DS_LIB_DIR) -lDataStructures \ + -L$(TP_LIB_DIR) -larrow -lparquet -lspdlog -lfmt -lLLVMSupport + +# Source files +SRC := BuiltInPlugIns.cpp +OBJ := $(SRC:.cpp=.o) +LIB_NAME := libBuiltInPlugIns.so + +.PHONY: all clean + +all: $(LIB_NAME) + +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +$(LIB_NAME): $(OBJ) + $(CXX) $(LDFLAGS) $^ -o $@ $(LDLIBS) + +clean: + rm -f $(OBJ) $(LIB_NAME) diff --git a/scripts/examples/extensions/builtInIO/ReadParquet1.parquet b/scripts/examples/extensions/builtInIO/ReadParquet1.parquet new file mode 100644 index 000000000..d95dc4e93 Binary files /dev/null and b/scripts/examples/extensions/builtInIO/ReadParquet1.parquet differ diff --git a/scripts/examples/extensions/builtInIO/ReadParquet1.parquet.meta b/scripts/examples/extensions/builtInIO/ReadParquet1.parquet.meta new file mode 100644 index 000000000..00e05101c --- /dev/null +++ b/scripts/examples/extensions/builtInIO/ReadParquet1.parquet.meta @@ -0,0 +1,6 @@ +{ + "numRows": 2, + "numCols": 4, + "valueType": "f64", + "numNonZeros": 1 +} \ No newline at end of file diff --git a/scripts/examples/extensions/builtInIO/benchmark-defaults.json b/scripts/examples/extensions/builtInIO/benchmark-defaults.json new file mode 100644 index 000000000..ace3d9400 --- /dev/null +++ b/scripts/examples/extensions/builtInIO/benchmark-defaults.json @@ -0,0 +1,45 @@ +[ + { + "extension": ".parquet", + "readerFuncName": "ReadParquet_Dense", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "DenseMatrix", + "options": { + "delimiter": "," + } + }, + { + "extension": ".parquet", + "readerFuncName": "ReadParquet_Frame", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "Frame", + "options": { + "delimiter": "," + } + }, + { + "extension": ".csv", + "readerFuncName": "readCsvFromPath_Frame", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "Frame", + "options": { + "delimiter": ",", + "sorted": "false" + } + }, + { + "extension": ".csv", + "readerFuncName": "readCsvFromPath_Dense", + "writerFuncName": "", + "libPath": "libBuiltInPlugIns.so", + "type": "DenseMatrix", + "options": { + "delimiter": ",", + "sorted": "false", + "forceString": "true" + } + } +] diff --git a/scripts/examples/extensions/builtInIO/libBuiltInPlugIns.so b/scripts/examples/extensions/builtInIO/libBuiltInPlugIns.so new file mode 100755 index 000000000..ba0c5686a Binary files /dev/null and b/scripts/examples/extensions/builtInIO/libBuiltInPlugIns.so differ diff --git a/scripts/examples/extensions/builtInIO/sample.mtx b/scripts/examples/extensions/builtInIO/sample.mtx new file mode 100644 index 000000000..14ae8cc27 --- /dev/null +++ b/scripts/examples/extensions/builtInIO/sample.mtx @@ -0,0 +1,8 @@ +%%MatrixMarket matrix coordinate integer general +4 4 6 +1 1 10 +2 4 20 +3 2 30 +4 1 40 +4 4 50 +2 3 60 \ No newline at end of file diff --git a/scripts/examples/extensions/builtInIO/sample.mtx.meta b/scripts/examples/extensions/builtInIO/sample.mtx.meta new file mode 100644 index 000000000..c42edd853 --- /dev/null +++ b/scripts/examples/extensions/builtInIO/sample.mtx.meta @@ -0,0 +1,6 @@ +{ + "numRows": 4, + "numCols": 4, + "valueType": "f64", + "numNonZeros": 10 +} diff --git a/scripts/examples/extensions/csv/CSVPlugIn.cpp b/scripts/examples/extensions/csv/CSVPlugIn.cpp new file mode 100644 index 000000000..a2f3d4993 --- /dev/null +++ b/scripts/examples/extensions/csv/CSVPlugIn.cpp @@ -0,0 +1,711 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "runtime/local/datastructures/DataObjectFactory.h" +#include "runtime/local/datastructures/DenseMatrix.h" +#include "runtime/local/datastructures/Structure.h" +#include "runtime/local/datastructures/Frame.h" +#include "runtime/local/kernels/CreateFrame.h" +#include "runtime/local/io/FileMetaData.h" +#include "runtime/local/io/FileIORegistry.h" + + +//======================= file mapping ======================= +// ------------------------ small mmap helper ------------------------ +struct MappedFile { + const char* data = nullptr; size_t size = 0; int fd = -1; void* map = MAP_FAILED; + static MappedFile open(const char* path) { + MappedFile m; + m.fd = ::open(path, O_RDONLY); + if (m.fd < 0) throw std::runtime_error(std::string("open: ") + path); + struct stat st{}; if (fstat(m.fd, &st) != 0) { int e=errno; ::close(m.fd); throw std::system_error(e, std::generic_category(), "fstat"); } + m.size = static_cast(st.st_size); + if (m.size) { + m.map = ::mmap(nullptr, m.size, PROT_READ, MAP_PRIVATE, m.fd, 0); + if (m.map == MAP_FAILED) { int e=errno; ::close(m.fd); throw std::system_error(e, std::generic_category(), "mmap"); } + m.data = static_cast(m.map); + } + return m; + } + ~MappedFile(){ if(map!=MAP_FAILED) ::munmap(map,size); if(fd>=0) ::close(fd); } +}; + +static inline size_t skip_header(const char* base, size_t n) { + const void* nl = memchr(base, '\n', n); + return nl ? (static_cast(nl) - base) + 1 : n; +} + +// ultra-cheap parsers --------------------------------------------------- +static inline double p_f64(const char* b, const char* e){ char* ep=nullptr; return std::strtod(b, &ep); } +static inline int64_t p_i64(const char* b, const char* e){ int64_t v=0; auto r=std::from_chars(b,e,v,10); if(r.ec==std::errc()) return v; char* ep=nullptr; return std::strtoll(b,&ep,10); } +static inline int32_t p_i32(const char* b, const char* e){ int32_t v=0; auto r=std::from_chars(b,e,v,10); if(r.ec==std::errc()) return v; char* ep=nullptr; return std::strtol(b,&ep,10); } +static inline uint64_t p_u64(const char* b, const char* e){ uint64_t v=0; auto r=std::from_chars(b,e,v,10); if(r.ec==std::errc()) return v; char* ep=nullptr; return std::strtoull(b,&ep,10); } + +//======================= small helpers ======================= + +static inline int64_t parse_i64_token(const char* b, const char* e) { + int64_t out = 0; + auto res = std::from_chars(b, e, out, 10); + if (res.ec == std::errc()) return out; + char* ep = nullptr; return static_cast(std::strtoll(b, &ep, 10)); +} +static inline int32_t parse_i32_token(const char* b, const char* e) { + int32_t out = 0; + auto res = std::from_chars(b, e, out, 10); + if (res.ec == std::errc()) return out; + char* ep = nullptr; return static_cast(std::strtol(b, &ep, 10)); +} +static inline uint64_t parse_u64_token(const char* b, const char* e) { + uint64_t out = 0; + auto res = std::from_chars(b, e, out, 10); + if (res.ec != std::errc()) { + char* ep = nullptr; + out = static_cast(std::strtoull(b, &ep, 10)); + } + return out; +} +static inline double parse_f64_token(const char* b, const char* e) { + char* ep = nullptr; + return std::strtod(b, &ep); +} + +static inline size_t header_end(const char* p, size_t n) { + const void* nl = memchr(p, '\n', n); + if (!nl) return n; + size_t i = static_cast(nl) - p; + return std::min(i + 1, n); // skip '\n' +} +static inline void trim_token(const char*& b, const char*& e) { + while (b < e && (*b == ' ' || *b == '\t')) ++b; + while (e > b && (e[-1] == ' ' || e[-1] == '\t' || e[-1] == '\r')) --e; +} + +static inline const char* find_next_sep_memchr(const char* p, const char* end, char delim, char& which) { + const size_t len = static_cast(end - p); + const char* pd = static_cast(memchr(p, delim, len)); + const char* pn = static_cast(memchr(p, '\n', len)); + if (pd && pn) { which = (pd < pn) ? 'd' : 'n'; return (pd < pn) ? pd : pn; } + if (pd) { which = 'd'; return pd; } + if (pn) { which = 'n'; return pn; } + which = 0; return end; +} + +static inline bool detect_likely_no_trim(const char* p, const char* end, char delim, size_t cols, size_t rowsToSample = 8) { + size_t seen = 0; const char* cur = p; + while (seen < rowsToSample && cur < end) { + for (size_t c = 0; c < cols; ++c) { + char w=0; const char* sep = find_next_sep_memchr(cur, end, delim, w); + const char* b=cur; const char* e=sep; + bool leftWS = (b < e) && (*b == ' ' || *b == '\t'); + bool rightWS= (e > b) && (e[-1]==' '||e[-1]=='\t'||e[-1]=='\r'); + if (leftWS || rightWS) return false; + cur = (w=='d') ? sep+1 : ((w=='n' && sep +static void parse_numeric_single(const char* p, const char* end, + size_t rows, size_t cols, char delim, + NumT* out, bool noTrim) +{ + for (size_t r = 0; r < rows; ++r) { + for (size_t c = 0; c + 1 < cols; ++c) { + char w=0; const char* sep = find_next_sep_memchr(p, end, delim, w); + if (w != 'd') throw std::runtime_error("CSV: not enough columns"); + const char* b=p; const char* q=sep; if (!noTrim) trim_token(b,q); + if constexpr (std::is_floating_point_v) out[r*cols+c] = static_cast(parse_f64_token(b,q)); + else if constexpr (std::is_signed_v) out[r*cols+c] = static_cast(parse_i64_token(b,q)); + else out[r*cols+c] = static_cast(parse_u64_token(b,q)); + p = sep + 1; + } + char w=0; const char* sep = find_next_sep_memchr(p, end, delim, w); + if (w=='d') throw std::runtime_error("CSV: too many columns"); + const char* b=p; const char* q=sep; if (!noTrim) trim_token(b,q); + if constexpr (std::is_floating_point_v) out[r*cols+cols-1] = static_cast(parse_f64_token(b,q)); + else if constexpr (std::is_signed_v) out[r*cols+cols-1] = static_cast(parse_i64_token(b,q)); + else out[r*cols+cols-1] = static_cast(parse_u64_token(b,q)); + p = (w=='n' && sep +static inline void build_line_index_t(const char* base, size_t n, size_t dataStart, + size_t rows, std::vector& lineStart) { + lineStart.clear(); lineStart.reserve(rows+1); + size_t i = dataStart; + if (dataStart > std::numeric_limits::max()) + throw std::runtime_error("CSV: need 64-bit offsets"); + lineStart.push_back(static_cast(i)); + while (lineStart.size() < rows && i < n) { + const void* nl = memchr(base+i, '\n', n-i); + if (!nl) break; + size_t pos = static_cast(nl) - base; + size_t next = pos + 1; + if (next > std::numeric_limits::max()) + throw std::runtime_error("CSV: need 64-bit offsets"); + lineStart.push_back(static_cast(next)); + i = next; + } + size_t sentinel; + if (i < n) { + const void* nl = memchr(base+i, '\n', n-i); + sentinel = nl ? (static_cast(nl) - base) : n; + } else sentinel = n; + if (sentinel > std::numeric_limits::max()) + throw std::runtime_error("CSV: need 64-bit offsets"); + lineStart.push_back(static_cast(sentinel)); + if (lineStart.size() != rows + 1) + throw std::runtime_error("CSV: could not index requested rows"); +} + +template +static void parse_numeric_rows_parallel(const char* base, const std::vector& rowStarts, + size_t rows, size_t cols, char delim, + NumT* out, size_t threads, bool noTrim) +{ + threads = std::max(1, std::min(threads, rows ? rows : 1)); + auto worker = [&](size_t r0, size_t r1){ + for (size_t r = r0; r < r1; ++r) { + const char* p = base + rowStarts[r]; + const char* end = base + rowStarts[r+1]; + for (size_t c=0;c+1) out[r*cols+c] = static_cast(parse_f64_token(b,q)); + else if constexpr (std::is_signed_v) out[r*cols+c] = static_cast(parse_i64_token(b,q)); + else out[r*cols+c] = static_cast(parse_u64_token(b,q)); + p = sep+1; + } + char w=0; const char* sep = find_next_sep_memchr(p,end,delim,w); + if (w=='d') throw std::runtime_error("CSV: too many columns"); + const char* b=p; const char* q=sep; if (!noTrim) trim_token(b,q); + if constexpr (std::is_floating_point_v) out[r*cols+cols-1] = static_cast(parse_f64_token(b,q)); + else if constexpr (std::is_signed_v) out[r*cols+cols-1] = static_cast(parse_i64_token(b,q)); + else out[r*cols+cols-1] = static_cast(parse_u64_token(b,q)); + } + }; + + std::vector pool; + const size_t chunk = (rows + threads - 1) / threads; + size_t r0 = 0; + for (size_t t=0; t buf; + size_t pos = 0; + + explicit FastCSVOut(FILE* f_, size_t cap = 32u << 20) : f(f_), buf(cap) { + setvbuf(f, nullptr, _IOFBF, 1 << 20); + } + ~FastCSVOut() { flush(); } + + inline void flush() { + if (pos) { std::fwrite(buf.data(), 1, pos, f); pos = 0; } + } + inline void ensure(size_t n) { + if (pos + n > buf.size()) flush(); + if (n > buf.size()) buf.resize(std::max(buf.size()*2, n)); + } + inline void write(const char* p, size_t n) { + if (n > buf.size()) { flush(); std::fwrite(p, 1, n, f); return; } + ensure(n); memcpy(buf.data()+pos, p, n); pos += n; + } + inline void putc(char c) { + if (pos == buf.size()) flush(); + buf[pos++] = c; + } + + template, int> = 0> + inline void append_num(Int v) { + char tmp[32]; + auto [p, ec] = std::to_chars(tmp, tmp + sizeof(tmp), v); + if (ec != std::errc()) throw std::runtime_error("to_chars(int) failed"); + write(tmp, static_cast(p - tmp)); + } + +#if defined(__cpp_lib_to_chars) && __cpp_lib_to_chars >= 201611L + template, int> = 0> + inline void append_num(FP v) { + char tmp[64]; + auto [p, ec] = std::to_chars(tmp, tmp + sizeof(tmp), v, std::chars_format::general); + if (ec != std::errc()) { + int n = std::snprintf(tmp, sizeof(tmp), std::is_same_v ? "%.17g" : "%.9g", v); + write(tmp, static_cast(n)); + } else write(tmp, static_cast(p - tmp)); + } +#else + template, int> = 0> + inline void append_num(FP v) { + char tmp[64]; + int n = std::snprintf(tmp, sizeof(tmp), std::is_same_v ? "%.17g" : "%.9g", v); + write(tmp, static_cast(n)); + } +#endif +}; + +//======================= plugin API ======================= +namespace { +// ------------------------ NEW FRAME READER ------------------------ +static void csv_read_frame_impl(Frame*& outFrame, + const FileMetaData& fmd, + const char* filename, + IOOptions& opts, + DaphneContext* ctx) +{ + const size_t R = fmd.numRows, C = fmd.numCols; + if (!R || !C) throw std::runtime_error("CSV(Frame): numRows/numCols required"); + if (fmd.schema.size() < C) throw std::runtime_error("CSV(Frame): schema missing"); + if (fmd.labels.size() < C) throw std::runtime_error("CSV(Frame): labels missing"); + + // options + bool hasHeader=false; char delim=','; + size_t threads = std::thread::hardware_concurrency(); if(!threads) threads=4; + if (auto it=opts.extra.find("hasHeader"); it!=opts.extra.end()) hasHeader = (it->second=="true"||it->second=="1"); + if (auto it=opts.extra.find("delimiter"); it!=opts.extra.end()) { if (it->second.size()!=1) throw std::runtime_error("CSV(Frame): delimiter must be 1 char"); delim = it->second[0]; } + if (auto it=opts.extra.find("threads"); it!=opts.extra.end()) threads = std::max(1, std::stoul(it->second)); + + // projection: useCols + std::vector wanted; wanted.reserve(C); + std::vector labels; labels.reserve(C); + if (auto it=opts.extra.find("useCols"); it!=opts.extra.end()) { + std::unordered_map L2I; L2I.reserve(C*2); + for(size_t c=0;csecond; size_t p0=0; + while (p0 <= s.size()) { + size_t p1 = s.find(',', p0); + std::string key = s.substr(p0, p1==std::string::npos ? std::string::npos : p1-p0); + // trim + size_t a=0,b=key.size(); while(aa && (key[b-1]==' '||key[b-1]=='\t')) --b; + if (b>a) { + auto f = L2I.find(key.substr(a,b-a)); + if (f==L2I.end()) throw std::runtime_error("CSV(Frame): unknown label in useCols: "+key); + wanted.push_back(f->second); + labels.push_back(fmd.labels[f->second].c_str()); + } + if (p1==std::string::npos) break; p0 = p1+1; + } + } + if (wanted.empty()) { + wanted.resize(C); std::iota(wanted.begin(), wanted.end(), 0); + labels.resize(C); for(size_t c=0;c isWanted(C,0); std::vector posOf(C,0); + for (size_t k=0;k= n) throw std::runtime_error("CSV(Frame): no data region"); + + // decide blocks by rows; find T cut points with a single cheap scan + threads = std::min(threads, R); + const size_t rowsPerBlk = (R + threads - 1) / threads; + std::vector rCuts; rCuts.reserve(threads+1); + std::vector bCuts; bCuts.reserve(threads+1); + rCuts.push_back(0); bCuts.push_back(dataStart); + + size_t rCount = 0, nextCut = rowsPerBlk; + const char* p = base + dataStart; + const char* end = base + n; + while (p < end && rCuts.size() < threads) { + const void* nl = memchr(p, '\n', static_cast(end - p)); + if (!nl) break; + p = static_cast(nl) + 1; + if (++rCount == nextCut) { + rCuts.push_back(rCount); + bCuts.push_back(static_cast(p - base)); + nextCut += rowsPerBlk; + } + } + rCuts.push_back(R); + bCuts.push_back(n); + const size_t B = rCuts.size() - 1; + + // allocate only wanted columns + std::vector colsOut(W,nullptr); + std::vector baseOut(W,nullptr); + for (size_t k=0;k>(R,1,true); colsOut[k]=m; baseOut[k]=m->getValues(); break; } + case ValueTypeCode::F32: { auto* m=DataObjectFactory::create>(R,1,true); colsOut[k]=m; baseOut[k]=m->getValues(); break; } + case ValueTypeCode::SI64: { auto* m=DataObjectFactory::create>(R,1,true); colsOut[k]=m; baseOut[k]=m->getValues(); break; } + case ValueTypeCode::SI32: { auto* m=DataObjectFactory::create>(R,1,true); colsOut[k]=m; baseOut[k]=m->getValues(); break; } + case ValueTypeCode::UI64: { auto* m=DataObjectFactory::create>(R,1,true);colsOut[k]=m; baseOut[k]=m->getValues(); break; } + case ValueTypeCode::UI32: { auto* m=DataObjectFactory::create>(R,1,true);colsOut[k]=m; baseOut[k]=m->getValues(); break; } + case ValueTypeCode::SI8: { auto* m=DataObjectFactory::create>(R,1,true); colsOut[k]=m; baseOut[k]=m->getValues(); break; } + case ValueTypeCode::UI8: { auto* m=DataObjectFactory::create>(R,1,true); colsOut[k]=m; baseOut[k]=m->getValues(); break; } + case ValueTypeCode::FIXEDSTR16: { auto*m=DataObjectFactory::create>(R,1,true); colsOut[k]=m; baseOut[k]=m->getValues(); break; } + default: { auto* m=DataObjectFactory::create>(R,1,true); colsOut[k]=m; baseOut[k]=m->getValues(); break; } + } + } + + // worker: parse rows [r0, r1) from byte span [b0, b1) + auto worker = [&](size_t bid){ + size_t r0 = rCuts[bid], r1 = rCuts[bid+1]; + const char* q = base + bCuts[bid]; + const char* qend= base + bCuts[bid+1]; + + for (size_t r = r0; r < r1; ++r) { + // For each column: walk to delim or '\n'; write if wanted. + for (size_t c = 0; c < C; ++c) { + const char* tok_b = q; + // tight scan: no memchr, no trim + while (q < qend && *q != delim && *q != '\n') ++q; + const char* tok_e = q; + + if (isWanted[c]) { + size_t k = posOf[c]; + switch (fmd.schema[c]) { + case ValueTypeCode::F64: static_cast(baseOut[k])[r] = p_f64(tok_b, tok_e); break; + case ValueTypeCode::F32: static_cast(baseOut[k])[r] = static_cast(p_f64(tok_b, tok_e)); break; + case ValueTypeCode::SI64: static_cast(baseOut[k])[r] = p_i64(tok_b, tok_e); break; + case ValueTypeCode::SI32: static_cast(baseOut[k])[r] = p_i32(tok_b, tok_e); break; + case ValueTypeCode::UI64: static_cast(baseOut[k])[r] = p_u64(tok_b, tok_e); break; + case ValueTypeCode::UI32: static_cast(baseOut[k])[r] = static_cast(p_u64(tok_b, tok_e)); break; + case ValueTypeCode::SI8: static_cast(baseOut[k])[r] = static_cast(p_i64(tok_b, tok_e)); break; + case ValueTypeCode::UI8: static_cast(baseOut[k])[r] = static_cast(p_u64(tok_b, tok_e)); break; + case ValueTypeCode::FIXEDSTR16: { + // Trim trailing '\r' just in case (Windows line endings) + const char* endTok = tok_e; + if (endTok > tok_b && endTok[-1] == '\r') + --endTok; + + // Construct a std::string first, because FixedStr16 only takes that + std::string tmp(tok_b, endTok); + reinterpret_cast(baseOut[k])[r] = FixedStr16(tmp); + break; + } + + default: static_cast(baseOut[k])[r].assign(tok_b, tok_e); break; + } + } + + // advance over separator if present + if (q < qend) { + char ch = *q++; + if (ch == '\n') break; // end of row + // else ch==delim, continue to next column + } + } + + } + }; + + // run workers + std::vector pool; pool.reserve(B); + for (size_t b=0; bsecond == "true" || it->second == "1"); + if (auto it = opts.extra.find("delimiter"); it != opts.extra.end()) { + if (it->second.size() != 1) throw std::runtime_error("CSV: delimiter must be 1 char"); + delim = it->second[0]; + } + if (auto it = opts.extra.find("threads"); it != opts.extra.end()) + threads = std::max(1, std::stoul(it->second)); + + // type rule for homogeneous matrix + ValueTypeCode vtc = ValueTypeCode::STR; + if (fmd.isSingleValueType && !fmd.schema.empty()) + vtc = fmd.schema[0]; + + const size_t rows = fmd.numRows, cols = fmd.numCols; + if (rows == 0 || cols == 0) throw std::runtime_error("CSV: numRows/numCols required"); + + MappedFile mf = MappedFile::open(filename); + if (mf.size == 0) throw std::runtime_error("CSV: empty file"); + const char* base = mf.data; const size_t n = mf.size; + const size_t dataStart = hasHeader ? header_end(base, n) : 0; + if (dataStart >= n) throw std::runtime_error("CSV: no data region"); + + const char* p0 = base + dataStart; const char* e0 = base + n; + const bool noTrim = detect_likely_no_trim(p0, e0, delim, cols); + + if (threads == 1) { + const char* p = p0; const char* end = e0; + switch (vtc) { + case ValueTypeCode::F64: { auto* m = DataObjectFactory::create>(rows, cols, false); parse_numeric_single(p,end,rows,cols,delim,m->getValues(),noTrim); res = m; return; } + case ValueTypeCode::F32: { auto* m = DataObjectFactory::create>(rows, cols, false); parse_numeric_single(p,end,rows,cols,delim,m->getValues(),noTrim); res = m; return; } + case ValueTypeCode::SI64: { auto* m = DataObjectFactory::create>(rows, cols, false); parse_numeric_single(p,end,rows,cols,delim,m->getValues(),noTrim);res = m; return; } + case ValueTypeCode::SI32: { auto* m = DataObjectFactory::create>(rows, cols, false); parse_numeric_single(p,end,rows,cols,delim,m->getValues(),noTrim);res = m; return; } + case ValueTypeCode::SI8: { auto* m = DataObjectFactory::create>(rows, cols, false); parse_numeric_single(p,end,rows,cols,delim,m->getValues(),noTrim); res = m; return; } + case ValueTypeCode::UI64: { auto* m = DataObjectFactory::create>(rows, cols, false); parse_numeric_single(p,end,rows,cols,delim,m->getValues(),noTrim);res = m; return; } + case ValueTypeCode::UI32: { auto* m = DataObjectFactory::create>(rows, cols, false); parse_numeric_single(p,end,rows,cols,delim,m->getValues(),noTrim);res = m; return; } + case ValueTypeCode::UI8: { auto* m = DataObjectFactory::create>(rows, cols, false); parse_numeric_single(p,end,rows,cols,delim,m->getValues(),noTrim); res = m; return; } + default: { auto* m = DataObjectFactory::create>(rows, cols, false);parse_string_single(p,end,rows,cols,delim,m->getValues(),noTrim); res = m; return; } + } + } + + const bool canUse32 = (n <= std::numeric_limits::max()); + if (canUse32) { + std::vector rowStarts32; build_line_index_t(base, n, dataStart, rows, rowStarts32); + switch (vtc) { + case ValueTypeCode::F64: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts32,rows,cols,delim,m->getValues(),threads,noTrim); res=m; return; } + case ValueTypeCode::F32: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts32,rows,cols,delim,m->getValues(),threads,noTrim); res=m; return; } + case ValueTypeCode::SI64: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts32,rows,cols,delim,m->getValues(),threads,noTrim);res=m; return; } + case ValueTypeCode::SI32: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts32,rows,cols,delim,m->getValues(),threads,noTrim);res=m; return; } + case ValueTypeCode::SI8: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts32,rows,cols,delim,m->getValues(),threads,noTrim); res=m; return; } + case ValueTypeCode::UI64: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts32,rows,cols,delim,m->getValues(),threads,noTrim);res=m; return; } + case ValueTypeCode::UI32: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts32,rows,cols,delim,m->getValues(),threads,noTrim);res=m; return; } + case ValueTypeCode::UI8: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts32,rows,cols,delim,m->getValues(),threads,noTrim); res=m; return; } + default: { const char* p=base+dataStart; const char* e=base+n; auto* m=DataObjectFactory::create>(rows, cols, false); parse_string_single(p,e,rows,cols,delim,m->getValues(),noTrim); res=m; return; } + } + } else { + std::vector rowStarts; build_line_index_t(base, n, dataStart, rows, rowStarts); + switch (vtc) { + case ValueTypeCode::F64: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts,rows,cols,delim,m->getValues(),threads,noTrim); res=m; return; } + case ValueTypeCode::F32: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts,rows,cols,delim,m->getValues(),threads,noTrim); res=m; return; } + case ValueTypeCode::SI64: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts,rows,cols,delim,m->getValues(),threads,noTrim);res=m; return; } + case ValueTypeCode::SI32: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts,rows,cols,delim,m->getValues(),threads,noTrim);res=m; return; } + case ValueTypeCode::SI8: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts,rows,cols,delim,m->getValues(),threads,noTrim); res=m; return; } + case ValueTypeCode::UI64: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts,rows,cols,delim,m->getValues(),threads,noTrim);res=m; return; } + case ValueTypeCode::UI32: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts,rows,cols,delim,m->getValues(),threads,noTrim);res=m; return; } + case ValueTypeCode::UI8: { auto* m=DataObjectFactory::create>(rows, cols, false); parse_numeric_rows_parallel(base,rowStarts,rows,cols,delim,m->getValues(),threads,noTrim); res=m; return; } + default: { const char* p=base+dataStart; const char* e=base+n; auto* m=DataObjectFactory::create>(rows, cols, false); parse_string_single(p,e,rows,cols,delim,m->getValues(),noTrim); res=m; return; } + } + } +} + +// ---------- MATRIX WRITER ---------- + +static void csv_write_impl(const Structure* matrix, const FileMetaData& /*fmd*/, const char* filename, IOOptions& opts, DaphneContext* /*ctx*/) +{ + char delim = ','; + if (auto it = opts.extra.find("delimiter"); it != opts.extra.end()) { + const std::string &d = it->second; + if (d.size() != 1) throw std::runtime_error("csv_write: 'delimiter' must be a single character"); + delim = d[0]; + } + + FILE* f = std::fopen(filename, "wb"); + if (!f) throw std::runtime_error(std::string("Failed to open for writing: ") + filename); + FastCSVOut out(f); + + auto write_rows = [&](auto* m) { + using T = std::decay_tgetValues())>; + const size_t R = m->getNumRows(), C = m->getNumCols(); + const T* __restrict v = m->getValues(); + const T* p = v; + for (size_t i=0;i) { + out.write(p->data(), p->size()); + } else if constexpr (std::is_integral_v) { + out.append_num(*p); + } else if constexpr (std::is_floating_point_v) { + out.append_num(*p); + } else { + static_assert(!sizeof(T*), "csv_write: unsupported element type"); + } + if (j + 1 < C) out.putc(delim); + } + out.putc('\n'); + } + }; + + if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else if (auto *m = dynamic_cast*>(matrix)) write_rows(m); + else { std::fclose(f); throw std::runtime_error("csv_write: unsupported matrix type"); } + + out.flush(); std::fclose(f); +} + +// ---------- FRAME WRITER ---------- + +static void csv_write_frame_impl(const Frame* fr, + const FileMetaData& fmd, + const char* filename, + IOOptions& opts, + DaphneContext* /*ctx*/) +{ + if (!fr) throw std::runtime_error("csv_write_frame: null frame"); + const size_t R = fr->getNumRows(), C = fr->getNumCols(); + if (C == 0) throw std::runtime_error("csv_write_frame: zero columns"); + + bool hasHeader = false; + char delim = ','; + if (auto it = opts.extra.find("hasHeader"); it != opts.extra.end()) + hasHeader = (it->second == "true" || it->second == "1"); + if (auto it = opts.extra.find("delimiter"); it != opts.extra.end()) { + const std::string& d = it->second; + if (d.size() != 1) throw std::runtime_error("csv_write_frame: 'delimiter' must be a single character"); + delim = d[0]; + } + + FILE* f = std::fopen(filename, "wb"); + if (!f) throw std::runtime_error(std::string("csv_write_frame: failed to open: ") + filename); + FastCSVOut out(f); + + if (hasHeader) { + if (fmd.labels.size() < C) + throw std::runtime_error("csv_write_frame: hasHeader=true but labels < numCols"); + for (size_t c=0;c col(C, nullptr); + std::vector typ(C); + for (size_t c=0;cgetColumnRaw(c); + typ[c] = (fmd.schema.size() > c) ? fmd.schema[c] : fr->getColumnType(c); + } + + for (size_t r=0;r(reinterpret_cast(base)[r])); break; + case ValueTypeCode::SI32: out.append_num(reinterpret_cast(base)[r]); break; + case ValueTypeCode::SI64: out.append_num(reinterpret_cast(base)[r]); break; + case ValueTypeCode::UI8: out.append_num(static_cast(reinterpret_cast(base)[r])); break; + case ValueTypeCode::UI32: out.append_num(reinterpret_cast(base)[r]); break; + case ValueTypeCode::UI64: out.append_num(reinterpret_cast(base)[r]); break; + case ValueTypeCode::F32: out.append_num(reinterpret_cast(base)[r]); break; + case ValueTypeCode::F64: out.append_num(reinterpret_cast(base)[r]); break; + case ValueTypeCode::STR: { + const auto& s = reinterpret_cast(base)[r]; + out.write(s.data(), s.size()); + break; + } + default: + std::fclose(f); + throw std::runtime_error("csv_write_frame: unknown value type"); + } + if (c + 1 < C) out.putc(delim); + } + out.putc('\n'); + } + + out.flush(); std::fclose(f); +} +} + + + +// export macro +#if defined(__GNUC__) || defined(__clang__) +# define DAPHNE_PLUGIN_API __attribute__((visibility("default"))) +#else +# define DAPHNE_PLUGIN_API +#endif + +// Only the 4 entry points use extern "C" +extern "C" DAPHNE_PLUGIN_API +void csv_read(Structure*& res, + const FileMetaData& fmd, + const char* filename, + IOOptions& opts, + DaphneContext* ctx) { + csv_read_impl(res, fmd, filename, opts, ctx); // 3) thin wrapper +} + +extern "C" DAPHNE_PLUGIN_API +void csv_read_frame(Frame*& outFrame, + const FileMetaData& fmd, + const char* filename, + IOOptions& opts, + DaphneContext* ctx) { + csv_read_frame_impl(outFrame, fmd, filename, opts, ctx); +} + +extern "C" DAPHNE_PLUGIN_API +void csv_write(const Structure* matrix, + const FileMetaData& fmd, + const char* filename, + IOOptions& opts, + DaphneContext* ctx) { + csv_write_impl(matrix, fmd, filename, opts, ctx); +} + +extern "C" DAPHNE_PLUGIN_API +void csv_write_frame(const Frame* fr, + const FileMetaData& fmd, + const char* filename, + IOOptions& opts, + DaphneContext* ctx) { + csv_write_frame_impl(fr, fmd, filename, opts, ctx); +} \ No newline at end of file diff --git a/scripts/examples/extensions/csv/CSVPlugIn.o b/scripts/examples/extensions/csv/CSVPlugIn.o new file mode 100644 index 000000000..5be555743 Binary files /dev/null and b/scripts/examples/extensions/csv/CSVPlugIn.o differ diff --git a/scripts/examples/extensions/csv/Makefile b/scripts/examples/extensions/csv/Makefile new file mode 100644 index 000000000..d192198eb --- /dev/null +++ b/scripts/examples/extensions/csv/Makefile @@ -0,0 +1,39 @@ +# Paths +DAPHNE_ROOT := /home/yazan/daphneFork/daphne +TP_INC_DIR := $(DAPHNE_ROOT)/thirdparty/installed/include +TP_LIB_DIR := $(DAPHNE_ROOT)/thirdparty/installed/lib +DS_LIB_DIR := $(DAPHNE_ROOT)/build/src/runtime/local/datastructures + +# Compiler & flags +CXX := g++ +CXXFLAGS := -std=c++17 -O3 -march=native -DNDEBUG \ + -fPIC -fvisibility=hidden -fno-semantic-interposition -fno-plt \ + -I$(DAPHNE_ROOT)/src \ + -I$(TP_INC_DIR) \ + -I$(DAPHNE_ROOT)/src/runtime/local/io \ + -DSPDLOG_FMT_EXTERNAL + + +# Linker & libraries +LDFLAGS := -shared -Wl,-rpath=$(TP_LIB_DIR) +LDLIBS := \ + -L$(DS_LIB_DIR) -lDataStructures \ + -L$(TP_LIB_DIR) -lMLIRIR -lMLIRSupport -lLLVMOption -lLLVMSupport -lLLVMDemangle -lLLVMCore -lspdlog -lfmt + +# Source files +SRC := CSVPlugIn.cpp +OBJ := $(SRC:.cpp=.o) +LIB_NAME := libCsvIO.so + +.PHONY: all clean + +all: $(LIB_NAME) + +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +$(LIB_NAME): $(OBJ) + $(CXX) $(LDFLAGS) $^ -o $@ $(LDLIBS) + +clean: + rm -f $(OBJ) $(LIB_NAME) diff --git a/scripts/examples/extensions/csv/csv.json b/scripts/examples/extensions/csv/csv.json new file mode 100644 index 000000000..790adcb57 --- /dev/null +++ b/scripts/examples/extensions/csv/csv.json @@ -0,0 +1,31 @@ +[ + { + "extension": ".csv", + "readerFuncName": "csv_read", + "writerFuncName": "csv_write", + "libPath": "libCsvIO.so", + "type": "DenseMatrix", + "engine": "Daphne", + "priority": 10, + "options": { + "delimiter": ",", + "hasHeader": "false", + "threads": "1" + } + }, + { + "extension": ".csv", + "readerFuncName": "csv_read_frame", + "writerFuncName": "csv_write_frame", + "libPath": "libCsvIO.so", + "type": "Frame", + "engine": "Daphne", + "priority": 10, + "options": { + "delimiter": ",", + "hasHeader": "false", + "threads": "1", + "useCols": "" + } + } +] \ No newline at end of file diff --git a/scripts/examples/extensions/csv/data.csv b/scripts/examples/extensions/csv/data.csv new file mode 100644 index 000000000..452d899ff --- /dev/null +++ b/scripts/examples/extensions/csv/data.csv @@ -0,0 +1,3 @@ +Alice,30,60000.0 +Bob,25,55000.5 +Charlie,35,70000.75 \ No newline at end of file diff --git a/scripts/examples/extensions/csv/data.csv.meta b/scripts/examples/extensions/csv/data.csv.meta new file mode 100644 index 000000000..116a53c0e --- /dev/null +++ b/scripts/examples/extensions/csv/data.csv.meta @@ -0,0 +1,6 @@ +{ + "numRows": 3, + "numCols": 3, + "valueType": "str", + "numNonZeros": 3 +} diff --git a/scripts/examples/extensions/csv/libCsvIO.so b/scripts/examples/extensions/csv/libCsvIO.so new file mode 100755 index 000000000..7a57af50b Binary files /dev/null and b/scripts/examples/extensions/csv/libCsvIO.so differ diff --git a/scripts/examples/extensions/csv/random_data.csv b/scripts/examples/extensions/csv/random_data.csv new file mode 100644 index 000000000..8958c2499 --- /dev/null +++ b/scripts/examples/extensions/csv/random_data.csv @@ -0,0 +1,10000 @@ +915679,572879.402034,FPTOkVyLGS,145207,381800.578481,yjTKNvbFsn +728494,178686.386474,czwapnSobR,877826,915348.530597,idrIrDzqJX +561019,440476.295816,yVzdaeNBYw,221093,629872.228204,1FROE2O7Cu +453545,795773.380121,DSdNcI9G6K,573254,878097.609730,8lEzv25WmK +535228,32005.145607,LpQUDuMZBd,642399,266256.735344,AtHTR7fwPU +283668,863424.564440,nLNKPv6LeI,988452,912713.771616,Y1j9MrgLlx +884134,193931.167338,strbOGyZaC,745356,138734.696738,GZkx6SF1Oq +587940,34208.239531,WYdwzfGe8l,634084,862272.335227,If6HLciTWV +574145,432234.677901,LSeqnkKWDK,414908,672406.338426,Nvaoo8HnSh +622375,351815.300385,bdioG3lV17,536850,777375.187905,VvsIKyy88K +249892,369989.936711,M3gD5UPmcx,544817,662599.773555,bXMsBsKhW8 +130998,105550.011137,VtWrxAPemF,652791,638301.008762,rK9xb0QwGf +470129,603756.963109,LAQSKDwfYj,68874,963788.751942,e7RDqGIoYq +509908,94353.960328,cwXaNpHJNj,500808,545153.211261,vcvYVR3iEp +219474,162541.317635,pHr8mbifv2,96814,968245.980650,uXhbEaaq1u +688954,718080.607023,GG6FBEyYPO,47181,213073.470006,3k8XQSTPDU +725133,752064.298643,Hl6X3lu4rM,105899,171366.413339,t2quKkG0tP +195946,162348.024784,2T5JleUll4,614489,904935.453058,gehZJVwiS0 +721149,97992.375019,1rRwTEqpXN,593360,267218.927687,GTYf6iHMzp +258019,761663.587712,Nqz8mbEAW9,64920,499547.028304,YABoIHJ1Od +436994,206938.857395,99kwjn3OWm,62846,444541.258874,IBVanZ3PkG +559204,689409.713971,SeGOFsvjAj,795965,314772.741235,SXsBECDULQ +829313,98882.781354,gUpX6HPJtH,229370,728137.922701,8Lh1M6icFP +743809,506173.704530,HA9j62ZZ21,559636,37280.651776,d3waWiXXVf +663322,664971.165797,qFjfEjaL0s,602101,2990.686106,xDkUXWTwMO +284967,42966.528442,CyZbX7WjXW,858096,73158.380610,wEJHVP7pG9 +402609,377864.356781,ZHllOxnp8C,723431,849574.817411,vYUwjBNFBK +180920,828688.678267,ZH23DWslLR,772030,808281.993080,dIgTinAGvN +764713,508867.716791,pisPlSvMgn,274902,657873.453609,C9NoQX3OWz +109512,822970.861697,RjsWm76hPl,587434,378063.208317,96pg0C4ucb +164061,534471.635750,qTMJWoNJI2,494950,927568.471588,S0jWLgdjtC +266723,366557.593221,HqTD7IwMse,584362,667418.739482,ONXn7jrR81 +433986,901563.732250,dzRNXiL0S1,298621,798745.266498,oiH6ppcOtL +516272,493958.537086,vfYDduwy4T,56353,644191.098115,tb5eOPYglU +325025,2995.935419,cC1d30P0FR,654113,638492.025400,Hqau2aOxl2 +931699,631947.634522,Iw0Y5TCZ1J,636689,281349.703308,aKOzTSfmQg +372357,762633.237636,OB9kNip4Fz,415170,992097.794960,9ihcIa4nIR +45367,623346.574750,3ZIQZoSpYy,868178,534491.366333,GQcWXpBoTS +549216,760553.146766,zLTXwxFdP5,361510,81253.971628,GUQ1DteL69 +71426,324625.330859,3EoQHOmDft,180482,240845.032470,24qXVd9MBy +411626,547629.083377,t3mzhaori8,673672,207282.861129,hVcgu3Yan7 +97142,698400.676628,56JYE6xlk3,786489,186087.092878,ZYKWCzVenz +10965,110342.313252,YdMn2VpUyO,980124,516380.362456,fLnoNv9mch +671730,933061.632272,dXVfCEWVeV,124746,108660.152763,AiNbJG0pTn +526707,918893.648393,37X5E28dG3,19629,838218.652762,o22CUOSLDf +658351,844322.488247,4k7h0pCklF,734610,739352.635872,7JsuWEWwtE +406626,996307.483672,CCFOkpIyBu,712008,28074.863222,Tvf7zqKmMr +928002,761362.508709,yUkZQDLGHj,624118,471525.441149,n9lOy9ZjXz +458984,268858.175140,9TyN00FQQ9,985211,714379.571624,gZkntIIgfL +71251,501826.293999,LMKnN0wrSJ,427070,470782.537613,orn5aM8AME +242688,184696.292840,8nXsNK2CcO,11793,862585.860509,OT0caeEuWj +435245,215633.793358,SqeSmvRDsH,456875,737267.851449,0K8X81jygu +143795,619818.369230,ds1aA70fCn,746168,293780.136897,XoLf2iHEw8 +907853,996884.464079,DBtM47JkSy,878440,235075.048634,PBnfcrsQHo +44650,929849.018103,U1BniAsXuA,963611,252960.417847,41P3iIhgkF +795476,912804.887435,5PZtA2QNlH,412439,397360.655050,0epN5pZyAm +312599,803813.232509,dh1lpCgtGQ,777757,860533.126764,dKgFmS2Xy7 +293938,935991.014552,C164MUm5NE,389864,167432.999307,7G1tn9Flgx +926740,250312.038191,gfhEY5x4tO,320779,885954.484578,MnaZLjMyUv +92900,510260.443352,OVnIGjQSm2,228283,717842.596918,NUiPcYxZQQ +858831,105667.703221,dfXMlNic0k,433973,640197.216646,Y1zqt34nPm +721818,442423.500035,SQMFkjJaqd,506226,832655.995573,uyfmXsV8SY +184545,42641.044487,dC9fq22QOz,102888,773447.468360,fTip8JUSvh +424252,477206.268093,FJ2mT7C8Um,455306,83215.368210,Ao263cBhsh +172851,434302.614147,iriIx6rqnq,836643,548367.116174,5D7g6pu8BV +940797,846095.604750,UxCCrFH1nR,968827,39266.233334,d7o9fZCtjo +20761,728731.214666,lRK51a7upU,847166,550440.952166,8SC4Qg9M4v +751962,957699.129451,6vdUlJwMEQ,919185,300719.140041,5GVYegYAx3 +177745,988220.662265,g1Swz7nBjV,508820,690905.780470,jsVSb032oU +709826,897041.157228,bDdaLqWk1l,396447,412879.137526,1qdDFf2dQ5 +287156,576955.923234,6wtjhBlE6S,17845,350836.202808,Tw3bRR2MQS +477651,689370.977304,62WRafzCRt,947010,970191.154506,I4WbB75Gud +220915,623928.913027,IfDTPKDy0w,313160,991855.962043,E7fEOYfyiE +826821,672934.585581,qkrPRIwFMA,22129,346669.821903,Hu8MVfpPGJ +234270,842395.992080,W2YjiGJ8mo,891552,161074.535610,dQpXTaFwDA +253042,514720.230884,wGDE5W4iKS,763389,666556.233218,vB9pKYzl5l +218661,901952.308531,IIw4rBJMXq,553392,988263.124566,RPQcdLp4ya +176344,110655.388127,RxFQiLSHbx,603191,790237.014780,aaHeJtnzQO +623142,201567.737338,pcaLKjtL6N,44479,862261.683038,wvqHiaoCWH +31547,726506.300669,6A2BJJ55ez,775568,165143.313043,jf4eCz9vuj +266462,743151.816246,uyaxTzq5Km,652895,307438.255721,0xTJ4qfqzp +552575,703175.187213,lTOxLu0tFm,87259,871586.494385,U9mEUNHSp6 +444081,880435.669285,veQ8CHSwxA,815746,416800.505322,AQAerJhxhX +594753,594445.884076,7IEUHWSFwf,373179,340495.134727,SvmBJiCYhv +894895,22546.283931,IyIskvSvW2,224556,976124.965758,Z7lEJVJJgv +298254,299378.272296,wIapnkfhfH,138304,295062.286953,9iLNA4V7eq +535139,431165.315263,HuDXkKrIBE,119023,576959.163936,LLc4rForOZ +369203,111321.335449,WdgGojUIRT,205460,891022.816485,sKP22viRgr +556289,967672.148465,JPd80Z8sz3,455244,815846.221243,zkLgKP7zxd +88224,502875.495506,az6TMkvUp3,763257,477994.445333,LNMNYIEgfU +845131,354599.725715,nAE0jiMNh6,785962,959381.695630,vDNY5hQYHm +769174,756506.690599,S9sq0Y5RQE,519622,441958.648854,j5Wa9PJmr8 +679043,4694.499040,VumYqw3721,654611,259643.018394,kLGMNBBJCD +208516,338501.838043,Tb55H8DZrP,577963,642746.456239,SfO8aqHstT +511402,500396.318355,p1u6rGMEtK,386401,750702.770607,VXgs0q9jYN +882704,115076.111873,9nN4cGUvxD,16755,756220.842253,nwcuTlRNBH +980475,856438.107726,aYAaXkIbLO,909539,90655.535251,Wv1eb5GNMK +848142,125577.361167,bazdOnOOde,579839,419232.019250,8FOelaXmbX +6792,207257.660161,0qu4Avb0Iu,649378,108016.468700,DXqdyLxq0H +120171,372940.661833,WJntLvgeGz,171136,848604.288496,jcHdnKkeY7 +868611,17661.433578,ZgNJsccVQg,239515,831653.478408,XKNbKpXFaQ +896418,815744.302719,dMfuJjRBx0,22953,318451.233749,51jLmB6VJj +184870,207314.085440,o7xJcpnSQB,261604,73331.222223,DKFc8kRXVT +336606,612649.411543,lX7g9zbbfS,159464,394385.852936,XRYpUuIpDJ +360179,166835.662282,aMSCiG2JUJ,637365,425040.470458,A5MfdJZAoR +607142,962975.917179,FoeFD9iMMc,834813,449428.432997,Xq7ACgyghO +678257,540583.527213,3v2tGvK8wu,944196,661702.870358,wbnPr7GUMo +408884,823738.183867,0DEHmLG5K0,555653,67537.797618,IZl1RkFCZ3 +729816,808269.303463,RVKibeDT9F,631695,802812.701851,0cBYZCv1ye +625316,994684.756322,EMi8mTGclj,94736,119748.811792,VM3UCRyBg5 +864445,84547.902051,OhIM4JQASi,51876,160939.743830,hClRQ8jFxs +682174,831840.736486,nCur1aTYUv,685506,476293.262369,wFqKyKgggq +700212,222745.284355,Cs4DBjs0Gb,99620,569589.776812,S9KpBOW7Sa +949913,456279.313142,namRdZhV9W,685235,487357.087848,M8AjcU6bgK +491591,486009.676662,S7ckxw0PYu,636276,360803.789538,yz42WupkwR +619921,622014.421269,7ClYb9ePFJ,914292,631753.664887,Q9pGYy13vf +44700,333809.447048,aL1kCKFmuz,515363,727484.999323,crRauPsvsR +325113,772012.405263,rZuvO3SReC,599566,62439.202855,YFyA6OqovF +851244,358095.067350,88dH0QT7GX,402370,84267.092150,eXlUlrHtPX +455315,387222.006358,S7dRfuMsjD,614028,936397.870383,QWqipW88D6 +659365,86984.582145,8BFMFXvYdy,91492,209789.094578,Rrk4Ddmjou +178878,530462.930589,KFk1isw5u7,909879,932538.786505,QyJdUtIFtE +668562,249124.167746,SbcXOZnJ43,51584,521576.909916,fPOyDClows +620800,110115.190128,sr6wnYCXnZ,802103,753931.703046,ft7eUgb1oq +832702,948817.667449,2txvGMANQi,418901,554938.633683,e65x29q8dz +422456,43611.039469,k3wZTU9k6Z,213771,636574.866174,0w618CFlB1 +484357,584815.012405,KvOoYd2QUH,706477,587315.399443,4LOVnlU1Pr +429303,863847.503034,Lj4ii5mtFc,970659,700733.676349,7FY1rn4pds +62945,354653.033265,dm1dLm7xZD,277964,919538.173770,KaMUx3FR1B +329389,398495.910044,eEetrfE7Hr,802413,42249.753178,hzgYZFzFQb +570699,625435.700411,VTfhk1Jsok,684234,175317.023675,BuJ9LniuWo +793699,152414.399885,30UCpXt5Nu,901828,49468.159561,E5V3Z6eT9y +657612,977036.718727,4DqBdUb0a0,533922,662137.144716,0hZ43LsM4n +943959,766751.693753,GOcxGOX7Zk,709199,741579.430232,lm0TyeXcDf +707770,786826.996212,foBSXf6Miw,797594,998386.434667,D85FifKhxw +300669,63964.516050,EwC2MVEfJH,418214,487650.341952,SLVS1W9Ohw +948163,461332.374126,M1okue4YzK,677806,300115.192952,d4gwuvBxav +598194,361213.638271,c4bJzcSagF,908394,382508.808568,B6JsXZl5SM +233477,109724.052666,EvYJ72rVBm,288795,273186.143625,cmzZncPzWY +551974,418036.026690,mlObzUqQAn,29870,930206.775197,iBd39d8eMd +758674,727332.964510,U3yJWaNA27,87224,711257.952027,0fVqQh2qmI +135257,678316.018789,BB9dbReoSh,155953,224525.002295,wjwmFRT7m8 +100978,104964.007613,87ScBHmKGj,338520,696466.285494,lf0hdJ4Rqd +791928,714940.378558,EZo1Mh82eh,70021,70469.019441,Q4tm13L4AJ +400250,844773.957936,2rEjIP5tFY,18401,487110.907728,D1cz9A370I +883797,694826.465506,bdOUjLspmQ,357289,112094.574678,ZgPMiBdL6n +621666,543097.968645,DOwTNHPWYv,524543,899423.070286,03icA9jVIl +518882,138428.582752,Bd2YmztN2P,357471,494834.981888,kgqwvSHsRP +83745,886996.057697,8xu3YWMNBB,666763,46263.205784,LqOZ04xDLV +676605,847607.069298,yKrfHn3ozi,526412,672718.209496,faaVmFqmwi +289558,448595.022695,K4Mk0GsSsI,500740,858102.151031,c3Y9QVrg9n +262257,721158.531670,oNnGLXf1kl,924947,587356.107528,5I00rKlp1D +894856,37231.469278,vgfGsIAkJz,764948,691909.468550,yI18HkdiIQ +65001,54746.708474,XYhU7pUFVp,416465,926377.523600,pPqYzGeFcU +34625,74319.366232,2lfnMmr4UP,849181,322275.599896,LZWAHEyHk6 +761467,822277.865844,eQSWABB8H0,550652,146616.797448,L8ArBAfZWs +923945,276416.638006,l4QTZBCTef,951574,407598.553760,hj1tZ2QgEQ +982368,761891.028470,ujxnko4Xy6,239371,864286.155616,uQVVXUCZyg +152238,454266.519214,zLRbY9l7me,263801,396809.178346,N7VuAkumKP +198315,313373.650020,zSybCgxDea,165448,821239.191284,lb6LDfcpva +891307,954350.354636,Rexxex7Tjo,793108,524367.577199,hd3dwjKwM5 +668862,586514.748341,zIUUdZXhOD,654834,95123.138442,OvJb4Vx0qv +912209,25888.420405,MY5KZ8kfsA,996474,741872.910135,Mhymi3usHj +578563,916018.330400,oLmAUr5tBk,589937,692662.801630,PilOo4pTdB +980743,366325.683389,o2gdbqxigO,504454,837214.973881,CSyNGaUtdZ +438042,528874.000765,EFOgKgaHZP,686067,857967.267854,iccDgKcDhw +936332,5773.496329,4xu3DL0vS7,314486,576214.659147,fywiuznX0s +444248,342714.818435,gw9zsHAI72,855720,473290.328356,iyk5LR5ywg +178682,958393.090209,i4fGZustv7,638611,925616.148383,oJF0HQ6Glg +783249,866232.659111,x7nMcTIEZI,469235,880279.667489,b81nnKTXtV +450742,278084.226996,nr0xWw50NN,141636,450638.857769,bct2uSienm +916524,602153.568512,OqoOCz8DiG,738158,870069.081419,e9in4EZ8FL +52525,499522.464512,a1o3rBtlK7,729001,472288.530566,G7I1dKmBiI +660880,175198.733489,djpzMYskH9,370117,204765.690410,i2nrI8IvIz +135196,201338.229047,8n5uQ9tGYU,916969,72044.058049,5VJasRt79L +76364,712398.395810,X1cTTSp1cw,501460,391871.085671,bi4ZCkrm53 +859683,914361.599374,6RahvYNlLI,172291,257872.419071,HOpChwhRZp +263475,869264.572355,FUcCjA1r84,104755,12766.349834,aND0uI0hZB +268537,499434.344834,dCTd424GHf,159822,274896.018019,PTcMh2Nt4B +947878,638427.743757,dsn2XB5Ios,300805,408058.821903,xqni8ClQXE +302833,490221.007442,fL2K6YedeJ,31692,528185.444413,CQtZufR73W +928496,53517.895641,AuENxWKMC9,444275,534035.732764,IGBRKVQfpi +416278,853109.215199,n6QW9Nqe06,217343,594087.174579,TL9ZP7mtqZ +602533,43466.374414,o0JNUlE3HK,402174,546563.809120,zrRNXJhI1O +687888,814313.893007,qAGuXk98fH,295518,813372.950062,GaPEi6TCfH +615457,571171.455103,aIhhtr57S2,607493,838060.606794,0skituqujI +810704,70063.868421,mhmQzKYWD0,142674,942893.843930,OwsJjo0MwZ +12225,488709.909776,uCcv6NDCxN,632049,622797.212414,Eq2IssXQwD +758801,418367.288914,Y0XHLZnNaj,339788,468169.245714,ljIc897gc8 +38494,833244.054576,jewHPijvZ2,361853,360654.468219,ftYjcyTh9C +558122,323555.437395,W3dZT8QfNd,226251,480428.414053,2EdLGiVDpd +648716,716370.654214,0gCLlY7jvu,982748,793850.728557,eU9KcD0wdR +535902,993472.274037,vCkUc0lfr6,849301,38824.391283,RZXrG0Z1xF +733318,599011.246376,9JCAZMugVA,687462,349739.174446,zlytGsRoGq +606955,18532.461833,9Olrxe4LyZ,911253,617031.524226,vkmHn7ufVL +917874,43910.922821,Tlt8jWI5M9,712625,501594.534268,MloNsZp3YS +904501,722914.344821,w55fzWEyLx,504495,738485.787874,ji6QJgZZlX +391586,5355.033631,nfBaJ3FeOa,247642,903339.830207,y7je8KZUM9 +884862,877558.279343,PiGDvRIBhg,615669,933818.564333,DcbNVVNAg3 +926262,548410.657716,eq878647Lt,333996,266664.440651,3fjF0Hm6ii +493846,461659.283989,Db2ebYIJeF,529585,136314.600429,FP7xbBmDDa +343930,230038.696035,oVEILi1yaL,17315,938365.125934,eRiWeeqA5p +400972,427504.444475,9ysoIrsuU6,310810,101089.564159,BsRbkkNYiy +610137,204363.301968,XAUP5Ww79V,362310,4410.550307,AyeoNnrsbx +74119,976276.177730,Sb637TskAL,701783,881569.009652,EQoACoUNiY +481280,933285.441407,MNP4ffuyeo,750470,70016.556745,XVmxSOEqaE +590441,564276.627285,6BYkSYIDHP,906216,613857.363707,qzBTFxu2Mg +155906,682870.574961,2jdPckzFI0,146645,79319.364806,2uFRN7jeVu +807888,274665.528058,JLMn82c8KV,917642,788985.843596,5cGmh6Y3XL +663552,888838.839553,9Dxt4FbMVv,416404,619062.216561,RfAxZw8V1o +269658,448227.545915,F4q4je8pBo,825000,332143.896669,ykRvVrZeMR +930074,782370.396419,qkktbkHXIh,687852,166824.379039,fDnhkHtcTi +624016,751528.519934,0iu9JyY1fF,565928,461470.873816,2ZWgxX1DU4 +199169,704085.003578,HlmTMojeWf,423583,107607.722929,hbiwE1hfRM +732504,377324.716103,Hnp6H23tmB,253501,964431.946939,ikV7dCnB1f +716610,30221.984914,MJbnw1jvpX,811903,673793.734441,8MspBbXmzJ +421464,170568.725402,uOsitgBmXW,508286,886673.239940,2Cg4B1cHUx +915257,5938.245773,X3DNHnIe7Y,65524,154147.695029,1vvMELYSgW +374437,452295.730477,N7kvwhTYAf,711580,388848.017646,pAhCntqh2u +297989,145721.939061,NIuAUwY7yD,433193,423045.364580,K9Vt5J7L1C +254268,763264.348598,AyAbvVpe5X,283693,118373.773804,7WsdV4q9ED +750797,114949.160015,L7teGLMNJj,441206,767824.413418,aYk2UTZtAl +358541,459413.351778,9GDnm8SVuR,935400,855811.467923,45qcNr4WCS +758190,834466.061302,yJom2Zttqt,306605,547799.952959,Fan9OQXpnJ +631393,927412.698257,ibsSoGtRlh,333046,234257.915395,Cx4ckPv1u4 +645756,967959.994221,YT0fesnWsr,326696,492137.755227,BvPC42mitp +827331,659248.233006,zcmwvB3BMz,394962,455099.164209,Sckmk9cnoM +158472,901328.650975,wYDicqsZXm,128895,682903.806757,0Y3cMyoPoV +318664,443286.128732,kLyj4LlsLJ,210811,675591.191797,jDNU8dPe2y +254323,8948.733402,b1bF7o14in,413027,648057.482701,e5vFUGlpFo +243739,641429.334524,aUKLPBhB4q,334220,209536.735118,AYS1QkNXWU +262809,407152.423913,I5lvFqOvjL,411174,660312.715000,9LUdYUvmnq +323306,652098.159983,T2Hqcy0pLL,339558,64953.582985,LJyYnI0lSV +595644,525246.527593,ksJpE0RxV7,70191,456916.734442,sy5Y8Zq0Ap +760600,527145.559298,RwjDsnAgU4,833879,21520.079465,tpRZuubSiW +236393,38333.985840,xEZcftiBZR,998914,739674.725594,ilA9I5qKiG +64367,535062.329396,EprI3CpmN8,26790,488959.152476,MpsOVqZGjh +468661,722569.752924,Wj1DO1h06v,762474,196257.903578,KJgg0HhSAm +548716,603287.936995,fPmqouhJuo,197129,979988.497188,V6ndLyoqp6 +512846,392945.348609,eCicVOLYX8,506343,118916.073963,mUzZtluY0y +486596,470881.187422,E1JlWtV9z3,112326,939823.341623,KGGb8pvzDr +642250,390628.045707,TPNwUt0DRu,169490,617217.013068,tMhNiZ9tKC +537540,537747.188215,JzFkEAfgLN,631996,926251.372898,X35OOJ3w8L +437458,560269.417603,lbXm7VmQOM,327522,260750.618384,XepVGxCPqE +887171,126895.704308,3QOqdU7l3x,307070,907021.282880,STbhLPrTiz +968047,347187.350165,MvjAjA0ujs,989363,93988.247104,v1teXja8a9 +173053,522114.554479,9SSMo7TB2T,874395,867769.067838,Sa10ye7foy +525013,742339.434100,FJjZLwWgaK,247338,996509.713339,8xtRll8MD5 +236657,153.677053,R3MhjgnWjO,717084,612433.416330,tXpoQZYD5l +570944,852403.127661,FDVZbbjTQL,8744,892716.611484,FJelyHREe8 +324139,730652.709358,PvZEoED4Th,668114,209395.546275,AmCHClxm2J +622959,120436.570659,8C3hv0Lftx,850254,161010.137401,yAJlBJSR9C +94108,123290.226192,kSCeU91WND,795204,826677.396618,cucdw440c1 +61056,553652.068969,wRV7vFufOA,45713,338482.351554,RnQBXmSETZ +98257,90862.949213,0HvcsInb2H,415704,812785.324268,ZnQxjmG8yY +771763,460025.825081,FZxRb1cj4c,753407,346264.627954,Yzxgx4691v +417381,820511.376903,QUjk5yFWLo,495077,691913.295614,TUyFijBDEp +778264,809126.888872,Oitkyu1RkO,203900,589777.236897,FIk7z0TSHY +26440,262270.992563,KRtLKSgAs0,838850,954585.064491,GBOFAgMIKf +613651,742191.176463,k49VorKiTP,119179,504783.170708,lxxAVK7FUg +305863,624947.504870,DKjt2zZLul,249008,411826.012902,UflqztOWSS +124438,934730.607152,uMCqizlTME,629307,147192.848508,k8omXpYsTE +184381,917918.982415,QvCmiINjPv,407493,67782.313637,v9QCNmklS4 +167364,27186.110688,2DpytQLdYG,231681,691159.247131,CI1iE9rePN +476557,967126.001794,GYupCdZ0pI,124232,362790.822936,Aj5KCsHBfp +944542,663498.283667,RbhbrjHSpK,921312,551051.678951,dgEIbYH7kn +444924,748612.542063,pWMtJXnVpd,516053,700928.176491,o1vZxGUn4Y +139850,735095.879349,kZghOFGSmY,330352,257246.440744,A1IbAGDocW +543144,401883.899409,ltFHkeQeUd,873891,419199.476758,8maeSuAg2o +668200,158442.378806,Rnq75jN8h6,497953,336061.261611,MuX9eBOxH4 +280066,584127.723780,Pw7ukdRjEJ,214104,745694.242847,rUGlIoeSF5 +129551,915870.105088,rYn0EzSdgq,56272,701287.303687,qfevVQVxXo +431129,634723.673726,VZPcjELZMf,313051,276085.914426,eIEvQ1MYXp +75575,18389.954032,7B1orkAm7I,782051,547730.206788,EkAenUe8pr +282882,191815.876127,be1Xcb8xMM,75513,542059.417111,VOdmTY3sTf +385289,278653.590102,2UwxYHHlsZ,736833,741030.560114,z4qARRNoJo +973623,69181.312881,EZk4Z3Quy6,2866,206899.092579,bzR8Uk5Y4n +569980,209367.985110,MAenRZlVt1,102259,702324.412693,tTUDFjrJcc +618739,20026.303685,UXhH9ooXZ2,350083,398671.895847,4pMapjilxz +891263,478953.513215,oTk2eVeQWN,565430,658468.840707,yfz6jZlfmf +417461,278241.943827,8nOjzXV8gK,241943,995362.366566,gCWjm44PDN +741183,419595.084604,CAKBRnu4Sp,424898,717644.877991,C59iaN1xeL +419560,347285.036860,JJ5YNIsOye,86077,276565.456031,Twgx7Hlbjv +757556,752533.280482,fJ06qhh6FI,470461,135739.290434,uJkHaZftyZ +816912,961220.186375,wnoXSbVEnY,584251,464996.975864,2QsDLC51lJ +643851,524026.224452,lYyKtqtreq,375520,907540.603501,9PfYojQUwc +754701,984343.941167,6oHuG66zkg,337997,328244.557928,xVScGmhdLJ +107564,824088.102026,F2vORO8Bjy,345420,326063.388018,BBL4o0nnSf +796934,72621.026862,v7BeAssd59,597334,62113.375815,SGvcYiH5q8 +554279,840806.955323,OJea7dwRZf,220811,595159.288116,8Dp1Pi89eO +664033,146296.648196,LJahxTPRjL,844909,881873.751436,0I9o3YzU49 +810340,195953.329085,2reDLBAZsT,339113,375077.103470,6tMWWGtV8M +331741,290145.281651,Gd4Sm4Qnwo,775704,417266.137856,60BUTq1cI2 +467562,781365.823926,2Xm7IxrBbb,79070,520453.179338,OWB5ONSGb4 +829359,162493.420245,FWn21kJu6p,260636,836716.409512,Cf88Yz5U1B +294975,909891.177012,LH86aSFzRL,212316,371723.213384,rAnqjHzWRm +268833,54458.074033,EC8j9UiE5o,583653,440979.700715,S4Od989b27 +861641,746558.930166,FUgjlCO82W,178217,285062.849858,xm2pvCoOGc +684172,285052.177316,laP4fSssCX,618890,240584.685428,pgHvaAr3KI +110504,737851.374157,gW524rCgVf,4849,541201.007854,jnW7rNQ4Ue +136341,693450.547198,HKluNTDt7W,696463,18664.070792,chr6VD8New +521639,797561.701775,AC3m59hMWW,162012,184715.330774,EEioucQOCN +790018,255362.720543,Mb7SNHk0Gd,814150,814530.546491,0XN2iicE2S +534509,450379.667774,O3YZGfWUMQ,788126,618511.291566,JgZdCjkOQW +654420,75531.678242,KLrbKRy5N4,83783,751381.010270,33HJ3zk6Qc +33911,837719.171077,bunzknexqt,88742,785294.284306,Wrk6IdAm9k +245736,364001.896896,RDQVdXQnYU,197281,199978.626673,31VXjhjCBk +438382,103894.978315,8eE0xb3OY0,150168,954382.141768,6E7sZTk9Te +785716,812157.932995,rgcKMipzEM,384444,858459.857581,XFD2zqKsnK +1669,889174.946984,hkzLlhyPGy,300224,465690.530640,Z4Kvna9RS7 +557983,881482.623264,baxIWjEUfH,328767,385950.982007,VSwplI1Git +462834,724010.829193,QuXzT5kN90,259406,830098.463472,2byHFMv0oc +265011,507781.405453,WfEHXjjdrI,491743,52160.887158,ahupytgSHp +302635,900201.368552,0CYHUQL2x8,387870,133435.224361,I7yCAgXFTX +87061,344168.059087,YVGPEBsMZ0,430760,682064.004216,FCWkzTRNCY +862764,693841.746393,0wDMG4YcuG,437189,947801.402784,Wn0aNiaMGD +29623,459335.551688,QcWyjyHJXB,27673,947251.297227,684Q5RfyBF +52052,976216.806661,iehH7QJeUh,582185,147473.809785,oLvegKq0sd +878303,217888.847214,4GJtMbx4xQ,454152,110095.309486,GvERUUCLSY +178923,181780.150938,FCqOIs23oQ,807007,657786.691314,pGsjgqfqG6 +755649,775039.271281,rTIA1LcsVH,574795,35452.615640,kf4YwumWfJ +81450,129801.284708,MLjcKjPkLO,241119,392658.258065,RdIajoKvMV +427133,809314.252559,Z64ahHzN1z,387147,599938.277414,7w3bqOxxtG +524379,950900.332358,KEDiDjEGWa,857470,728310.098500,eiuwNfr28H +437899,673566.926012,MMjscDL2Pp,705388,114604.353522,UllJVRrGF0 +95870,198378.177038,OkJS5mf0rR,599390,467963.078795,bI644j8qoi +594489,737092.866352,U4VDBUrRjy,526709,16020.210042,NpT5kpc32S +142223,735540.614136,Ocxd8EQTUE,174272,83414.940638,fe62TTUiG3 +352920,121505.394612,u0tuQeHWEs,484243,232842.830163,W5SMdp1VHi +552785,726941.765164,N7GfZGx6lN,730130,264850.149958,BE2yr7Eqe7 +683152,661196.435508,AM66jdRvHD,573906,549767.703410,H4mysV4OeK +745250,112317.147776,xskS0TRl18,855982,219107.714205,7MPb2XDhWc +931852,943304.490176,19tf8lvoRo,472958,376056.302622,ji0r9jFq6C +269618,216455.532183,7Lj8sEp4bf,71222,90476.926433,OIczrT6A9Q +367117,137079.880397,JrYjaIAlDD,600636,11199.945646,gAFbsVLyLl +282624,102292.810897,fibdN6OjzG,344210,308797.951421,iZfCnql2hP +442897,436156.204052,JPDnEEExnB,533752,224352.932388,atCih6um8J +137608,425482.298495,PCnWOQ9N1e,207213,483088.199696,yM6YFSBxdL +583747,834970.013213,1UDEIwh122,678486,680426.845299,xzL3aoxkW9 +498253,897501.904932,u5h03kWwzf,164186,177242.205556,ToOkPLANjT +217818,925481.375712,xEUh3H9W63,999660,496529.970919,64Yr8AtAkH +491596,912582.121090,33Rdehyzb8,432123,744079.587449,TmSvSiSkP6 +879503,204230.744569,PO7xKJGUEY,236001,606292.619027,vGX9mIhi1n +490669,12622.657954,b01AuiSBFP,461197,175637.206982,zvIzLrs1MU +325631,256106.921700,eml4sqvJTI,770420,147721.122446,WtJkJDtPfU +70936,627799.175047,CnDz9fqMVp,499450,679445.238827,zRurmzBuDT +315300,543767.564390,IWCM53OgMj,430574,846121.938164,hVSMSylLPg +707573,516292.010092,gNHlDQLGIb,19696,825587.469615,c2d8OO5U4W +366616,95712.038711,avcxR47Ovd,256297,396266.246721,Zs5mXBCmuM +623009,579705.826908,9ZQZiH87YB,278166,72313.558591,qjtp8rF41u +622303,397042.552292,uUcnS8kvqf,625130,279590.395279,leH7H5yc1a +925935,123280.059176,EJIPyfAUee,597830,938723.008780,7kNz3QSQaZ +251070,752653.461148,tXdNKNQ0S8,243222,47041.924136,f3uYtLFZjx +640746,949898.721141,ZHcy5oprYu,114003,454684.393511,cXok9g8GXt +904112,660786.193751,ZIk8mEJsOr,330252,10785.755896,boz4ChEPHE +506938,438891.110030,8y0dJedo3D,193750,517097.151412,IRCuM81wd0 +181366,833479.057074,PQFo8xUdP4,235934,766947.415066,YmIoOEJy4e +946683,141920.791540,7GLa53NCat,690344,222174.682132,Pc7DYlYuOM +922581,672427.635713,YoxKAwzrbG,185845,663613.895829,Fx5l3IXdQp +571211,680076.238945,yj23i8AO9A,388147,121384.406534,5rrmxYE7mv +124727,763695.167085,AjBoqCblTI,550744,416546.259258,frhNK950Bn +787072,373742.810315,e4cBEpn6BB,628539,580862.833502,YHvHaufsX7 +945447,890946.760721,2QrR3Ia91m,462909,611535.116930,Ov5rD0im9q +499851,154572.895387,rS4fZLVkGg,988091,955341.175754,wRcFPExTuo +130331,553136.316961,SzCWHTyVyk,393142,915532.544480,Apw2YldjJU +401170,101542.895479,mLK7d9J5g3,731944,462636.494970,zFsFHoK6vQ +129523,9443.402621,LMhFzzvpCR,490583,903170.460543,3eOefbRxVD +912956,245371.181783,dnqz3Qrrkl,833180,690889.513327,UKrUsp08pZ +751500,585108.483942,DnnvOuvICc,592031,340617.336454,zlXObiw7gz +430735,981810.117370,w9TFfraFGA,847473,35447.744582,igXqPSZYmP +639047,909405.980466,YgRAbNBdLV,397477,114565.635007,Ni2awqqBKg +345277,117554.438143,0wp3WRMEwG,132218,112411.803138,FUhgTKWfwe +623632,336652.966573,V1v7EZivQY,969405,258859.037512,gNchc43S63 +88795,561024.748068,j3PH0R7Eri,990843,166773.244961,8W4ImA5kQ6 +232054,754591.124853,hCiAvVZ7eq,657035,628791.892457,CX05ys80cM +409413,828346.989931,C1IXdWfMZM,649103,145816.346561,kHk69qMw0E +667522,710210.266924,5Bb1fquAkT,568382,254357.767841,6u0NEsxcGJ +963813,248383.754374,P40nsyE6ja,890182,21459.227538,2IzTmlRVAz +36794,716976.816592,93dsKwhNn7,951520,322136.300828,kYAZ1jR5Xv +622057,474318.888452,KUqWNit1vc,284584,541245.906626,HL6s0irdXe +826537,296563.537202,spiynmNejE,999361,502013.563800,EUr2D7ODXT +636702,617279.977311,qNlTLPkww7,17610,134082.053667,vAZbf76fNw +776709,456213.312240,bZGS86dESB,543235,659137.059967,F26CBSJWM4 +157875,699700.542842,E2BSDyN7P6,928873,724510.890048,IBw85Ox7bP +989342,700175.773299,HFcrcht2R7,922605,628465.766618,OapfRXUBL3 +993334,673715.910702,9jNHRuZ8Kd,420503,633564.824485,PhKDw7koBV +983299,488488.550249,cyfJk11BYq,903377,713314.337750,zgr5IZHTTM +781296,230470.745480,VAL7TNoHuS,250560,916569.596422,JiIILqkzQ4 +555484,847651.052609,63MbtEKZaO,599814,663036.887139,I8zTsI46GX +332913,427460.540243,uIZtN8h0RV,540087,615461.325146,z4NIhQ7PL5 +473313,587369.780229,wxDR6g4xgp,434441,511509.746105,jH3s7KnBGJ +652124,55064.492619,IQSQWINaY7,266445,73799.317830,Fu9HnASRVs +910196,892149.726088,qO1zZuEaWY,45838,228418.345060,jmGqR2cvtC +512417,296659.736823,rSs8DKQWGu,129137,150250.494734,RLQSAxE1kG +352207,187405.657327,hjmKAOvIwp,135385,301497.146460,6sHxNNuOb8 +606081,682167.923703,hyhOWPZR69,420868,544785.021601,I2wcoihsDu +996287,95188.871705,AjpCfqtS0A,264424,530091.094693,CjA0CZ4kiH +331095,650241.874710,GoHrrkQkc3,278282,109332.621452,BSRUK4TKlo +905744,860395.315845,bXagwOVAhM,676729,411184.290911,Fkyq3N678K +390815,933461.483918,IQGlUjIWgn,774813,130759.011221,5owyYLPxGn +931303,365530.432844,ednROzOZKk,816371,441747.038811,h5CD3ubQsd +65234,110137.726803,ImawGZ8S3g,74683,591804.756528,GGFaRf0sfC +210029,342423.221305,NzYjJUIOwr,816296,27449.506526,Py35WPrgCb +935160,642996.580772,PYCRMhlucL,124185,395221.754256,Rg97BuantW +615946,62082.624567,dMTVjJlHHs,815000,106192.036035,3cVhWI4HNW +579877,5192.201848,4uIeTVxBDy,217551,158332.212714,PFvY6SD3z2 +876047,340633.083101,YfxD8nqzxX,334649,570940.754029,DuYIZh1nLD +326621,903211.144656,dh8xmTxRnW,898109,726200.558320,jUiM0fX6MX +963884,119799.675047,xuSB2BqHDN,326357,314550.014057,YSNd63GBxn +307927,604092.656206,BfCibGTTgQ,440415,426475.803101,MZYsTto8Nw +470385,267279.066972,1MO94WL6ap,733416,318837.408531,IX1g7m3fj1 +834340,868706.643136,6SQcP53GR1,391780,654790.104026,KgebgbBgcw +806430,84071.122431,SMIWqQYXHl,981068,583189.788652,Zs4SXzu4J0 +120012,50528.142651,lA3si8sGkg,27928,789431.737470,cp1TCT2KAp +633431,668833.176719,jnaqYFcgp9,930366,690637.482331,Hj68ttyWo2 +3026,309151.190108,SjXQ0bo8Kt,211010,182320.734972,CHCiKV4mvw +276547,916895.107494,oTUbsfdZ3A,255112,576472.794490,Fh2vwIED9W +999675,479180.296773,kqCAXL4Fuo,278379,553802.149553,vSyqanghEV +724665,273186.109541,j1waVoGpSo,517069,828133.239464,2eFdjVKzdf +282554,634844.643148,56GwzqsmOT,385090,919005.316550,X6wkuRJvLR +898368,107822.206104,Gg2T87weab,705692,860534.519183,owniat0jMl +863886,593447.652745,9n7pBS8nAJ,55140,532842.384952,cTeAlKpxb5 +287100,726821.073520,YPuwv3ws7X,958620,720022.754212,nLDioUXElZ +829060,917657.407388,niaVUgevsE,606345,873057.283283,0b0h5vYnbF +323400,575781.562868,wbNGtoRRom,883784,675683.456899,YIwEMPRz1n +543276,905145.422379,b0LRcxPHh0,905336,479905.401231,5JzsZZEhYy +454451,888028.340288,7UXT3Acx4r,442765,981721.287293,pXZdEBXjQo +903876,338287.667289,yKt8Z6PJKd,973276,279150.280290,tYlGxr6oRw +504956,575307.932664,uNCSXpkQ7b,436463,876530.650086,SuqAukI8Rv +634912,314472.492440,MRg8SwdjTo,216082,244940.959417,0QcbBhEIqf +986803,597881.148250,hB35PBXM5N,486542,579242.736179,natUTmMcbv +781981,851079.882374,mYZrAPdCyc,842561,128558.503398,WhuUdyLGyI +264257,901002.290121,dRfc81O9yO,24119,500698.086113,3gaEDyvXyd +82279,329440.829274,emZpWzHYTm,86262,90517.438564,FStkoFOSSw +585613,893483.761376,g59WkQrxZC,842767,11095.541332,6xtvOMno8h +591161,417135.610397,H2FCXRJ4Wo,440352,374598.034712,O8RdPc9Dra +490902,607486.095406,TQe09Rrrb6,240207,941786.005678,pV2PndRl7K +561047,866961.455312,mFWgcs8MPl,335867,124962.415503,yxc6MjzB7v +183875,813876.403258,B7XAsH5jA3,74809,791697.185370,Huf4UupOvh +707530,319267.638167,Ng8jzPrlMf,637218,857976.845098,3Oxbs9f05S +806500,675920.262168,sRzQrRDq3V,682364,395513.048522,tQDgFLnaNB +19803,909985.108889,zlO4vXqeqW,912160,977335.397234,Mxz8wz5of6 +851350,978724.329765,8pD9rxekNA,891795,695838.271262,wbRKWqgsl4 +56032,607113.828382,u70SbdpCzE,201524,33335.491904,zHOQYrSPf0 +558632,398969.116930,rGOVkPkA94,557190,167293.622764,35iH36tgOV +52873,456679.751342,yo5hwQ0AG8,596847,919731.552517,0aIisY8HfZ +299673,158649.189039,mSGF25f9zC,343898,999580.875092,WnjRC7JlD1 +885118,205223.687111,3JYUwWBomT,947919,185341.572529,lVJb9RKsmG +436353,735728.913581,Sh2aICZ5g2,869243,764260.671827,vrlNf4UVLI +101145,221505.195321,JKXHXZfGAu,293130,654617.583346,YWMfyIFnN7 +67318,92931.157093,eQ34kEcszN,674463,119469.872602,q6FQAuGXmm +266057,502333.581772,8Z0RjpbWZr,441067,114668.291172,7W3QQzb2of +267575,946707.329168,r6opNDuRdA,353983,352914.865099,nRdf8kHvav +588914,574679.143010,ZehBT2uPgM,975086,484032.523357,qT5ZaTKUoK +919343,736516.638642,SXfI7zrDpg,744320,632364.217921,tKIchn9gzh +560722,472765.425805,Z1p0WSPPQz,185244,612947.007268,vUbLuKHNhx +614408,83360.003928,WIEafhkM4C,343132,4335.565036,2MQhzAuusX +386111,897482.197859,Fx4ezWa97o,525291,284628.693171,pejtoURiMS +274804,246497.813489,1FZqqBXRnr,935207,284611.615500,MUyD0nNwUb +270026,662810.161381,lK5IuDM4Z5,304247,835183.566912,yQ8VMtCrPT +828025,234841.399153,YcKPLIWO9u,179780,535053.709316,G7xqxYZYJ9 +923087,707116.058271,dsaxDVVn3p,900968,950764.610698,x43fboqHYB +742607,65976.458744,AkR2oHiTfD,1681,222056.635480,KK6LtnlEKe +254159,270094.288934,UBIPw2TDlQ,394681,30861.479358,dhO9DYDcio +851923,857088.602260,Pg7l81AKrY,10820,160480.216257,IImimQhdLC +702581,161273.347000,9WXCfJi1S2,590386,275452.029199,nC6tWwjO6r +390916,376000.352658,7jsOYvCQT1,690737,191011.108534,2Wy1PZl3rS +49819,187673.304269,XueQby9Kbl,625489,757628.435065,49JsmOxGjE +320367,970252.466007,yiRUtpDL9E,442904,227355.083680,ClegGNTezV +452758,760045.872692,Xpmidcej1A,865751,545313.828381,BGrv0uOoTl +857450,405653.408114,MxERmV6izR,165476,145387.891431,usS1MFPE7S +929652,42440.884370,oMCFRbEWJ3,321753,482775.160512,t1vFufY8Az +246619,336924.803181,eKh9msao7T,818075,958642.909503,9RPfEeWQmA +994835,779559.096872,0439vMjJtM,523956,638910.393075,YWG4cmE7OH +786364,884063.096060,KQ8Lrgh1lU,712845,784314.126280,iinXyXM5TS +57261,553674.420453,wDmhafZf7n,749876,847182.180362,jwLHXCvS8K +974955,331158.679638,VQcjhr8lSt,283951,763560.657740,OiR7q7mLuQ +78639,57835.910615,rOUHjB4grw,679868,63479.514769,tZoPGt4Q1v +104139,596637.254399,GijjdXzVPt,383155,925210.196802,eYbFjgIphk +653887,875134.263688,0jx7uhTdQ7,772244,84849.085908,IX4gpRcRre +580441,63087.766849,EwVISZbGqE,294895,635648.135930,b6wiAk8RcV +550176,255457.118340,5GaC4z1c3N,474926,246656.367184,DFExa6Nk2i +128711,748687.831774,5sBP1iJ0m2,448535,137984.576806,PeI3ao12cR +893978,317015.444638,AG4GnEvbnb,482229,604067.244926,NYOzFdWQEx +674828,944461.500096,NcF36O6JFj,684617,607426.095701,gkvPKQpOCa +530929,278390.635096,8za4HZqnJn,60243,794027.861510,K23lumrVLn +623690,716628.742271,wEkOj8Ilrm,379869,789746.463130,XhTtrwqJMp +982954,819479.002666,V8yU2NT9v6,649275,561816.051190,4OaN1FHWKV +913603,126984.941769,g5UyPy0XUU,433330,924885.603510,LYveCxcpWT +87205,424569.406268,xodjZMmQdX,806079,18287.618524,w2DI4dJEGF +605193,492750.770036,U7aByDEzfy,445547,330471.419655,mxjuemMmfJ +45499,950505.028830,fgrTI0yQl5,775296,761206.752848,l4eJ82ljUm +803431,408875.834469,SwjNC24QYv,627113,852827.834835,TF0RMiug1z +705547,819805.917130,IeZtclvprD,658926,443512.206632,XXv2CIP11h +309975,780175.093054,ccp1mnkHL3,269941,30205.159958,bqh67qqDJd +363745,546735.528746,BN6CT3lsqT,792568,719577.788166,ARGWX6uPwK +373889,517238.944249,ujdV1DKjT4,167972,348705.498888,P7ZZAZB68C +650698,264134.540212,HWJeXquFMS,927417,58914.946275,EFkgxlhTVx +969538,939621.565409,z3WccanHGc,815805,182371.089971,wr3ycs4B8I +285553,387408.401278,gUoRufqKxC,91818,913819.134020,QWqm4me4Hx +44821,950163.309813,eMNOlMcdki,763265,451739.429099,ZE0hFMMMVh +762362,604160.036305,OKKifVnML6,995568,214623.007217,bnnEcvij9r +942817,754788.468997,L075bA5mSd,579604,100553.728672,PXKVby18Dp +938697,262059.212129,YyNKokuijH,146684,492963.635568,JYrvEchXig +588740,231762.650798,oZtZTyDqWr,692229,885159.784107,aQVGEBGGxY +412666,776379.884556,E9ckT02SkZ,35909,340525.066788,xckX2ElGgW +626915,892213.198960,GbcdLROeg6,676771,410450.363924,EdgOwD8FtQ +430356,578585.079732,l4g6uFTeDC,184663,84808.390251,kjbrMZD9ZV +385142,928891.752215,oLtNaUFYr8,776800,352228.157863,ntFcgwI7My +382031,42572.866029,r03DIkPz6U,919169,341321.699941,L48xjDk134 +83347,309120.039030,5d4lDGj98W,834661,583284.642297,Y85on42tJY +848784,195509.950963,0ELdOecUou,4911,418707.816767,ynDEbZ7ZMO +188917,493647.560471,I4e3RsjKhn,848072,616614.439968,Z4bjZrbzOv +141154,750774.268235,IBhhBs5rFh,675085,369715.515613,9sb3IF0Hzc +668678,763190.951411,MFNfmYqdh4,265946,275921.826985,pEIo1pW0aU +990719,261094.035256,Olr8vYpTI8,516150,323439.890511,yh2hMryc7I +902923,134991.902261,1jAPq9pOyo,448916,732598.100220,VwrRa556NC +567409,413033.009718,TVcOJOg2DO,733906,158202.732101,g2B1LBLdYP +906489,530880.560566,jXjX2Xy8vG,77036,415518.497394,jKvdZaZ2Na +607913,380441.714416,HYjyt0ieUb,492090,30293.415020,dlDYhLbjZl +277045,728386.369532,Q0o2LqC8TI,823688,227550.912477,DIpTsiDdec +423365,853114.624097,kR3U242S2v,98363,830621.817628,Zw9Dt9KgfU +722449,943878.424341,gZC8GXHSku,183356,153081.893409,70e5jE9Wsw +394086,203800.597366,CfxbowZBSs,356228,794512.151247,ZZMy3B9wTM +374497,996468.296005,q82mTx4VP4,821273,120186.335875,Os0TvSUdNv +493743,812438.094794,NPzpzTjNK0,687398,705285.264592,oD2hdbOC0s +449643,388500.058869,ymgY7986WL,324074,931880.098576,eBMjKawA7k +190685,768146.732649,q26lQF1Tkz,723062,855628.721920,HooHxRjq9R +214992,600430.991899,CIF989vqAa,845645,509702.258325,D2kQT0kClO +329525,652849.210948,T4cjC7KHMg,818294,108311.002967,3SIjFrW7OP +994042,966291.255756,3gTu6Seka2,985746,471760.449188,DsvCb89h2B +925168,672234.775110,bjtrEvd4mk,672581,981851.288609,CX92l0DYAk +861899,405196.628579,kuuUNfV4up,999081,80974.885557,qw1dxan2Dp +26643,417316.247407,vKe0FAJtU2,496088,240870.710929,OwMhEtfPwe +779779,177200.336137,b3UlKV7KmF,77287,992752.114619,VKO1027fjN +802731,460334.889005,BiQ0RgNj6t,548117,695565.446975,pfp3MxSpTb +835573,194625.698682,pD8G3EJddg,264211,653901.359020,ps7he9uVch +920648,90917.073417,y0Ng4F1SqO,920387,345971.833797,7O5v4Qiknm +862866,404195.790092,tZX9uHrWvF,33442,727928.376554,PTawoKKGsJ +300897,257240.639533,RnbkoEmwEE,542270,809821.217083,qgbb7Nu6B3 +47563,528871.537805,Oa1yZS6AlR,476845,476559.003392,XNNwQq2UdZ +579865,148041.321535,i0NWgYRCUR,21100,383482.852542,5etHdoYsEU +52555,657164.731032,txi2zU5JnU,57395,233518.719515,VTlfdAfQQu +151931,128274.050719,O0OA1bzarn,39361,806800.612101,pIetYXlL0Q +442195,461815.330104,5G7khicrZx,928801,845871.351373,knZcn9hXCf +900573,380692.952188,70k5Hj68qh,268854,624075.341967,SqJrCqd8jr +150614,921637.902235,kBAZeGRQdZ,182024,115727.411431,OWKU4g80FC +27999,239701.262610,SwXQrcqnwH,379102,137179.777454,ysbJorwKjJ +709657,195429.770394,CPPpaJj7tz,363417,945198.235773,THf1mNTuR1 +544837,233546.403812,oT1sOd25qZ,636718,841017.296102,NpV8a57Hvm +436462,506853.875998,6251OWRaU4,66725,585818.479872,mhlrdof3eh +57672,817489.954764,M6ruLR0EqS,445843,226085.779766,I4ZeyTdbfL +225042,422001.359968,Ddg0Zl4BYn,987535,400524.915740,Yi4YGUXXzF +268225,214873.538472,ZupQyYmhOt,31290,327007.302227,KnV5Ut2iy8 +348928,15504.851835,dQ5WABLsT5,438152,8455.538966,0TSKcS7w7H +336816,889025.592249,kCyofpG7jh,976511,820571.109667,8HiztvcwI5 +95851,635918.319363,uefqmPf4yg,852970,479227.127544,lGAKcSle10 +449797,931662.304409,ULjeGaV9s4,133303,720341.448502,blolPb2IWt +703790,296495.296771,zG9eFIuigE,498017,795233.825998,NHrzKeZ44H +357165,597774.062194,Q2siQqeSoo,762646,77750.372844,Us2fFQyXiz +548733,727323.985533,yimDwro1KJ,564165,326873.163463,XzCcrN73c0 +898110,869717.164185,vhQQnqDuKy,312179,489476.660466,ig0sYui9m2 +17369,839456.746816,OJb3SOYILv,894417,370654.511645,CqOUodqJ7C +734247,351098.719026,UCWjjTZNTs,88623,206113.470334,JoYlTCM7Vk +180672,911675.495046,fTeVwTOPRZ,744719,589912.681764,nrf3HLAXXJ +14870,595941.973433,eFJ2cGJH1N,2613,816861.456927,Wu0ZSRR4v1 +430876,167346.185546,8BxkHrOfY6,376358,882419.093967,lo0UTq9nXn +945328,320552.914946,l4YeE02Pcq,738279,93640.857229,5xP9IeGx43 +687136,181246.285401,Vh6s1wiFRw,20241,763644.083347,XFVI1igHyD +82555,451468.195420,SKG56iXaxN,954825,399293.711298,4yPHaJJX2U +298047,811047.454388,01E4XQ2iNJ,472628,617833.677465,7jOt244HkU +102251,342307.477696,jNVR3ENiy6,170359,380941.189875,QuRuSXAZ75 +54114,143774.671202,PES85arElJ,904783,467307.901580,576bhkplIH +35890,884025.871137,H5FU0MVgBZ,810412,16914.048058,P6XGOVre71 +660477,67108.715140,sJRu9FoHUo,596570,473687.518814,TaTIcBnuvk +393164,921571.239966,Z78nBxqyp7,746981,782609.362555,g0Y1nA5jrB +712161,507600.235835,BW2zBtknKr,165295,237280.720951,GCTcJdnnBv +226069,938359.126221,3HAE9qvw79,928553,327141.572622,98k0GNBejZ +274963,401528.891850,kCKax3tm2W,835109,774664.489801,XiRaYM6laj +728052,255548.491865,AzjydxrWcZ,551281,272235.313327,MhWkebvZjG +599109,989079.433218,XA5wKm4VmU,283843,912900.962436,i3l9Ae0H5c +298487,757561.595321,fwmqB91gX9,563021,259367.486147,wkyNM47ZjE +899103,508462.359496,3e0v9O7A7A,716583,418072.719607,783wJvO5jj +7907,930882.822216,imTsaGVBqe,287654,494655.641326,WFDOvETcXM +923656,465873.883412,gWDFQwm8Dz,267429,813874.156411,LbxLrP3mqL +171999,440094.138801,GpERnGCJoA,669517,513849.608873,8NuciC0cVv +738425,598018.124293,XF14wPeDyy,782196,897498.287500,iEQHCR8Jpd +764872,857375.458502,GzvirVGrOb,802932,30058.161610,P4k9vNFFLG +876662,238509.217947,PIlKPNGX60,959366,656721.368464,x4kY0mTBm1 +122484,549315.192079,0Am8LfR5jZ,636742,616179.498234,8KnT4Q6IiK +745140,635632.461053,aNVclpKo7j,219660,453510.723143,7ij0lLdltb +211211,550227.872176,QNCwhPZyI4,338443,589441.751900,qE0yTJ89Xi +757720,478199.496751,XIoBRKQhuU,35998,831055.958104,ys0z8QUQ3o +307025,438744.372699,e35qYje9c0,566730,807378.446474,zXEhR3h6OT +954079,402135.297186,8hcK1wDpnm,126248,404505.965167,HRK9ZhMFIT +544378,454943.220694,zvhNvAM03j,109660,916846.837642,BHva0bg7ZP +795500,252876.904826,kzlsKczZI8,544696,731218.753509,ahHg7Y9LhP +352690,229797.132953,ye3Iq1NLBf,719924,383597.407143,Qk8bO5rTuN +893878,336438.807446,vou6qF1bKO,511151,970854.172965,rpqfVIz6Ir +903714,960691.732778,fCYtNDYXmE,954429,640249.932774,YY6WWzvtvr +741051,357002.739196,h4HiHycTkN,689918,378061.684050,SKbXLevD9x +700669,376461.981337,nVDaEqHHwr,381146,436502.351092,5p2lAHGCAj +509121,727221.681463,73S1kHMeNP,528439,360918.969004,hIXQY14rgo +214672,99290.482472,OHec4QLJ1S,995454,213396.581542,HVXgMHWADC +36731,943583.219363,EpIPuFMNYu,205601,112304.674687,SNM2JLeY6T +937982,762299.181044,3UEtfMnc0M,699735,759184.015501,bcIh3ZMGjt +493888,940181.819288,rTtN5bU52G,384003,863329.571750,bcYEtOtqIN +697655,509114.708593,3DHTTWcii7,734169,59249.310461,7D9wjIWBb5 +685120,575257.534830,8lGZMH0qY0,687682,504109.339289,Ou6OJGHpCa +637565,653581.103084,pmoFmowo5I,856771,611284.123836,a7fZCZYIg3 +770370,983150.989888,RwOfsNeRXx,502433,33373.103726,GqAhiurYn2 +277639,872425.868373,DI0D9dWTo5,198614,785148.458780,iVDMp1jvUl +828985,831151.104380,xLaV8N4Sq1,955454,76717.954030,lox242T0zM +355475,272333.825622,oC0Nw586ZZ,177921,439410.007011,4CSm2RXMlX +505253,531737.854765,kUdQrIEEhd,754446,527557.647014,rT5H4TqxOA +864505,195041.354556,WULhKd3UPs,879989,55098.276931,svH2ceBVh8 +81816,252195.542127,drAFSpLUXB,428309,899035.945261,31KS85hbbI +111043,98462.907411,zAgKb38mGe,122476,503339.570167,TQ4eb3JxYj +1527,23680.620806,lwCFdCZWqB,283522,793355.658492,hlbgLBoPgt +788959,586957.312394,1ociebhqrx,358242,876464.249893,ZYxFi0s0MB +697901,484113.304529,krCRCVyVBt,532070,363923.819509,EAndcJjao8 +999264,807992.091421,4rIafpW7cT,602477,708218.503071,sSJFyT7HiM +708294,310174.550047,663JXeWGZy,338203,667421.992394,TbgF4X5m10 +117974,561453.303307,dkEg2KX9JD,686277,979504.280717,ATtzQECCAp +309852,607385.432022,h9ICR3vlTq,39399,423363.175634,afXTS0caVw +301896,852645.907875,vvErwpzDfL,615447,564272.205565,zWn8kdIyED +768681,989094.587488,w2VXYZnzAF,400678,425846.974410,UqpJBFTQAt +759909,321883.684106,17sh7CgKu5,712516,635263.018604,8V6R3wuAkm +867092,917014.798483,AIlWkpS7qq,503810,676563.578444,V8Fitiq1tu +264257,655512.526467,nZtxiNlscy,298374,455153.396393,s9qlTRsUgQ +435471,161664.876478,LroSAkZVF0,256815,807572.971215,my4dn9zPvb +947,775141.211459,dCTxn7pAXB,425225,291374.713767,4Kf5Dh2qQH +763743,221838.188436,iX4LZh41OQ,190216,926066.743469,bxH71OEL22 +864859,475206.131292,7JVl2RANom,534909,529591.916093,AZqA2gJl0D +63830,7104.072582,UP4kL57LnP,163145,214243.032369,AlCxS4Erab +510183,714915.389755,xnzIb7BgpB,794932,111739.223739,yWt3nzKrTR +187279,289129.939070,vCwmuI8dgf,9303,48439.339644,2lrl6ov1OO +899649,873230.200544,0iiiYCNw7I,471940,802698.546892,SAnGxUU4mb +253849,108705.047404,7E90Tfl2Fy,895996,886527.647448,gv7leIXq4N +13200,542205.353258,LrFYqnhg3R,158418,824161.056807,gvNYRipRir +767905,179515.916110,NRSIBarIBh,755785,803188.385131,t9rN07SUzV +412544,811003.386135,8QiuOwjgco,847971,988436.690393,yTynUQIP01 +538905,576740.479963,03VxC0VttR,919404,121069.071780,qBN1ixJkiL +825813,19106.783096,lD3XlYZc7b,402086,21280.760290,rmWaxl2a18 +809134,217700.024778,DJYYhP4EDu,685844,644553.098802,Ma82iG2HuC +997012,168590.864586,KoZl3hflQo,762882,381496.498029,V9ltImXgHY +588312,35717.776496,PG9OZXapy1,685202,849564.913601,IaEevMhROf +327826,455966.296444,aK4AmO2Oij,556786,140524.177709,aKhvDCDCTM +918233,911745.821474,pvnByvZSLO,178781,608612.105834,baPhnlH2d2 +543324,549577.854932,aONoflY8kf,451593,403728.334087,jCcrmnnR0r +989324,62687.691588,TpRCTgcIzR,534295,358498.957672,rqQP39rubL +260052,893652.646028,2H3Jofuy5w,27412,532377.462753,WOXv3JMPYv +792489,412637.691656,34RxWZXhRA,673068,648869.488710,AELyHYFWcP +261887,379206.490158,Fdui2VIoZM,957920,89357.150029,aHjYF446CW +512268,492149.937082,NUCnyEqkkp,466363,402708.941135,hlv9cXss9S +77117,662830.953132,grG3aixmPy,785609,900319.011708,2ZSSCUPI8d +815950,631885.165172,blH7pKv4FC,779397,873751.809709,Z6D0OzC9j6 +420336,945017.293656,reOY0kI2Aj,897036,175532.971804,xBkEmKvyZk +464954,998170.031577,QRhkmSGBR8,805590,136846.203627,wnDsCus0Y1 +34874,724034.271880,yPcX8YEmcY,797039,672600.644190,RVudyVVAJs +398973,104357.215127,1lI14JeTYd,952051,485071.454914,DFpTp4n1FQ +624794,4246.254890,U18hBzeAw8,611785,426896.953625,OTKAPfYc7y +749905,690028.766671,aD8besBvfj,258478,281150.020157,cHvxkDlU1u +980950,404325.920724,IWuSnwG7SO,900892,161848.193491,TPDrfg4zCj +604438,456074.093066,x30YaSLy5r,941659,666462.406065,FRHuhz11vo +26463,179147.196087,cjzreqAEgD,495267,200868.820360,irp48l87gs +410615,959153.422315,hQXJJfEXiI,6047,479644.494514,EeVvryw2sy +796634,284681.639551,2aXDChIMYe,790477,612672.764333,Q7wLqaLHk9 +815730,864881.042442,fAJ1hvulYv,965844,824938.472988,fzY7qC31MQ +57436,260263.846019,sWD3yLFSoe,289711,980026.902594,TYrfh9v9mR +912924,582326.088523,Gi03jEJjdn,735749,990259.488944,PBxTwdMqKB +621437,666111.816162,zgHZPTg0aK,117648,285297.357456,WmHTKWEALW +600441,878888.124902,Nns2cHoOqG,495288,899895.961273,2nNmQrj14r +230239,117976.916609,DA2cvqEnaQ,671552,923209.861511,vQW4ig2hMV +146511,804412.914376,RntlnOrXgY,850962,215982.062413,njd97Uj7qu +972955,449976.433016,zdwhkVJ6Or,446650,244052.564005,KLWKKVSZq5 +107723,141634.780592,RlcdbBV0PE,228298,607.518346,RITOrcek7R +809754,908900.706079,kjWJakrwCH,909749,809767.766775,7nBIFgOz74 +715836,810222.331789,zRwdvRVMXf,579873,44655.721432,8vbsGfKYjU +350911,999056.450321,cUNkUQfxfO,551381,961869.048889,4maKRzDurv +585359,521018.816221,AhdJcbUnkL,814822,401271.077998,GSB6tmEvVR +562162,537410.804350,hHudX0UYSN,809597,714386.178799,r2JYLlO2QZ +204055,712551.029107,bATu4Okdbz,578541,698109.804462,8Av3MEqBDq +775264,30487.246498,R7uHqBTCSc,365715,887090.187425,nvhiZY49Gn +918306,47731.771067,kqpXrXnbUr,998335,190906.725487,gXXaGxxGbL +446454,944765.563746,bXZOZDTTbS,307523,282259.806488,mdyALBryvj +587367,707549.269590,4GO2cO5sWj,502784,463213.238394,opE4O8yeBi +492860,244944.428184,058Ze4f7Rx,582618,531045.601508,VmDIdGjEwP +597853,816351.043664,XXHbdydf6h,383159,163648.162435,kt5SpzON24 +871429,881163.158415,UqzMZ6k5CC,747453,320513.802114,naGIVBblyy +568026,977368.929052,oheJ1rWy8p,702541,616993.668779,VJ1KpVpmyz +903841,775968.353743,LYUyXFYUuQ,436631,778516.899276,fA286zt6UY +379182,310482.456909,KDsM5pmd5B,297264,139148.264067,NmP5FjS69o +351156,914578.556365,Mxsq3TwEsU,997963,897298.865950,aq3IjPb4yc +323961,34254.519103,25R92MubBa,483344,899795.578414,rVw1EMqhrt +733656,180108.571739,CIPYvu2Tsf,142202,72585.987727,qCaJbnArVe +952695,53473.835864,RULIbTO2bi,541762,278692.506323,A8HUM95yjz +552042,864046.252953,IcSRNcKKS0,623299,274077.576906,Npw9Yq5gbW +30085,712807.733836,7lptHH89sv,631814,447114.156782,cBRPd3riAl +301054,511763.554080,leCg0Yj3aV,381064,57238.940582,O2OkO3IDXo +868234,154766.618257,zF8TmAPY0Y,378914,929098.806353,0H0uX8dZb1 +815902,130938.917434,ceKgAyI9Rg,114376,262147.603804,CKnqLPYHbH +850805,759709.634714,3y7luf4wLV,865702,618998.083823,v2WvdrTXl4 +289118,320696.496067,Q9HAJLKOYC,216506,918721.956876,FKjzXRP8S3 +372800,258825.744256,FLKfLHmkf8,794901,90562.568444,u0n2im4Jfc +328002,890977.432291,SjfpqEin3t,323162,16090.218355,mUpiDcDfl1 +644787,428518.327169,ihZwSD75hw,152602,213506.194678,RwN4tyDLCu +89176,847756.458840,ZGkjTTws7h,20378,485038.458391,sJ3NzTdQUL +239423,392239.605539,jQ9KKv0RIE,924007,535212.510585,07SpK16W5B +674534,38294.361057,DA5wLBsTuF,888242,66730.277808,Ssm7PI23Do +904142,67411.099709,1wyHfcyMzg,120965,878648.881107,63mtnUAfzz +647827,661357.063635,bEc5zCUd1M,830057,262586.893580,FwW5RnEnCT +573837,503302.870233,wJ3WJJEQRx,99928,483776.152284,kllOwhpKnk +256736,387438.359768,XiAzGQziS5,963084,1407.508582,7gufhcvBdv +957012,733804.194832,89c6Mw8Hqa,308911,413783.445079,3tggnp4cvS +273815,380059.739469,RgcqecrX2f,147179,323267.112273,WtyDndCCSa +500600,161955.740718,XtNYuLSz5x,264886,430849.617805,7OcKCwaFYX +270988,368410.940470,s1rqw2pVgU,570714,700558.806893,h52pE3MV80 +373731,384255.468244,DjkYuzHTad,763135,93446.318830,DUk3C1jIIm +766622,774475.308892,5fIoKMhmfu,322836,817108.827633,gOgaur8T2Q +856450,991134.914954,Ip4wT28W4k,715432,610084.297343,jxlpM4IL8b +737966,422590.727418,eF908WMK7N,441942,681095.910400,VUGfXzQMH9 +106554,47739.195930,vsSYcy1Ncz,785060,345722.372812,0VN7LfK3I3 +293866,887844.443894,NNnHWdZddi,730215,301403.523771,f1ppLlUSe2 +48040,299021.310640,SbEfEihzuv,971406,618318.435814,sWbL3gs0EA +702620,342598.061809,07msKwi1FM,153117,649146.201005,uoLo9DAIhk +446965,418848.128903,UqIf8cKfPP,619547,73535.615643,agW9lff5gz +393164,448644.770601,idr9AWvfcf,824648,729994.886449,NowXsPQkPa +208982,901857.273405,9spJsz2lF6,11342,595347.341127,L7VrAN2CAK +394954,41073.816706,vjN7Ky3WLR,11964,88384.977801,EYeBRoa1rC +83681,14717.097483,PL1kaRaP35,581587,724268.931624,bViplClEyq +843717,735447.538776,wFXwfQar7I,612391,353507.902407,4iWJa8CgL9 +680974,408892.160823,GCYEjD6hZQ,215639,22291.232538,Gb4kRt5kHo +100084,125292.793775,4mtRZRGqzi,709309,528550.104471,wHpRSl1n30 +605536,804918.901688,FPN9pI2CSB,883162,376366.765091,cVoKvP8FyN +42336,101835.321298,zFUWm1iwTx,37490,862641.612812,uwFJIfAanr +169995,452754.765107,VcjGcrn8uC,792467,112655.966392,KsPE26wxli +142519,788869.655005,DaOvghXejx,513121,163069.740807,ZDLRsTKUCv +760545,198287.056551,Lr2REGdsiv,466668,594894.958358,kMj9yBDKdH +836963,58068.651002,g2kV6eRRxq,81229,502366.574605,92icfQoa6v +234597,263489.455854,KqsVl1BgDu,817408,554957.215613,OEe2c12APX +652379,697504.834409,gIgqQhGxR4,253398,788850.545385,QKXaqunmAr +176354,607106.697479,7nDE3W5PA9,562596,640809.477147,figFCQmYcN +102010,528405.622248,2qvEpU2NyS,310432,465837.433282,0D3VrxFBrd +641479,751482.809758,AbeyHwvhlN,196488,754161.626709,1rpOFflv9k +218260,499279.614872,G6j44q6gHq,825798,813458.776030,4jmmiGbOpI +272512,614467.721265,rJyA5R3EbX,548713,701784.336980,qG9i9KCt0Y +479651,898198.912555,65DqShFCGN,419139,156115.906897,DEuMBJY7cU +637015,47500.991308,6SkWvJWWQe,926127,268900.294582,J6G1Qt7AIn +723321,158437.793357,KLGArT9IIb,382434,376596.802256,n2LcB9vxjl +322227,10701.454316,lGWWx9Tfid,248636,457654.378360,YLRsKSbPeg +420568,30019.680316,iNnnP8EAXK,2170,229409.265467,m72ST8SVFo +613539,23253.526597,Fjgc4okrJA,938614,192303.640082,2T7OSkr942 +112913,686968.661620,IvYY9eOj36,515654,73187.563968,5DrBWwZNlt +954967,837108.474831,18e7I6IPmG,30094,535076.826336,xQo6hOdm3l +456933,165005.237532,UZPr6tMGxM,879070,751780.377945,lIdzVDPCkC +868256,321514.967406,HqzvX8NG0C,695974,796476.818192,PKJGdmA9wR +169086,268404.733023,AAlAD0hEMD,634838,80802.589097,WGToNYZZBE +199819,218877.137173,9F1CSYV9XF,257418,546029.554422,me5x97Rc9k +970556,439222.822597,sjPixOuqK7,45308,809768.593678,lS0ZNWejUj +601542,391804.551745,HBwd2O907j,264693,371404.974812,uftDJMwtlc +317010,717171.200302,AbhLLwL6qJ,21509,57091.580682,i6rAa2uten +483671,71897.868478,d0oQgPyI6h,626324,278461.556246,RjZqk2g4BD +281435,916003.278793,wWtCiy0zfc,631580,198228.487824,QrdnKCseB2 +72445,484669.095483,1oU769Hh7V,126429,275182.330720,8B4Q9vgvpg +143879,771603.209097,NiIiKNqzpL,809248,473833.529997,5qHmnHXXe7 +486144,757150.153017,EoZbGGcTco,709609,906689.711832,ISJ5PxlxQy +785766,982473.140060,gxRDcUsbUY,524098,560409.090693,KQah64add1 +478179,98824.410449,wdBgXukaMN,550407,276869.486950,6zPghWRAlZ +890160,424620.296358,5ChknoWlDI,541918,937625.248287,uLLxf3dpqy +229328,570892.699596,c360vBKlQt,998156,947699.667153,ZaMGEPaHz9 +499154,973853.944337,HZttPId6xt,310126,308944.838983,EavHVROsGU +253206,576746.100481,eIWRLAGnyD,181647,691809.623359,nhsyX4LTFW +8166,898468.965674,T5Su9ynoN4,641455,163389.953348,Gzb8tf5xWq +308559,781254.408669,xMMFYHMVbA,85034,358863.709819,iTJkcx0VTF +580987,528127.958453,Fups4JJglc,684259,323181.432910,GEziVUiaHd +388572,835859.494339,n35FcFmE6B,592861,267759.787491,wQ5A7Bd0XJ +367567,779416.964542,uR00OHtC7C,868918,882183.521458,0WrFkij6tv +584562,516939.541976,7KSYmnWKAQ,301385,615262.040508,ZjfZ6TDpOn +29465,420885.779997,tnpXJ1dxf9,655169,550115.719272,8OfRcUhdwN +404560,175937.873530,0Da8TBMdNR,255063,941603.057029,UtXk99hwDA +164565,432736.470691,FwVcDAdrf3,340976,644205.724412,XvBPrXjRQF +634891,650306.636900,0rqpV6sylL,505228,872175.600181,SCLQgpUp2a +55524,83076.940144,5XdwsBfmqQ,371112,803375.141625,0QAuxuBnV0 +865948,118310.067026,d5rkStpIA8,615241,41614.041255,cGHimVy5US +560586,140149.568152,QqmjzZFfPG,494770,855261.911188,qGlA9hrUbS +414185,735868.548407,pcAbA7qqXx,406804,790141.341442,T2yJJDB1Td +862385,457153.542990,j3lX0TEdQn,763345,680221.499321,FU5BUhLKTo +635511,220232.433784,AnSZvztxj2,142172,739779.557620,ri8mDhyjyY +369195,175755.863764,BGxbxJ7N27,791511,293285.977400,uIXYSYorkG +470298,78764.256589,e18IsVGdcU,529517,741465.706882,idLktXRTXh +543687,396108.176501,0OyliaNYv6,990588,868286.442553,LvvVr5FImL +462975,794732.371268,3J4h0YodcV,516112,689766.773880,rYLAOhsCcG +964330,712549.182862,ZQ9zoHEEHn,363296,273157.549053,a4lDhFRM9L +941183,559905.324907,pgmpxeU6k6,408889,879372.358353,Ab9rdylxP5 +462051,388911.377076,PPt7O1nhGv,580275,763692.854792,6qAmxldfQZ +125732,46359.439119,Y7PoQDBpw8,733604,33996.762707,DVnxUQgHCj +846619,42594.835570,LIO1jMNXlc,613150,761864.575682,xLxjDmhH2b +833771,82460.406310,Ln3v5A1hIF,914453,75224.626348,ifKwdIu79A +535307,468066.560652,zKyo0yCg1g,904368,572813.346150,AIIVnW3duP +685450,680422.308113,tX5Dnduwna,802944,41290.942462,dgeaPvw26D +424170,458588.217006,RmeVkGTInd,74182,139517.253774,8tsugKPCj2 +416223,827304.780514,jWa9bEVmhY,373785,816284.657830,eo9wLi7PqI +274126,285064.995129,XEENmgyLUY,759248,870041.729673,qMtUg2puM1 +529758,808340.083626,3FIOSvmKzz,401722,205551.851975,L708e3D8cj +247021,240673.084213,QdSaUaZnQC,340818,614224.594934,Hp43qkZsxi +610812,501165.076254,Fz7o3O8FZV,65230,729842.108260,VhOeuVwEoP +239882,786793.231456,1ZNT7AJPk7,115338,92201.512987,3C4PtZQBrK +237465,209180.934268,vMpl4kum3w,359528,955837.138786,eDI25obbCZ +406068,543962.568028,HGMVvlnpBf,641776,256391.047139,3dXPi19eML +431973,813327.872782,fsOMAw7id8,888881,958982.560891,GhaYuHQQg7 +162243,972685.220117,UX7XOuLYJg,680581,703991.023447,FsocA1nhg4 +188016,338837.895831,Avq8hUZd9r,772351,744018.851463,6iGdkmzzNH +923459,829689.064576,PJWQyLRXMP,326229,206080.720750,ufuXeGMIqc +360481,241823.960474,VApB0zQWp0,229246,276571.164132,Wo6RRvQtkK +909973,304737.094639,1acbSIeGGb,420790,116511.610324,52ipvaHH58 +279377,978288.842155,zBXvnzPS8Y,943582,691946.574552,p3SpBNnOR0 +132365,162018.369764,dQm0jMaGxG,202301,966942.293817,ggXWiTGR7Q +421794,197972.619300,lqc8EifOCW,921945,891845.170305,l3nKoSfeF6 +553897,655821.204197,F4ngK59qiM,964489,486012.765439,sGUsxWeoW8 +568000,724798.851676,bXkmTPJFSX,454812,699572.845763,wUcVWVkyVu +871763,260992.537684,6CUkROKWi0,297459,528829.117534,7slU0uBMSl +893146,209829.842106,ony6SsBu1L,476700,525224.910982,MfcH9ljyQZ +556955,190352.126448,zxwh1IjoDr,143998,19033.843411,0N8JCNDRwF +582221,526168.516732,gvEvsWVgtN,925903,663173.580405,xMKYY5aitI +542037,83348.443810,y8fDTsQ4x3,302071,462585.628847,PH0Ik1xS65 +387001,134067.543783,6FXP8VEwzx,429185,238690.051270,rVZwvmHocR +687125,252840.069067,PpAraQtvJI,225767,891161.296686,8AmgTCYeHa +522404,327041.861351,NRROyLyLro,147717,694192.416013,7T9J6zCnNg +865827,472410.688247,YUnYIeTd3h,35297,978931.285146,4S89YYhCPJ +14214,722734.809057,38wNW6F8Rd,47412,645281.285565,3HgHpbYn2U +721603,993990.532978,5Cl4kZhlzh,862347,624538.785533,6uJIyO7ikl +563019,105316.709742,rabARh1b6O,945,890900.255214,etnMKo19bv +438332,19371.512034,kbQm2fxKaK,78142,246687.966417,LvHkRpSqhx +170113,426784.331674,G7PE1udLqS,146151,911633.339598,tj9QxqRmAe +204858,778582.949822,wFkSJwDSiL,604200,574221.468185,3KYra13WfJ +126981,842027.040210,FwGTwJT9pU,574197,782135.422979,g94GXwx03d +267337,128004.363602,MqLfpdqrIx,362750,420254.566807,96kXXeTCXJ +536156,729696.905176,NNFIiNuGZE,959469,507907.967413,KjK0eN8XQs +382888,660350.563416,Ga0votW24H,762416,740682.977269,ufJdayEBWG +546766,939481.495339,ZUD8s4Y08S,939068,462091.995157,IbM3vChDds +812628,868286.419591,G9SOPFTXiN,40946,811726.471054,ejcSS2DneO +845383,771414.659042,pyudjD9J2y,885130,425102.761191,P4VPgiJ88x +468720,265832.865534,or4dihS7MD,456195,921071.372543,770N4Y6Rps +918906,80559.108051,AjcW5gh1uP,337014,990306.559680,zIGbnvrjwp +690902,100495.556296,0hTJnOdl8t,874123,98722.531086,AUJ5KKHI1G +337232,111270.462060,z5VufqzuF6,985809,339355.770942,WCuvGjRDmr +620112,675707.168058,0qleebMXc7,864831,997337.732098,9SSmIIqno9 +148088,999219.470094,IqPjYHki3J,526873,196241.958970,4TdXtLyDbH +755916,319752.093226,sGvvFz3vXW,811798,787347.376396,aJ95YrPzmm +293518,333443.894717,MogIdGfblX,186654,868459.610704,9LEdlnu5ZG +794707,162660.871444,4r7l6OSz0o,153159,374135.913585,c4AszaNsUY +500104,459478.272371,qhjw2mFlg9,480753,475301.541916,U4njiSpv8j +927209,259343.716374,MPS3fmgQ3q,332052,366652.700594,Uv9qXs1UhA +157298,853042.265636,BLQS7EORDM,671666,454731.121315,OVwAeFDOLA +92813,641805.248384,WGYZqCFuVQ,547005,119357.187453,kGrkuV7UZa +81742,173801.214104,FRCIFNSVJF,530372,972139.498108,BR8lZ3miVm +712538,810357.113855,7nhpaJUutS,372931,634437.593222,X948CfCwfy +144752,591206.544214,ULrXH2HlLj,402983,564869.441710,pg69z8tZlf +527290,167792.742568,y9DDbJoSXt,576084,987785.441971,B7sVUk3Jji +518605,566957.893619,UK6EIL4oYe,631217,917174.849995,fICJK6QdgW +893930,120125.433769,2JwxF7Byjl,841517,470725.316864,vmm5kHUV7p +234476,249599.856626,wygUljKqos,706155,193107.572473,LyLvmJS3FI +392815,182305.774792,D3K75ZvGWS,833528,977143.181838,ixVGiXvHKY +357254,105726.822486,FDVdkRNDJQ,10595,880097.460264,G2ZUwof3ph +863630,573545.252182,1QSKVICXpu,836403,869422.293618,ymQ1QisEPe +335030,351396.693768,rBPZi8uItf,250463,913909.312484,9Xbqi0S2Na +287061,739560.984064,cOdD8ZNPJc,219400,652207.563227,h0uiQR9PNT +404946,376595.527059,4lfi3ieBBB,211449,208775.107221,kbKwAk5J9u +359493,658547.552064,XSzd92WHMk,86537,337355.147095,RnGo5RzMdt +401537,482108.810632,dtB83hGgNh,812936,567051.006898,0GdwBAabo1 +973834,64829.161855,IpZxSKjeEl,776719,47223.553556,7V3F8lt14n +771273,71726.198775,HRNJ7Dn8j1,129309,952592.161915,ZjI3fckMQC +639759,763975.531110,sTJCxSts8F,150525,643055.862819,CRQLmAWRvR +367149,493543.742049,eq08TDHd2f,980654,578936.871060,oJjk9ku6V9 +737757,844016.706353,3o8I4nLnhm,309279,137300.280429,j17I97TPmP +5976,267965.619661,dKP55S94r9,43594,108026.953041,nxwXvxCix5 +585632,118878.125508,D1PvKJBYxH,658965,23895.412120,bhhn4z9Oqf +95841,587584.602425,ETfBohRrcB,633175,271616.942468,UFIYbLe6ko +776905,127134.108170,cGxJARmVj1,660094,633025.739693,WDDHLIB5Ss +577710,175957.791179,41BQw8NEFk,342317,309757.374770,cEke1rz8tn +233638,510673.780396,17gG2RtpHr,934878,778360.387965,zi23ufDpXz +491506,165129.497194,mFM7n1AOO9,320131,133552.957516,NH9GVqzVLZ +192660,340613.463290,ey5X6R1sY7,657040,503112.615430,uh0rIrzvVG +961068,323059.974931,24HYnNdVX5,513390,613340.453095,oDyBe9wWoD +145870,101603.653279,9evcT2jFXl,451667,838045.450950,tUIGufI4OJ +559840,248467.549961,Ogiw8UhfVf,922949,500917.289694,SWoCqGNJ2O +1676,409757.699872,vOAFwRF2PZ,598465,348146.503520,Z83iTlZfDi +811251,98743.315099,JqyYAktLG1,420490,465009.608107,UZhFy21q6L +482838,621765.914814,MOK5vvApBj,322867,779572.551782,BBZYdDnTWH +433712,271099.015392,jfK0fbJWWE,641651,494019.465501,LUmNAkBmW4 +495731,722463.831229,p7H7ylVc7U,249889,450176.287644,kW2LwgQMhH +977942,548181.389708,NqX05qXeho,906990,360309.054696,0BsoGsdgCn +653686,320014.328826,eLtie03ETm,518748,674466.392964,OSohxcg7r1 +257045,435333.282548,f1CtxFNXOD,668773,968114.465124,eFVQg91uzR +698682,165040.476888,IWE4bvXmSm,971695,932617.335535,DWvvDRBbT4 +178010,160620.830705,0HXUaTLfSb,297452,602468.033441,XIfHWXarO4 +947731,337995.473948,3wBorgGEZJ,601849,365736.837356,pp5PjQ47a4 +20641,383732.810111,UzcIolsIkX,126842,413551.501305,B7FPAsAnqw +317809,972628.027359,4Y4Tfy0Env,831604,472962.514051,SuqhwqkU2E +69792,94058.478553,ZuVjIKG5qd,563079,841277.916210,QSoKfA9MlG +993240,489443.334837,W45hwRMIN9,861778,820226.878624,A6SllfQvWp +634890,984156.947117,NjPvocXxOq,282891,757847.063791,BOWV5eXQSk +413935,112987.144545,n46EfGC1dr,75605,82391.674204,tcHDKeSgco +320306,968499.785764,RYlsrEb8sj,76568,335459.754830,jeRB6LNCls +485549,279515.892326,EVmCu09cd1,295955,496951.226080,foZiCwoqhj +994629,610594.267285,P4vYDPXs1r,726139,681404.434620,cwSCGSKwNW +94527,390216.753300,kF0yHWQkPo,644040,745212.127760,o1VmpNIO1Q +396194,143378.314550,V1J4mzuDLC,174704,428622.647582,OGqRC3cCf1 +188289,792240.138410,jxZOHvmsVj,55355,995172.973290,YbSjslx6NP +444297,780263.688118,1ouyrOoCUW,557236,342395.065420,TDU5id14sb +197212,846940.567645,nnj87kaSsr,1157,652106.811012,uRgvbuzHeR +564721,605116.045458,MZKyVm39d1,836435,209839.307620,ltiaqbI2Jr +950234,767693.410580,6V1ftCpcDR,610653,956313.117045,b3xQPMFKXo +718204,767425.581000,6bwiO6dR2R,674923,659344.737539,7IIuUO40Po +677819,75520.183752,3QLBRjwDtm,159402,177122.029118,FLZkaT6ujv +29686,478604.163161,SDkYLw3wOP,153302,524884.657178,yQ1lZUB8W4 +266879,70082.988493,kfi8TLmFn4,121140,765145.936716,QNQvo89dvV +512389,361312.425179,2JDDXZm6GA,203948,265576.480727,aEs9bkq5wi +51188,28621.293178,vMLlrrEajM,393990,307597.911975,fJouR19GZB +184973,52494.156848,mMRnvRlH1X,79282,837784.279459,iJ1O6p6JcV +592275,68540.594525,UZ71e49E5M,56547,802224.098889,lPiBSxDYPZ +122178,526128.621266,YR5jRMHhdY,729775,762584.668544,jxiB551cYa +284791,302496.835967,e0L0LYwyR4,441998,974424.646123,S1ryzRIE2b +809809,813270.867845,wCuQhGi5vd,145759,696244.455615,R8OAGv5wzD +740848,7934.961561,yLYioolOMP,904198,112959.903188,gxggdzzmU9 +43145,984989.782323,mY2hzRxz31,350730,515752.470645,pOfElLVzrh +244330,761835.036735,tXEFEk4579,394207,252787.158750,YUrunh94ap +627823,189287.942951,TFwVpOq7AO,863465,325496.135754,ReGR4cuwhj +151560,427754.336137,gwyYTcwz7c,491586,357694.246948,YtrFrc6Cdw +438489,43898.574163,FwX9Mk9vZq,398875,489454.735705,GLM75Hh0Se +599802,352187.403836,7h7JGXddzt,82019,561618.123465,eWmrsuPipT +322556,723189.428192,eMAy4jDBje,379694,866469.454816,YkiZNiJ4Y8 +419222,56535.495527,IRh6XdQZ4H,904566,603938.017823,mJ2p1pNdcz +976806,60051.511574,RN721HPTl1,619515,652989.126798,oa605N1kpZ +281329,127485.924855,yoKo5fSqRN,375408,860314.086480,tiGepN6VEo +266794,734704.522687,ouxGEDY6Rf,314879,79665.264199,iLCAW8l9Rf +995246,179039.477002,R1Urapzv6u,273765,941947.285088,xW61RYze6O +1700,401528.481036,GomStDNt49,873504,916840.453770,BC3IA53hKG +788029,311724.941146,edi79GoIPz,813763,823455.867872,2xi7xWKFTJ +39,112014.969965,UVMGiojguT,195404,914942.033912,i6briHeMiO +54814,978063.039412,wpOvCKmO5p,55322,576470.084036,TrVfIQzLfv +389037,177842.964367,0lW2rxJudw,614900,48089.847027,KcGPfh8s5J +160691,133810.696280,SliaRFbAR4,462315,631510.451901,iuKz9sPWk1 +323520,974651.958798,loCzRY8Mjz,886209,178843.683061,bdq8AlsIrx +814075,881886.205279,miKAEBBpCV,888116,86624.530535,Dlul8Cfv5N +731393,187587.051014,n11nRJGjJW,744234,420384.639130,GnEJIV9mNd +277572,752903.876573,RUJejjetOa,464770,541438.987281,QOZQLdDnoI +65888,872219.428806,bXuM6CPL50,557156,549290.279893,YfV9rW6yYu +866748,143900.758973,feAPTM9J0B,489079,770094.517449,tPcckmFvIl +479791,972065.235650,oOt7winmWs,701210,286000.828732,fAB5KBuD41 +394229,724844.389208,KDYUk5N26p,209774,182117.351031,gJHGUwzSOd +89677,685391.933734,ij8yyjKdLo,822514,540098.966130,PHOyhcJ50c +80454,707292.530019,a2afwiCQKN,713878,325959.503960,m2gEo9f5t0 +136830,64172.872871,6s8SAKx2gK,859773,660577.051306,c7iwY7hEEn +568940,392257.446195,ZEZkKoNF0K,184538,380132.977364,yEYxUIFVww +936907,187279.690853,gLonKnmkB6,41459,553369.073276,QdTL5v7g8l +558310,245496.118682,j0LvItwhXd,321957,237582.429783,oxrCC4mj3S +200680,953905.764802,uBrykAykER,245813,305504.562932,fJ53zlgt9u +400107,620480.935115,0wOkiqXa3k,869420,486267.197181,OSRIaZapHk +48505,192223.895754,mqW0mAq4sR,918200,784128.642276,vcmQLEsUs0 +360506,479580.847341,gTSLu1lkw4,512125,962732.262112,DkkXaMYOCs +919362,899511.551956,zV1rLQXclC,527013,955995.749444,MpNaDUOm6J +170414,466002.050516,lCeAgh1Lai,909459,419752.252047,eAznppcfA1 +231658,153715.923944,pmGgbmhDq9,92350,692019.249003,qFGU2k1B1N +473289,880739.106756,ZwT64bFNaw,640936,435851.028430,7FmLC2I61I +316061,224989.488749,5HblA9LLrZ,433334,159733.839102,NrieFNK7Lu +655397,260039.019078,iYtMq7gdiv,356227,867397.816360,X547toFBR9 +199492,149908.478024,hsFbjQR9V3,901392,845891.341260,9F6UXbHaZR +416121,440325.671655,xTcnH12Z50,163787,308554.339408,UeZ39EkhpR +886277,450317.456362,F3D4IwbGxS,230381,310260.779681,EsqWSppIvY +601007,539741.994748,rSH7A7YYtW,211928,864755.082972,JSjAIp4JeX +719191,336880.372113,gjop1ETKxl,865787,274522.653793,EeO3tonsRI +593674,718726.730323,rUZdiYlf52,625122,670165.134059,TG0g2UPGhU +169344,94025.714403,cwICunPWpZ,922486,159236.136419,u0QSq1ArC8 +101411,36393.452350,vlLoNcDNmH,709646,604871.328548,kjtlkvI1Ns +108691,769542.837782,EHQaQQ6za7,595305,97333.929898,g6aihCz5jA +345490,628584.467210,MwuvuN85IY,756789,676047.506971,n3pUsLk3gt +791423,98250.991433,kXiwMjqqoM,878614,340896.668468,ddin18i3mL +71592,391674.773258,X7Y1rcZLZz,837174,592505.688075,wmovlKcCwI +669308,92099.905156,MmbnBtctL0,680466,162034.326685,8pgdSzTZL9 +781601,32481.816649,bzDDKqYIBL,455689,6015.852063,mSh8Mfngs5 +511724,299321.451199,BDGrzpzl4w,678531,481033.845810,cPi8sUAkpS +43842,505752.018631,60mJAYtLbN,173171,442456.440651,Ig2imvTIFc +260663,814825.563336,W8qlkoVTU9,138244,605363.965822,2BpSMOSWjB +358418,642600.136957,9W3LgEc55k,566154,617257.366594,qoMYRcDQCY +50637,755559.412818,tfEYYbaNhO,635881,352713.377206,JHwd2Pt0HJ +916345,577481.706161,oZSgFIxxC6,957597,317356.257132,ZRgvEAQvBe +63465,159327.476426,ol2UZ1nu3f,640413,180329.954450,zTxROoMy27 +228538,831653.813102,9M71NZbyxj,732995,152730.512162,08S9hhZ46u +483853,833923.890978,OJJ02RxCbU,766748,427991.942623,wu2ye85sep +869371,291020.649988,QH8fE9kcaM,735507,749811.016360,cyi6IChShX +886832,29984.411982,9ypbENH0hf,743468,305058.337116,IWvgGqFYlI +99172,74828.789415,jPeFtG4IBU,820600,468894.453853,NEGg3xgD25 +961190,98331.856012,c1gqfFkpJA,727717,319517.059751,Q8KVGor66r +637463,892195.893591,SJMvvfsIsF,390711,468627.633222,bPG1y4SOuF +592431,503151.874445,ikMyOoup5q,338264,258655.502008,tb6KV8A4sQ +654577,450290.220448,qWKd5pOcMO,788067,427034.699035,VDbZcgAkyK +649365,113319.071867,bA9EDxOFFO,477399,298774.806503,oEDmolmJa4 +881953,290632.407545,o1EqYSCAQ3,802208,830877.486983,PSMQArHDoF +812787,173841.810783,gEFRJCLI5i,215123,62393.288384,Mgd2szChOX +724749,812262.561599,hB9v5mG2qA,783193,50905.107170,QjzpNXaAKm +628324,771929.852184,4uC3kMK9Iz,623752,298252.814834,eV69cU7RsE +385282,498695.966763,U2ZjIcGEUp,823094,498208.402211,pmTkCGGN8f +628458,331288.823716,SnDPJmJJ5y,91416,130571.954372,bFMZEImY0b +43600,52597.383770,wTO0oZuNOL,974341,812952.374798,GG3huhpax9 +333935,316428.069868,NBimOgMEDz,987860,530074.509599,TUb8iI3VvR +630253,623822.373570,YLTBci2X9d,811905,823936.574109,5Q5nNwKg4M +253972,926828.062299,Azaiimk1Yi,579932,98393.195170,Oq7LJxwPIW +49705,169731.237722,S3PUziW5ma,799546,173095.024523,TBsSFDciwu +347915,630962.262797,Qq3PNr8V0v,858676,572057.485245,s8DEayWzTJ +520977,14001.958843,yR2AWekqdx,859559,576401.078507,GoqayvqUPo +105667,111744.671711,sHySnvxbPG,661641,640268.870764,4tZuBKyB86 +538059,907299.246380,fG2YKbOCZN,498430,864787.945701,Rq06YDQAKr +440848,243283.819130,GCgl1QnhU2,965272,397391.137203,85vE6afC2f +373138,410006.946742,FCs80XnFsx,561710,195964.916952,dsxaTUui2E +884265,215117.478573,KVysIidQGF,606341,523259.867673,T42akhVYf7 +810057,360755.965333,D3xHOHzGhu,873512,585517.696086,J6pw0fxexQ +894306,53142.173409,z62kZhrcYV,358987,92201.113451,CeDUtKIIPQ +328069,477327.243862,TpP475n0Z7,496993,181171.933666,Qn3x30peCZ +201967,291119.578814,6Ms000bkiU,246683,893516.637678,KBGAJib55v +957322,627589.478323,Uc124jUKzF,807250,734348.205645,GOwRwxa5j1 +675013,799926.124956,THiBb2OnKw,735088,680589.432952,7ytMeMypnC +970362,866184.879814,D3y5YqrQjA,127950,245476.622378,DvVEVEXlQQ +638761,707938.867961,uKFsArraPI,520286,199121.348069,PHs8I5NcW1 +614411,237864.785366,ZDzzQDYLtl,390788,346640.093363,dBwo1pTRuh +547249,453251.678050,WGW4hU5x5T,891709,504117.815144,14mAToJOss +113191,25332.726315,5PcTVkiKJF,888905,688492.798081,FiMZpM5izY +755140,809972.222569,bE8QLlSd6G,451935,818694.027403,l6JOHhgbKo +81211,973946.729221,wNq1eI930Y,517528,495018.079164,dFTh6uV7q4 +298333,895945.235362,kt7er5Nbeg,96905,83623.882889,rccrnVreZq +477636,794602.391878,gpH8tNI2et,140892,901332.740134,3g6HTK1c79 +67838,281824.221514,dU19Q8GzZ1,661165,278296.937230,wVY4B0hCAG +554227,845351.297005,xJwD8fkxRY,865221,586000.835378,sRQnTbRwZs +595128,910413.541785,I8sol1yylE,903349,557977.538675,MRnIkgjIU2 +49041,97314.256232,0DjAgQQgbx,385162,297410.700404,XMWJeopq9U +937303,232049.940960,eejbu6bRrK,725664,506104.404757,6e9mfMC6uJ +112867,926545.399963,m8x2GIAwfv,230114,152923.876738,W0Qhw98zue +433649,183665.098154,hxKKMkOXkF,214465,265580.476120,fWlrDvg8uf +467754,242559.173741,OBMCpf3Gj9,691442,923906.667839,0nuKsIi81T +739845,258321.677252,tewHky6wR1,873796,288741.112996,FoJQ3Zh4u2 +657453,929435.662976,hJviHnH4uF,57918,299895.211299,Wibl49dXlB +411384,97911.912056,aRtSiuHohN,710711,152789.504131,MWp4I651Ml +347202,467802.453527,LUbpsmVatd,922601,383417.997748,TLdEZnazai +716317,837916.283819,jv9mO29WdV,417785,848361.194673,V5QQo0vfoX +177878,601619.520652,6p4srfN6mq,694021,847625.231308,sd0imXEmoQ +982034,891529.195831,8JSywjm5Wq,155777,700862.723405,dDiOp4G1Bv +632352,530057.186164,ZHbIPeHGrr,517259,289702.739720,g0FHHs2VGI +256725,663708.772304,4Wi1edURfv,713334,159864.170970,k0NkSvGxZo +610435,38025.977650,B19IUvpv9y,169744,148089.308868,lnfjzIpe2C +591669,840409.107419,WXHsuNk3s7,749016,394567.235918,HSW1r6xiZs +954586,47157.751547,Yb6mMfBQ1n,709832,585457.155434,BukBysodTJ +198557,44632.136148,VQ1FrWdao7,396591,300408.363950,vVabGN4rZZ +348445,806189.767798,Z2jji88ZPe,969543,220055.313897,H0gapyBwQ1 +433663,162420.708476,GTguGQ4Akf,167096,898131.127737,Bs00k1mqvH +652184,955720.079635,bsqiEjahmA,113487,599738.932541,VN7r4jhoCc +803794,140322.728409,OWP94w9wJL,857891,983633.907694,vIEyozxpdb +394058,871863.581337,4bvW8ACwl4,549144,557020.100046,HbvMdQ6OAX +41882,641127.896047,SSJ7LKaBjd,57408,285188.098897,NYRIIegiKw +245728,325373.896011,kK890bARP4,835834,103817.121482,CwsRP1eBsL +628355,610319.009729,wA2LENJApI,492972,232748.799525,BbztLxifnv +977631,498015.826435,P1LnJSrPmz,182981,531383.830280,HJwqi0wKZo +268321,867228.560052,eo6wAnO32Q,661191,686973.824750,Y25YiwcaNx +140667,945710.966306,lRuTB7LduQ,205912,92287.302829,CiWWYmfCfy +268039,122701.896611,GImVflxNQj,977993,809920.214744,O4uG8r7k1i +125789,845295.738784,doGOqpOeAT,643015,597745.505184,UeIpWpYJ6Q +679913,818383.975765,COkdepW0tr,170903,976904.796272,iizVXCp11e +993738,162740.220521,y5c5H5BD1x,600879,81487.489089,UgGfEpim72 +841839,656681.517791,sXjsx5CbgV,409477,460586.025451,ZYLJcQxhuK +554826,97264.984032,P2MVxsNjlb,17311,629382.038255,z6NzB70Zeq +407165,67381.389415,7sW8ebsXAq,614333,276575.310535,sRIE3dpdUh +498936,856160.164907,xhOfaKTZTv,144897,602652.119550,F5oIWlD73Q +549654,413868.852197,VSkSTP9Uei,413019,793631.985944,G5g1BembnA +568995,469691.552934,oikURPBCuT,831890,44112.490809,wR3ALKM3F2 +151165,742325.463775,4CPdpUNYM5,276716,986828.919207,vnrMOunnW1 +619308,801431.003754,Wj9eB8AuLy,406226,493075.866428,rdMnuZBayO +646406,596170.578634,2fxqJdptYc,117922,639512.433301,6bvaWXHMaq +675662,425847.515836,kMqpYIgNU7,16142,424781.167777,AgehZGTCSH +47107,289221.269081,JuykEd9zP6,503220,770954.032695,Lhltdbukoo +858210,58622.214316,s7Q7s6CjTs,725970,460252.305687,7yEDSI4zsC +462687,454954.872634,5ZlUYgVwcj,501638,694919.046349,TXTjvyPTJD +634483,996706.504314,Rb44VY5huV,429106,574045.673416,9ZIedzn2Yf +68597,842734.952081,zlIsIGyxAx,533591,840207.787899,mI7913MPqk +71091,296462.578569,xzduOkp2Ia,316670,546274.594363,3fD2AuX3l3 +72580,627949.268996,tlumnyUKQB,311181,555750.621309,aZku9lD8Gv +880170,436685.459013,DVLuq2wMvd,742889,78783.114764,YrEA7E6ouP +589456,765993.894665,heJGjuAffQ,188496,417407.385627,uMn1Sug85H +977632,847435.542966,Tgle6a5LSI,577447,240788.613616,RrgCRR6wdv +961966,632302.997799,MnCxjL96nw,823434,342176.255082,rXJ9U7vmux +298281,107121.286307,yRMzOp0GyW,962267,798302.602401,wLv7iYiYrm +86614,72545.536007,aTGUrtIgor,282292,667385.469369,gPhEG1XOu1 +777122,999182.282999,yQMIlh0e1i,517273,487109.494961,hiNaJA2Ouv +46329,469615.741327,vCfkk9lTW5,708975,555602.603978,fFYSjb27Br +751763,179936.032790,J3Ay4LYdbq,616969,879502.195031,kqhj3gYtW7 +566492,445416.270378,V4VHM4v1X0,170011,410982.206837,s3JHjrqPOr +818256,766981.024142,yWK73GXEP1,941313,738983.028670,1B3lDtc6Mw +399735,431879.248646,EK9oCVwzQ5,433016,886949.086725,skhFwfArWR +476990,570007.287365,Gp1LxCKA90,796845,787020.067274,5GPIZmgNgf +890439,6016.817459,xLeklFoVup,860001,387381.097465,Zc8d4xEq1I +54795,93582.158031,GhdOmRttmz,461845,756220.099983,UedfRc0DvL +493489,942278.835305,8277tTaQkw,52730,634339.753290,wBCNAU91Vy +456641,194737.447548,7xcw21Iaua,97001,434967.352082,vWFUsjEO11 +157675,942182.913383,sRvmj3P4KM,366321,532187.773363,XVuWJh5PMA +254790,839030.603371,nmx5SOEjJi,967804,848743.505240,QHAQxufWcg +824720,458529.061612,yDRoZIBlio,13167,179352.016395,ao4vpUpQh7 +290162,688356.088414,Ag2CGWJpe4,450443,534759.645586,bZEs4WXrk0 +804523,44756.503058,r5DOHw18ra,237023,968681.964224,9aIWVlmlbl +961840,612558.931685,IQXQO8kpsq,864844,739752.702552,0GTdoE3cQv +176526,469708.732891,YS7a5CnXyQ,226499,46806.000505,h5223ca8dJ +685495,616000.282018,zytIjrV4ve,896810,212079.793007,SVvIYmeSnv +504393,365853.272760,uNsEj6BBEq,858656,766499.829836,w2efQczBjL +208124,485855.426791,eomxVc6H2C,5378,628167.760488,8LWe9ArJkk +539464,176337.493194,q4fBgqDmjE,527765,760277.566857,cldDiHN1pE +271523,426042.056762,Yhk6wX2IGQ,587117,411850.493398,JX3rTpCbVO +787843,848929.849154,jZ0BhTIRqL,694865,916432.777431,jLeoFNVEt3 +390659,863052.521405,TYGvDe0Qr4,519027,763623.686410,chxX58eGc4 +279777,708765.372064,91Qr6swwwq,949472,350966.623327,PF2dDNZy6M +814960,901597.454846,ziTJVKeFTZ,147006,392194.833612,nRWpz1YvrW +938092,923388.813977,AoyOpWwxP9,349570,739524.272129,fIEh84HIOy +42249,421440.252600,7qsonEF88m,291588,997222.324220,01tI4awQRC +785670,459412.215981,gKivc9PEc9,682103,74777.654850,PMPnnhjjIw +316499,285907.042363,ZHwtx7hGCP,692246,200248.886269,ZpDiCqWwCT +38534,676559.992147,EtfoJy4ttg,429775,780148.190168,ssgJY6S9Ou +863297,560439.826079,bAVRJaYhU0,208009,578001.802035,NmF8vCEKZ3 +926125,30187.714712,X1kiRGl4EE,663115,365882.577572,hg6bhC7L04 +936681,607272.562574,aNZEAXj4M5,997663,924441.803436,aX2tfPHqJp +738566,720275.373227,MCP59rs6GB,866460,263869.481026,CPAJOwUBTR +945202,734219.070047,tgehrHVa6I,777548,273559.213837,c5ZS0oM2U4 +115015,107429.306510,Q2XFs4jF0G,734573,328090.059432,yA1n6KfHOz +281531,845345.255396,i1XaYpFHlK,354904,112097.713913,8hqChjBvCf +859881,761684.064282,KZ4YjSVQx9,855452,769779.349924,8RVbeFnMlQ +214856,707405.880236,vGc6w6PJhQ,630489,614481.217130,8ioh9h2rSt +643652,161524.423423,ZaYoKc5AiE,118869,560509.853576,TnJGPJ2wYW +389907,483828.564595,p6WjXPNNhv,192882,723939.143199,TaduOmcQ7X +845413,559150.251357,UtQadNoOC8,542135,482395.425662,F0kRJtVmvh +345665,87792.984238,yT6oTRihTv,387449,582286.444315,dzzZwN1K3d +333547,654059.195383,jWvtfYhim8,19753,197194.331519,1tIlqsS5hM +365461,621539.800977,cbFBGKpF2M,857530,617088.942933,YsmmMiUdOG +580634,265583.652605,Aha5AJsMRx,595120,755831.713591,lkK26uDZAE +804436,331998.605090,ww2fCuwwlt,651789,400154.906212,v4KCcfemac +260960,988907.426098,ujqSusQjzV,545424,950534.796905,0MdkL4yjs7 +888179,271540.772713,cLkheRl5FB,394879,993884.896873,HrCFaZGiAh +484163,274346.475156,QYAkKOg1M7,922070,161251.602253,lDV2bvl4GD +479972,736072.744198,EK4FBsKgaE,889764,563657.162202,r2NsWbfzBL +39386,926467.505209,7sy36Zkfip,815241,938515.894616,N3ahQtMqC2 +294343,72990.773134,RKuOXPvAp7,425128,630152.221415,rqxc3H6d6e +739645,685678.728106,M4K1s057Dw,243144,195822.067300,waWy08Hoz6 +644939,652120.337488,F28jlWC9V3,658140,896871.525770,ypo52HMhCm +600526,605389.245055,7CXPXUInP3,485609,371312.086999,7CfPMljf2Z +282919,272181.404167,NERHOhpXAg,161000,24976.458049,YonLzK0Ms2 +168171,405948.627073,eAuebuVG4A,241797,107709.311409,zCieLjT9UK +713628,671157.477436,21eNoMXcTN,797973,306408.118006,HKw0OwMihS +402010,29224.171916,YQOYWjmlBV,510962,932055.866408,QqhQzZfEV1 +810079,551584.510932,qFpWTt3cLO,206842,723384.520877,e5x02R7mt3 +483172,260996.563043,1obh1FFIPM,726964,972761.214796,sZjzMQCAFn +755545,453258.564640,xztJhZYAwJ,675048,299000.158669,Bi3DSGYK7U +493075,290835.795005,H07I1nrkUz,171555,913067.056202,KbNCQqhmjf +703313,619749.609413,eGe6YsvMwH,313297,156347.098857,Xtol0OMK8Q +5379,452914.829724,YDGVMOWbe7,446637,839938.097942,1Up1FVVxye +625713,203845.705609,6etHYU2F0C,885792,221602.569651,yxGvDOLWKq +437957,35160.130197,zXtKnzqwh0,665822,833061.764834,GHmToGr3FH +127824,318483.615733,gJOjkrhJJP,12716,177928.545952,OPmYO5G75I +732415,341640.278244,oTIGICMECX,588543,930298.090982,z8Yxlj8mE1 +336490,788082.344218,wfmbxT0KZn,506610,90908.441214,6dMq0KichD +589152,581912.359133,B4NvwoY57l,805289,928154.828818,yMW6AAEVMp +205315,268576.483699,g55dGdbI6i,15833,592221.293544,jwaHtrVsov +625251,274899.877894,SmYfAqRAWp,389001,60724.810101,k4vZCPRMv8 +540978,367645.479681,fZzx4OVpty,14404,399691.878503,xeCJgIpmI5 +136323,581820.483874,22YRaRGx8b,909108,251436.987472,aNKi5uwdJg +621645,656888.905964,CawKsNs4NN,837697,583165.019141,JTdaYXieEh +603495,129423.821912,m3ckuMA5Ep,821572,689636.338994,XVYRMtdtgD +897302,818230.477550,snOzBt2Jey,86613,134099.025884,J3pLDLE8ph +399620,44242.262072,wEWXcYfyL8,928857,925800.718803,2LOupRw30e +112899,20934.619847,pWXMp1c6S5,277129,23278.611805,K54ABuiPFQ +159117,942695.237473,Ds0PjcLO8b,614692,635413.418617,22ryhDlUQB +667166,406746.505873,t4td1wrWUA,948380,529192.092868,VKbcaRKJkj +646546,965687.022519,kUa9CU9Raf,932581,632159.873471,eSP68yibvC +418773,526255.080133,2Ohxgws423,373906,168354.082857,nv4ni9vk9Z +856955,507593.834287,CPWsWr2M2n,138410,602129.879142,iy5yjfv6UZ +684195,625076.851691,46kaoqULTe,991498,739966.939430,8r3oEOQtQh +685146,452634.689571,VGpXJjUEsg,764590,64776.431007,pxokBJ51kf +237458,271946.390850,NUs2FymtDG,83764,9092.832645,9aIaWopUw3 +228750,876826.848837,ugQMNYiK1q,504866,942266.363452,qJnOMK7eq0 +77601,732020.845081,hetmvqpbYT,449441,187829.961249,Som0iP9uPS +444529,319197.569316,aJBQmyxZWO,501229,971093.091009,Mtjn3UIfpQ +908277,328883.365755,MlIoyGo7gI,325278,993037.614647,jMEssi2XGD +39668,919809.996839,Cq7uRymmrH,365964,257313.603383,A8vEdZ9ycs +24826,19101.959962,Uv6TMFBuCT,822554,46849.515401,tbZ76vpSo3 +465279,660231.146946,kFbTSS1Afd,800927,358077.837911,UxcEDhjxAX +870066,626941.657165,waxcAlLWqo,236979,808934.696880,X8AGg3fwiG +633913,904748.062512,8m6VTYJdoq,416609,615638.127889,XeBktI8DAE +759872,746409.688161,cwye3BTp07,885237,932593.427215,3U98kZUNRC +709077,712384.843272,oxZTOzLmw0,387542,270943.538775,9K03tPxlZG +377896,705136.824929,mWGxNDjhMF,993170,788305.435456,8obRk5iFg5 +705373,113895.924859,I2pkKzic7c,464138,257823.219144,ZkPoL3rNeQ +780584,988690.012213,UJ4ZBS6PQX,100619,432669.824705,rZ1UfXyh5z +549094,6624.470701,KPygmE2m9w,938540,817440.792005,M12jdRwZRL +140367,954705.392679,Ybi5eD5UbD,762681,605356.307080,aZBsps2jV0 +655822,44789.574473,Ha7vGbQ81A,727640,160226.330831,eDoxMuwYHz +824845,225657.412248,zp4y2QFfvM,1812,365743.689217,sa4SS8w0kX +472127,567602.997349,UZCeKcTQFB,933309,713382.706777,DPaSIBEuQj +182654,970962.170506,CS0bFf6M8V,668303,172583.282170,lDJrCVTNLE +159661,890056.710435,DLX0QiqzRo,380337,875378.924284,zy4SAPAMcz +245241,470935.562598,QPCU1sOEkY,479969,801183.592132,qzvASmbbju +64292,608051.113380,M9iRXGJVov,272801,571146.495882,3AyUheVST1 +381521,129499.885527,RmHCKrGli3,984647,477964.537400,nXDr88ccnI +92228,976211.363543,2QPTNquNjM,546668,754542.974588,8qdxldaFMD +388257,819239.813783,Y9XUGBc83P,791652,875858.005838,WisOIjSVhR +436631,391180.277969,vO5jISI7qA,427133,208049.084755,OxCjFA8VQR +620918,433943.046450,NV1MwKR0ZI,243011,591825.407421,qTd43eORGp +608335,699760.886508,JCkDIpLGX6,18134,71001.647492,JBR7DeiIfR +485900,806153.490668,1NtYe0YiUf,365005,457688.860845,pFKPOUwDYU +345765,74966.079732,naPQ2ndlvd,569111,725794.796054,iCt3O7nxMS +245159,447850.851184,T8IB3n6PrC,307600,567082.958754,t0t0qzbVih +856798,348961.829862,mnBMoz1fMs,431605,721883.047542,5ZdcxDodS3 +806595,930469.435203,T6AVNHmSVJ,595668,639418.394402,meC6vwKpjK +966644,868986.163885,mQ7s9CHPDl,665224,913591.842000,LTH7LfuWvH +795520,67169.735109,0Dc3YsPA2x,173720,954162.799064,ARuJkxonHp +543032,784009.290358,c0hudHkJzD,74857,999249.027841,KYU2Jl0UX0 +299502,244551.316705,aOpHVrBFrX,439506,809018.707037,nnUbbqlkw6 +760185,510382.417508,IEyyWikjs5,834718,686227.760492,BEmg7R65lN +148808,501371.157792,lsybtTCff1,447860,95379.219117,jAIhkS8syF +517314,952723.417609,XtqaRbSRlz,662668,528945.101084,aAH5iyRPVy +216033,748291.345143,lWW8kjJpbI,254458,673883.179938,boPegR39w9 +713847,751101.064869,9qBcgIbE4R,383607,164008.199918,ydQUluRxax +10048,908211.694519,punlH5JmF4,807171,202875.923692,N8uPgWcNXz +307985,859351.894151,a6oITHknuo,681905,706026.828850,dtEamhMw58 +308496,29556.319003,IY5C1G2kDX,307473,691002.686424,HS6E3ERJKd +813051,18130.098725,4zaL0MHzgf,568,813387.835627,82EajXFfrj +270393,241425.734331,mO9USwmEJX,583714,880602.741549,HLCkEJFuv9 +602319,328579.257142,paIJGQxaTW,994068,869727.717268,Ql7a0GoM20 +489984,70039.632013,3yJlSgsKXB,959994,67098.469786,sBrBefXPD7 +152027,30548.428110,9SC2SY5pX7,541260,800993.695652,YEfyTjMaBV +411381,249969.691797,X8fwJ83OmC,264479,102967.375512,cOwZcqebdq +503480,910827.780538,rq9bo6tV08,901257,101716.126668,j93Vrldqgf +159318,746804.740467,uvHUT9m4qn,107460,384819.936494,CZN77Yy3x1 +324874,492691.981400,vPDpwC7oe9,456869,989466.349271,GZO2hZUhCi +745952,745315.769727,hCKh0Ozs1W,349115,568176.840894,wz4Lcotw0P +174501,963409.411246,aMEMz7X1pp,704378,553810.465323,80H71mWhcU +949293,601734.420250,931G99gJWt,768519,139402.030007,Kzqv06evF8 +745726,671088.584040,NtHKF8kRwf,506011,103561.799830,AbsvkkgXKy +943372,882603.667816,LdyiMTHR6w,302155,568392.327654,YyQwNtCmBH +92573,113911.583748,4B3mKJkAgX,390300,452437.525936,rSb19EgYBg +717996,299991.259558,9XkK0FnZtL,373040,42735.812706,GpSZEbz9QT +380973,492412.647751,j3DRcoAsmG,956911,493293.039677,alSGSLV9Qd +894511,790208.866910,mGk4kbnaXA,157755,819782.823738,U24vN7RrRH +415106,682259.118901,RJvhWYkzp3,940062,125181.816129,YLAySQ28JH +573166,620501.240831,owQ4zQXgSw,359952,101361.369204,emVxi0pU14 +284221,871640.001078,poBA8iv8rF,463038,7578.968896,45tfYn2Os2 +561483,366783.178382,bel5CKMkc8,884282,376197.437010,wUKAhRq47u +28655,235468.159044,MFbmFfO1Lx,747323,371355.270214,wA7vYh7cW1 +743467,398972.623221,X7pZ4sUyL8,759950,956869.006944,62jMMDJgiv +960793,508287.114897,5csU0dYvmT,932272,987201.652667,KR1XPVfQov +832222,303144.788645,OXLUxQkhe0,166392,778139.226787,1twR3UXusM +747088,457246.844360,3d87j83fyD,836271,384070.977453,Z8gpWHLWbi +260518,983272.646542,O4lv5GavnG,360174,563376.902579,OMcCJ43zAg +772954,833075.988742,cMFEy4X2iv,300957,339610.645371,9DGO8bNzeO +360972,581456.228007,FJ67P3Faw1,294653,279882.444338,HtBGbZh9FJ +569185,666936.860851,LrjmkRHkwT,33702,751223.219456,mXSlx39Wfi +58057,216529.564464,zF1YljLmdI,113538,171500.059902,sp38FlZESg +455594,709093.913533,fS7XZpUJTy,607681,567379.616565,PVnD52sXXL +164292,277860.928886,dcPgrLfKws,756164,908317.253548,zLi64uonID +906049,292126.353172,uEWW41kMK6,855818,795417.812383,7rWl33TIYL +575970,577163.647992,uRuzKMl3R0,326884,339792.522779,PaGZWAbHj8 +591294,277618.037144,m6BEVsJRFe,383489,566028.087733,kLIwmJe8c9 +121859,98600.408267,wO5hiJBJX4,848275,405489.173856,SgjFlJRl87 +457308,770499.583406,L1y3LG71XK,371049,295653.042452,Wwt8iYI37v +347174,927639.076714,Wj2M0udA4n,307015,775473.098774,RsdSWboxIn +538957,995354.652483,qs18tKagaQ,294552,123819.757143,qkIbWfb8H7 +248903,359490.395490,whnQPXrnx1,626691,214358.690820,74DFi1lrP6 +522739,977067.855896,lxPuzLz6so,582685,965197.029254,p1HOkw11ls +56150,191856.621823,ZiGyal5VXv,85870,356860.736610,zMKJ0qw7x8 +736509,180996.013137,p546cgMCHZ,413710,630189.854962,nZIXDuSggG +167520,460744.233862,L6NA64PcwW,629752,45875.922777,5RLlLEnfBN +3998,101397.362038,Hau69binLK,655445,250805.310708,6Z12stlK1f +540012,101001.039959,Fhh2MUZBK7,922363,193615.688351,zW71CX4p9c +703075,147609.674370,paHB4chHNU,857248,521076.548342,hGR5bgPN88 +303665,105249.395680,XTcs31GaXj,336249,105685.126700,3Vu525AmgC +101649,975388.309032,ph0foOiHD6,886923,160551.551700,kYwOuP3nCQ +338793,287696.411674,TfGx0BL3RU,666998,73110.718623,muqrcBbiSJ +395677,306768.537959,NgQu2OxHnm,650767,275029.652868,jgkUFUUeCL +925003,81516.966204,QhivXawfal,522751,573073.489959,kFnNZOnkpR +536143,89622.416575,bxTgR0N5Y3,400291,448724.570028,0fT5JubsA9 +578829,492364.481297,fgQPsMlvHx,263843,758054.318576,hWr98UNhdf +83578,127580.905999,tz5Mvxb1Be,584838,631654.076306,ISP2BDGzFa +297193,232437.572994,DxBNw0W0EF,933713,601649.280732,LAWMKsdYaI +693994,701362.905577,XXQ1iJ5ufI,135471,619878.794280,OYNZaHpo20 +319865,812147.593824,L63zn4K5oT,212050,860885.748070,Tb7yUhgxlK +728671,282367.378704,rZU9bYClpc,429882,897033.748971,TXp3UAQIGo +287274,836762.627824,jKOKO5gAfE,838187,470624.833790,a9z6TWLw8T +279909,315288.806501,nB6sRIK0n5,282363,788264.836960,qtolpFigi8 +869765,637095.338477,yc0lt8FfKY,354612,809157.556570,RV7R8w0UiN +11336,890081.783162,q1ljPoHL2C,775838,357703.479319,AsS7rC5HKl +799095,30450.488094,Wwp5ltS62S,908166,192290.781165,moYL3S1v82 +232232,661766.042687,mi146ULGg6,925612,514517.313984,rMHOPFTzN2 +379913,424867.922121,sEFt6e61MX,357030,522343.501111,YgbVNmmjTw +956459,19744.182690,PnLEXcK0zx,132137,923201.898928,yJvjvC1270 +45774,984742.344123,O8tSOixqu6,797625,69262.730896,0QhNNLzMzl +210753,71465.290038,3G2WVWV8Nd,33701,434524.242152,IZFwiaTUcO +367280,713299.465061,D3i3nfYpjL,837759,703181.404688,MY1BMzPKsi +782309,847761.671168,qnm8qQMas2,993556,251642.905977,JOMVDmWCNA +185024,780327.668637,Be89T8HK3O,144555,695943.391990,eaOmvYHj6i +696929,303251.664935,G2v2RryKnm,413799,257853.365695,kq0RTAXE4w +65969,848474.828198,ViJtVrY4QZ,606726,163245.093946,pyY52ORpaX +487644,199876.416042,lz4imPt5u8,333682,383921.597869,iIPlaHVOgm +834000,349372.339022,V9XOQkqSor,787035,527986.047357,LTHcKJbz63 +776585,926328.424538,TxV1BrvZwj,804542,386397.809811,OsYRm2wTtC +780898,913165.609147,4E0dKH5DDG,935775,123143.301140,by92AG1sbN +351029,912673.378795,9h5d8hJVQp,156364,962474.541264,FpNSJ8uwuO +259023,321251.031251,2CK8WVISyC,434769,213430.553728,6ECF4AKDYu +434360,888592.436040,LVMYSDeYuN,518911,920167.467327,F7KfcFyVs4 +397701,558821.680186,XfeOa0IDTl,964148,506200.301075,ogvk79Dqmw +380054,435330.541343,veMKQo6Npz,481132,401769.560092,AD09HPShoA +809859,886414.379465,4Pw3PnsPHX,636845,758708.707023,OjRUH6yLiq +798696,990694.126981,y0GD2YLUJ4,746371,905549.555898,14RMVL3imh +623826,411868.382347,ETkJXn19zh,873160,417715.415753,gVWVRMzOPq +95133,224822.056684,856NaaJWpA,221830,69624.081856,k0Za7uEOu6 +501995,721891.181635,iYWviieJn6,394700,768921.900398,7thXBOEckS +881875,209026.548273,O9Crx9AZnU,917634,464356.768154,BD46ZKu7kQ +681316,879482.435577,iimEPAcEz7,235449,351258.971471,NaeZVTjhJG +217195,970462.343013,FAOBp3mIsl,958934,870888.736674,IUgCe17EQY +519239,903915.012171,Exc0hANaGX,301809,396248.916350,BNdPgTWF8e +778540,660545.151955,JlJWEWinon,614706,993733.881875,95tV8BeaX7 +837499,966624.534232,hFrN2NOpQ7,412496,378344.603618,A822Haj8bP +294319,471090.503202,ymTZI7nkbq,198279,986656.650561,sYGlz20wZv +47298,970711.060011,JqVsKQ6JZq,891938,617947.343607,O0GvkROQEi +471544,577413.339318,CgjFYB3YIT,531662,363362.342545,TpwFWczVgB +812368,492572.464899,Z6k5uI9t2K,715906,511496.623278,Qtw9lbBjOl +909061,209847.712128,ctHZLv26l2,711603,55964.322987,CdWK1uFwhs +574502,108157.817274,Hvrly4RY9j,101896,932178.252272,vUKLgZ0Pud +286599,556026.888269,G806NrieUV,769372,700126.027861,8hwp1oJrsw +850016,959553.426675,vQ5jy7wqPy,96008,675269.715257,WyNoJeEo8v +34225,132167.556390,ZW7kmfg9Zm,378721,399096.077554,GSKal6xbgm +24,273093.127876,USnrozBp6z,179572,252988.739675,sRKOdIfCQa +142559,980817.043911,gJordmPzQ6,2414,241008.343374,H8gVg9XnwX +945754,676571.113054,l37NwmUSWK,600157,674973.246938,It6VD6Hm3N +880705,423238.990729,rNtuei1oHD,36756,180739.265435,uHMoWUoJYt +861616,565857.377759,VBZW3Wqgci,31845,473829.118143,gzJWjxQ5Ek +552355,657614.340626,9k62ClbbN4,631396,185570.241859,vmbUBeHLpd +24078,819013.506118,jOXgK8C9C2,809618,241935.220525,bXsP55koE7 +440242,384600.574777,OUtM1YlUdL,617088,975011.158165,sUIAvEYG3t +845128,94776.278151,wLIFkkLX5f,791315,261088.776901,KRX74UKiFp +575721,144636.960132,LwUhAO6vgg,392242,244521.057284,XutaJBJyq7 +870319,184929.529909,dor9pDB8wc,571021,7310.570562,VxgUIu9I23 +650436,54010.311107,VxtqOcEUnl,798016,826146.960092,bAfHFQdHb1 +289923,611060.060288,7l0TbiIh9Y,141416,829037.751213,nuRTnuAM3O +486731,879273.648662,P63EMRF111,648260,950726.878905,EdyW5t6ES7 +434764,948423.981323,mTRvk0xmhD,282967,309112.537986,ROok4TAZ5G +923491,143243.894102,y7RX2LTs9m,316798,999249.775363,4SV2uDpWDj +814830,645522.169224,LE0qDTJSZV,929939,930668.463639,GLkdqwowJS +528983,329391.764774,HYAfVzvY7h,225395,737133.882103,0AbVhyVhCa +199389,284514.979555,7kVWWWUo0A,276747,630438.680850,6moDAr1VSO +570184,933694.090470,YczH9c6OdE,82732,142744.940935,Hi7WPLAVSs +270563,645276.958748,Spd9hLcWe6,189161,600042.087540,sjyg9tJDrg +245363,330000.842337,OS8QltQKCN,38406,486107.292198,iBIYKgAHdl +71480,162840.682790,0wHeqxyK1r,94502,853710.317940,SeJw7v0hNc +434033,139647.677978,Z9jMrIxz9q,515479,626847.226124,LNBHmJEfJQ +655688,965163.465257,DT4pg6lHsd,55895,560549.079270,Nyy0AakRB1 +204162,272743.638569,qR3W2uKzSS,564006,112163.573962,WWZwLVZk6O +765222,1296.324346,TPWjt6ue11,291216,722034.798462,NmijQntCy7 +363201,695077.926901,BBJfisT1MG,886323,742645.243699,Audfs0J679 +549355,488299.047221,3RjJPVSHid,188950,177866.762598,ZptZPZXeqk +868280,648945.956734,rwBznp70dw,750184,21385.102994,BAHyXvoGaU +879164,497127.977358,XLMmj27I9O,687003,307865.749733,uPuGtNhyQs +526504,754178.633995,dq0RmOjgcv,829751,202294.182277,Vnp5jBqw2e +915593,424033.286156,fztNLAPNq1,945112,724130.651166,JXQpHOHxMw +989134,813203.945457,SSI7lpkTiP,352359,265409.608322,THPevhcrUV +339830,413074.263905,cvYL2Kf1vx,592264,481262.284136,zmSiYQsAhE +809050,688787.572023,fuEgzlhIzz,793971,462037.241934,pSybGL4jUu +193613,558242.358894,nUTNEVDmVh,161891,722303.112469,1e8dksq6c7 +544905,829546.484704,VI21OElOAC,887880,361072.562307,MRR7C9pIww +230815,182066.229792,rHFq5xXcM5,420506,32263.833422,C47BZO0Rx5 +395514,203144.768497,LIFagkIv1M,841970,74112.998314,wfMpQ4I3Pq +127556,736404.526076,rbr0EMuqyd,585685,821714.516996,nHfv25HFVq +902333,549431.980561,m44pSj8mRP,264331,78419.243620,Fk5ecxVUS2 +369669,237807.442058,IomPJyOl9F,513478,676534.110462,ZiH82yvU2G +409253,289855.000641,pM2r1jfKb1,33225,525492.874679,M1j3oYohqx +172388,10398.360806,ovwcVD7lQS,51189,239121.113734,VEpdI4Iy80 +735165,506675.338617,gFrGwPM4dZ,945279,507373.667734,fLsMZEdDPt +868636,140692.007015,gdu86ygQH1,904363,252007.332305,IxqhBPA0Nx +787313,476054.369310,YcdlCSrcpV,847412,812747.300130,dreewzqB1u +537082,679321.470005,lEmnIjFIH9,816738,764289.684746,Bi1v5OpLX5 +255356,661448.302513,wUVFH9Gsh7,997053,359456.399639,sL36YnllFM +257658,766498.102307,t7ZJaMRAE3,476185,293168.237631,wWyglp2cWT +579276,796591.407072,WfH0TvK2p2,50264,317746.798308,ajq3IzYIlE +171255,900860.654879,rD79E3qw8R,672331,286371.160460,PC6rf8laLl +203289,978324.916546,ylNYofKq6C,613435,436705.601865,FeDXrKAUCP +287144,733355.041803,Y8BHhOgkCz,441023,856336.308861,O0CuPZt6PN +426901,205775.772636,sK8P0dO9jD,372918,833111.857639,zTIEsoHO2Y +556590,189350.301057,tzEn4B2PK8,338052,747302.932937,whjydM1MJl +614067,979000.919193,krCFfEg5u1,969928,905187.195075,m4vwbD6lvm +297501,131284.205033,uP3x9JXsv7,388316,149229.490764,9k6utKT6l5 +416293,849089.023554,TVLBVB9x52,661235,897782.082049,BFZKn3tUAj +11412,421523.340587,w0beeDcTq2,349727,701796.726205,NYnRhZkNGd +114124,124917.645709,5zwsrUgs1a,351994,851139.557350,4EXe2Rompd +41272,737698.344151,8W3IlohANM,607102,902462.890282,s57TJGuOVE +496072,637444.890826,4jdGNflW9r,186462,257420.814541,Jrt0yTkHdG +466019,156891.637981,PSAzvOFCkL,700920,688577.053147,K7cc3RKVuy +288089,766325.471781,L3ExTfbR43,13082,714811.042124,jG8Srcj75j +564535,559329.368680,YWXixC46kQ,90969,753170.347188,NlsN9LhAp3 +736121,244089.026340,OEl88Lrmxx,92588,364669.396259,Ltdp8nJdsd +432049,671855.544023,ZASPFpxFgg,75983,867326.701424,GvzbBWJGZJ +789188,642713.660851,U4i3CgmHWA,993046,399679.315999,GYPRt5LDOt +725185,822185.096274,Mmo6mOijOt,521196,984500.576523,35zCrjMY4U +346952,741621.276442,jBIJUOlZZl,708123,211791.863908,SjzDEf5TaA +752644,923698.463437,BoFEUx2rWU,8095,695592.259353,hx2lr04YFa +600892,702712.785410,JEQbHMZffy,959903,441342.910418,TIfP38dBfV +135427,682.442978,fghUg6ru8u,757948,299469.317891,1PmVDJFExY +312228,101697.467016,mc6fteUvDI,320484,490454.954914,qXk3zeKQbT +336146,190548.461708,Y5ry9hW6O1,998020,908490.257792,jXAbPdrJEq +154823,93140.056861,kCCzTnRYjq,741144,760852.065752,afM0ehk2wb +298545,792000.364050,QjpVysKTAv,466299,398692.875448,gNjm7VS3HR +303959,829650.476021,fLL0l5mSoa,263796,129812.879049,oC8vAeJtYO +512096,315067.962205,zybYvrPdlx,58776,189167.254915,4YJwA1lZXb +703148,487618.189618,n59Eh02SFK,896179,81907.170144,0aEchd1f7w +498501,721612.782544,h09Z1ZqXzn,530716,919778.364055,clX8RS0ptX +968336,297035.370021,vrkoNXZQ5i,699699,190874.832314,gbCi8zbG7V +462758,988269.346709,CcFLt9VxSn,764998,523478.351183,CBmPr2DZgY +662249,415599.239336,H4lMdyCKMk,26464,629735.164656,ibbzlMvGBo +799924,96024.610515,BBWb0bQ1Bq,279857,648846.220153,QHYyzlR9gp +424252,219515.684416,61OUihSxGs,378041,785424.482236,hra6l4Ze9j +713666,77765.143028,jZFZtlY3CK,861259,497724.332877,yKC23IR1VB +496995,583678.348936,6o2InPRXlJ,396475,259852.578662,Hvkx73oyIh +464138,918693.220515,1C0SwKcgcM,999226,8808.607993,RrVKklP6M0 +243930,422981.163574,3NTCLWemCD,764918,444606.565951,tEJSLE9Syr +949496,343647.928993,vRDofucQ3a,348644,199843.064734,ojLK7TxP0n +345499,805392.355131,8XghNynkbC,474889,127763.479020,YUTJiLJJKs +653637,828532.183006,YhUG7qJZZs,443632,802774.633086,l9SlDQI4yW +806073,794816.708998,lTJwExdSpp,900406,892157.608522,Vx43X0IFSM +331033,457741.872253,yvfnT365k3,695523,639984.915301,1EjIHSBwSl +84992,550016.711928,CDsDQ1TAJe,999029,937077.578439,Fqewlrt7qE +684015,817824.859209,6fX2B0061u,250461,296942.566266,bedLEWgkWT +840722,109530.397872,5r3eRC7kXR,784954,924822.696194,1ruEQzsTX8 +977509,681186.586104,YlsRBpGQLI,543755,917231.096001,FHssN4Q2LI +441131,849153.285095,FbNYU5aOcV,66141,483909.153818,Irld85c3V2 +322430,789729.299993,ZTmoASShlU,952878,436507.804844,1Dc2qs8RGr +528347,448401.528383,LJxpgW6AOi,838543,39092.931185,PxNFhNYFPW +878618,390411.603841,9jL1enIhHg,995790,123115.130178,zzlnrLwGnd +706882,964378.284028,dOFmqvhmh0,531988,355717.527580,TXbzq9HzHR +978629,284359.171264,NIQYXUVKjY,939688,938684.513032,0DpFfWj38A +893857,226248.322112,7YsIqogxJy,62345,997558.360077,NFEqwAput1 +35827,330557.110088,p9plcEm1ta,985605,84632.445544,vbaiFEuElK +340885,878593.990042,i6juYxcGzS,495448,84554.513615,c3hpvTMtoS +181902,630241.206736,gGBxmhwEmt,496010,577929.890176,PXZ7dBGQaW +308714,819378.902663,SIJdtWaVSn,307475,724146.849431,uTZlsRfQ4x +952657,410555.100091,SAOG6CwIEq,271627,276781.523696,6kdAw9rlEt +187554,817553.334092,fYnoIy11D4,592583,114008.388098,LQfd6HBVCQ +453109,569832.095830,xZZ6YSEhwk,947161,580360.549189,Knrm53rtYE +342203,736436.848274,ZnQMoHo94X,771963,798482.821124,87teHYcMCH +713708,753512.840124,ZgrLLXuOxJ,73879,666561.414316,nE3HLxQKn6 +700389,964992.006300,HcL0FrDouT,334871,153074.860420,hoThfecGg5 +439231,929980.920810,RYUNublpqg,896198,151439.445580,ZBNTeMQ9zt +670588,7047.332248,D8EORPK8qd,143492,967466.168597,btc3nSbC1m +424686,389617.513610,FvThHnjuCj,417606,558996.497945,YzRzQIyIcr +384413,202974.268402,PTNlWmBw2t,641219,182237.912745,XAiXqzBXo2 +467712,890912.132845,aWrXNlXop9,386214,729231.942629,05Of7UdvkO +860811,239773.133777,RHzxWTgcR7,117471,421389.421035,HALQVT4GTM +944735,904108.323813,eiXjAy9pVI,591124,396947.928543,0ARxR5PF6V +881014,305456.242689,0sZYL4IpgI,432828,194660.761795,wEkA50TPPQ +795758,662239.831704,Fs6IgS6pn7,119971,125997.491051,By7yNtA3id +756959,439085.071546,bkvjxCv2W1,855650,689682.101394,gy2yhIRjMG +725001,470744.385254,npHVAbzu7R,434138,184465.710696,o2hwyREC46 +352339,854623.005123,jKArOf38aY,855771,261370.529118,aSfE6NmO2H +968126,796183.113251,ucHsxgL6dk,920297,13087.856300,grVdbO0n3s +32435,646876.156301,F8etvsOtyY,776277,302070.643608,2a55Y7gPEr +402385,364277.742014,cJIjcgbPkY,735842,618238.885106,rrpH5rQFSM +331711,86400.817455,UOi3bhKdg3,104359,712046.797344,CCfb2BvYAS +375587,688024.840887,kTvAGfjuFC,627938,640976.578874,rqPb5W17FU +80010,215952.560481,IhGXWrS5xF,895099,477535.569673,q0QcnFNEko +346377,306706.685678,gCoIJFdCot,498509,530593.195951,fnYynkJrsv +881501,306771.641685,CqfSFiYy5S,195900,431091.151844,hOxJ3No7Fz +46920,573916.795796,BSUb9MS2dq,67389,13283.111330,OL4rd8Pwf3 +883055,522785.723536,2d0G7Qo7uc,608045,812892.567296,cnkhsQXGIR +923622,907543.397763,6GV2tJInQd,911203,310345.447694,RKJN4bRuga +910309,400620.958559,jVWML2W1m1,282534,707884.515543,eyu5Y8xwVv +102600,333053.563325,pYuVje7Toh,68359,198557.276370,cQr1NCV9Mc +485879,411550.281628,CNR5FBEp2N,69452,39477.648794,ZBUTcj5wO0 +665644,298409.671861,Qv96f3Ma0X,335652,410538.026941,G4ew0s8Z5C +953305,669870.012798,FqaYKiLKlm,703220,256031.668134,F62PyOoBlu +192495,730805.012705,dJSqiW5pse,979596,745552.064740,UeiWxrfGFi +255320,379008.403042,N0tPhEpcyy,239653,372428.255687,eGbstOZ7au +817751,212946.107253,JG93o6vHtM,632301,449437.482118,07iZUxBcXI +867087,904880.298800,EYgJ1RjOSs,517699,549057.765528,X52Xtxdjrz +390787,923715.813404,Hx79gQ4ics,373691,450517.088911,1Zrx02CXbc +403659,957248.489630,jOX11ttd7I,778486,902062.143159,BDYzwbpJaX +459676,86401.065091,L7d76uhCFq,877292,31680.495027,Mcxlfw3ZvW +324915,586093.344504,gq6aF4CRWK,690363,548384.332885,48BwK1vkTs +148042,758359.800445,uEJrk7PYIH,832355,361484.742392,RwdDtciq2u +317063,833107.364960,tGOOn84uID,209624,410272.602883,CPKO2rQSZi +793186,987338.573552,gbBHS07Heh,881389,978927.913368,ACiQ3LdNM8 +387112,801913.958302,aLDuWpqImA,244044,332930.082002,PRrdYEfSvv +711395,466699.298495,BAWNBfFfXm,142479,773217.736865,4pnbfdKgDQ +984492,819026.059130,BENn6EB2ft,340974,812364.350319,fDc6772DZ9 +105250,108111.540917,B0ZFLcnlxH,927000,760902.733438,Px8E3rUBS5 +471327,679469.898109,2jHlQYSoKp,401234,686316.307964,u9w8CjKmAb +690924,658495.943073,jsth2b3KCw,266315,263906.700405,7aZCGdEj33 +567448,928944.965650,zGdzR7TdbK,46140,951258.624666,jGkoz3zPr8 +799533,139551.692355,sltjr4bdjU,664731,20350.922182,YVFeActNFV +724115,664411.160656,yt4ibAGAvm,238675,665760.342376,nnztVVzDWG +550872,526539.336910,OWAmbHNRAj,451395,5055.274185,p8fGBl1Ijb +754053,293229.168033,eAmMT7dRj1,491489,522440.540882,9wGKNJRRJu +455591,105875.679706,80QfIhMYFk,628074,558322.469681,AXUnb5SZ3l +5510,602587.440249,3ivxIE57MF,470588,416913.158186,Ta5QGWSPRH +604142,832392.558848,9of9RXkpOs,522600,51370.707484,eb6vuh6BDh +659509,136947.313981,bBZTuheobh,635764,939710.425582,4gsUm8vCAs +492396,430146.957608,F8tFYDjKIw,841737,392368.191079,cXjZsT1Uln +50716,386501.860782,EFMlVOvjGh,993877,253679.679838,Ojf26Bj0tm +738335,278129.033842,K1Q0SNUiFf,820859,194576.173145,H855AzVQbn +78667,635942.792580,lyYb0eYd32,126371,266979.325339,786m5b3qYj +208674,153563.337506,DV2feAiWcQ,462495,928222.904387,XAianYWnAD +527884,690682.504055,PyvdBUn9ee,971346,889059.137927,p2yOzDQfF5 +590825,612268.097833,raeF93A3Zb,166395,718451.108525,9FYYiYMyTb +645982,808706.170525,V7GrBJIelw,678406,234573.178649,8CUeHYKY90 +692739,228989.423890,v0ByY5hHy0,972217,135894.029426,cQfnqQDfLH +40245,410225.074895,H9tUCLyqbd,666212,906500.382181,gWMcrQpv43 +169081,914048.251489,thcPmEYsIh,240629,103123.049614,SeYRhHS5S7 +991927,33893.720729,sA3OQ8eUdx,120041,696316.500716,3eSovaAAqW +260608,89921.310818,tTCmDuwsPp,936236,371982.779134,mg5NBte7or +726751,219603.529677,7Mu4AvzXAY,650431,529869.854915,NAlU3XGEYD +433383,69801.843042,V5QvAnN5Da,976978,478850.564359,warcjkHSD6 +408149,918494.228213,HYgHY5wSJl,749584,332861.549753,VYMELPNfSs +479470,222890.596287,XqcVGLjrPd,83906,431797.193606,ZBT1CqAGHa +880853,921018.093919,jRIIKUyagN,991600,968902.980411,ysMIfLc2WE +682185,870174.485928,4ubCZjpcXk,778938,347637.142269,sP3MyR2Ijt +241593,743507.876019,RBpDGXd2VA,168637,622681.954217,0LJ9bUa4kz +100513,628517.073534,ynp2VNrEU2,873590,12625.157419,kXfR7noS2U +322018,105367.871965,NN9cYEtGIZ,200766,472868.162841,9BrkZoxbuo +423081,864923.357777,oXrctfu89r,73542,350817.569203,AqexdICydY +791581,929871.684658,M5DRPHtYqh,611026,897776.944612,IVkg4GJhIU +9386,267234.482437,Ry5ElgPFhc,929386,6695.237664,a7lW1e7Do9 +266035,289816.666873,TpFHZ1MgsW,379742,506689.138213,s5YKy82fvp +148756,968643.471108,Vq7KyqIVwN,93950,669504.087441,lrS2en2nrs +662021,264964.014985,4nN1KSgvFy,897589,150083.208454,RoHIu63zgV +975368,860133.369322,5bxLUZqIXh,237487,489189.113867,W4DXEOzqrb +931469,547560.562527,ZZdV7WlEFU,241438,526527.795173,MUXZRtfW5y +82200,973528.293226,QJt3Zn8ODP,261604,225201.061896,7At3WVa4Eo +588706,893183.565585,KfRzxfFNgy,591007,133923.247403,TGDSZfEBMB +137421,175835.778142,EQ02GmXqU7,476076,780371.569433,3TFKwrVP0J +455240,391229.676612,6al7yy4Mj8,832946,822611.427405,vPID36x1dM +294773,249664.428557,kUNKTJnMf3,284627,563962.255105,V1XIcYv0Z7 +593963,812502.332176,zX4BaAPqvZ,350108,510854.282722,si6ulazsSG +548269,202214.029970,qaSDGeSVut,761435,657684.135842,svJmlw0N0Z +553802,332006.616669,2gl0ng8CxP,385405,771359.453106,3eiaJfMpKz +517975,600056.870115,fAHlYGNfJ9,98512,792628.518051,W8W5X4KLAs +772893,84975.901037,Bgg9Ji8xU6,156436,761702.007593,L4B15HPxNt +892972,495502.512171,EGb7qpx5Iz,224360,401371.165962,5oNsMKQbPK +699038,492456.576833,mMUoZyIs0x,216807,857745.697008,Gz1WwhKp8s +950841,620951.186398,hXkLGeenFS,402557,884828.643427,wb5DRbh9er +131769,182246.834971,3vPoBRaGYl,455734,576029.445227,TZ6n5He2gs +755426,133345.614122,2K45iMv1eZ,762901,30375.492731,BNnFOnAV96 +837701,810251.778035,0mCCst5SCj,968601,702249.502096,cKry2F16mr +703583,630151.668942,HFQDrro3es,544851,576059.119577,sXC1z3gIc4 +655301,761206.871031,MqBa2Jh6Ib,584858,719297.458194,PGFringHZH +45782,378536.333471,lzRgE4P6hX,27273,798020.421757,dfwga8MX4z +463886,378814.428281,9fMNVmzr9O,483642,709806.378298,gIK9bB7CyQ +482653,249286.584737,PV10O6Uhzi,452434,265556.681694,1heNX9Sz0b +927138,473378.879731,18yUfk36ls,297467,942533.808713,8y7IlZid2g +416331,339121.899604,aQBGaO6qfl,233727,891701.275159,Q3Q0tE5tqs +826863,246190.087716,FXQbcgYRui,971664,785885.719674,h97zjgbJkI +111002,698282.423909,M17Ft8nsIy,963956,560859.860940,2lMTX1sKji +144258,392168.019553,wBYNZr5poP,104736,976842.287665,ARymsQJeJx +951103,572258.736508,WlHddxItM8,538108,383084.126809,BBsLA1nsQ1 +137397,425748.271010,41Eq8j51xh,654001,791818.339764,3vfRms6zJR +991629,721237.515736,TdYqNpZOXO,665828,573568.182362,19MGhhvVp3 +5937,281808.502150,PqGhmT2LYz,92320,220475.067157,DBrpvXS0eh +608714,8557.643369,sa1T6tfBnG,630646,312148.836579,yK3Ur0yMnz +405395,194074.941457,EuAZBcgNOj,281690,411517.319483,zUziCkZExL +991195,656038.768636,cDUpZSvA8y,384354,952758.082421,RRRQ5ZJ3jO +416884,725704.920895,Gz1sHt17I7,182217,450031.344562,h7hrAZn3Ep +966983,206566.826910,HyQI3iD6f3,115639,713911.579095,S7MHhhmmZm +790839,551575.451295,UK3tjGye4z,915866,793002.880213,egfc8eABN0 +470930,635523.263858,ydv8vNRsqP,750801,382968.330665,EJKlWsBI1b +257308,524484.088421,fOLuSPMh4P,700645,960267.881615,IMtijcx6pv +391452,394200.722552,wF8nPXbqKk,137802,413446.013284,20Zr8Jhw5x +260528,809815.060760,3aDScXXJO1,989074,384792.996562,B6fz4i7j1P +479576,478014.382563,CE5y9rrQQd,578486,366071.408614,gRGd3H32p2 +177461,396875.097635,NUAg1jHqa3,596809,539538.969959,x1ch3BpBRj +711864,132732.192492,7T1c7QQcVy,533960,972181.286572,JqG6fe7bof +123551,195196.869962,B0T5gNNWEP,906064,233350.185998,yyjOivHgEL +100048,369293.009741,cR9Mm4bhmP,97855,717743.574618,i5iwvV52W4 +64001,703861.627570,BEP76WpINj,891397,344209.579168,vfNkoMTeSw +818334,279547.139217,ulj6CsZgVr,727091,482299.525709,jUiJnobGcp +981602,66194.741742,MPRyCgFxZ1,623523,321487.902531,GO3xAXu26R +658381,539430.027507,E79y2cpz8L,89516,293.497774,Oc52w4v7eO +422334,257150.161219,16Qf3ZENWo,262787,408603.210744,6PUWpG2c1Z +84245,52670.692109,Y1sDAr6loQ,78275,785901.275747,voW5vAv2YT +594205,359009.399439,G83tv9Wn2P,899526,700803.250933,IrCSAkgaQb +523169,159242.479868,ID5XfWXb5j,853671,321962.709930,s1zeTOh1c5 +777329,81069.127449,hAznMKOwr7,384762,670351.090794,tfWLIY7inv +490591,211820.372390,kw5ZpnGWe5,173256,430527.891014,uYfjtt0vit +740927,181316.036953,l8iadBjBZJ,398455,385709.732742,nArxlfdElk +505207,546555.464779,ZujADPuwCF,732343,770738.834336,qHaVbVk96k +371537,248421.148940,4VI0Fnd0ot,946977,653835.877159,FxHEuj19AP +948192,602692.024255,TGzl9jtSht,670178,701352.085752,MIyOM8WWDt +951567,268551.030337,bHQ43tL4Z2,117916,484804.306743,uintGZrP8m +201093,927161.279801,iQBvTm5aYd,155772,454949.905969,zkzbHXb70K +952990,173054.899989,6YGGRC65Rw,956151,122896.964554,oXC5WdvLku +969608,502654.204733,ARZLFPAezV,355312,579585.320862,eMt2Nqx0wz +994783,839628.735241,zIzj0iOHIb,120993,657167.502630,e3R5kF0Dtv +863610,608268.933482,sC0AyMrxiB,991529,107323.345478,s2EyMyMSnq +181943,135475.117569,E85RytK7CM,811922,628373.105860,wXPWxMTmTj +870221,444015.981340,OvQWTthAtR,560477,697005.688258,Re2slQK6ng +784969,794778.836643,x3641BOjFt,376746,511977.738999,uZkyzVgHnV +778074,736912.587223,jlUOd6Atxh,171685,957715.652234,1RibyDLB61 +365803,882554.884621,xrt7Kb8fPi,297472,730841.816023,aByDAK3mJA +909074,846347.168937,BUWKHRzpVE,913210,759893.246246,Zfe1uEjghp +704893,800850.591766,HGTBFsDT8x,621497,877740.921501,jRSmjRCRU4 +330109,80209.301654,6Cx05IJcPm,968252,930280.064134,tCvL6Zsgeh +631292,660903.124526,ZzADOYQ7yC,257123,551268.789393,XWmkWy6BDe +370688,6523.721273,cVgvVv3p1I,586163,311070.772404,fgE7PABAz2 +762062,696629.012650,RGWkR8XjXa,722335,309341.355727,c7AZ5pkERy +595228,46529.146089,gIJEX4vWHy,674038,254850.353800,cFGwPvneC0 +261355,682481.755997,JH3iLApabU,551019,871951.211914,V3vpTiyQ2z +135200,186213.695696,Xnij18lpcp,400896,106881.073320,rEYOWJeY6I +743627,682976.071280,IwCa7zDrba,590565,885272.662141,Hk6w7pidCe +308790,34840.586564,T1EzjJH8kF,270565,866690.046644,AYW0YkEEeg +199966,82749.839271,hsUCuNmPQj,670022,343536.430087,MWSHIHZS9j +273561,609628.836844,TmCKtK101h,805222,773859.840368,VGLvRJOmlj +21530,188642.902201,5nZen1UfAd,189470,47725.884826,6VYfOg8kA1 +92962,998545.978554,HduzEJNMPg,230897,395146.965717,pvdIg86Ndx +797143,405304.580321,CsDzQohS4N,343717,138326.068640,0TvqvH1CHA +642387,907964.216606,lJkOo787DL,106997,460432.511849,KNvaefNSEg +27907,752542.770473,nYDPssU2HS,764085,835744.846796,ru71d6J55M +251208,204138.028750,X5ZW5F3zV7,632605,788334.801989,4iClqyVrJr +614997,783024.266167,WwJS2zRSqX,106834,355190.220333,ArXcIHBySK +79908,63609.572334,3re3nvsiiM,389875,132179.709353,HzafzUc7hH +153261,368840.865998,026XMj3CFw,521457,563146.282862,5tRkwTrNGU +209750,534252.623452,j7EElPjZ5Y,355459,203249.114561,LA26CHGa84 +972860,365126.997921,zUf9AhXJCy,793837,154293.286001,95jAugf6SB +926021,932358.891226,3L5rzONeJ4,929992,880814.029770,NmqY4yYDF9 +917804,843467.276009,j9ZCOlSTLA,176842,437280.543773,kqzcpRoSit +467638,591588.156282,4twSlPVBWe,484403,86737.360495,PIfVkwQSbr +911942,340368.959399,l9FZptiiO9,875962,121249.195803,d7gN6uS0Za +84449,811264.268635,9xfrRKbhsI,186991,728488.270432,DeOiASAO5K +950601,453720.785223,zwzuXRhhNG,952425,918744.412306,V66lHULYu2 +679524,149327.466549,Y8uqilEXlK,659019,430416.655538,USLV6nLSqE +254362,142069.243802,Y82AInhV08,510946,407834.074305,TsG8vEgbyf +592004,23872.564321,EaFoL6QWid,372818,401458.457805,ONsLviC8cP +901060,210690.697431,VbfdGqQvg5,696378,523746.105193,XyH4fU9xl7 +39139,880278.901700,0ML9hAJ6XG,542471,594212.688962,KbpJxTfDLj +926558,165609.073255,9auznjyu8f,880503,685079.794061,Lr0FNMc3aY +445863,35340.485887,Saa8kn44yF,826338,303912.239666,pLVxpPpJj7 +725851,960570.932093,CSlUWD09Ax,360009,406272.497901,iinReoBsD4 +1228,881518.998933,Mq48Pf3asE,148463,548057.018680,OtyYVQ80mo +204820,689372.353694,jYXgTLiaSo,122429,985153.177842,ZB2BSEI0fo +630364,681383.345883,n1OyrAsRyr,80544,628024.031668,s76X53Bz2A +277005,993749.385063,i6peFR9yZ4,757043,616791.934362,Ji7hppQ9X3 +28645,726100.537149,HEYB5fclBq,583699,277790.596948,ivZgk27za8 +673364,184559.640623,xsx7PKJdb8,857522,955763.836328,c3o7agRSu2 +388917,178245.996023,DjOSOffiWD,591992,862641.647727,PyX4yo5ixQ +987493,693885.465911,h3Vuda0ZZ0,980985,539465.497043,kxWyopZPoB +962320,667068.840259,FkXApkoj7G,775390,469080.586086,xPOo4E0rGM +978340,524453.895206,401xrd9s3w,33431,811153.175751,FuOu63Y4f7 +153938,444718.390328,ypPaVA2OTU,261117,856269.434186,4HLtXMYFsX +215902,856406.207758,yXVzRgzygY,654460,921576.770418,DGStMkRbxN +924646,350707.090344,MFkWfx8Tg2,719630,318595.019764,psTcYXnfnK +323007,825152.033296,USJzDfv76R,522512,219395.501387,PUCOjdsitF +208677,223233.006043,7kYoGDBc2u,342357,642770.946147,hI9ZUpll0H +556065,974047.083351,xgjuLVMsLn,561102,540139.496061,bpxrdmnCo9 +604323,643485.046888,WLHcJYs9f5,292478,99058.059720,vzO48R4I0L +503143,522836.530062,vxMQoWxVVL,515125,689221.107442,ofSFjA3AQo +866436,240295.590197,H1tds9xAAs,87911,407759.118494,4j1us7t8y7 +852552,968588.024119,StoFLmhRPB,497545,701259.507871,OM5gRq1Dv5 +226883,402975.617249,T5ZUTlENp7,165104,461556.855832,N583xLR9l5 +636021,508592.078498,9ucCTiAslf,929676,27033.116373,uCdHejv88O +452595,112633.184106,nnbEUN6Rkt,192033,14770.197182,uywAVxYYAl +973915,562991.170328,Z8y0WKVVgN,822815,889643.777989,K0txknGakj +564812,22203.019330,JrlNwCYQdB,780273,427954.694102,Grfp4kPOCs +953245,776079.305176,61OAI5K8TC,531114,286878.309918,v6WNyPq5QP +71673,281713.971062,2shWnVo6k1,533686,137830.542210,3zaIMSjPiI +152943,192896.123873,ldgFf2BSpV,488248,235463.979946,vBsX0Nr2Xm +716455,430147.045065,NVWhyJZGpy,568688,580051.195471,D8aJCkEFJq +920942,309733.891266,DNPIaqERK5,382403,715730.669972,bZl6rT3N5R +798358,97548.015726,s2BpdDdGbF,302089,822072.950139,5lwT6M2cMb +944808,63525.822092,xCnVSYCBQA,372928,180003.000438,PADhmVyeBI +125687,738332.320408,O4BX5lxm5H,841795,953077.117703,EXhRx3NCzB +668462,225758.479001,oue4y72uGK,217935,886264.969309,skXSPRDRwa +454327,537182.985731,0q5vQ2grtX,447704,933928.556750,lo4zGB6uCY +109033,153426.542584,KxpoXvZzyS,541227,142124.869171,ZLloNWHolp +965266,131080.750297,TJPRJfFE4t,675509,194892.634697,1NnISEz9Ya +56758,258542.561237,J9E8z89xBs,867399,345588.977280,Roz9aGbF1v +108751,634739.356826,YSoV26Tidr,155997,496183.802602,Ar0BrN81IF +216862,27772.543721,oxU3vX2IWm,702890,855208.546505,3ThUyp96cB +149857,170860.355929,ZgV0a41Gqy,931007,32137.591019,2TgIXGCOar +473284,398940.451149,Pl0ZlUYAZr,706211,211744.628525,8wBbkdDcFl +340443,606832.672326,lSpZ3dbAHd,708652,355217.080216,ii8145gvzA +861567,740228.404058,QRxXEX6P5l,918611,327454.834626,HfjiDfBueL +75850,321123.355038,qUUAMC3gUP,19929,139837.443082,pxGbv1tDhE +476350,265615.074160,blTlXJWpPp,855681,860418.762905,htjHHs8Ob3 +283612,666699.406023,Vk2Al4wdwz,655103,950066.446948,YrHQSf3QRe +780352,297223.568927,LxldoSCfFt,507266,550594.757781,hGXybDdB3F +672693,195905.325663,ALmfiEQEZj,636396,633431.571012,w9VO0H6q7P +544595,700901.241705,EbsynVeJFR,752042,121179.245743,gfPRfSsW5K +769354,660498.397187,OgbsL0DvTl,158821,631390.821546,zEzfoNRuQY +17184,777351.832877,zqHLX8qsw6,160870,588607.618524,TZOVzH8UI9 +529337,50594.769862,dxQ664vh8F,810275,673363.018070,ycdCwVE5Z7 +66435,88851.300547,nssXT3QfqJ,214417,673102.141223,ERWL2Lgql5 +699750,887930.421109,dLNkDdNh9x,678422,133022.940883,rk3b3bGeG4 +871274,123788.920072,I1DvHyaAne,739707,622173.722244,jxk4lBi1gQ +241559,502987.993856,xwOESOGwkX,940249,412893.507300,L6cvI3evxl +487171,652058.441602,1jXld1Mrh0,422479,896094.161311,C0Xiau5Nu6 +153148,202494.328924,sHlhhXrsoU,262760,273084.313006,tDlrq42Ihz +707147,154234.930996,8FMoMg8iVf,826345,899966.500415,QWnl9caBkY +257435,310660.021813,TYo1ny0AEa,361813,972113.592791,VgcRrFKLo0 +831668,319445.185951,QGy1AdJT78,103675,629816.817605,7AKG3iJNp3 +765891,656848.954740,uXcNq6gSSg,531557,441389.353132,JkFP43gZ3j +26125,751181.463062,njPMU1OzgN,392366,638398.978751,IKMZFoCxUs +105311,391870.451957,1ynGYTNp00,959322,212836.660971,STrD2N5yTd +346468,553882.573631,LyLUvJwIlJ,712983,497081.574683,DbWUbAIOJv +808058,82178.497326,wRZ1magnl6,661168,546440.613435,kNUlNBRkwQ +384043,683675.820208,JhKKEoSHgH,501279,385434.457736,Y6TtZ4yZYI +867046,501655.546383,TE2RhXIZS1,146625,186460.914668,K8lCeZXbE8 +387386,363711.644391,xpGQAawUvI,191719,799788.574741,trsGWV07hC +603143,860819.763256,jmFYpddLo7,144328,779132.793509,dZegDPGK04 +883181,568630.598290,4jTahHeVZc,437813,152863.245889,bUc25qWIgf +67354,290339.965658,hOIL0Kdqxz,680789,663253.302835,405ZvQEgF8 +285861,123579.129731,nVEX7ID6NT,490254,144742.918623,HnUJrlJ3OI +650522,373887.131422,CHpiEDGi2S,188402,146037.791325,W3SRGKdGIU +564653,435608.834201,psIwxo6WzS,976835,849916.430375,Uwv5U796QK +255768,223140.570357,atc4Od0t7b,820483,393985.146463,yOv8QdHU8y +141584,464611.809635,toyHOITklD,323172,447274.080441,fVpmDTenyO +134315,321360.203893,cR5u5jN52s,993192,379527.483826,ytb8EpdhcW +864618,280162.829652,lHJShWJ7tu,335618,951299.868236,eBX8SidcWk +233934,199079.399855,hpy3yO6Nfe,597471,315624.605373,dG53U6SppJ +717039,585651.044907,woP4pTX3pM,834837,933982.415347,eXBD0DTSnY +504723,224553.684436,Jcnn7oT9gZ,767621,62855.269211,S9xk1nGWpm +515976,458775.668050,Cjoq6FYpXU,615427,336732.977671,tFm9x9w0A6 +306588,993160.453224,R29TeiV9Ck,400548,948393.181342,XlB1LNZyMP +789797,967428.085399,EVNx6ApbjT,644257,507572.503156,1p2SYai1TQ +759129,517405.577689,9bIxZSA020,385331,232875.621972,fxlzQAbfbt +428323,199755.205833,sinKbfcaqD,437809,943396.093979,9xArGYHaop +384448,604164.318151,Z5xHxePAzQ,720503,982385.921368,6sNwTDtFg0 +273731,669384.898263,H38qrdJugu,959867,330982.255403,LS7mZy8COL +198212,87079.823124,o9jg2SbOvv,724725,662954.405722,jCYRzQ9Gw5 +900533,308674.664570,82qoJkoFsN,921330,203746.583014,qBscG2FqYF +801037,447378.311880,pvxU8zRwLd,616873,392187.270334,9Rm9M67PxZ +315377,597455.996521,cCaD2bNB7o,114100,885550.087777,prkFKbnfwk +503988,788860.058056,s8Bby6BPSS,909813,533756.513128,laaw7JeZwc +544435,169208.544609,hXi0pX06S6,587465,187897.027314,nl00yfsrbB +140280,118677.982143,JTl7v2RUiV,991194,8009.040603,Ik7fXFN7Vc +671014,361338.897133,mGGhGnV9Tn,793435,167835.824777,KKVnvCSuq5 +204986,879326.194155,KF3XH2Kxh1,798338,550426.667697,aJhCPSWlVw +582668,497174.417844,jL3jEet8QK,964614,940357.030245,elgHlVZXVV +751008,888124.781782,mp3rOdbOia,447697,144908.171172,QzF6oYgtxc +528369,699418.738457,5qn6EyItRF,331432,716161.404637,BWjhwqJvEG +887991,121204.604571,6u4M26krQ1,395627,460254.467871,h1eWpvBzB5 +83019,516649.957932,4hVvVKJ9IX,45286,852677.505865,aoVxpyxISq +616449,512470.004954,s9zIRsUeA5,258494,452930.015303,XheDSHFwwe +495033,147119.144075,fDg4hHTff5,765158,545062.829219,L3PzzSV9GL +1310,676260.419645,APB5y7ATO7,727185,360703.867296,fCImisLpjo +138156,434184.855341,Oh1p9elYw7,555668,180292.974971,puw12VPtYX +149138,937370.224587,ZPeqts2U0T,913322,457648.469412,I5Ss5ZURL1 +674579,904640.508219,lyEychaFjD,37369,902634.005529,X6ttShEXGH +30240,10130.808653,SGXVLkS8Mi,360281,496821.398347,8DzP4YlsK2 +59288,815295.799601,I55hor1wUq,52821,808711.006560,KkYv9RYRfn +528579,448710.524070,s72VPCEjAF,974119,299655.049966,8YhFagED2j +25246,75681.505491,uRS7Lba8qw,714521,769278.861510,836hS4nsPv +735222,14608.734511,K2FRCe3XcN,907881,810151.561382,pWBWHvZQiB +609468,297521.315968,PidsIgbUAG,760368,429198.958776,LQ3YuhqHG7 +34528,791042.841635,UYKpM8pIpc,33222,355712.183979,jD31cUeG9C +991217,434078.674892,pUb378f93g,952280,943381.052018,6gHL8Kq6pl +396024,141021.487344,8SRxR6jnmC,407445,819180.142678,b5TAt3oKDd +886273,109270.746736,xrhSKIdFii,621017,211071.433326,zjPDQKbPRW +158290,124404.398755,G2e8fKToyX,553428,387313.010065,KOFh0oYdPx +660211,578928.024151,52oR2QiS1N,631578,428546.078693,HvLRYbNVym +811774,470113.351660,Z7iqvUgVjD,697121,890425.471429,UqIvfYUxpo +492530,466272.281796,8tA9fh0eX2,513210,864383.724563,FbxFUi99CN +813027,710444.183392,DPNjrfyi4z,564709,267794.732128,5h5JU2BVQe +968071,59666.554678,bh5CoUsXm3,530309,9288.131698,ckj9ZzpTSY +473477,751995.884899,cnlSrdj8Gk,730769,148711.009674,2l3XJW8DTk +447485,876958.780635,KPFIYH3q6z,934218,414182.178610,pO47aeR1D1 +90681,980979.653924,hAUn4tE3DJ,150114,207640.587245,8W0xGFhGre +903066,261632.358992,nWWdrvduPq,54647,991449.512804,U5wUYHjDj1 +495483,622304.844962,TwtRQddAQe,531579,451443.672164,vEh1RxKgzo +924456,188527.741345,GE0SznEbxX,587665,781820.527287,3ko7m0stlM +856467,168405.111266,87CDTJMcGA,308205,799005.426071,TSppb8oxKf +391620,704434.604916,MBXzvmE2nI,131898,270251.690425,rxIqLsqsAE +435887,987921.839414,HEwc2m3q9w,99450,91101.129840,vyLOsJgrFB +317532,618686.672823,MXfo3V90Tg,146113,806626.101704,hNGxIHui0z +381010,565894.365234,D0B0IvWbZj,380246,141128.051449,jpEVdeysV6 +575119,584253.406388,HStvUylgCN,83767,975639.146826,pXWF2XZndI +548495,988492.945559,bfGw00DEik,323239,876146.164661,CvMwvdwAYV +302178,3867.421409,Adk1DxJihI,559555,4046.344260,JOPRww0FiP +989897,688271.034925,0S3WLA4KP5,3104,181217.961927,STJWBObIbr +488640,221021.310433,WLDFKhHyOQ,417135,392728.812393,Nadvhz0ypI +436695,770689.600645,dllenpWnL1,887340,729144.624133,EUadurGkbQ +399727,31092.942706,sLlyx2xIIo,38728,695704.935562,2e2F54vfDw +642043,520495.419540,nB9lDkmJa5,642478,986403.160381,8P4sO0ZWsd +76081,536890.821507,yhc3xJdVYn,900670,498279.338764,nZUJ42kYQm +195137,309251.051825,jJV7R6EOhp,146364,281900.835170,a4ZzHRWmVP +871503,923429.128785,UU5NIAxIuQ,345961,330311.378030,6FUZyaeQzd +346927,132020.860641,I3NEfJpMdn,704672,524576.404843,u5roTfAnCG +197415,950414.523155,RQ3ta9s1YG,178439,385236.323167,3KyosPCCa5 +445583,538874.095305,z3TtZXwCHd,32406,739694.586232,fzJE8XTCl3 +730703,285362.412601,vmsNVErRam,399610,68790.969545,xVzxTlliFW +573197,736245.158055,hkAqJjA2rx,420848,820440.601149,VqaUvPoZVy +379015,645641.934598,GLkIviHin6,969333,550647.726171,zKvUGCkZaF +777791,950190.320926,XqivBVnRfo,765540,881570.696170,joFJDwU0Cd +181221,103188.554494,bK6RiQB2bR,130118,551389.938970,Y41hmYDwq7 +2855,501246.279829,KUnUFu3vc8,639548,914416.451109,44cwAtjPyG +859540,53975.002128,m4YpoPztXn,854385,659429.260953,wRG5Yo6jBa +250907,50753.028641,ngjJTpmDig,530485,510509.104668,B9qTZjBSCg +590521,856250.567760,05aqfLK9ne,806265,827487.183109,mUjH89llQB +763419,259933.574960,9sBCfz69l6,87054,252809.021238,8yT4TYBBUj +349650,603077.461603,6iiG1aTK9A,167232,263176.622562,TNAdwyRc4y +318842,735054.683682,k8SidCK8uN,831699,610946.042048,1TeGKYjL0F +149504,643987.719327,JcPrI7dAAB,943252,617860.395105,CxuKYGb4lc +571588,852170.363208,PKHjtoQLJ0,62872,94639.199312,ydqTVvpX4S +712265,440573.668386,AyNXcxEV7j,386802,426864.517786,V8RERhH170 +705641,701777.454649,SWcor2AT6B,134844,432999.315699,KhxMp9IQc0 +274438,452128.343260,F1EzYsHoVp,226847,584900.755401,buGM0O3b6m +62354,865963.934298,LI96y3jGmO,102810,692854.451870,gnONR2CbB7 +932911,754358.152809,y4qRXt3o3Q,716428,589157.229371,KPYh9g4zR6 +248718,330085.132583,rBdBg0ltl5,970005,920764.594520,PcB3bykbKC +671926,575092.112448,qnKevhe3sW,897193,261651.354177,rTuMo9AUVA +728150,26048.772156,LeQXcZQgFK,362830,793659.434152,Tc2yJRzqtH +425856,228774.284689,rEg8xYrw0d,136180,325875.760616,MufeszsN9a +231173,326878.875451,t2eMhOM3Mk,943259,419273.019645,I8z6mL0ukP +651419,867825.511779,92GQIIllsh,402315,851451.392244,wBSexu5I4p +931772,642472.516037,YJN3svnWcC,970490,668897.176546,sPjGCSl7f5 +104363,190006.376310,eM7tRhkkW3,545173,352936.921903,iGFb6pKLIV +501233,68243.881415,Xwnqrd5XCQ,85987,288005.031794,QOlHJqZQ6i +643593,70510.769341,I6cBih7NP7,363217,128802.711984,VPtOgoGpep +178306,850748.367286,Fkd2aQIwJf,815134,953742.797354,lifhVPsn6F +939248,725738.331104,vFacGRgkax,731004,547729.637776,CPR6ZKIoQW +481970,907882.292100,VqhEvajCrY,961072,930170.683429,5ekvFoifur +763208,756782.684186,0UFAjK4yun,888010,29830.608617,28QYQkvfbA +18496,591024.314565,Km4Aj6kmfl,854769,336445.456112,loeQTo1lQE +575802,356856.276310,u5ec1nkb1Z,679197,650295.983744,JohF0WfIvI +167934,115083.348120,pu16mddcjz,117092,939347.163402,MdEK6JYPp2 +858276,629705.718590,UESCIJxBGU,852998,49616.285409,brMlhSO0iy +365680,923162.031274,LKEF6Ywjsk,763059,229327.867837,x1E2mXXzWZ +942428,69592.446341,TJDMGiOHxl,936280,73761.261542,GC2eQ3aZ3u +65454,302194.061118,OjoKj5Nq2k,45492,793527.849671,HiXzKkQSia +790593,143892.216182,5ioIBvJzB1,411144,536041.092981,fpQrPm45SF +551661,956411.115635,nfQTrvqsZU,718849,188394.011117,rwy8jQ5rTh +987031,286775.798114,8AbzyA36h6,706263,765038.376601,5gJZzFi1Aw +652241,674689.681814,4Foh4Ilk2J,755578,124861.172001,U2ILfksJtR +552192,957043.635737,fTaFfNDfo4,676896,270928.524863,su9dWqCNw7 +889985,588927.452194,rsloTFUOiQ,879086,806044.905830,adeQ8s925U +472898,380254.851439,yjLrr4FQn7,52603,457543.545372,cxWTM8Z0Oz +89888,609500.885058,aLPs4wS2oJ,515109,732040.654440,XMrsOaxxjq +442535,814771.394650,YU2GJ9dw6d,865939,672029.707534,bwTaGNCcoC +279705,818650.550293,oVJpmzWvPr,121163,927433.978526,m8mUsgir5H +617009,32981.035880,3RfhvCg3kg,264298,521387.430541,OBvzw3F6ad +989080,714464.261940,2pfmCvgrUw,441887,166369.709553,AcX9xg4XxW +2300,514822.384942,lQz610FoKj,887320,94787.962607,3KJKJkfb5T +517818,683879.915810,PRf5FdPpsw,786789,63055.579246,yKn6f9h5bO +320223,573760.276956,IExD6p72am,813636,444135.862813,h8hmS9XrB0 +650632,690725.349417,MQfndfQN3l,373705,485199.186606,SvYFUKhl2i +281331,209367.759180,fWMkbT6R6Z,640340,863483.955604,gqgoRw0LtB +345870,771127.414909,zLZOQRonfO,249699,259799.365631,QIztcHreyT +438934,789094.037932,gQkwNyMjsv,198197,272394.904858,abgvhXz0KL +763182,887824.955696,7bmkkf4Emd,376228,624415.704809,iJ3eaGCJLZ +555077,544738.655497,aJlMjd9PxW,747897,551834.620953,IJSf26mPD7 +2340,761496.371936,NITdoAKOPg,432282,632600.219101,hJ4m7pXFra +872819,4312.581523,2uVvhfJyHE,591718,882336.699537,S9TnLuvVcO +300468,932398.317175,Vyy7S7j9Z9,681531,557858.797421,5E4tiLMmNL +257942,809930.192185,8dTKdGDTMS,790984,583962.186984,DnQlqcwlR1 +837027,488171.124275,0Go1W2oBZ1,768372,813721.000192,0fwe6JsVwl +675018,59284.940385,e6lZ3gCcTn,52735,623366.941944,bpg5SO6RBC +755349,192497.303740,YsQT440yqo,736212,926950.981041,u08W9HeVX7 +636684,587995.408538,ExCiLud7BM,92672,594234.690367,gejwfFiKvV +833687,934594.661049,lb68n5hFDr,286031,450663.768565,csknrIsQXi +530542,918593.089242,o7o7wmZjKo,358688,523692.854253,UtqCjfSgS7 +550534,850438.565178,QyDsRIJpDF,615919,788535.517983,YLphGPb4G2 +809169,292374.070403,Cz5aoCGqOM,989338,802578.105284,YU96dtAPvJ +115183,448544.496251,9QzO9jkMIi,634942,455833.942843,aXZhYBjK2i +526799,560838.851410,jyvjV277tj,91153,376485.268204,M5hpErPbvr +388861,862433.118081,PtOzGE3I6e,658025,868343.197988,5Q4XXEzlEt +332253,133141.468728,BTiuOmyjso,867142,434733.669326,6BIlIw8V37 +885150,192428.808644,MSuEM7TAVQ,607813,884745.979835,fK7WaDlepn +371320,348169.453055,r3ccLEusg0,32877,365124.958206,mCVKApJX4M +819706,892899.150903,sjmuuEH52T,302191,988814.885067,VM5sozuTmb +420112,898881.505156,jZ3Nc5mzGc,508236,136415.546135,7Wt4quPYmv +812704,826127.524523,iXHUe4fr8d,406941,365417.988926,q2DLEOk1yB +272460,33505.173322,bYGp1QreQG,857355,867353.557113,2D22JSGBW4 +120084,43446.591320,8s2ShBBf46,344476,362502.334177,oajlJ4smdF +28182,937678.716006,ceYqf8GCSc,350932,536288.219421,el0pJ6IOtT +316832,836926.481068,d3WKCXpOyo,401834,487063.103438,yntqxkXVzY +432766,532710.001320,rI3KRfo9cO,871672,726865.430189,4QIG6G926B +851270,162122.717986,a43hR0yH6A,746768,132265.844782,hBmjBfCh4t +152645,893858.429810,tAltaU2sM8,378090,232491.383374,j1nTmY8IIi +707697,418020.404713,Q237YOfVbp,400827,506165.519284,juOt0NHP2T +322879,922483.627741,SbiZS6GzbC,880342,655056.121674,tmxBAOgvID +482800,307837.411203,q8y29HDFAI,958109,657903.178173,YtyMBE6o5F +944064,961005.299360,yqIylvldwA,590706,339089.995025,UgI3lFfRzX +769289,805322.695152,VanEWbsaBB,883617,540794.751525,Hm1mL6P8Nm +379271,615166.558845,RISv5K5lB3,744560,710532.775959,ffg1ADNsJy +284055,924591.030499,JWyZ0HRodn,310797,808811.878229,571YU8h485 +379190,577450.828669,8L6fSLvpee,345681,103168.440114,fkO8Nsmwu3 +864144,133713.245502,UvRzzeY4jU,103216,862764.265100,UyttNsJ4WR +269389,90412.332566,qQFPqC1FLk,561826,129094.497980,C5ENiR8HEu +376716,491258.595798,GpEOgVfw5t,727139,442824.468740,seg0JFQ5tX +173034,333395.860725,uJsdYYUaMW,160479,917879.557785,rm3cgg6vTC +948801,936547.390780,GjO4BkSkii,485114,333729.200179,3ZLh744ovP +292777,803452.663925,Ygo9tYe9LQ,473587,88796.229845,wV9pxm7EWX +427639,83980.754616,o5onMqide4,854238,211564.300853,bdmLrnOQQF +143641,770746.001357,ZGfYyhx835,581707,440438.521595,fJGMA0AwHX +656260,386188.067205,YcYUoby8Uh,522518,654238.467796,HTEO77zNRW +678078,722348.108311,vosH4om4cy,305239,212795.649228,JbUW52SrZ2 +844587,526927.690762,dCS9F5Tp5O,703728,978207.555505,330YQxYOvy +674582,622672.529024,dhyiXpnNoY,224067,821468.419384,xI55mKfcHN +792311,215562.071303,DYGuSK5x7b,96408,868994.078683,eCn4VZdYAy +232779,704114.969138,qtAnNLFucp,275414,676139.507502,HRoWa7oDFt +482431,700243.012238,DZdRriXigw,712538,241030.411970,j293r3dAGx +112530,338625.638099,Md9a8YHrpF,399372,700727.148481,hyCqGgnPF7 +154275,816977.112631,qMBnuLkPpr,365268,328102.336023,k2ZoWlgX6F +294471,722834.137636,zzd6gCJmAp,514062,784462.987393,UJ8RowSGxv +2170,738366.508508,EuZYIyb5If,644568,143725.718717,hkmoy8L7Ln +293245,441369.212758,E99I3Je1Nm,87248,420703.593212,Ut8YrKM3aQ +807558,393581.149380,s7ed9IjIfe,523880,229481.931270,QU3wnCqXxj +10706,798383.676317,Tp90AhcsZb,774065,442484.568798,jj3d0xFM45 +526127,329528.641685,oW8nvTeSM2,106369,873629.298469,lH745O2wMw +637260,637304.890767,w5yFv2Apem,394006,596651.356304,8ADe4gzwpY +761223,623539.719364,QDRTs5Go6M,205027,474033.295464,oBqbU9NLtQ +424576,932174.233004,lc4GFkcCNq,374433,875575.089430,e4UBJMU1vr +179351,339261.250126,pVyt289TDX,654969,466628.037015,SGLMwZyfgw +559952,847392.804666,r7HIUxdU2b,999433,77926.004852,LbKGAgV0By +717624,618036.255203,nZm4tfcr8g,771071,66685.205920,nAu0fS2vfg +35248,896087.466856,LENYV0vDYF,355324,28439.115131,f8fmgQtmQU +937611,30556.002129,Eb7kLSnGgq,873648,432699.554023,CdbUfC0xow +255901,711018.753389,ZBRwm6gxId,21153,174697.405084,kvYBupEtTs +143730,533301.917531,FDy61LCbV6,473104,850483.079227,DK6bm70Bbi +960614,575080.687181,vI0z8cURIv,535520,899889.836077,gWWNnFvt26 +584562,443529.589887,G0vxShsbhB,377488,437408.496855,c1kKRqxpZr +246777,862657.436662,gsMb2FICc2,339834,748300.306855,M47oaIkF3Z +319650,683185.929426,5rVWL5yoHb,504913,625119.472128,WTui6m4xre +826833,270649.079445,R506VUqXtD,565378,175461.584350,mfniZ35v2A +834868,113998.957197,agEYysXXm4,702638,478075.625015,6KzhtRJWV1 +198915,552047.483442,9edxnfOkX8,71189,646741.066745,ksjL3Qp1xi +15840,670566.626563,0RQMsPb7fq,660731,172862.770362,CWeS4I5CIj +828265,456446.960454,7nyM8AMJs9,534422,750269.808421,CTVLkIhn3d +661517,247266.533372,FX0GMloY3t,547320,371789.299324,9ZbLJeNMbU +275543,236988.905314,LkoMSDWmK6,663915,924161.395199,KwuRDv29uz +212874,878738.787342,Ds5hqXT85F,457261,140406.242528,16AJ8sKT3P +258749,874638.244606,Gl11fVOtBw,146663,786238.062869,CdQIpUljFW +129658,416196.242457,sTto4IELBt,903473,197364.094079,4us2bzfKbE +130606,18955.518916,4cZC7rHF2Z,650651,8666.242057,MH79gHLCyE +168384,864332.736059,4Lo1oYiGf6,488887,895541.319917,MdBJZAedpT +280918,934688.108927,4XiNQBOy5q,572044,250803.072654,MLlgSEvrjf +717889,919722.750552,iOvjTWcSkW,843985,384002.563960,wfgncrwtqb +268478,27274.433015,Ni3Ri58zLQ,184518,603786.159519,82fmjKTfoD +540691,123087.340884,NkeOrKveIk,659488,932842.428229,2Bjc6fgPXY +587112,927202.402922,YnRoqUq6mT,313952,279869.754295,3DnjRQLDUd +173104,756884.947878,F4RnU3IAvF,833478,240620.145532,EkDRfKkRU5 +70420,418016.861824,6dG1C7xet4,482244,306663.495776,PmSrdZx2rj +803100,632059.346708,W0AUQyDCrD,482841,279748.684462,km5BaXaT77 +447013,670720.381705,gKNO9cIfKj,901656,31391.065932,T1gz7COLV7 +151875,503677.316373,XbRuo7hfJs,565828,806932.199507,5lYM0BelEo +530973,319941.944842,WsdkHd1LSZ,376080,364306.384677,Nhw7G0Rp7E +926771,699713.502639,0skR7ylPfT,58964,746491.463970,e4Uf2q8ht1 +480817,719260.744440,a8VSivVUQi,39951,658072.167433,hek11xcBKu +622238,421891.664287,6R0uTR6Nwk,354526,137791.306936,MFhyH0R97h +208778,471445.771325,2LW6u5KbpU,62875,569156.531795,qc8AjzRp1b +755185,985267.961533,K8xZN5Vzjr,893946,117749.029731,ZKg6iYD8gG +881924,295308.193499,QWDI3q19z6,636597,179890.070371,LBB5BlFqJx +628541,301488.525613,wcuMb2p6zQ,848369,515139.073564,3icI0Wahzy +462182,766130.328433,VqcEU3nbHj,931421,461399.049685,CuRtNt96f2 +18491,523562.177670,uyniTdNNGi,835543,800879.095288,qxBeWelH0F +32808,264648.447775,QfvyBpua0P,468167,653861.938956,idfg6ILn54 +632917,796962.805532,eDQAZzexD0,504343,229586.871150,ibzX1oQQxo +849638,135203.384050,ftjjEUQmx7,815683,927997.265018,nLwhmHaDyj +206066,816680.674363,3zWXJsUKbC,317135,347874.462892,qffQMFCbN3 +596364,276472.420571,g64KQt1ak5,294358,729622.310998,S4g1Lo81Pr +228938,448735.889728,nkK1sYIVIN,990984,139618.239380,5dr4WtJNpE +434969,719111.893632,3ZsedFRnr8,240436,726987.537923,xF9XOMsHot +762729,24983.564772,xlODGeTZG6,459451,999822.222437,6lgnMQxabq +335871,26850.624546,YJbQKf99Rk,526966,72913.541820,7xHBe6IwF5 +598400,431698.566183,lmlNXkTt0d,247592,704810.754488,dKHOAPiH8N +437002,427363.528288,dJChyGH7ER,277547,605670.355888,y9P5sTw9fK +596814,471008.892891,pUuaFVhJU9,165898,94939.345960,H6DFfo8qAE +865355,511734.744917,912nAlkZrI,499108,182608.798555,znjxmRJShQ +436216,572865.148953,PepUlopful,307204,96078.552261,Al9luWSfdr +506377,598695.238827,3PDl4P6xVp,536819,422740.361873,xH8yl81HbP +966864,568194.732878,6rJL9UtflU,139172,943378.351975,zddaSN8yIi +916394,192953.908533,2gbOPRypJ7,118037,865033.446533,e4kR67jr4M +230704,161652.602481,p74fvPHRXi,731487,737281.009247,GjCPFuwMUO +340518,128307.248236,0MlJEXm77q,909672,555836.859767,qS2xM0udPW +610638,572464.484899,Vt9IIKrcpt,664504,291811.210230,i8fF2P6TEy +451646,57171.250723,mgJ2pjQ6ai,554196,620185.050966,G4TjDPddQM +583808,195734.436209,GKTkeOYamd,973604,367369.350472,5VYh3SG6TS +851282,215054.317914,QwuhEL6hSd,578564,267864.665369,IDEDdYVWCe +534464,339831.197804,9tFVZsmtNz,302165,299670.944155,9JfF9XH6rr +832011,217876.240800,lrp0YgK3R5,655353,476143.471987,L0mDr5jl1i +255627,607556.560741,iuaB5Kmg1F,76266,628537.850119,ACKK38P9hY +846885,455675.266412,tqwRkArfhx,756385,792922.368636,m93PHIFlUx +855597,957940.644449,zpPWKECDck,802409,963379.896331,43Q15Vp2Qc +165078,463317.233548,spOONVhUc1,998066,888973.419202,PKbRxTQMlO +114276,279539.667015,aN4lIhA9R5,16747,857992.556021,qUtKDdwODK +931217,14463.851666,fovpVP7gMw,800802,431726.921850,t5DzFxJll9 +200491,501145.229387,QKLnj6J391,274729,986358.252541,UcjW8ANnN3 +152189,654306.236687,omVtD37BwC,671625,13974.093887,xQ8jfbUFrc +603973,282350.871692,F60j84PNe5,998660,754847.436009,j5b971HqGl +60678,792708.872772,5rKeBsRhEB,36546,12159.758936,ZMUpwlyTMI +687953,400726.337664,u049N82XKg,221559,182361.484215,xlM0OIk34r +716629,236904.024583,Q8TkDq9Wp5,327640,607888.615552,nt0AD6DiA7 +18699,183172.654239,BdZ4eaAR3K,315594,795552.548643,vKuBEEoit6 +722807,577779.623760,SKmHJ7ve8p,140937,936429.323058,7tgircSU8q +765642,776600.186952,nXipLdafR1,871235,219021.544124,YLuTOCqmgS +534974,861689.054218,SOuT05KOgi,484590,334132.053417,6UgrTlMwZ4 +87502,680080.685582,uRdMIAYLPf,562474,412622.453590,wP5KfY5UKj +943178,853241.739273,sZMwqmQYdI,252535,757046.215237,RxLxSfEunY +560250,830818.936050,p9yYgtfUhZ,233253,19467.732171,M3EM68e7Ri +444701,389130.833577,TNcXrisONZ,302930,727789.394563,5u5hfW9M9Q +92863,310804.925805,YnAtEUa1VZ,960612,160921.516068,SjM2zpNrGJ +488486,658875.452111,hDnwWpMsaj,7446,684498.947827,srSLeEoiOA +423303,899815.696843,q9kddNbiGL,658118,799786.752652,MZfNw7sJSk +63519,715102.718271,QW9SdoaD1v,334180,177592.558190,7FzbDiIllp +23653,275966.569414,dRMgfQanJr,449002,403303.797470,dM4rlcEBGv +260656,558408.025602,EwA8El8FUJ,783315,72978.152597,JTOYeHx81h +526886,672868.886965,HxyUjm3ERF,840931,998204.104736,VuQIqSYVjS +127556,631898.443217,Id7cBO0lJX,890564,277387.419654,IK8Y37Ol3P +291736,229340.918664,HJktGjoiPH,769510,500500.633095,sjJkzSzzRw +474970,14553.184569,cEOtLWT1BT,900473,410117.619485,o0Jxf1dZnF +398838,768325.231864,5mQ0EpSWrQ,112908,279341.417028,8sCKYUoXXD +973066,101968.856383,0RbHx4CBsL,725369,702498.308027,EC7OebcwqO +539694,803367.892481,mHfMl7g9bM,386242,234556.162265,NboDLYbBMY +405545,58647.614732,ytolV355Kp,56511,851359.119227,aMotNMVPa2 +377333,458298.666356,si2ELDl9iw,383034,230186.229656,pO1t0ajgmx +410487,339817.383157,i1SJaDhIK9,770434,571205.592870,5rDLZ2VKRi +177032,596021.488074,uB2jptIDDZ,552857,295893.404041,eWqXQzkrfl +161607,120798.292898,S8XKfDMtJM,594831,743845.933673,banqtWpoJZ +711415,222285.665060,BY3e8aHBdJ,427607,655418.417127,AC5BE22jIq +741046,165587.424199,nfSPlwZdHh,756498,688933.615206,ytnN69WSAo +465444,551736.392288,K93pHxasGl,629018,900503.120451,GErfqR6EnH +339099,681558.516920,ZcoVDJj7Nz,598045,288065.359679,OKsqCLPmN9 +247706,958433.119836,Vu2Kr3lu3C,570343,521639.714036,qXEvMDkgsl +563891,276155.028950,fWg0rNLmko,612654,296263.692861,XDbaPpHvLa +892548,525160.816951,PP2wGsK8Mx,429500,912038.003244,bJdgW0wBha +404138,475570.787781,ynMJa69hYn,632696,224972.063633,TYcHRem118 +621843,206799.979072,qq9xZGlo5e,330713,12569.313964,3y52cUT7gZ +584127,431413.200006,jxE5uEWUnh,754816,403226.708344,0zS2Gx2jkv +373745,452617.894032,RcYXYuOmoB,643161,535886.721406,neTFOqvN6x +955518,912520.362283,uclmVtoUQH,58876,337160.713560,pT7n4cGPEb +95980,458105.528266,fkQ6J9fBky,508901,430083.924917,aSnWpIUIqW +602096,980553.497075,RIKFuLRtld,557805,212513.777617,Ud84o9kcqf +455846,566218.472005,Ojh4NOQkZQ,572673,298887.410665,V0bugF0slk +63183,864817.703557,KlGcy499im,761270,409197.294584,ahBWEoAGsX +673696,25480.905189,UqQQsX7TjT,636877,229267.646663,mdCuUVAEIz +473317,188613.455690,8dUWfJkbxS,109880,288672.744109,TyiHhulq4k +623442,41011.391385,P9OWn3fftJ,114611,773183.399886,kpl35Wnwgt +470499,238486.322796,Dd3RIYmZVQ,82213,675390.677647,WW0w17TLzv +903715,311592.330759,WTDQtrehcs,214969,571296.081632,6L2alsUd7E +584336,31607.866594,qaZLmur3CN,501115,806935.585454,rkJxNVfSvZ +652610,972976.130877,LAoBEfV1t4,604754,198689.378444,DMP36WF8bk +479263,164498.930196,yQl7R09L5T,874122,593448.973511,7iHljBQ5n3 +424896,803787.345423,i850M40F9E,897463,624457.961478,PUeGZ6PjEz +109025,211097.653689,OxFGeqb9Ku,739307,86007.799185,9fYXsHiuYm +837906,972411.842616,nxkj3HWd9Q,417891,613451.503291,3ituOA39af +298114,614920.855450,NVFjrZtrvw,482913,849047.602474,NBvbE4ohuu +748469,26213.804084,r2wf3cfNYT,877387,300698.615816,3Fn2K8pEEI +919009,35203.958292,Nqjdl8hrR7,260641,104759.070967,YDFPCuGcXe +158621,773826.702469,fDvLqCKrf3,233901,660264.479962,HR9JCyYNDN +756678,838501.760384,QbfGS28Ax3,550889,449508.186017,SVjDdCW5D4 +86258,150765.654536,qCmcVeJTXj,866534,675630.851804,xs1slpCZsv +467646,797103.084794,DBHp0ziwfg,625585,363954.754220,qmTtVcqEdv +978917,139262.537347,k8iLtAyDeO,629940,942221.273501,jzOizx0YxC +232054,659483.113173,x0Yxe8JoPL,366131,395602.952707,iZ4siHrBNj +864681,779835.085491,KkQT2Y1Ao4,224723,243682.505395,cRjbBDbxmW +790507,89207.513161,zXSXvS6gXn,84253,683331.395610,u6sqVkMckk +322209,795649.534277,vt1nYnelj0,910617,481947.434168,ghERi4ruvL +968482,200942.235569,JTTBYNtSMF,662332,148076.265955,LXfLoWMLd3 +389327,762276.832009,afrXLeg2ka,424250,787786.677865,2rw8yu3eaJ +432163,977352.663572,SeHZBlnqGp,855055,985830.751369,GXccKLY15k +524510,407242.775840,n7W5kkH5qR,227896,628967.874965,rPxXu9hynq +760880,209080.412429,aGHOOBYVse,640909,851896.813863,0zZsl3dzbE +401598,193582.060905,ReXGbJMfxp,604922,547963.533679,zxfVvdLHaF +241532,915923.869904,I9dvDtvNK2,163245,510149.005289,C0bmcSbCq9 +644304,257460.740606,R82CVJze50,428055,263855.188742,vj0UHjDq7C +11989,925133.450201,dfiEWji17r,559471,967579.637688,l6wrv0VdDC +877551,800782.690896,2L8fpyswnn,391979,150342.339080,8gMFYg80hP +95790,192356.328775,itNFmFpWNn,306285,981336.438357,lbh2CAe4zg +954856,239131.013849,aFWpNuzGf5,804755,518704.937131,p9hiEk1rUK +695612,58768.086854,66w2CvAEwC,848182,577915.343693,APN9g82EHH +881872,759611.846785,c3P1JNoXjD,632552,362451.782834,PbJCliVDEj +773847,208071.087893,cdloRTHvp3,378238,390618.750394,r0s7CtLvuI +548267,872599.177831,ET8XHI2VHn,985819,67532.536997,VzbLlz9ENY +184472,179216.761279,oRzigHPRNk,332327,11433.671533,u9MT1dxXFu +123437,1443.201685,ZGHfeEUFRF,597826,439888.648601,SsN2sby9oN +707952,698211.680768,Q8mEqjyJ5B,374221,887243.452867,clWFrvETmu +257732,773629.840174,lofs9s4Ru0,415794,356536.314011,vPbnVGRkyT +68540,121282.866756,CAquQXcdbx,21751,54849.796597,kq2vuyGOo6 +626652,674525.135049,wdBiKYpHSD,492799,590496.111755,AkFbOhMkkH +43795,973673.708226,9f2Ies6NpN,241943,539263.394715,11JZvtWOAc +573813,810860.200746,TvvLwqjWEj,511794,998744.368577,ta5K8gveqN +494227,571126.661864,pKf5fviocP,561884,619366.785343,4IyIjJJMvr +597597,718450.397880,ZrM06R3L45,945617,924127.478516,kfE4G4AAjx +493936,186619.565108,Wv2iLCRSih,621968,849727.813046,Y4yNl6DSWe +315053,845607.659724,UX1kHLE38T,849410,816429.068039,RcRUzamKHQ +105209,963421.530079,35hmKQHDDw,625773,975827.520808,EkcieXUjNw +87425,249115.364142,DYPz4cnnSB,305815,160451.689730,VSUtMSVWxs +635750,650583.407740,5HrPlKrc5O,679379,666929.021599,4GJ4a8Qx8H +67046,747097.625045,uEVUij29ph,298138,418887.328755,19xGSt3ciF +828168,163848.922106,mF7cqCDgJB,920380,713088.335024,kXu3G0Pnwr +454014,447368.325649,n9NPvnws32,517664,622011.794226,PTpPBvyFCQ +917105,920671.304934,gZ9bhZu7s6,442895,485241.284015,BWEmRtkTer +678523,468976.711905,ENbYSgFlhg,814703,896055.297680,1Xg1WnIjGo +629181,347711.664287,mbuTwQwq4h,204963,38684.101937,Zt3jqSwHe2 +210142,633488.276846,tYK4eGEAoZ,554091,306227.721879,2Wrh2vqd4W +279606,321003.712257,Ot76fa1EGy,757022,594122.019803,TdyvidaBsB +893931,921584.895079,T5eseVx9Pu,672743,285777.078643,OgYmQhaMjc +322144,756459.241773,AmN7r9hDA6,121238,940375.086117,ubQTc2w2Da +750054,124070.862838,7rU1T11s5V,459206,178429.473954,agJl3etyQ3 +639375,160763.970153,4MHa1SXCjo,885730,200283.303795,BN2OeVIJeg +334556,398309.733315,sS4ndrRHj2,598732,266414.382341,hARtEerpMj +306068,956281.848274,MxyMOjGySq,956339,126814.222115,jGE25TLbQW +429431,989534.922260,W2X9yBg9Wb,463773,370073.541773,njQ20NsBuq +915790,530685.662307,CXEt2Xbvz2,247653,851097.963317,wRo89v4OFf +51983,188279.640887,ZPRBXIfct2,769318,611253.780501,Dyz0BwzjVp +412765,505549.785140,21tGel3hBG,967223,830034.175741,fjImRFnwk6 +405049,582233.079058,hw4dtezkDI,373859,520166.695199,ClFYFacfB4 +887079,844879.620356,9lcFFbylNA,146148,399866.247592,vrdSqgy6LB +376742,790779.042778,3yJBV6bRZI,315583,309250.253647,AssYUjqjm6 +413571,447281.096031,l7048GbvEA,458061,456953.727338,F0106MU8Hu +884129,423892.773797,v2u5dHUpT4,426478,121012.092132,sZHc7oqdTt +235635,192109.847010,ZcftnDHiA4,45287,819296.227915,QRK91dy1UQ +912568,443280.939539,WCUigFGfo4,189168,58713.529553,rXkloBOy1M +593506,630414.483144,bF6zZk2RFE,850634,438156.057256,1MywMPCmw6 +488069,439836.410387,io8gn2brQr,376392,680245.003925,xrPAiQ5di8 +652450,125420.663787,qpGRIMnPZl,66324,683472.821895,JhfYNnYgEe +962769,132509.942443,9GAznMk4lT,858240,195980.389949,IH4cuD2cTN +293761,475603.843077,wMVhThLFAy,143489,2382.358044,cUNWtvbrfv +123169,533607.059064,aoIcDzppkB,248582,472705.361497,5AmyRMQlNH +849540,404708.234873,uTgDn7BiEP,647066,463139.790357,Ouk350Gnqn +461521,222835.064103,2Vh696kFY8,382867,998958.343330,Rv0ndgsPff +850484,485092.069319,5hihi3kWsT,384477,258331.375730,ZjU9KB9Dwh +838236,170118.458381,l08k3oxT6x,381671,324490.603895,CzfTpVUJso +18473,230557.472201,q7GunbLwGs,487357,475875.990732,3jgliDwXf5 +105990,397732.142272,Aiq1FwVkro,110688,403003.868118,bOXehy0nWP +475635,472226.873084,sIa6F4C4Mp,940116,378947.807945,GLUEGprgjm +417950,450875.105341,WoNL7bCCpe,923581,516898.788175,qUPZkZhCgQ +643613,609516.841782,LcYrHV1XUZ,643190,451194.131872,0B8u813L75 +26319,84808.549920,GqIK0syn9H,817278,204835.957181,gRK9dyW1z7 +502432,5632.651367,Q2Q4ufofum,70113,382250.591104,x6mVGs4aGY +144149,852747.724350,kNgmxQ6UXm,828311,501097.454177,AADo1G1Wg0 +338817,902442.380596,rqeqx6dJ8w,89782,822608.997973,AMw84olXl2 +143082,550442.699082,7ou3fY26ND,827135,242848.538599,zyOEo7hoWg +354050,96011.017684,b2GMflVSkR,297073,528254.436251,ZKJCBcnVwl +872797,426208.880096,M2niyOJIdx,912570,704735.648749,EWVGlN6VNS +503262,460204.710260,p1D76SuS6l,999016,156341.077761,JCWX65DaD7 +327635,254342.311705,blEibuv4S9,810392,56111.503579,CjxEHketbB +463187,168098.623254,39MpOa499d,453176,876487.151073,edFAvx7jFd +764032,207862.164812,VEBJKHSCDj,68269,320417.758430,yQsxy6KSZi +648900,998738.594133,wQ3d8yn4qC,22460,941241.479188,uQSGX8zq9V +32858,635343.782417,eNeh0W04mZ,857993,107813.794181,iKKtn5GBPB +939559,657325.781073,C6GMD0F2x8,216895,491068.289749,1Dhc1ScN8l +611871,609722.531538,IzPKvKehvj,644799,907592.036715,q0l77T3QhJ +371521,768970.277638,8QH7WqcCmr,491418,610545.466970,K4WSFqHzyv +497525,417719.544164,yN64z9RsuU,550538,401524.420157,kJK8VVG3qh +889741,955922.941224,RJPfDhEZQm,409547,122511.030908,YaqqQkgWMZ +740437,939642.962126,jHWxdiaVpu,461962,126598.032386,GDgVSKuVlJ +492204,233648.105562,j0F3eTzKUl,594335,195892.791570,Mrd6sCVKRm +46602,228855.694053,0vmxJnOi7a,594805,118362.055424,HQDRKJjBHw +289678,946314.234868,qUirJU8BtJ,181241,688212.834542,YctByVp4iX +997224,373536.218475,V55zOS9P1q,684903,119902.597733,BTyAtTRPTx +708242,281754.218943,DNaztlQ5AV,399004,742641.232989,1dROkePmBu +178927,791127.412569,VctLSHnZ2s,850147,820774.309141,6F2HejvaNl +294293,56139.252855,7XZY9EHhgZ,869419,664955.217065,njK6ckHtpC +269310,945209.655287,PafTiVadZP,338730,442043.144983,ObVIiWbdwp +331650,319327.737747,8uqyttH5jj,51271,356520.425137,p8QrmXGjCV +729501,342935.089544,l9DD0OdrUz,451591,171525.254797,R1dt0UCOcT +938290,356864.430083,PFHuTwJCB6,403805,73710.180519,tDGCCXWtME +195539,346291.776540,tZ8Bzu3AGK,522414,730524.256949,8rtwWtA4pj +698894,589334.249252,VwKrBAvuYr,959175,742026.683404,V5bXsAKper +694838,866776.007823,L0nTSMnX42,414287,32736.875149,XK3iTf8Q1v +351214,200023.563624,x08R1AeZaI,347911,869410.440899,rKSdytFUmo +980885,895081.291493,jwQhQU1diH,444360,877837.013565,PgVVrnPf57 +425186,520183.384001,6IAhrJlayk,110821,472132.816885,nBW6neiHUa +221827,191180.512816,UqcdYz5giY,873071,314911.578906,gXeQx4L5xs +324477,901482.825208,tPWELeTkZE,125791,224533.579056,g4XdKOePhj +375295,858769.955156,b12v7H5f4U,354099,317584.754350,N1SOFeUdjv +727542,308120.659752,9qfDZiaQRb,338775,302369.248599,Pd4pDxd858 +675585,18462.001814,bEKc2ls1Y9,46873,435028.312442,QnY3SY6H3I +384006,672769.649800,wCxhkQpRvj,716761,690890.405617,PLl3mZJ54V +691369,970982.777266,udtwhQNXrM,306677,270940.831858,pWmh2AyQWg +476810,540723.234903,hlFZPDlnT5,217385,30132.040815,LWg07yiQFq +789301,416525.234722,IgEyI0vesz,640647,709722.508277,v3xj9Uy1km +714632,501494.472570,OItzsjhDcW,373024,143841.820333,drGLRLn2q2 +584503,519955.971751,bPzeQIongC,960071,956102.361942,pBdYVrus7s +739597,215002.635825,PwPjqpchF3,751782,316060.646732,AuSfY92e5v +570224,872179.180904,BzzozryGbw,682622,595828.888847,3Q84knAnGF +693623,628643.290870,Bc8mRltYtE,553683,883457.776355,JbFlbgWLzn +616893,538657.280223,bjT1UHXOeR,454018,903656.310831,FwPXdfruZ6 +977766,152637.887787,g77gT3iJdV,443311,151340.586661,f84fsDcXu9 +889592,740355.835343,E3WXLXDuyr,600904,424294.477528,NTmZZAuXnV +620195,680960.324416,Otu4tLuJpg,204935,528104.003479,2kvTKMBW7W +636925,599669.700818,GTtTXSYGlt,941603,164385.282136,Qwbyi8kUsD +687904,998830.255379,H7y7yjTqNW,416897,316775.661246,Y8wVzufSW0 +757333,570082.059442,k7w4jT1KPV,750370,942565.309518,LIYhnYGArB +627212,208148.175578,QvUhouj7Ib,601674,325163.468127,hEGIJY3DDs +150658,152411.064216,PQY0fcyPIY,312287,319676.233323,qBtUz7l8qP +557141,112591.909042,UMFI5mSV64,281704,940291.877660,llj4Uup52l +955815,853959.723063,f6WEOue3xR,994178,997548.274958,F4rEci4JyE +264072,831101.201087,HxiCwcpZrf,165676,630253.377863,xQro7IXIBJ +641535,693321.268756,7BcEuvUDwx,665048,87313.462983,rYS183XLkU +145808,941774.748538,ZYEYjSdRPS,505398,159195.004597,Ucu8xlm741 +377837,935490.294700,jmYZrphbDG,146278,571744.845349,xoFFewD3Gq +998575,939019.723043,6rOASnVNBK,479640,812867.919737,4SSyTEdzIy +491601,540747.644278,x4K16u0FVK,131996,606230.971577,8xbCr6KQTY +513346,972388.491216,f40V8NexON,118958,790896.799181,NfCfAoP1D3 +410453,744648.253069,8M1lO6krd9,813398,299614.957476,GqnaoLQ53N +300155,279249.207533,N9uA5Pg0UA,880382,884410.374074,gNovIGH3Q4 +242333,182648.049726,wQvJOkNuZH,320896,42302.941928,obmKhl0Djp +219940,368952.911108,Kr6r4O7eGx,601356,479393.555385,blprtcC6Ek +582783,331880.940049,FWl7QFeQWi,326159,885393.706126,LW6zwZms7C +484295,695202.838056,bk8bGRypeH,40679,347436.693195,OlYnbtXGQs +849488,336205.609187,lkLSqHjICC,974148,505128.538210,rihmvquAxo +481196,376942.060561,Gocx5HHrJY,342408,396006.517861,L8KqG9bCun +237921,288097.018298,dM8XfsrOAw,763102,381754.009861,NWN5XsOYSM +472718,888056.339839,tVnhXWTVJ8,703220,186092.876853,D1Hj6SzUN8 +752931,155322.152310,F9yWDuvn0C,86653,571699.666717,Xd3mBeo3LV +172454,353568.370542,HxQ1odUH2g,229578,418734.539582,zWWnlHXD4H +389706,23097.349344,RpjYu73c8e,901008,359186.474209,0q7gM3FCDW +624859,538770.021598,bDKDWCMLPd,154983,559071.260665,ffHyqUO8OR +41517,24499.188239,61DUJ6fUBD,293632,787815.723500,0vAqnmVtFX +872353,777900.172862,AXl0RaNHd1,849347,625197.557588,bn47O8HpDi +291295,721928.153313,8mMjEflnpM,879814,738759.850128,93gjByNZ00 +851852,722021.749082,o6Z7Birpbi,417991,489133.107311,3M9sZilLSf +218904,333605.536678,ylXwBxbh0O,287824,801824.607848,tMBnnYuH7v +32839,50566.514415,2P8SlGunzk,951998,59871.572246,urrqrWsetr +434125,628433.171865,9IpQKsKc1C,724682,953449.526311,2FuiUoXtX3 +840038,978909.458451,qbwvlfTRCa,110112,534747.930556,0OLq65ymGL +455716,134593.431869,lkA9xJYZzk,904356,802627.263069,yi9D9HbhOV +834730,12298.017924,xpw1K3qask,223045,307701.130243,nJsqbT6F3y +175931,374604.845975,3IxAYrGY0K,996492,571349.916328,LAB0dVy70N +754806,473045.790727,eAb8tcfLTW,928206,739364.206895,FoDePlM6yR +214540,131661.615503,GbyeiI7P87,80834,580671.116822,kJWgwg9Ytc +851109,995069.778464,FJ5INojJRy,909344,443085.010319,a5dYGKi9rn +359741,745439.886355,qSBH8DWGxC,944261,2117.332545,Zz4LBcfW3J +678494,893693.706026,D5lx3vgHQB,362289,762043.857409,IMMMVdBjOo +452571,745646.841170,nwzqv67Tto,772253,402341.359916,ILJrM9454j +79051,156726.107245,mQm82km3nG,624079,928840.650709,dSVJnihPGJ +587682,208358.221085,LWhC7rgpYn,139958,249015.788889,soTGnDBfFT +85924,805152.601828,zC7yYm3ZoV,195197,261902.487860,xZi0dOWJLy +333658,27126.390649,oDETRwd4tk,781889,378941.413099,uPIskfI2ax +925577,777941.102287,Xx1taeAHV1,219210,915528.417387,waPc74U0JP +432671,810711.789797,5er7bVWZDN,852462,326716.014131,DJDoxWnSPD +526981,825449.669998,349m8YWMy8,272054,272352.646744,XRz8YCqef1 +854376,670752.601362,rViGykdsaq,268009,793727.101361,snFXau9awy +703798,674245.003223,jy9PhX4Gsh,755031,390553.709273,SR1X2i0kSI +220817,610155.790954,QV1ss4GedQ,373879,90886.603307,aEqByz8BHK +621667,197105.920230,oGJxxPsPxI,518640,901909.765732,i070OqEka0 +210466,809947.629923,AmFm4Lq0IO,458688,353609.057728,7W3S3WsVz0 +547210,683583.932557,Zga4F6S0vt,395685,746139.453204,TZeqTpHwZ9 +252804,810059.404919,XEo62HpUoe,750527,281544.019729,RuvueP8KPr +575094,908732.040038,MXrnZxL2TX,89782,740889.576486,O0rB4gc3YR +962757,550834.655365,845KFrSBuy,717139,734525.166894,6109wy4BZq +737394,458335.916355,KBORCo4hGs,404323,234138.700340,ucHGxcRuat +925947,422860.586662,zrTOJtC8Ei,137043,190697.435050,DcOyhqstp6 +606625,463119.922336,Llm85QPJ5P,142053,347629.582256,yYUoLU1Fky +248032,676418.420473,L0waKswYCQ,890722,861045.650188,tEtCMZHcT7 +612018,82562.129147,cMDAgcRUV4,400108,727945.738130,00ciwdRRBR +15732,3647.627986,K7fNecn4l9,510608,607427.034172,62c1escAUP +402843,56237.187081,Jv41kEAExn,781248,408246.935049,Cn7J6MMLcz +290127,124299.010839,a4zEKEzS2I,170147,323499.894720,3NjfzWFycT +487302,61456.192120,D3dfwU8lrB,193124,329723.110177,U3n6nBYCo9 +106653,211196.201480,PxLhRyho7N,283962,252058.873780,sl0nxqfMX1 +991935,239138.640729,DbsbRUGwSB,333149,170515.423540,ZD4VVwtrbR +8786,997616.446911,TOnp3wKrd1,710020,972117.902165,tzcTNUc2yv +755788,479580.193409,qvfCWGQQOw,204240,958285.464312,L5rjtgJATo +102373,786629.500165,1f1Uy5GQmv,698983,633756.812927,isG0PctMww +957299,245917.150246,ZKW6jcAiRp,542794,491357.867326,ETT4AkQO2D +649259,548808.245971,0aP9YMrfCi,918224,321837.048080,imUWCCwstJ +335094,976853.375051,NqmBCw2qxA,83463,684049.004570,X3eVP2ousk +215081,225843.761912,XixrNWzdKw,101539,47413.279246,b0ot3l7dVP +576826,429330.998804,lo4xtkEx0b,658613,233545.907693,J3THKFMdaB +319859,542955.873110,v2Y4Gnvgyu,494959,701617.881897,IaNueJcqwn +941609,735129.899716,s965yHDHLU,396005,268551.010936,b5FTdBwR84 +576643,762981.408791,P79ID6wjO5,352396,114976.622958,Mgs0C54gWX +219649,815983.162783,7HFVOHVqUr,935310,373089.099857,G61rvegZ3q +237916,650982.936108,sebIQHow9Q,506727,184411.278906,PdPpT2i9Mp +99507,226849.769404,GLlcTWrqs1,635500,414161.692938,s3DovpcQLO +588288,959313.850090,awfW6OpqqH,945816,792588.061958,046dOjgzlw +265172,440308.068236,UtIG49pFiq,488610,791121.938796,wwF72MeNJ4 +374981,292104.061729,CSsAQn4Zki,429315,829191.181246,humZp7LAoH +366463,983200.306061,Oj1mezEe2c,618128,680811.962491,QW3QoX8h28 +47587,957031.591988,R92cMZEWE4,764129,507055.533351,B2CEUGf1uU +950212,570392.701793,IZvucVclM9,401358,938294.161091,ruLbAIn3YF +923917,297223.829518,iwPv7hqlLW,118506,866618.766698,VC9L5WPJU7 +901467,135427.028600,UlqmdU47JK,296010,9269.720063,Ibw92qkfwo +82136,889139.034711,cUW1MPDGBD,867056,179685.817546,fGktuOrMju +436740,953536.968743,9pfeiE72KX,187902,108073.608590,4W30MWuSC2 +124877,487792.360954,JShHPQawPP,998505,528175.937328,g2RxWVyCod +312863,157428.533307,zCLU0V7z0t,376087,541350.084352,RkTYT6VGC7 +669385,902119.061106,M0ElUyM4Tg,391111,280000.807072,kVjMwY1Y7N +244139,893727.748885,Vd8HHmgTq6,105866,193070.045687,vDzA5G8S0y +355379,681857.252093,wA15SP5daG,484333,82329.159663,ElnCuJTYcQ +186423,340935.441977,InT1GEvtbH,276648,821936.368692,1PiOajfUfh +69044,898091.845135,ejg8yKdsUZ,972491,227258.866911,JRMtxw80Se +110123,937849.986174,Qk9XVJbQqK,394551,921758.896593,aTqOAZ4Ycd +581743,84457.733315,RWoT7d9Bai,349671,50152.291978,ZMqcAEuiSA +120732,912219.810231,n0axfV2s8k,714672,700166.993764,XJgU1lGWG8 +197185,162911.576694,dKJYPCgopg,289023,957949.983690,0zh5OHtLjx +841866,541662.869065,9q5I2XNNKK,392532,589335.555855,3gUKpFwF2K +153158,591145.035368,OWG6jNMfpa,805956,182723.174514,Avi4qTRlC8 +111957,2787.159066,xzsrBkfSsG,472423,409750.626311,DQ4MZgQB04 +343534,577858.973398,JKvbkbuZrX,47049,548579.311203,j25CEVeeL0 +265110,211398.322628,Wsu543ZYYy,553741,826968.965359,OD7Q3RdPcb +208529,908465.581106,Pg3oePhlyj,608234,447278.272164,c93BDQOcyb +959700,607337.570634,uCrPnka5V4,239723,379439.725373,5jj7BCxHdH +477044,449238.776943,qS1P725HPl,91663,500274.994180,HkxNAE66Rs +338567,370478.719293,2Lg3ABrEx7,550679,329819.347057,Y7QvcBP9i1 +267340,536849.578055,4vTAqQ573R,168195,242775.945343,eAhPz25ENL +260199,166445.130567,B85BvYZWi1,51421,223513.179043,835CWOxjbY +983459,290474.050325,vFB7HWJMS1,188257,987192.106093,5fPbZkWlP4 +553182,706952.851641,7IcsPFrE5V,226586,71662.708445,JyJnGpt1ar +875794,179359.079018,fdRWYndXPI,313166,853767.532640,JeHKXoDkNv +77293,590646.559808,2sh4ftMBUW,680231,951635.921293,2yNuTyIGXq +341720,807474.455762,xlKaS13Ooe,694456,252864.459820,fRCSqYpE6R +725874,569103.166763,ZLbmtNqkvq,20162,611591.354435,7JQJiBrpXs +745290,392160.018864,ht7MHBJZSP,895088,178713.022441,kYwU6Dv8mO +509498,400026.109179,S72zfkqD46,820723,741956.442178,iR3BROsETh +375078,844247.051677,drjPLxPOHy,254015,739393.761504,aakSwC0ebL +647663,173836.642196,GMV6QdjZhv,436259,578482.570425,3AlvpcJ6Fi +838772,391531.660989,uIaB4l8b0V,585155,885968.267416,xV9f1Fz6qc +158788,731158.561988,lUjqW7KrZO,270416,584717.398877,7fCwoewq6D +351237,931699.121036,6Wx9OieJb8,78566,471798.804994,5NJeZZK8A8 +719625,35865.846919,xNXbOOSHaM,699073,107963.548100,1I8FDSZvHt +785359,582220.643122,5BxV93XFkO,810942,215321.273544,jFIQ61LUGg +883786,429038.069549,d4aXhWS0kU,489938,957560.719640,z0s0exnRoe +500050,505100.123483,CpOCYYYVSs,558369,442483.949432,KymfnOEXDO +419263,671765.935619,zebJiHpWgl,478904,861735.523125,Q4Jqv8MHwu +283642,471290.615299,sAL03dWub8,415571,74520.967265,RteT29lN3R +173300,43869.131850,Mf0FOfm7cq,757113,314818.402806,39j62i6Muc +632918,489206.883597,DusJGhKETy,817912,318708.554354,eOwClATmVx +653523,956369.820653,jeTRY6b5Zl,123462,71045.772414,RC0Xv0n5py +817212,188046.327195,VdkgUMbVqj,150223,642771.974133,acq6HJANoU +607483,399280.527190,T7WGIrB2jE,816357,486314.281911,2Udy2eb2Nr +770680,442317.650470,zDGG4RjZhq,264791,294431.709512,o137yiZtK6 +880485,705408.152152,YlWIfCfnJY,686525,829127.476831,YYPAgVL10G +626772,198298.840603,KzagSL3u1F,287028,206102.606749,mMBMKIg3VV +447212,241947.603424,ygbkTDdCyU,471116,412886.487326,67x6LWKxUi +420609,586247.425749,KDfmrXX2zJ,638322,920902.028039,SEZBBlWlCF +297217,770514.746180,pMO9vNJtvM,262075,449167.647114,cGrQf5Pjz4 +85935,779820.936301,SQh9cBUO8I,999818,861975.635507,hsa8oyXsbF +785594,757184.713689,4uF8DXawlR,607141,911712.509522,QkEDbuDPRY +366434,325713.090055,4hxQNB4Fo0,382946,507679.467420,fI7IDSmA5N +555993,249619.281090,uuIppynFVi,514546,209197.038241,osr8vNjuk2 +7296,832974.858535,Z38LKQQVmb,806961,668973.381939,XaPzQ2Sgo0 +60248,742907.049857,AztlzichLg,400725,526105.572737,iImBbJwc33 +594436,871647.743774,igMAt5dZ33,143128,666958.732888,TIpXZcCRMn +133063,166881.421100,WqLFPbk6og,73269,183248.662591,ehjz1bJt3G +518784,842799.776048,44C6MVedjz,528750,181260.045953,u0rAooN0mp +402390,565154.606894,QYAesN5ebM,405876,919144.540206,yjUgrMZQdS +610442,289839.008843,6TIeUaZit6,589808,269897.395518,LoA5jddXmx +637047,215278.865842,3TfqfKU3ac,635355,942257.903336,sZnca5KDJy +872186,32190.751256,qqHxQJZcVS,556036,209174.929983,OqnsBV4lcR +276341,287402.004237,tjT3n8WGcc,268729,429424.806535,xqcn6D69Vc +797666,360696.558618,n0hfNOLodz,652215,125648.318663,LpyYSiVcgD +124926,458259.523213,RiEUrtom0u,474842,883481.969670,UAuzskUUhe +638806,973428.770881,3y4nK2yxxB,62863,47063.011701,XXpPke7O2K +285727,819315.469876,xMUIaZWc5i,671508,444639.397648,6z8GvUwL8z +141893,496416.482973,ZIulYeJ6Jk,108607,687271.228930,Kcv6fRPgE5 +996119,43652.886951,bgXprlBts2,343822,645068.520670,kRjzj1SD2v +731517,756415.107733,x1vbVOQK32,20068,71403.978655,X7nGpxQ8N9 +880755,242935.834794,iuviSiGXf4,824951,451917.722426,0KCmtubVqh +824328,939328.558802,lUPoB0pSSb,26398,882026.801156,1b4lccMxFq +206963,463438.847647,1FAb3Z7nuI,519387,934762.069499,KnucxBswvW +682203,824485.623067,nr6g8Nuv35,80031,829123.056522,Je3tVQaF5m +161115,241870.383935,cMyQs5EK2c,628584,789783.261452,94ZSqPHVQk +863634,234917.811141,HbuUoaSFzp,763343,194223.023836,GtBvJ3eCW6 +402796,419166.932407,w8lgSS4sNQ,661203,834537.267794,nsRpyKacMx +930324,677669.198380,1IfHuoR4DG,286471,349264.098760,E4kq88qbLL +152716,810895.005487,Eamttjf9Kg,111609,918766.166692,fZ1RGIX7TV +376140,363114.244727,dr8Gxr63S0,827940,364039.634833,BZ8RhhmPkD +264330,94292.025914,XfVAaFkkr3,486448,965823.596468,6hXRgVv8Yy +94023,538193.867853,q8cUa0GiZR,733124,19996.106751,x6RbiHHWJV +45068,554949.740968,cKOSfh8s0T,379169,736174.818521,WPN5YEIh5Z +49049,498952.476024,5z9Fv6Ab00,509357,847803.011781,U1RTlKfbYI +966304,820023.420130,rE3oRPx8zP,50457,877693.217205,yXfRMWJWF0 +137834,464660.090314,cPzq3T1HfI,819957,26923.462942,W3qW1QSlHU +566797,794669.974195,WPs7qEsfAA,678358,771031.593612,TQUUPCs9Re +672063,963700.387011,L3IJf9ZzyR,192238,536624.412334,DHp2pBxE9P +875007,378845.389384,b36BFAqMj9,353230,193036.555750,TBQSaaixwQ +238780,70868.093043,UNqpRChvOG,321713,497468.270293,tHePhyoE6Z +133147,739940.555737,4I7QCA2pZg,771496,519091.565661,KiUOCdElEl +970711,966231.910006,UKN2SDjJVA,622397,128745.597511,BffvkHQr2n +9738,369923.557727,A5Fw7ZrCXP,189339,416767.395763,gTarIdC9qa +789573,525008.232895,JpLI0N26qs,778252,772788.132704,4gX7a9D8pl +468461,527807.767973,dYOF8JliGN,61751,133133.496204,ibuCaVdGJn +494316,721493.867065,MeexChJMqW,552589,517512.450884,GHxOzXinze +608562,349423.080204,7nlhvfR0zy,787640,819920.524312,QsrohnfCgi +991878,373360.038152,v5ZCK6pjNY,770802,550840.096616,g0vsE0xSEb +216717,44316.816558,WE29wJUijK,300779,692583.586664,A4iaLAwLyg +511754,430523.875720,kkKBpAQeD7,450422,828181.119448,JRvxf41AEV +534812,666690.940880,xmFX5BQ6Zi,48703,863172.093585,MqtO2DpENh +467499,753436.581484,8mEdNZA2ef,99212,318721.796675,QuGznavmEb +872267,526474.696376,zZQd92oyDU,826140,74405.505462,f4eQrwqnmm +600205,100534.076337,avPJR60vFH,830579,592066.482171,bo4U2Ldb28 +527526,734741.331484,1M8vZVPdUJ,874467,218951.947907,H0Z60v9ZIs +422067,970573.533179,g19GvMZtDQ,144438,54345.904297,aDo53g3vDg +25943,352930.072468,69lZiPRMUu,888143,389601.609396,O4qTwNklef +121984,816378.247182,7JLjRoexJd,667766,87060.686619,zuQMwdbPCU +527826,906035.496241,oESe3TMRsT,900166,627385.941119,MXKyjAUD4o +340678,900888.611276,gu6umYltbf,80680,71456.594817,XyoauvCZYd +240316,497168.443995,DckCcs2OQI,702023,490682.884023,L1sD7e1y3I +556611,402020.971513,fm0YjrvyAx,55349,366088.650469,RYNvNr8gxv +919633,610472.206788,P3fJITvKdf,825415,968844.385607,Wd1RuRMauc +516259,417223.486968,wy1k55Nbj9,730589,541818.353599,i67Fo0lGCo +547696,296453.697740,04j0p8yy2x,661615,962650.888744,atBt163Fc7 +822935,235961.215823,GLGwKk0CgE,199080,720315.588515,trbSRBrtft +266795,705542.872192,npT7BW41J9,238807,433859.866045,aLX8t6jDMH +705769,528421.930728,reWQcEE6iS,879803,901649.045943,SPocJeiwOn +991886,251880.032488,VO8fBnauE9,972762,410510.746064,XopFSzQA5e +140364,163631.472740,RAV3goVUsh,350245,558782.212605,oRK72Jd3S5 +19996,374085.343029,5uFRxzRkkD,59434,799529.875694,sEr1Ubc2MN +144197,320932.646601,x9cbqxddo9,745780,576735.621068,NegtwtrFUK +344996,459632.032063,8tdtwpVyY7,886068,526437.267369,kW6A0Odp14 +242082,521748.301740,yHgJFCTLP5,209432,984942.747155,IziewyGUFR +486707,743287.274272,8qIOAORFJ4,131986,227193.274587,aOY239cACF +240758,172001.279671,Shrp3iew71,374889,644755.470890,uxDYeLHZCI +574308,512508.131877,hJN5kFeLfv,610022,471958.747311,6tCGyCNLCk +443868,972474.366360,qFwhC12yDZ,245608,183785.327172,k2hF0AhUcG +37913,652490.701907,phVuJMyQuu,615235,415575.514661,shzRJC24Nf +373220,888590.577758,SJ5eYJhRKO,985947,711045.004827,k8RuD8kfbQ +147568,224108.184447,XEwyfRKZy1,369418,920341.551009,BNVGK9djyq +116548,694178.053224,X9nGo2amVn,222814,862685.088964,L4dZz8dgto +670082,48866.414335,A72qK6bKHB,778955,449507.157862,xeN1tYU01k +812160,99410.088588,ieyqxw4q1Y,72281,35888.504800,plqGdYe6KV +96492,598840.076026,324IttdEhJ,68332,161037.471334,Ue2BytSEqO +34141,823812.240397,GaTO3IDgu8,669550,306890.735154,v24uWoj9Tl +246752,728719.702167,dsnGTzIWoa,49372,877775.093275,4tFM6KoFYo +414374,350918.120830,JTNcCxhR2E,736729,490919.562969,V8pdlvnwH6 +689629,907005.917248,jxUFHHxmsj,639372,373406.968412,p3oCNowYio +820896,206146.740047,j9EJmqt9HS,453362,173784.659455,eKNdRG8noF +296580,302964.224086,8j1licsckO,835768,891261.138905,ROQJrnFj5Q +681617,422145.835118,4Dgyj4XBvI,332051,572417.035567,0srCYhWi3t +550329,722846.660990,5BgSZ931bt,547550,369276.905341,fB5xZW6X2I +609170,230505.638913,5ciq91UMt1,648691,42670.444745,UxSJ8gcauG +479456,691716.637390,R9ptBNf33a,639062,44529.854854,tKXnCp8D1Y +326706,50272.034284,XK3NxNGvtT,645665,951768.659544,GzcGYqOKAM +379337,996763.309570,WmLmatr901,36392,138171.080143,jXBjLwehf2 +926894,417487.040230,3U6b47zfMi,133005,304357.130486,YlNufoZkdh +252016,951809.826484,JAPCgIIzBr,228370,850956.626706,kldWIrGTzW +720142,932776.085583,4uESsyJSVb,962253,614047.400884,67yNafyP6j +551695,863180.020864,pjesUNaTv5,452723,357310.646382,QApp3DLnzt +18971,704811.840183,kPVV74emIl,940151,718203.652698,rLgZymMZ4A +300923,227927.211996,S5EXDGu88M,756926,255549.245434,EGJMFyzSqJ +19246,855811.947222,uagOCGT4r0,516631,995196.010165,3YaX4SDlt3 +828184,325393.333207,yEgoMvpiID,946417,322954.522022,yXm7fihDKy +560039,591916.412839,OXpADt25rI,656193,972888.394481,EYEXRvyG1o +177498,861377.448209,w8s9VVrk8b,891660,98544.172296,iimMgCnemG +14357,391412.066458,wi0QY1xuMB,506657,353214.215504,BEbQgQsCou +993560,19874.381397,QnNLpHnbY4,896028,216613.938933,t5thNnrsyu +39353,413371.732211,CAd6KlqkyJ,462301,816641.334877,mrRWnvycC9 +237196,344205.521868,W7CEbti7K8,665207,101346.530506,6NIFcDOTC0 +607864,391863.788402,PhNaVwd2qh,766260,433.284335,rt3Q2M1ZAB +874944,823651.819440,9RsL3JQUdR,859773,492206.517353,XqjI0o5xQp +183786,315402.186346,zvglhQwvAj,265959,142741.634678,9Y4eLh3Mwr +724804,266.911200,9YeoJETuEr,119595,855973.129295,MaC1nk4OOj +254161,233417.728588,OiXHG9OTPu,357215,624085.565164,TXW0F5PEj9 +392113,48814.129351,IDcsNo9Yho,382355,461781.071399,Z4hGQwP680 +451187,397747.305436,j294xp1y5Z,771183,398182.980867,Bp0M8aOyKb +241719,600175.454051,jVrl8R97fZ,443851,168534.560732,OSiTMvYFp8 +406375,109812.983680,dfrUBUPzFV,855368,813738.215811,kukw4Z3Xz2 +544572,254947.005148,a2LNjEOwxU,257516,107463.613105,yRA2k9nmPc +21327,720720.579156,pw6ORVq6y7,251726,99576.527098,3KLx5cVqkw +35069,574614.381125,Ml7OPSI2lS,293530,505636.605675,6tprRG7T24 +314599,86168.333158,JxhyQYoRbK,827876,605409.266626,kNkHv0uCds +241557,31953.316675,TZ5KuV8ulH,228438,208640.490343,iBxi3cKG4H +678805,443062.311494,rOmc8BpHao,824397,653018.981865,qxXrGZ08dk +540346,342545.374255,VwagKH9w4C,77454,624265.983291,MdAzLcIRrV +833419,966982.076745,TQAKQ0VYN5,414716,404456.276701,TOWIbAvNcu +225984,59072.883100,qREWeWSdkg,758037,418404.133053,uv9R4OdGVi +609853,676518.214841,9AHuCEkAmR,328323,361976.161620,Twx0ALUVAD +570050,854150.830008,9DBYRh3WYP,908178,960380.247629,RoSggBNAXI +199115,813646.955211,7sK4a6ULZP,466773,315159.280456,3dujyapmkV +156129,618763.140967,6G7gZmfb92,440127,596390.198275,GgkUQayu6B +424170,331457.427999,szfqgHpKbY,888084,723937.017727,EtCIkriL2Y +723471,446376.425953,vuBSPvG9j4,619433,808663.258441,cxd6ezOdpl +898971,855984.125165,eif0RYIAs3,700012,89900.750945,pcMwpGDDsq +163846,387882.400327,6fIcBCarew,889878,781568.607654,iAP7VaKTwi +521698,330690.348681,GuVN5UEfRF,353177,910099.427805,CTAYr14oL5 +869461,26335.297874,TsJtnBypk1,407037,986823.236653,vy0iiKrgCK +338929,895730.832787,pLlMuiIhX5,22623,605713.708944,zI8yH4PD3u +417394,797175.863695,0SC3wETMEm,805333,663844.688758,Q8SzFKmz3t +754967,253584.653881,Yo3ZL4o7nm,548809,269899.753578,GFgd7riOEm +132090,73214.717383,T0ebOyk6dm,799375,472538.811239,jV1Nm13N03 +152487,234376.211344,HbEswmkHgI,274651,363653.171461,p2ELrhbmml +972048,404461.400624,7Qal2Xrdpx,434298,290515.873518,woeUJtyQgh +902172,925029.289013,FsR8oOJiSn,158001,954330.018595,PGImGs2NzG +542328,916097.430319,ra3IfFaFUe,132566,76446.290203,zPR0IUulCd +940309,66160.137971,Hmb08cahsU,595647,981805.937703,QUzPpMZZox +547001,267785.055262,vq7UDcjUiw,700126,702867.043326,4ccGmU0RpB +321652,842765.884595,G7ZRCVlyfW,246325,269131.481393,wAAlsN6Y4v +324134,818589.811861,tRWmpxHWat,620858,92995.322385,bZLArJyFpJ +185055,903627.695991,d4RjfOEe88,496285,630352.619202,lQZQsm9tks +581301,105928.754552,cQOB12gzhR,247840,32004.981510,x5mEh8IS7d +180961,815382.744609,QMPUo5treH,438791,844360.412900,Is9TC2Dzze +92726,634576.774767,KvRVkLeYnV,45099,703813.308280,NKGbu0mAmm +9685,497806.133842,neEXSJXKxG,201367,32289.155713,WklJNlRXgS +154157,594666.962634,4NgZlRAska,895662,312228.999327,csYeEkaizV +377571,854491.090188,KPDkSPyTNT,91446,172793.935980,l3juKGao2s +531820,24867.313912,dQf1DItJZ9,462302,804021.013740,8QYByBEhzo +469375,182080.392715,qyXH6Xomaq,936270,844702.406389,gWRDiBetM8 +615455,115668.585498,oep1Tv4uch,787328,764078.391984,BzfNI4u08O +823495,105937.474884,2PDvm4tpT3,486556,353182.563772,K0KNDz8w9P +389319,359096.200494,X0IfPvXZna,272623,906465.682764,hl4UxrtQoB +266589,327042.182519,YBQgHclTM4,397443,504418.223947,bnxQK2YkhF +931697,832172.685886,We1Tleg3zz,659614,272839.610157,V53HtFOHzx +319053,505244.923343,RaPd2OEpQl,716351,27867.741338,hOiatkwmwm +23972,723114.110579,FoimxdSctE,106278,885085.327677,URjq1SRVTU +14563,895491.096776,hYMq3o6Ddk,572899,747002.280289,zQwsGXLyLp +830674,606694.708253,DCJWDr3vkb,267481,864976.216407,beTqt4qz9J +984219,193928.511787,UsgptKd9Jq,258712,206457.565520,iwtuczsQd1 +132212,25989.582057,e2BKwkJnJJ,46169,986338.587212,OHxtKV8XkQ +772636,353027.725406,gRl5TauEHI,432408,953586.332498,jRav1v3rNc +727225,692566.650412,SkDFaysV4o,528444,165837.204497,2iprjtu5lL +515341,802999.525035,9puc6Hcwtr,431493,540294.910132,hCozZgkafl +788818,42600.319731,4iFSJ2B9Xq,895275,53457.968124,kMt8XhJm3N +503911,86575.585673,dWTx09Sp9A,871641,169507.994665,b3muNR2dg0 +126930,784358.869040,1v7XGaRGLd,336943,747477.059717,uGrndKHtps +157747,957624.575586,PVbuQFUqoG,648718,29398.489911,6bpm5imK87 +69028,346546.953214,dxV1Cco4q9,354203,674229.362738,t21EANJuoL +585177,381730.665461,2lhLAnNosy,859415,396128.268087,9MwdrTrAne +251044,674838.559050,N7j4b4WjZX,324738,997330.911880,NxTQIiHuqI +433864,352708.748618,r8fMICHGRv,822805,596509.396610,0nAWjsKdmh +90029,620261.003195,bvoc0PO6WY,636153,869236.851496,vvr6s2ewX0 +706356,630577.437347,HXv2CrF7T9,476812,971865.758966,NwsebzcjQk +743652,756282.783044,1oj0AkKHiK,508121,562822.263843,uBceA97MEN +72545,396031.370828,gQdzPcaaM2,376157,869845.708769,zuiLR7FVcU +26864,399397.803245,DXs0mmbuUG,877513,652493.855835,KolJzB9BMA +508097,469063.653115,YPQYvNQ9lx,369393,810277.152421,WHBmID66mf +668340,718782.476699,VXpB1jNnTN,712269,219025.892936,5aLbNsLXW4 +627658,659283.159704,jczVUvhZNO,786029,82501.733340,AlIlHH3DTw +886328,33973.061111,j6CrxSRS6J,843455,972894.304618,1PBVmZItAC +505140,184256.607326,NB1hmziQ6j,265234,550724.828399,pk32UYoOIo +488225,831864.317434,q6nYwh4MwZ,472947,584252.483381,kmhzXqkNlJ +551922,695344.495388,05E1tN7vFd,562815,255316.862042,HMbUnZNAtO +309467,920881.392971,K5kvnE0nCU,571850,752253.471262,DttXMn42Mr +224473,295850.276696,eALjaqkprR,453781,235992.822234,A0JcavIzJT +39409,983224.943363,BzwvIOuVSU,210594,344946.497537,LeXLfQ9TQh +903056,303971.130728,uq4B4NAhkW,488653,506345.054657,km3VXqavgH +349520,264622.466053,4i9cd95wIq,872167,991013.945722,O42Mkjv2jI +171342,537124.193842,MyYgmhY61U,797314,579202.404921,kQnXciBZXX +244822,101921.788360,5XqXw8Pp6V,515838,841980.120972,iaT3qAJPHH +637825,19126.586228,JUjEvCk7YE,761014,335915.772035,pyN6uu2zuG +841491,147367.564128,KiGtL3J0HV,126092,382209.717541,sJTTfajv6d +25555,650880.480417,mHupwkXwhO,570160,261949.552650,XRjAWKugGf +876078,216400.387974,vHjP5xiPeO,987682,887032.074920,PHjvqS8BHh +747107,300261.016069,s6YzO5Ebyd,756316,338172.700017,aSnN8hSKLo +63605,204708.591209,DDlQlY0tvZ,884998,636459.055059,p2C48suXs8 +626780,560798.104444,gKqA2F2MoO,27905,793334.118800,w81Cten1DW +353590,386177.645447,Mr7SCuvBXe,433793,662851.585101,J4XKCNralz +696416,451620.132643,UBwWvM8BSR,516215,419470.764145,kbRyLlUIpS +115540,419847.544949,GabBMpAAAl,104561,213398.694860,GN2mJgoPmr +848868,222852.803466,1P0DVehfMH,443717,658791.837442,PKNW3VZox0 +137251,557518.969071,OsWtWj3k1k,872108,564694.624620,FTBkkBCgOe +444940,677435.560857,778poOMQcv,299522,392617.704656,1NhbqsHXo8 +597714,142221.618419,hWERza75uc,373177,469210.508795,Oo6ki97GqZ +286268,982420.707445,WiFA9RSCDY,305772,481890.242752,9l4ECPpxLg +585894,396160.723978,6amEgj9W01,474996,421537.387010,GURMUIkIHw +959359,403004.361688,exX4PN2Oa3,585105,302020.353964,VKFxGX81gV +509609,275438.931308,OVu6DBdN4J,854604,57485.267393,cu0x5xkHyf +75479,513720.602038,AAjTEEMWRy,641846,673083.115066,cS4gtuCHi0 +68281,917178.252610,6jHjzyXL0e,510471,949832.780906,KN1zdDwQpc +72921,885565.014011,EGYCftC6Ep,302529,711733.113329,7uZaNGogId +794271,872331.342601,e6DtAFhTZP,159093,550288.677229,fcek6iJ31C +54235,501607.003163,FsC7zk0w1r,726832,754100.408620,fQPoCqfyMg +890339,558672.189306,WWDJUpXdLe,811705,377176.369642,YXWwagEaLe +642509,426759.786435,2i4ESLQUCM,993619,69005.731204,2Grq4Nw5F8 +803644,155019.337884,asHtJY7uoY,775571,835876.932521,X6OcoLFR1N +187644,221514.324633,RD5Sx50owH,217474,303944.967545,R8OyqOb8ha +393825,822246.652246,7hSlkaDabg,643863,462729.311546,Er0u6FEdm0 +34084,939326.812857,dvX7ms32Cj,379231,597266.322633,SV3WDGkQ4W +306776,645868.884126,mmjTxKdJqz,845115,860524.676517,Na7j3yEMbh +881956,697440.317147,QPpPyLGgtH,762812,624393.696711,WzbEkVDKq5 +902116,709416.266219,1UvRYB3kqf,601094,206095.643866,jEObio6C0P +380795,716551.312368,c8Ava3zw6o,218492,313226.614404,q7MNdKMpo6 +957623,369002.031113,jPYOlLyiMH,462360,718656.407480,EozNtQs3Mh +5630,939761.133264,fgFTjTejar,549605,86656.435392,sEZeKIT9fZ +714975,130243.887635,rnnASuqFTX,655895,49223.867438,HQhu4UFUDr +245348,645839.984958,EzRqkct1Uf,11642,590510.181095,nigwchhzgs +183005,933770.095470,MCmGHqX5I0,515817,257904.476387,hYccJ5qQ3C +809900,279503.150906,AI1OOnPVdz,35902,979322.777887,F8MNQdDMP0 +766662,967613.672461,pba99XOHwP,674597,899469.259314,uEZstgvlD6 +776398,634785.470407,jBqk81JI4g,13142,782947.187881,rHsn4Gjy3k +160352,148538.630404,8kutxdj9Zn,680076,925917.093343,anGEx67aT2 +943321,240155.609763,KpdrK4Vx9n,879510,994416.817598,8qSl6ekHPF +535044,477624.683334,UwTU6O2673,169796,269592.445582,f26HP8f9OP +669873,992018.028608,3PWdezl35k,415650,315837.909261,F5HBaREUqX +133183,543647.995617,fuHPTq9xqd,287971,745091.505876,AkmWRbpKli +169980,246744.620176,4WD8R38eHd,297657,172414.063139,M3uGuxzJO0 +188790,179237.843439,fEJ54pkVWW,892981,480670.554168,GtF3SoFtsc +788118,373909.620692,Fyi5tiHCzm,467280,105596.379483,7r7xrA53OG +648289,13787.398044,11Nuob6NJ2,532523,693506.333895,CzhqCZVKLq +4300,888016.078573,DoQdgRQzAk,917966,479796.147045,N4obUYvzdc +535913,558774.027204,j72Qj5ccHD,437321,592544.664383,6OPp0JG7BC +261424,115187.343375,4vmjmOJjHC,277866,639146.521448,BqqZfCjBxq +411001,920455.761132,OWJRDt4ps6,499380,355370.972671,Be1zPfxZB0 +112089,994702.885381,zO3JUIc3LD,787325,367746.122813,8QlqunH4v9 +174592,75312.740149,ycDdvbDHvA,201446,861247.390136,6bi2K54i8h +652308,938629.499064,poDKrmrOOh,872479,921762.764666,ZJfqv6ZKfN +377646,387418.068871,vQUy5nVyvu,996749,940480.338356,UD1EpmTUDu +994590,266051.114176,qAfvfPWhqm,382297,95406.801100,3d9CoLY2oZ +756803,226012.115993,xTyGIq16N9,4449,543271.224501,C8VP5m5HW3 +720809,235271.125004,tmBDgzxJHP,504943,63402.759997,oLLIyqxx6P +384323,81849.348892,qJUUBg4lcg,712382,879064.195415,UaVHL1ef4L +21406,688591.579992,PuRP4EYEEN,941824,412821.928824,y71GLDTKtX +815521,859632.692713,4fStPt4jT6,369453,306573.869522,d3HTQEPnEr +415640,335806.968419,zDA8c3O4eq,512894,660720.836612,nfLcubjgtL +311215,654212.788189,T4oH3K6y7d,923563,926125.577935,nBdh8OO1Cl +874582,377321.500646,4f8ZCPBlUJ,921295,608998.997939,4SZfNNe7hw +469526,122966.674276,9tttFJNQ59,292706,949387.424816,R81n7YgT6d +379217,721146.937655,DU0hv2GQfU,508418,322680.927452,P6XFxB82Xu +317571,676108.341994,492ieVGMUy,284399,386816.207794,zEu8xpkozx +980864,168593.231983,tQlsFKt2T7,316661,199509.801632,b5psP6AnWP +368860,940484.260001,NvncyFFL6o,806997,127623.953993,OKRYdlJvcO +690876,949012.608834,puZHD3KY1Z,498596,976630.814853,4ugNF3WJO5 +141981,218124.968359,5lTl3Fk1vI,679080,8394.250047,xt7Aopimej +863412,406892.490654,t86snrJxvX,455316,936053.777280,7NaE4Jb9bx +695235,138047.481951,m6iEWCo25d,74271,495300.917970,sghPKYHVRn +891572,608049.105360,2MciEp9GKU,377088,253201.516013,PZoOK3TAZw +823000,926365.121324,c8db7J2T3g,662181,974930.298665,jed0HV0Slo +102124,778487.696490,5kys5yyFdT,801887,418568.781377,vA00eWbbtI +235286,438005.845080,GAXl19nQFA,779968,977721.550352,19m2W2IkSs +83489,675036.801022,QxYUTQ2Rlf,262307,168454.956650,w0t2ulUMye +128236,748725.634690,6SOPtcyA0h,751592,140010.496157,aRMMDkcEeS +189537,340061.121397,9fpbwUDX2N,450292,13786.259161,RdIhPCaf5Z +52701,997065.656448,Pn6dueeI4N,721279,944993.439064,V6TmkjBm2M +899736,15826.719305,DLBaW74E0p,447348,321473.548699,KCcpmeeTAN +623732,101858.447509,eyTsc7mh93,161864,747193.454974,nEwXaityrD +159343,255618.427838,HMtFrtwaR0,971649,445375.910929,914ub5daRY +49027,706064.947211,giydIm79JZ,110128,738050.084249,LsPnqCPbD8 +52745,67677.682613,abYujJqgfK,390994,771177.741229,wJZ6Zf8RY4 +5710,582623.365839,yrsQnlnjeS,171486,956543.852948,HcaKjaSHBp +294366,963098.106048,vUjQnZohPt,689236,518440.536763,Q1gRx0WpSH +956099,492501.043232,kdQ8VIXQX5,739094,860907.856611,0CAewazLra +720110,768759.024484,HvDEKpUVxe,347561,829893.841542,po6iU4FoS5 +693705,187080.275427,KvWjlUKqbi,977829,717393.068945,hVStOZk5PI +512894,931825.019302,sNWwnBuyUq,38966,348543.345381,CE2JYMO98k +444467,841048.576884,VsyJjTPyuJ,4735,551454.872798,jK8zVI8fAO +861021,910226.987040,sYrLLxvmA9,939416,308934.882923,UoiNCt01bp +389670,614340.980760,dYZ4cTtLvQ,460017,61312.153129,BIGqnQKmKM +858283,764011.769616,Rgcm3qYep6,176461,828555.134401,HZKY8IJILJ +959429,683096.411347,UIuJlFuggl,5204,76724.212426,HUD1SDjYNq +201468,334926.561983,XaZ2txEPT5,874919,189119.740855,B4DxyN7UhK +568988,715559.135167,pKGT6aepCV,72151,894373.866165,emXGh0i3yE +930895,505627.876791,dbP0kDF4Fi,444367,855868.322946,oLvYiwPIrn +81045,644000.308467,yqlerjhB92,527127,285053.721107,OnQizaAWh7 +382589,316958.249696,KLWOeiAGsA,121780,271343.073133,wfpqZuD3Di +212374,959087.017673,XmkYYO6OC2,988314,707053.012629,yPzpJwDw46 +688651,745098.912875,hLqmkqysz1,204020,325263.991068,sN5f3uhw4q +343447,327900.690512,HnsMvXAuUZ,372396,901987.637791,FI8hERY5iT +821792,130541.421002,UvGgKd6IUN,876781,604643.498028,6M21MsHrfE +759916,36975.020973,B1Z0VlYwvU,535831,415774.408977,PvvzHUtMFw +578699,588456.716923,NbPzBo9zCc,64444,244378.830475,SgVkWS7LoI +628577,341806.689552,SYnAqTq4Ia,23349,71868.461005,ImPT8Fgews +858302,328103.179238,FL6MJDeIjB,763421,402223.841679,bDLWmQ7Wl5 +942918,497576.667795,5ggOrFlflP,70074,185692.036659,O2lFJseuZd +170006,721721.420387,Ulp1lp67BM,375545,510429.990235,Xw4MdMjEJT +558597,681186.411123,fAOR6yNkpe,669950,988692.647688,2vINCwYLIH +13461,746803.376392,BrZWhBViiq,887969,876221.069185,dvNEEL0M6H +238045,984626.646935,OwitLtoK4g,175286,18806.840901,jAiSY2bjbU +889424,348031.128677,UffLSmkzH3,273188,561882.379045,I8sS6Ylx9i +870294,425927.910551,3mRNzukqRm,137618,289825.387941,D4uqXXEB58 +549503,638376.374784,7uuCYDqqcD,829534,912233.709927,x8gJxChWiN +715128,206836.481393,CD14GAeVKi,966925,82187.486542,e5kaMIDiNO +386892,642924.190309,GiDpP7PH90,121301,579568.957885,c6shu0KK3h +324114,117950.448361,vnR1MDSamv,69052,957991.199089,3LLz0hRlpd +192394,457108.068176,xpA6uyvFIN,305310,956156.789186,gZZw3fbzAC +515282,734933.375848,BQ4w4VnOVh,568036,372035.194866,xsKauNhmAS +968255,105899.018057,WOZuxmId0X,37061,868217.507810,LA9tRasVeu +194252,513650.363014,00v4kqBku7,430241,58607.470407,Y5cY84KvXa +498664,486933.147424,zWa8z0sSIF,261012,591789.862717,wBAiB2z2YX +369833,23608.846798,t2bCBjmK0q,35278,962588.114417,DCfrq2tPp7 +866727,15073.355178,s6J1JN1daW,57395,229374.676950,cGbcO4B2fE +132234,619691.849459,62CdTFvRJ7,629970,611132.100026,QE2oowPYxr +520355,228913.351384,L76ijfUAld,900560,289599.143693,BSJqgSa7KV +769614,196032.927211,6xlrYtx4am,153763,79754.823027,LQuZ0tRqtR +114142,247396.000875,ibXpziVjmU,811379,641461.434817,a7uqUE4ysb +93977,750857.510101,SxftGXPBdR,580568,222772.061567,B4x4NRsHz3 +791415,942077.915057,I3BlZS3REH,927192,992492.339937,Hm7pF4DYfE +323424,562143.675524,sG1PenUcpR,470074,480507.430967,WTSAEvXq50 +996097,198029.601084,cdA7utvdcn,243660,165064.401913,HVOei8mWuB +730761,941491.514920,x89IFmjqnP,114009,431851.377513,3pASCjSTGS +639121,257582.223829,IpCv9s4Hth,936216,547527.698166,qoacAiVC5K +811691,144533.353222,KDqSy9T99t,897810,136711.386603,5uK6aSMJ0r +736470,393826.124241,KyWotPVxAd,398776,505806.140035,13V7NmrBgU +698694,420263.285033,XthnCg7xeN,949751,177756.341073,Z9xP0lMpIL +842801,348298.128364,j6EfJ4nvQE,795432,290449.404992,mPFsXgnrBF +713915,398535.848471,6dgazH9JKl,756718,94317.088952,xUSIpixocS +514510,180760.662481,RDpUEfKkK9,25983,833631.354162,v3qGj9QaPA +340017,102017.847741,rO1jG8gSvC,495301,609786.210732,KkksoG81ei +648935,969335.695976,jPC2oRTbDt,141518,962614.533230,tUgQgxi79K +22364,565288.360183,ptofhleVND,129396,527859.690851,xJgtjZ4gJj +867837,232692.726371,LrZl42m086,770804,809457.735002,JRQpt958x7 +150014,36500.513914,zUcewwkHL9,621507,1788.498638,otvsRfMws1 +153524,706456.466201,d37BoLC9Yu,380976,719275.424228,xnVwLYIqYR +720328,222820.057060,sKtlXvRxU3,950175,427852.678619,RYCI9YdJJS +257766,567949.364181,iyG5bZRrkV,991728,651961.954872,Hh5mCy0v7k +609742,230733.952008,KUNrMYhQdO,649327,564622.758307,DDG0Xb6Dws +803020,562568.683915,1doEeHPZ62,35082,869967.252746,0TrUETPoL8 +461609,222364.940667,JRi2rwur08,680014,792784.214462,N8GTb6ySa1 +457224,10768.573182,XXxNknK6Dl,423639,105139.341971,E6cFZ5NvH6 +816359,536492.098555,doBRJLPuMf,525144,30565.241234,zpeTIU099L +509702,534399.488869,oMfQCNTg3M,889594,572839.022315,epIDMRdZgd +160724,180269.939379,tONsBszhhe,215083,378723.784887,3xNXAfJrmU +970439,51657.089484,nigh3Ljv52,530595,323777.598090,hlPdqywQSi +675960,690379.074735,rw7vmJbYBv,801559,818620.067262,Z1mJO3yYdK +475561,345802.217717,CoN1MAce7b,501342,275716.505755,vyxUrMAgv5 +274499,118050.819316,UrSq3hVmza,389803,567065.009029,bUSkoFaAn8 +110323,769927.291244,GDnqdFfp5E,474811,573572.561185,bKxhY9h22y +300642,569948.911329,4f4V3X53Ta,726795,317942.320355,R9jIEWZVw5 +640257,585856.159642,w8AihKFGEt,914084,92243.621594,tRqwoG0tuI +974824,689761.936649,MF3uTAbhYh,97654,664395.236709,TeFm4fr945 +726136,531986.393248,e51OZ9meCq,436900,230830.201942,tl00G0Kt1y +303695,796164.019310,bmDqR990aR,260344,691984.968397,6ov0xArwSl +929440,927352.359414,ciVCABgteT,487719,556210.769632,faCqu3ri4v +110625,295027.523721,BxJtcppFMP,270528,404007.386113,rwM8w0qbyl +323560,641811.218162,l1uGyrAFIa,404998,119226.714868,1NBBuFMJQw +810193,996698.099235,sZhKN2z4fw,167965,98337.433297,MwafqJB8PN +893485,930622.766163,3qBOQkbzAM,422682,510775.847218,gyPULuUpY7 +649338,856555.575539,PFyKMasZo9,940386,52369.747132,GyrfXZtEoy +187176,329160.163536,koJOxmS1GD,954717,433072.916460,V6vilYNk6a +658597,156432.782332,c0EV9AyFU7,204013,11166.099037,QAp8vHKb5C +937325,824576.852757,hIb7lavbCY,228061,919296.495995,tXkvKwYikv +667101,518151.110841,GLot6LtHsR,826910,390082.757764,PfF2ePcU1O +267102,197514.690492,0SdIDEnGgA,437620,348291.889625,t0H6ASPsdX +430584,977736.278781,vd8HK9CzEH,575640,320954.491459,CbIYGZEV1X +828903,757975.585819,IMhT9z9mPy,258025,967357.935932,2suzbH4h1f +891067,25373.594131,1frQMXOemt,410018,16764.095514,OcuIToJcTk +356333,170646.636656,mgZnHjAKr5,324401,534074.863151,tpv3e66gFj +969991,581826.047700,ciGfFrO8FK,860699,952086.427586,x4re1OgNEI +958389,922282.239955,npL8w1aacg,615930,877818.876078,5iuuue79Wp +185073,344492.323020,uvVRWMCfgi,59357,219170.558844,VfUIKAZfkw +388773,609507.345678,nBTnLzKSU5,557022,391520.426006,tGK5sAW8Ch +375980,935842.359395,aro8Plzf3o,767467,717775.644942,7NSzEoplHi +186132,682841.629148,W1Wb1Wuv6o,234497,590070.179020,vKRUL5TKIW +288339,309778.537056,IO7bdVwhUh,910495,599216.451670,u0cQNLjkgI +464898,630429.542620,2WeXADTCp5,465982,336287.894131,sDX3uXd8Xe +823825,533531.826068,CsW4withxJ,820692,531321.366591,hcUVsL1Wye +918626,180263.960314,2JB0exWNxQ,421692,106230.780113,yLj1sQrelx +649447,499359.719453,746MYBCHQL,117852,153048.258047,A3cprcvkxT +920839,386913.054833,QLTN0GO4Kp,79122,828214.665709,zg4rjljyeV +664028,318193.414236,FNvhb7NXQm,261058,19873.009861,cfHgccVYfc +839686,122335.968559,wroIqtC6al,782078,207185.593116,nC47qgUPdL +923924,929569.531788,hrIwExFCko,929967,245662.024048,czC1cbA98R +290629,637808.831590,pmZL0NcAre,447661,616552.893258,QBZWgMP6bl +669361,266940.973716,xd2GYXMaU4,400293,834975.317342,f5KFQJDdH6 +355120,916447.006969,dHvu9aMbbg,292537,590932.699510,aaEJGayicB +314453,539172.147099,FDdcK3vD7y,976194,357341.057054,4VeY2XjizJ +97968,568686.162886,ZDWuI8rfoX,867812,982228.347258,Lc2jCz9KTg +496803,899886.990681,P5KhSoYYff,56340,811338.284083,zcVHrZeQb0 +51877,618109.604343,YBiiNVZQHR,326633,307987.020041,8wn9GvKJzl +96462,350218.820568,Y0V8TtP7NG,947,759463.975300,8cGEL0beB1 +878899,224657.033884,oh0DKoEEZ7,170299,490572.435921,8Z5cwQlqjF +20259,260075.153362,h9KB2RlThP,625105,927136.065851,BUtBI7l1al +509748,5905.219119,sGdaNZzrE6,999769,466679.007157,pSocODxX3D +630504,271246.161885,edOwIkW2uU,924837,780523.740335,AC0IS2MxSt +9352,786330.515832,LRuZkucqws,551058,115614.064079,sw0rIa9fOO +736631,87319.168841,h6lNgvj16d,722643,837222.815453,ArpXYEyg6M +292058,880629.846144,6BP1pPOwh8,536766,149955.576982,cjSftJ2njt +318114,220999.506733,XJpH2AZUky,603870,152051.663861,NQ6DyI4fqT +986628,231106.663784,b4Wt41CaXg,762556,239902.261746,dVhZgR50rF +721444,814885.685209,DNvwpz1WaL,297183,891533.574155,yEFlVk0YPL +373303,761497.855636,Um5xzQZ9X6,509193,872114.587073,cNebrmsmtQ +560034,288490.982011,3bi2MqF5sg,490258,169733.708744,L01oZGYWPn +176041,38794.044581,YfJk4xWBFJ,467688,237772.985769,TSc0WWLrWH +720553,201782.717092,q3zi5PS9ri,519069,893585.385503,DeIbWzqxrp +224813,74674.815341,D9kdLod71n,858868,781194.255574,0HWCiKrgbV +381096,559021.110223,GfK7MJCxwv,782887,956192.763803,ZiI97nq1hU +154597,375050.350221,SYL0ePycJ8,106386,854721.663552,zMzmcS7F5U +893025,835193.904644,bsOrsIwGkM,233160,445113.524668,lwM9OrvxME +89327,793282.913747,oFvEH5JPTi,814287,493956.844444,veHFPQnzbQ +340872,85785.051116,J0IknR4eIA,681425,719243.183541,NVkjQ3zK7B +88859,516204.251371,1YAZT6IZkL,391644,544500.983538,ct6QRyLw0O +455180,819942.977792,NHzSVTvEJ0,645396,494976.785357,15I2MKiC02 +979215,208732.968677,LJPdgDwaTC,797814,114683.720065,O7OH1BiYNF +237937,681834.485391,vq2Mjsjlxl,20723,30705.909021,qh9zDRhbID +957748,659988.328524,DUwN75CkIt,841839,202893.235658,TWXh6x28er +942733,743977.946636,twd0Su37dQ,996574,562170.312600,gXt057220i +196963,733395.342196,Z9l4NE4YRL,367628,89098.050562,fhg5je23zV +677483,220154.083924,bhCCwS5316,345673,810641.478653,Nq6Fk8gmVG +160976,39645.236186,MoZ9fjDOvM,514576,569206.429890,0Vdwq8xV7M +30624,825028.984677,ACx8ygRVbF,693245,188576.809992,q2aNpaicTq +268521,319517.404496,Ruu58pyHlU,855127,843383.177972,mvqqIxXvdn +661476,644336.253530,UChe53nRcc,208266,875419.535424,CGB2hPlWgR +202463,500814.574586,x0JuvEFZ0L,488082,406270.210981,ZeVsznQofS +340489,54358.153269,mEX2z38Lqu,203214,133617.114809,VMN44gpQDj +497730,309446.413041,5D4RYyX31b,657559,299687.059642,ngjVdSxGrb +942041,391138.591033,Q5uaHFKxTC,111500,238811.110780,Nwb9rbeIuj +117154,80403.843229,D60TSlzkwy,199490,815599.250777,4YOGwf5aoY +913760,959804.195588,mDsvwpenUB,595143,918096.193924,cyPKmFEaws +212992,542939.290508,Pd4Vqh4zAp,804525,581641.115005,iC1aIMPHWW +113203,114325.091026,JwF2Sg92WL,143272,117635.637732,svaL7pb7vl +482794,724465.255343,T1rIDv4KHM,784087,608812.032695,lM2E3HjMvn +984693,301606.003767,LS9mdoRMHG,60008,980994.909949,ZrEQGWZN8N +756125,288239.003189,crQ75Ua0r7,754378,831820.910729,uGOpziLFdM +550687,553147.406696,jjKBbeYqIi,366939,235619.686181,MusrSiaKkg +991919,219122.102908,HxtrzMnGrL,848297,335542.041697,cGbVqEZp8u +930681,643562.284438,W9PEONJTzZ,406256,44818.043711,sdkkR6y2oU +760694,484128.739804,bgGkNCDEVc,360478,654783.141234,x9wk8pszas +758284,683666.641980,0LpEWUHLm5,600399,640615.710300,qQiWaNPZNY +219899,725256.503350,GGfqLuGtbz,44711,286158.960251,81rcHKdRTA +620757,637764.997828,1AMXPIkYhM,898469,707002.794904,K15xN1b8KL +292714,698631.378465,ncY59geJPr,367439,940391.339251,yafGM0mwHE +880612,836874.479447,vO1H6K2T1h,276683,898008.304102,vUtI56lqQY +345496,583093.290051,13cLnj4CPq,559715,920157.122385,BL2x3FvPUi +532644,514216.970442,ewmrOycwPO,477202,494994.296463,6tAJPU8aCZ +471824,254038.739175,UeHevYrg8n,531431,709763.278821,AzjOr7sy16 +347657,456479.394419,3Oe3JpztQp,452870,763194.081452,FEGM7YiwBU +516016,472459.513508,8BlkMksi4F,818525,489907.214778,wrLVR7jk0y +953521,761507.978710,erhWWkHiPh,623276,51456.419692,BsaxTx19GQ +793553,289849.040805,ns9taCkUwK,257318,732506.418162,vA2tSNf1Xb +319919,442362.072877,UU0SlSIxJ6,309667,902997.241125,qV2j7PpDIP +113000,47858.713741,U97yqNZFz9,387537,783485.533649,NcYmAkzmo0 +809101,97209.890152,Uy97DSpRlt,834955,858338.402789,G1Bx9RXkEW +351954,457031.899827,9VnzSUu9sZ,37385,949807.115012,khdCHXCtvA +890074,593340.540677,65RVD2s6l7,263057,574115.097661,qcGkWjQZ0G +611915,404220.898539,5e5VB844Ni,44821,833613.286843,GhdYfVKTsG +801028,518945.417173,TA48qOOUFT,380413,465997.051792,33GJOOwfJZ +654952,735290.793062,ueeUYmXFOD,506228,744251.560363,GZeVNokat6 +589882,545948.115360,n6t50Slskx,167535,936673.128146,dchAIcapnT +999869,279333.465216,dBJrqkjLIt,73571,318160.817413,D6ZAE0qSE9 +299080,618058.394971,UzUr5tJXjE,2327,749774.933928,AQ0PkyWDuh +821406,748912.971028,9duTIkkun8,665620,719020.513616,BAFf5S22Yw +143605,132435.541628,cCj9ardqrd,669068,893206.713675,DAT0yd1lUG +91425,216096.298132,GCiS6L1Q9W,35397,841052.490506,eHPk5d9Ac9 +680105,271496.573711,uBwUbhqVwi,145437,286690.105691,bJNsmPfH1H +529496,726646.449941,6MydCflKlw,327953,317705.962785,JJHqLySVuX +653147,698972.320837,WoeCZxpgkc,453482,778861.849072,ZaDh8mUBjI +660761,325436.359931,E7ZYveQikL,131367,604069.632500,IwTjBjlYOi +827243,214716.091556,b70yJKOhvA,766757,332807.933637,iRRtoiJiHP +720609,456504.106225,B15sGHOKlS,406054,348873.073081,ntIAg58IG9 +572906,792877.693997,JUcEuRl1Mv,351016,664734.672974,1XcRkS6YHG +156993,844251.996373,LhDoyQPPJk,877103,983790.905980,nrOh9jtFcq +90667,622342.714885,YK0zjjmsHj,38197,135458.149049,Lr4jDZz7kK +168357,997946.095300,TTzfYHYZ34,919143,396022.026338,RhOwCmDS2P +969407,449377.854885,9SM2K8mDgP,14312,250671.453528,PQ5lPTiLFh +406364,325835.320749,Woi5xqyWDm,366141,847044.616294,VwDs76EGid +166863,61810.317362,gSby8xqLe0,192533,3416.425699,I5h5EtKViZ +26155,222052.139216,fzdrD0HSNt,784226,234830.975107,asvoFA1Wat +81920,284248.698901,Lb1tw3OuHj,967022,755976.533559,yVnDnFdiKQ +5488,760701.958029,yuxYLpNWaT,464149,148947.433109,jwLsPi2lBv +38580,207752.162565,YJHgaFMplT,47611,675085.662852,0JsupftGkl +664624,609865.814985,KvYafRfe4Z,244365,376552.616825,nkZoy5dyNu +832308,153447.811589,mJEJr4eOhy,82277,321693.297217,UxvnjZ595l +779923,341661.922319,fdIHx2Hi3f,691428,788537.802580,wt95qpWRmf +147238,90110.997582,lOUFxeEeCm,912695,832071.301802,rSbXKqZ8x6 +756924,618282.672457,sv3RS2wsQN,9317,981675.283574,tl0xPBljW8 +254062,528331.296452,BclK3sBLq2,671400,543978.916495,ItEXqnBLxz +544923,439239.770838,MUnHW71jI2,279700,39236.951421,TwV2hUtCAc +3742,937473.838673,oCOL8NHLG9,741147,631647.347926,bUqgMcP1ln +992199,229681.486374,Prfs90mYm8,193086,842008.406276,3W9tIrmSLU +896128,75896.576308,jkurONgOR1,157821,170929.385550,BesgAsCOly +973499,109933.767947,nKvlZkVmqi,290586,693784.082193,UoEgYtNuHf +235258,630699.665064,txkcyDurjv,892447,243917.500125,KEO6LvjApd +861464,505822.255322,lmHF6O5JHu,923561,319056.634870,vp6QrQTxDW +718813,251652.056288,bqEVTdBpoL,378314,875629.350715,iBFC019RJu +158671,312194.386214,pjdysO6OlL,741007,625463.523901,ichSePJtz7 +497824,900770.121670,faFUmsh3h6,804430,457161.865613,QWKQNX5qAE +440033,957151.855733,WHmOHpae08,796015,271750.033574,2IPKek9sd9 +31360,13777.470796,WCPWShFK2e,474172,549327.869722,pKhWdUL63V +611820,942773.125090,UiNR6FitAa,251851,670880.322164,lDC0smi2Lq +881296,289468.057330,4IbKBeBNsK,864500,259997.013740,oDps1GBwdb +426618,797007.011742,u41hGwlbQ8,909613,183275.155018,vKYamXDqZX +48467,435150.439429,4Rcjatsgza,215838,251085.153242,SCa5cNuB4Z +417546,459257.307347,h6Em7JKdxV,633043,961640.247129,tfFLsdaGhm +853093,339679.436002,aHUATw2tNX,508293,861739.520121,5Dd8qYj8CX +96955,656908.456671,pBLBjtMB5x,12372,661562.879245,hxn0C9VMdl +70507,311990.070049,OB8U8Y1Pwe,179680,330986.964580,7pGRV0PWHk +958879,956948.109776,z1fRNDda2E,226132,785653.053350,7erQtbEFrh +546363,648787.436928,fbfJmF3aTb,508002,563510.356462,7j2hdgEddK +121896,8076.586535,DihHzmprja,529003,738336.340109,vNiJVBTMge +73674,309821.991557,DaAxbNOfVC,727780,864110.986989,34BNKRY2vy +676347,662233.804565,fnKdLmlL9T,441912,537028.519508,AGGdZDZ7lJ +323278,641422.198502,vWUQljsmQF,432488,292782.482998,vao8RKyTrl +939672,572799.962799,pKwRW1L8iB,300421,79579.324711,1oWzrUGsU3 +634834,993850.523443,weoMmNOBRB,300512,518019.367672,p13ynzoE8f +369755,715862.294715,iaQc5qIz8D,295999,887769.832237,OaEc6fcn2o +191951,717198.272704,nTKjMSDozX,295825,449616.119258,ZYWv8sgU4K +372342,812325.557120,6mWMrWXzWt,765161,743338.082932,bqlGBxQceN +267026,595654.395174,HnfJap6KVx,338108,853763.847554,hG5Xxd6qIF +294862,339628.715765,KJSySUaRb0,707679,636340.924499,SdZ64L4177 +613680,388130.348800,BcsGeRDy7d,277667,682875.965030,HVghQxePAf +35120,479448.255002,qvQWqqgQ12,745291,907703.160548,kl4BrGWAgP +371657,681865.268564,FlspTQpi3e,344411,142772.603235,aH1p9IXmPM +517304,745793.329697,e9NbKA9TtN,630456,594843.550979,ej9fbZ8DmZ +166973,301137.296882,KY1vK7Yn6W,369742,546414.667672,NUqeRt3T26 +510484,932714.911598,CfQBfALEeY,359200,749299.967215,rJgPa5v4uX +159129,153677.108056,42CpLPhsV7,832170,990604.753252,hEp0Epev4s +889798,582909.109950,8zUcs2fJY0,956950,904790.538567,fkPO5UicBg +707087,868340.658768,4GZxEAFWB6,810236,845097.536045,x3Ynmrv1dX +865927,518130.557978,Zyc4IThT81,30968,290690.019304,MCdMeZAawV +497691,609259.504496,zlZR1oA8HX,933604,750578.648714,ujtye4U3eD +74249,293222.614330,lGD5eSeoqJ,959900,407588.673356,eJGUFXDX6O +923784,717030.776242,ETH28WWn0y,963089,493811.909167,EMJZ2RVJJZ +531690,735316.067255,DgMyFEBBS8,382187,441052.584947,DfOyeuUe6b +85551,538122.687166,7VKb62ULCB,972926,479531.635066,7pbgUrcWlw +131053,801288.085018,tYX3UqiW8J,29794,453573.474395,FoKozioyOU +509598,180276.413251,3ijNBSrcmL,841130,486095.360521,PyEh6jVZDQ +145615,445392.137157,BctzXfwtl5,224564,109256.595680,BzWLf8K5X2 +521613,465585.338364,PHNqyNeHBd,20225,735739.369652,LHa3HJonSA +963691,133128.689005,mGJqFnOACA,796719,106100.331700,2uYSneTky5 +19620,114285.864619,7gLxeXdAxO,423916,316638.403008,2eaFQATSC7 +637749,275761.719343,JlRY6vSUdc,934660,21555.997251,4Ysiz8EaZV +749764,185553.183498,ldsUovw6fW,571047,236257.568947,MvJtYajzaM +569078,514921.439914,J4KF6zqOff,406130,328363.900190,zzuw05TbVJ +287006,715664.493713,zAiyRbfe4i,544075,226143.487496,iGGCSSBLhg +429232,139916.457684,Eg9xkg9q2I,178133,982182.538225,9v1oK4Ndg5 +869599,722434.123523,qlI0bRVaee,21315,462116.359136,IuLxUbxvY1 +179997,777817.401814,Dlrb5zZZW8,957175,319008.270185,X6JJOt0TZl +773920,264858.235150,CraaRm9O61,608029,163708.852888,7hyI0Tcck6 +746472,580811.378301,ZnMrdLb4tZ,363620,332675.411763,ckUpMK5Sv6 +275695,326330.496127,SLebiVAEyJ,188514,69304.292865,Kksdwg2IvL +674616,827878.711453,2J6qPOsHEB,918904,913447.752042,ZsQ02nbCVY +809033,115053.673242,EK7pFp6waR,359642,805259.332221,J0YXPTTjcv +768720,796396.529151,z9F191sjdW,324237,321944.952201,DtfvKbGj3H +85393,459055.886545,DIHh6S5vtf,134734,813948.079867,WIcYJ66URv +439413,847562.776928,8wkY6pmBXT,778955,161053.655778,Q6t4zdPLyx +871030,951506.835779,ToUgERaXLT,727719,213758.586635,q8Vt9ZEUsJ +37817,821810.022322,D6EadTxRrg,461786,643788.411865,DLk9segwOq +874119,509948.905628,v8eJg3uCbt,241388,988401.710945,5IDE9HJbP7 +225507,436823.932119,rHeLZ3Uw9g,678681,734674.481537,GvTMOGteEY +278588,50501.547059,AqIDHcMsnS,259558,534851.961702,EYQGHBwQhe +43461,538848.037217,qlNlIh3Dpn,400925,168296.196482,48y86gJBOJ +56192,702727.583554,3lrS6wk3ZM,896365,269740.766040,Vw5Sw9vIYe +20576,576073.647264,YC6cj8HOPY,361449,753023.488583,RktUpowzuf +60064,46194.158791,0DWKJpnspg,593415,839263.275991,Mb7ZHCqzsq +237621,676739.404881,vI1cJfSCBd,446855,9315.898516,Mr135WCU5f +319500,663065.043487,ugksfhQjCh,251213,325390.905370,4p7sQguLMI +262124,784163.291675,HCRuy4Fba4,166267,244064.466954,MuggWmd6eN +777809,371489.664212,q8FXxjlepO,717652,627267.303388,ltYyUq0ytK +336533,593954.242340,HTndcq7Y0c,926830,211400.486433,98pzTtyVoF +384067,282682.781851,RS4nj2Fxwq,697199,399537.753940,d4HReou2IP +742818,430480.359246,zKRLLXvw8G,108566,397594.155690,q3F1ApPGYb +266690,973380.421033,XtkbBRqOTt,211136,834870.154578,qlsYgZy4PY +666044,674531.840180,Hw93BXuTAI,385256,791816.442443,sM7iYxiLG8 +362229,701898.615172,oYB4aAbGDw,452278,139197.947952,9dHeJbmSZ8 +213485,575434.907276,fAN9hnhc3d,343055,705030.650272,ZryEYwTpZx +194984,163358.509045,4FmtM3kLIk,973334,658142.818136,E00EzU9c5E +838980,127750.414087,0wrFqwezaX,298842,50884.704407,iypTpvUMuy +242482,212221.878446,nEqqu7JwQf,213256,890572.329534,S64olH3qLI +696412,801061.790692,gCDJOsur6E,607110,110253.127210,nHTuB3YZEF +338934,814500.469129,cFMcgaetl2,819947,476477.366961,OtOKQ707Mc +700535,213573.627535,Py0SZyxQPK,955022,667138.046334,GaV1XqsQKu +299347,508407.709419,soMaIjmucd,447361,588510.409504,ppMcInprk4 +478102,811360.713348,q5G0Y8HBYf,534471,838712.954099,4SbEIRfw1n +679465,965462.796206,SHAQLPBhUW,544741,119025.845617,LpIRQpXxJ0 +66928,68346.607650,m8M90YbL5u,455428,68259.126697,kvwbVFhJnA +723312,661847.403641,XUBAiOg3Qq,183855,918700.041709,Za7yt70sDu +825240,661109.360273,BktHuf4RX9,287451,147648.416738,6muldhZMfM +463473,605075.315111,EEHbPrZZ7j,744020,897767.357612,ImfH7T1OQH +611988,475803.430741,ucSc7yeMxN,965063,513432.993428,1QBdOPqOdh +335688,675581.557436,vKCdE1fQ2a,355925,593139.465948,LZUBvPfaYh +123945,755190.725960,6EJ7DjWozs,120813,834123.234847,hKk91xiYC3 +44304,936503.516989,6d4Xu05dtN,12188,605385.243978,MzQAjRXwy6 +20326,452954.318151,WgF0HuFEuc,936603,324842.638190,cUUcT7AWop +155704,498788.643623,EpdnjKeodG,346476,335134.833485,sW3qTQhMvI +268929,947233.824905,Rqrhj5a0v3,963555,198556.591464,S5hcpXDGf5 +134438,973236.358398,o0s2JcEUok,320861,321670.964602,4uD46A0xYv +214826,546617.348677,va9YMHvsTY,378573,76162.828529,jdOSfWzD4C +297654,892994.262539,ikAGnnQNCW,807792,878852.093794,ryFP5QoYM5 +476638,784233.790456,UWqoeSIt67,955227,254079.179199,bTfVSgFc80 +754222,127213.953835,iJ627L7LCw,951352,289287.478958,GwDwX8MVp5 +651337,252911.748700,LY7UmP33Gl,171464,954152.112535,VjKfR8T20y +159029,354564.337952,a5ciC5zcCn,606955,670033.547201,L1hyH7WZoM +516663,691495.968242,EgXORwYWRm,28715,395150.062520,6rgLjxHRWQ +232080,435799.274290,9j41DuRWOB,186332,754606.238891,O4lYPeDkZM +540954,566562.590941,eD8qqkAdwM,755651,928422.615311,78CDOMtQKk +193664,419426.946212,YRd5vpnjm9,973494,443280.771346,TrgbWzCD7N +333637,852371.305710,4fZ7oDE3qX,486951,245744.219058,t82vFoRv9d +39230,12009.809890,dLNwlpffxz,960856,675234.389941,LGYkMu4hDV +324278,340878.613977,jAYyinbmOK,518687,522131.548396,wlyC0v3D34 +651383,994736.672286,J8nHbQgt5g,958950,79452.670175,pRRYpXW6Ch +432140,539860.607093,WCR12JGhPj,238763,845924.874782,zooSoJMcBo +745626,923491.365400,GvVvVyZV5w,842969,423440.795764,5F5P8roOxc +301027,978285.396385,TRIAwNh0KC,601171,917963.380482,QBwnoNfuD5 +272381,222700.143788,lBovoRTSU0,104717,873507.013111,nfZBpTwneP +69267,473082.060426,ZsxFhKu86p,60284,4201.682922,5i0VyOgKTD +407488,378730.861861,87sImUtC68,741755,85127.326691,9NiLCLhyio +895060,260366.576885,ADGM9vQi2u,982360,590453.574351,5hGO80Aghw +996224,95258.026321,gNV5DW8G8F,827158,996630.060264,xPRD9Tpr3e +810475,269542.997783,BimO3rUogC,522144,113252.366725,oWK3iNqP3g +658447,398219.343139,NFFGBXnflc,482327,188074.241466,WT4JWT0Muv +364125,746111.721288,pVI8PGb7Rj,283684,319620.827437,3oO1ygsTQW +46497,406762.886091,63KjhUNjys,899132,291069.512848,8qRuzNIPUJ +884933,411381.789393,CB0WGgqiAx,581614,388980.226019,DKNAvqp5DK +905859,370027.372995,83XAn8HMXM,219763,744371.763784,lzMD2S7ZUl +487558,182744.478237,UMtN35rwXc,666628,621803.572823,QflNFS1uaH +211941,724520.431416,IEIK3njg9T,38821,842047.246298,IU2DYqAVGE +571462,473223.501245,YRW7Hc4vJB,909780,50885.006583,0l4dCWn3l4 +211705,413485.994869,sN5Nqf33Ud,701045,671981.346688,CdR860NO23 +451945,611560.125098,mYyUaCvzXi,465693,534331.534203,jPgsqN0XES +429175,516549.145139,driGxh9oVb,757007,322669.329808,cwzWEuxxOq +324538,842587.343126,c1RIBV23xe,347744,771569.836303,UNFQjsHbyT +553305,122272.447848,ZuEe3cgb0U,9077,221004.317653,yA6hatXjY8 +22025,110369.570035,tohyPNQLtP,194995,560907.174015,VGdsFcsVy0 +672977,590334.764688,Bjg2glvJug,980352,681705.513316,crKmIoOp0q +213561,665069.004591,2PAhZ3ZGNL,622211,633071.412122,kmqjupC8ZA +326503,465650.308043,kMbhK3gs0W,858345,393817.387324,uhizlWTq5M +460599,755674.938367,uYIViRNMcM,472765,602544.923011,bEiyA8GKqu +994426,417865.730102,GRoy3MTIJN,108294,69834.995001,WvfRe7cCL0 +984772,776044.917451,wdUZAhRRPc,79761,867010.001895,QcKOzf2FD7 +909217,15372.175799,pTDupEOzIp,618531,75594.011640,rtnoSdX4Lj +44931,495756.122491,bYlYAwxxdS,31553,70774.884300,kg9TWt5HHn +116762,879864.491889,dwNpgVam1h,216986,289586.622112,U1g3R2vms8 +999045,962899.783632,2Mt2d4uOq0,777147,459837.801448,5j1BhDgWEf +329069,933528.321537,b8h4WPdPIM,593059,751911.416962,4gGVrx7HpH +238909,189307.849880,mI8oDaxDVt,954999,324790.618825,CVPAfCIFUf +270941,902735.797544,D1i68XaJfi,826861,805234.973602,Z5T0KRwWrx +595337,251924.125762,ZkgukjWIQf,518209,433119.074799,7T3QaXtcc1 +95721,199221.620630,CLewGGK3Rs,201557,666045.276906,zHlIdRrs4t +303371,354530.322729,ldtzToVxs6,938738,799434.060953,BgfokblxYA +689518,174297.224349,Oi2DPHTcPD,989379,863028.717753,8HFAwQGWyO +883105,704735.889583,xKifcYCFhs,239039,618846.865198,2OR7PhC3Ca +268264,909226.034597,JYt5pou2KC,851836,698572.040657,PcNEnRPAyw +528310,195075.831748,KvSE2M0kYM,45851,400996.177894,8TfweKqYfG +192485,34917.249341,y5FmNPceOF,212893,759269.663042,wKzdPamgWk +308433,359839.324914,WxD3mkmpHa,187161,581073.798311,Ey4TCYZFkI +676869,754535.057617,BpIWvmxZLp,165499,46767.351631,lJexRlptUU +55298,697070.989896,yhpM0RTLzz,365140,439334.771159,lTJuytOYqi +606400,709158.453955,4g4mmpcO9w,717495,900724.066625,jNe349HAwp +942130,281026.074922,4LeB5wVmhF,519810,204875.733458,bwM7EgQePJ +624488,283311.849588,qlDKF40Y0x,658107,353476.010200,Lxyak4pnsA +188327,925212.350901,5sksW8IxU9,454545,690072.869680,NjegXpdoEJ +522931,798701.827135,zCi7e73jPV,397946,939471.091642,HxhRj94Hvw +949661,870838.501078,gi6TMzCT67,575006,323658.181363,c9Df9jeXqS +932670,742822.062429,5WEUvegQFd,123035,223419.691881,5Zvq9dmslL +103689,526715.202928,M2OT3jgp8t,268070,565445.179149,ittjBS6Dbx +285762,35486.447920,pJVUBt0YTu,142711,627150.183752,CuC6naLOiN +458837,774358.995942,j9OZ9Q4H5p,894572,531006.145336,bg253my52I +149237,943488.239987,SFVSONJjv9,766273,919835.928517,Buy0N3bA4g +151018,982373.610436,cmzTveKDte,786010,691091.013250,SBHZQxmJBT +685456,40485.391237,XQmyMClckK,244891,855229.290798,RESEGQBO0h +113112,771108.180823,kboGdRmeSw,512374,881972.011890,Ptc1ONUlq4 +842763,861155.421076,bfutt85lEb,129112,903064.758779,kt9CKe1ztH +313733,675516.993697,rlBBDo0anh,727508,708672.540935,up4ChZ29zt +340523,241314.773957,2o87S7TuS9,2235,425687.226271,iJjFWU9cMM +43335,308333.659586,0CEwoTHC3F,474697,160607.391441,Ta7LppOBut +963734,664362.667493,j5X2uuNR0K,134333,692974.601578,o2gldEee28 +14129,791090.402683,uHzSpIHmdi,766499,46805.311964,knqqFBWYPY +995264,671687.454488,3Y8QWp2lRx,131941,842253.293827,lbAklWe3JN +407052,82587.865030,W4uSB5HTuy,540510,577322.778121,tWklsvYA17 +45324,207886.328197,QwGPexP43d,188554,823396.162468,zZ9mcDrKay +46917,602653.957813,LZzERZxrQ2,116939,777239.018260,0T3jyYwYih +393034,311032.199638,xbPq029RB0,574077,865530.797027,3OW3EcZzd3 +138543,904111.640691,KRwnie4f3R,528003,352446.456807,8RpsOftlBL +51764,219860.142420,JTqsEOVPeG,140507,712796.510483,JrwI7s6WCT +543982,85726.141910,7cdixZYtk3,487275,876723.922040,gHBDwqwAB1 +693286,525900.165805,Znz1vh8Pko,335599,218098.607170,6o3jRZTH2h +408847,775850.733041,6WtX0NH2K3,528398,921236.493927,tI0XCt5NST +798603,110193.265204,e5Wh8LhtDn,393294,644075.303246,9qukEBeujZ +5579,602224.709576,nSw3oRiAdi,318540,995161.739528,blaZ6NcTiE +351404,696432.039101,4uIy1CnYOH,784967,282076.676298,L40ao53T0D +410257,564310.146528,RYkJn7oo0L,719647,799162.481865,HPgjaxNjrn +983496,555490.867116,LvHtqrseGY,740791,419384.176894,lx0l0erfzb +489778,342317.175163,tKWYvX1bTt,488436,265887.288507,uNKKvlD6IF +2515,542296.109845,R0fUuP2oBJ,617350,803463.094122,MI4QN9gGx8 +543659,106442.770352,VdlWKXAjit,288120,153700.820445,LcUURaeqHe +852504,921708.518858,KHf692WzVq,919756,30038.264702,UhhaHPwOnu +786278,269395.096445,wcdmIE5TyH,625784,925557.428237,CXZdlKB9lX +141947,685708.953643,9AdorZ0ITJ,397675,355621.454391,GucQYC9jkj +503544,49518.058513,REMeRQv8Li,739362,322080.241484,8gVUo28Ju0 +482133,253002.693719,VQ38qQm0Dx,850832,390332.802802,y5SYdFaw4H +705239,747467.987184,qkweB0L4TW,101490,715340.573526,74mEeZV07X +16980,798908.834088,Z83HCPvFbJ,390955,368965.207428,0MzPInkUne +850881,270259.750386,THBdHKCSdP,366959,419529.278403,qTkJnc1cDK +309982,588156.410324,GCGyJqkfkX,132239,654046.048454,h7U8zZ3J3u +867445,186654.991908,HoONtFsH2C,115373,1146.621839,YEfvuJcu87 +571147,549477.136096,Xnf2WCqtjw,485974,99211.646493,KfZFk5WYrc +956302,148623.266134,jjU6oTGiyV,883808,474358.055542,hnqRRvOTuo +992552,892792.455959,s3eT2CpUEz,441776,42727.771029,1tEl5wo5K3 +626555,976368.082252,GezSKq416f,94873,543845.412171,4C4VShIuZD +172832,134338.396902,MPAbSD58QC,251518,280808.900099,sbwRdjfuIm +640303,310360.265381,ZuJ5AfXeUr,622401,893748.189432,AiLUWxjfPZ +296662,236445.051196,as9VBFPydL,734163,640537.961017,FjlkNUnpYi +155514,583288.211272,FNnpMzlDUa,486571,91699.430921,PGVT3NxoXJ +515041,15327.311419,OfVhErQ89F,491168,310590.140367,Smz5Od3t4K +53446,121949.570132,JK2qtwZi9o,755487,15911.059888,C1ckzpzMlu +809540,17513.493072,VGcZiaNHNx,136359,355650.105238,Ywqgw6QDnS +943739,365660.423310,EAdr3b1wdT,716857,42349.378979,yHun8wKXP1 +351003,211113.870983,ksvsbtrCPh,27320,218226.585352,tPtLtNPc5i +480388,742424.473242,bfxpeQ3hT6,345058,963866.453765,w5mnvLCoKW +76386,875076.161200,X62N6djbfF,706516,702407.175543,x5cikQV1uJ +861255,669964.137070,K9KF468Rkx,1629,694894.367766,nh52SFswoB +273306,441635.271848,qG7unozk06,819968,735405.414736,OMN5fqXdFz +114705,624659.309581,htm8C2rYUD,348229,251295.371268,YItvRhxA3w +435441,263663.166040,AJ7wr82HUy,134880,566142.860824,5LooH5e1TH +498913,320231.867430,BNq6gCQQxR,745538,630764.152886,rcFU9RKrc2 +224726,762600.488957,6qQwq249nR,48319,306117.277393,sQ2aW0KJxI +80748,762198.124313,PbO7bahdMC,246775,436286.412979,AANK9K9ul2 +390439,383617.354486,NoSNLp68ER,974365,896396.979449,OGUDPSW2FS +449259,320629.210736,hslzPGBG1N,978375,811875.685489,n8kG6oX35o +607918,897714.050331,dDf1BCVUZ4,645251,234452.231635,7DD0bh5VjW +962877,855375.490011,zD2bBN7qM0,437178,678313.246751,y8RQetrdA5 +746655,487125.445331,pFUvWkJlrj,705479,194804.319483,3JU75Gp8nn +979672,35510.466891,0TL5U9GDkV,629981,602853.193783,MHDPoL0I3m +707499,931513.128458,G6wlTveOwo,299222,569486.305252,equGsKhVTi +714155,503127.499880,sQjxB3mLaF,280725,201147.119132,2wNFNjCq1C +972730,995466.610058,dJzzl6Lcht,206655,98524.766817,zjENJTZmsd +756646,558649.875475,bLIw47wxn4,347965,776476.959935,GDarHKujyc +866958,680663.871122,vyUEByKnlE,246394,151444.526591,KrFVuniEJE +406346,967652.515517,vnzeWz9yIi,70702,87654.289451,3eACZSAHur +57157,481421.831299,SHDsIJE5iw,886329,93389.084057,aKYbAsDr7n +830400,789759.417223,xoYbU73Nd6,394379,89229.684862,zLVyCqYhIk +949203,610950.220648,izfMmX6XNs,209475,303284.014226,1nEDXSjrW9 +778380,163549.449049,PwsaXVGt0I,516318,744450.392344,GucSG7sIDz +57391,710370.302802,So7N16ieFP,312928,440769.078056,rEqDrodHJ4 +428654,230158.372615,dSv1IY84dp,316921,393541.997781,5qFaKyfs65 +279095,852871.752830,8wTVU8E3u5,171902,248729.262344,z87CeZ4c8f +960450,771386.489354,BMXNbDlj2k,962118,700082.118114,85vUzz7BhG +525666,351831.737399,8MXkMwnD7w,794427,305610.138312,ZiJL9rdOTw +621609,208979.760205,1SoE8v9Ixy,823685,9570.481169,dedpTtR9fB +879415,586772.769924,NvNRdigW4I,172616,260487.972387,rzAOYBfMOE +625395,958952.940797,DnCSQv8y4P,363732,261438.230617,9f9HYa5yh8 +151363,880830.641417,qKMJCsemup,218342,304955.041180,HuiWrdt7L3 +296483,522928.902152,DdrQFQQGtb,936797,359530.909163,6C97Pr7K8W +453794,473185.461815,E93dyZ8teM,828062,834663.997637,MtXvj35rEi +461639,747771.788717,QxVc5DvElA,822123,127942.679836,S1M49piFmd +177662,558853.818343,JC9YiIMLhx,823841,734105.811639,6ggKjGQhl5 +787814,780985.144405,sqy5KcnIuT,333662,598054.089380,hQ8YjhLSq6 +751802,7774.995998,8JpVzj0wcN,814497,868817.489762,y56Hc3Tc4p +91638,308832.884092,QS94zACjaV,623127,672625.395600,5Vn7uevIpb +775141,583945.696942,QwrWt0cyan,314107,380590.080567,f15xTr4hzE +349905,176586.818134,2SFPcXiWrN,517020,883696.029240,tc8FqAzrfH +228716,836840.541204,WoadYvCESC,507324,885927.744486,2on6aerVO3 +811365,999723.401774,ABzUQ7OUQF,371018,886792.699810,tiwr1LfrI1 +695516,847122.146181,UVqSmw5X3e,718535,786415.057293,MijngBMBI4 +668913,298388.259824,06gYPZtdp4,596984,762710.507481,tu7a69B1Av +685062,699417.398293,hAGMKtzlvq,310846,326900.059993,RM9llxVFEL +327564,199001.091510,dH4l9J99tI,800014,592862.171574,9QiEGYHMgl +317651,13978.526643,tdFFX6aX0j,361044,660536.703803,MWNiDYIoCV +78990,592181.897415,aVmjUguGLA,474032,588015.567392,T22yITu5sD +491396,237299.179853,2svJP783zk,823540,169369.864420,ApOx05r9xk +955596,957078.787582,nnMCOYedTA,787394,134086.589914,XBfgh4iyIw +780899,304740.639325,gFv0FwB2BL,278159,268383.988782,zUzPn4U9M7 +303721,290660.821251,zENSjDVTrE,40900,899898.418034,CCxF0bCBcV +742148,981370.605496,PlEA6roNgP,389327,477021.683735,jiWpCdyj3V +487538,410496.900044,Fsftf3rzl8,142751,287673.065458,8V0pwV5Wbn +190873,719648.817009,dOXeDkCUef,378985,573604.210630,XdIV0cefby +313278,273179.612048,U5Tzjr2EsE,740620,499378.730339,MPvdIg7rql +514675,583034.028291,TZLmmST2vG,824697,204684.382250,7xRblK5eEV +275829,993459.311604,pmVranbFn2,513548,795106.534333,3Xc3dOzuVv +528370,547987.972641,eaDltWhPZe,187286,434898.135076,k1b2VvINWT +104319,581426.907750,BsG1KAyyYT,312892,437537.753659,uVyCKVMa6d +291201,422479.858122,HtktLyQyDd,750318,46956.435288,Jm5xYlKaMK +176191,20753.598268,4ueWHrd6Mv,22702,142096.665943,MBM6Z0B0Rb +788179,388644.069807,eMZGV4EZLa,466057,300589.133862,tGteGKO80x +611024,836223.412044,dREQO68mxm,119524,406511.315770,93QsMBZNWi +307862,242986.574647,CFt0Nrqr18,293112,858282.642326,NYaZi4pGT3 +909889,757435.569472,GII6qYPEbs,77147,315670.417800,MyA51gzs4O +968434,650700.510971,0AhnjYOleb,107800,156234.775944,NvfwNQbQ4J +925802,483339.800005,1Eg2yzbcaS,670013,366473.401084,B8dDPE9nol +965637,961906.067520,9WaY0ScL9L,301763,120621.295370,7JIpobP33N +64727,979184.255524,NckT0Uovb4,599709,50713.434820,KOQxOegcCR +62947,40036.977232,Czu52Q8l6G,66690,16164.861327,QEh8Ld3mkI +564111,692042.595701,P9e8pQFwum,567626,704765.040895,XFguoT1II8 +549868,381633.751043,K37yvNqeI8,283338,696089.170618,5cbWEjc3eX +746730,767032.298852,RsCcbHSQqe,316607,509748.450987,LTMaN2x1ob +72050,130894.286912,cuH8L20uZU,599206,991285.943276,iz0wvLtDiM +505214,792099.625844,wecaGwUapC,15349,529916.575206,qq1ZYvudOO +815524,36662.427131,GuM7rtAZxD,894972,172131.400563,iwx91s0nGK +507191,308878.644546,FLdSM3kBLZ,612600,772493.120683,lui7OGtpIK +372438,607609.487953,NaS48kd3Qj,515455,624071.390325,YtBtpP8fiK +839428,591883.055231,iE9BMQgqRE,245224,818473.993469,V3HioQuYNZ +923498,150595.597678,DFBGofb2qd,386093,121468.012604,wJqApZpLUW +212457,7675.890190,5LY73OFLk3,459488,210819.091022,0GfgkTFPin +915461,277001.453131,qrWIc0y9Lz,26030,370035.108303,ZZJub0XPNw +577569,698149.675816,LrNIql1IbG,728652,648483.130738,6tRHXKbkfR +294282,682446.852876,to3QZFCqNV,158945,945480.714815,5tVh6oJki7 +258069,359264.406517,6qv3R9xfM8,601331,268316.505456,uYXvbgOrfY +818399,424664.682535,LdfDv3kYck,565152,356437.375322,GrRewbGym5 +787415,360041.246064,wFjqbhDxCE,763735,907088.845129,7lYhghiUq5 +794588,630771.931661,xvDlcAzV9w,105183,417438.384642,7FxhHzmOT0 +389502,685215.281528,TaRN3ssBpl,39916,85365.660712,PJVXlPvQoP +353350,722591.373744,drludrqtEj,572587,502601.839180,xfJCdQ2RH9 +410312,238270.478485,TkBvu53QmH,735545,360307.080857,BXcP9yPZb3 +319492,775493.208601,D8eF5Ck4H5,96671,436043.000977,ZYDnHEB1mj +96576,706382.966954,vgdYmNC909,801119,70397.004148,Viatw8H6Vz +68047,661332.904607,QUvAKmUCMz,485840,764070.535754,XA6fSkbzKU +319728,898218.241984,9dCghfFuaZ,288944,619590.368052,hackhZoXZX +455124,117208.032343,8MYbjB2J68,329211,444480.673391,1vLGV4a3Fo +592005,970931.984026,1VLsIuhCvo,341699,690601.608739,qsMMTToG0v +288708,935742.257444,oXBzUEQgde,688327,179169.476990,HmU3uakLT1 +519521,298128.091846,wU1ECVQg1T,964480,300907.968555,xYPJjiXbxt +37591,937344.005672,ir56LgM172,561197,970101.227152,mcOcpYSQLj +917815,607198.786594,cLnBObfIeD,28050,276054.959267,MxCHaKjezr +993938,68647.941742,ywTXrWGtBh,958740,45165.704139,jj6yECxVKp +538111,549809.412811,NP1GQ34dEb,392049,104355.937569,i9ODWnMZrt +464190,282842.946891,lYwtIWGYHM,645327,863170.571274,gAVSSXbNfy +58542,353009.741554,udX7AYISxH,89664,483810.622146,SrZ8PGj6GS +466571,997507.868536,O6OuWSRJbh,229101,871343.700333,Y6jFumEll0 +908174,862478.689121,SyU6GF1sW9,65123,569507.592901,xR9bWQcaxt +596957,492573.496200,xp4HyHVOas,126251,592928.164564,jugsxMXBle +194725,106378.090330,ET3jOGn7Qy,6402,629800.097516,omY41gbCme +61237,354343.999759,wH8viRzGDA,131545,163752.835862,lNyT71xQXJ +714044,233996.200607,fBcT6wYdBF,420352,629670.764224,EzJAt3JcyK +276692,180594.640505,DMFtuZMpvq,150311,136526.316107,VO5TQlgZN8 +210407,881496.342879,FAQcWzspJI,740154,98131.128100,C5rL5MIOST +496588,86405.337936,vEFi5KnEXd,922417,762079.285390,TLiaNFzE0n +539008,662618.934508,GkRY9A9B8m,944619,941250.480104,fVUxGpbLk4 +2778,23155.034076,qVocStpn5y,616345,784939.997758,OXMFHq3Myu +349398,923004.735064,ApU7KQ4VVy,754283,360261.979147,0fFDvVMuSr +785728,525542.580803,ZEhlRvVkVQ,683864,590646.741758,8fWGe7k8H5 +2247,74332.502663,6iYVS1bX4k,899755,648662.368323,K0Xr3Rhj4g +145163,799744.997187,jIGvWE3fuG,731429,140214.131902,mwcAIAjffG +706508,327672.760475,sZ5Lmty5G0,778918,720675.918030,nQEStvt5rU +922328,936158.450570,p5k74TobaV,754912,451724.784744,3KLMBD4NsJ +144067,523602.076528,DeFsDaQmAA,919178,765478.557028,fPwhKoCzQT +431828,537165.742857,CCdQW6HsiF,381916,835213.827091,HgT2l8hWBn +969375,700270.906275,IAjerCH9d3,41563,102687.948628,wUz3xslko8 +878879,107555.859535,s9Pf259agP,534664,655620.800604,3tUndsGEMT +179302,867586.995897,GNH3myRab8,797095,535500.485635,v6NHSNVAe7 +741293,844846.447008,noXgchfZOO,736957,778542.678553,qMJwJwbnP0 +524827,665459.068082,Th6rXsUF2Y,216653,366641.491032,gPteyFxXTg +228448,225292.226596,RSPK7GuMDv,993903,100736.859211,Sb5Z3bUjDn +932277,570893.329516,UYK5YAcAUw,750881,530827.288107,Q0qjpDQ8JL +6564,799769.275033,nTMQCLoXYe,194113,603256.421738,SDU6NWjnER +649055,471164.003695,kNpTh5y3Em,456340,153103.375849,xBXh5nBCxc +364247,860279.334867,nxeIjDfvMc,78087,527897.355811,deQm9fpCYU +862895,821076.205539,NuzKsAsPBp,900867,965054.015204,raq8330ZuY +598196,207240.002190,6fql8o2YOs,290071,831144.851587,nQj5VipS1m +104533,367234.787750,CUkTA67PSx,712246,680032.411664,9WddnwYgxH +847014,850249.729111,jjRAaljZ5f,296503,483475.360914,QZDQJkaex0 +873090,925757.438552,wi2mAATalf,4360,400017.215137,AF1Tfyuei6 +683645,973107.623685,EKqMmWLj2U,607949,339281.688670,X7NPdafJ8t +964336,78222.379470,27oZlr2LCz,452236,458068.298314,mg56bh9WNp +522509,325460.648990,nsk9I6omxX,137312,50478.174966,ACX6f82gNz +675466,38524.593101,j2r9Hnsm40,863036,681346.027026,ONe2jW0Yvt +715181,341399.616301,aTLYNAQN4k,708912,119507.862229,Hy9ynlp4w0 +593253,223429.114708,cv1EqHSouy,689411,330620.941043,nDPTXuu8bc +672493,651926.668606,TxWI6WCWiT,116811,631213.240195,42hZJItCln +176821,477768.475173,A84vLd9Jk6,581591,353394.101390,mVa5HKY8mD +78269,493696.863294,GVND30HoRI,261727,292696.074135,vcfbzOjXzh +39259,830959.954146,KLytPrvp5B,298621,417647.081978,Skdm9n72H3 +86708,221545.166618,95yEotGIBV,590053,58262.220793,e5Qp2wbXb5 +554064,537352.128350,F8uOkoD79n,413400,585599.898033,9x1js2mFpV +604450,348273.512048,UoGJ9MUVYe,948358,249698.136770,0lnDZdyaHF +81920,303739.216581,BqubFWWFd0,78906,590972.337370,QxIqUiU017 +940345,375767.421816,FXjzXJcGPI,729579,66271.835172,CvxDNXHFoQ +426209,762921.919448,oQ3Lwyo3iq,744910,372943.890391,bemgSKKop0 +293846,127073.124843,xiqo7dm6E9,879198,368972.484960,8vmGSbqXbd +387561,49994.071085,Rpm4iksZ81,560758,439776.199279,UdpMDARnbD +483422,14962.770794,Mi2NaFKw2i,686663,933177.081103,scgCTrjhuv +368403,351010.336254,8iYyC46c1T,601914,942159.854845,gfozU0uaK1 +904601,337310.782204,vI3Ij9HpDq,503544,50370.299324,AbxehYp5hR +705561,998086.790589,3zj6GUNFL8,294741,725755.569119,qBbOk0qgCj +284718,759018.805057,1BTOjjUpHp,553889,781378.362795,lxrY68OUEs +186178,770419.903738,bsJ0avYkbd,767231,689879.845798,zS4jzz5yEZ +928365,953462.603204,0rqwVkuNyn,685269,820843.656209,OWaxbuiGBN +507906,2664.728777,EXFEca14Ay,775766,230279.748296,99Sb72Z5gL +564304,101684.618788,G4RWRHtMeO,659017,46014.165007,AlC0EhwJTd +907532,426749.837215,MHaLGZYoDQ,917225,609442.384138,LFCzxifrKn +530152,232149.210286,57ptTDZO89,698235,466164.707878,PZ1zpNAxVw +434960,936870.183261,4MHT6eNpt3,224618,76018.190250,49F3hkr9a2 +938480,387733.156322,EdIGLd5hgL,917093,704209.196108,jgZ6jxX3Xu +992234,458986.979543,d3RpNx94gN,306634,284438.630897,G2wydaKZxF +868732,814572.473602,xHkHTbmoQa,209431,382063.508735,JUtwGzWlOo +665055,460119.560223,vagMJz2UNh,748726,986851.447430,oIIvaqlQM2 +980730,759593.203163,ZeG2ZwEMwd,660288,991388.549875,l77e2uAZxj +739845,274327.476117,xK3OCjGhpY,973744,769896.430278,7WPm85r5oL +630438,627491.199327,SiFkhb6zuC,397384,552362.472056,mjp0NhBejN +766732,855452.063878,PpY7rh9HqJ,376051,615068.829201,DQytv22jPi +721724,314244.172661,Ic6Nx6KdIN,934872,301855.813145,aUnz2K0rtG +603246,378238.494849,6EvTL7etSZ,328677,406148.797182,wlNXcOf4zR +872424,237859.768318,z03p2FwjXf,546104,303695.188752,iucVgU3u5q +640367,445160.905328,q5vGRqg702,929393,408859.514367,FR8hm4HTGJ +868987,484784.008448,oeZSarTyDw,310964,157533.860672,8M6dkZhfPV +496330,720971.722934,jXAENxCPzh,9011,67690.992699,p08IbYTAgd +313136,286274.935083,Q90N877fUm,959857,534012.615640,7Wf0A378EV +766689,175782.434597,hYDL85KXQl,284559,294308.849948,ZOFcMIauOR +311547,270953.030180,79QReE4oan,223660,116044.819089,QRom5wEYQV +638956,413664.304490,UQE35cHrje,808841,120273.765022,XpUTdkpLPv +135168,897480.411464,hSUkhj1kcU,412692,290532.514673,TPjpZcKKN8 +746390,174859.904904,JHQPo0rtzj,275345,467148.179586,FUpLASTlGk +575610,304055.383046,ce0hXgnEvZ,709286,188986.455758,G1uYqLdxMB +92474,993259.579272,fIFnqm3DX8,29543,520325.136550,XXSEsfkabq +626660,125718.578651,iIXIZIauwI,553394,286803.121505,t7Tk9vKw30 +950534,379220.245974,Yk1nMmCgMP,86335,397779.458290,Q2hAHbyYm0 +360341,943271.183367,wFK1fRShNr,201790,725482.775033,ZRm3zmrz2Q +311196,699271.903936,3PIlVPA0hc,522525,158852.816332,ZWWVscQBZS +987370,170885.171443,LJChZk62wy,8315,702022.728948,5yWaaOYfsY +66804,976498.059115,h4JCzXKFs7,355890,579423.297728,3VfLIeITaS +795235,426541.859059,eFjK4QOabv,633339,900724.430710,pI5Oano9eS +369471,293205.600969,OYCZUjZrtC,440852,210467.414268,aQJLia6BGB +502416,147156.651369,Dz7Ak6dlyw,526743,65053.366751,VKeejEZTYU +887172,306282.846708,WeJMdkPEio,901816,49989.446026,xSBvRqlT1J +502424,874616.101522,L2cAt8pVFP,660082,342579.847766,kAPzjDqs0H +614850,26765.076240,TwyzT01snQ,527665,366837.295056,2TTsSjt2ge +34235,598900.192057,0Lwcicw7Dy,274170,114228.782322,4aUFTLfhZC +855904,66220.945011,K1FP67Ac51,770101,239117.454584,iI974EyAC8 +370250,333546.657228,TJztHWeUBe,784867,553040.113205,wp32nhrJho +753465,921808.070926,XIpS8jzrfT,746651,105104.963452,HOCBWb2CsI +749452,220036.874072,Q5I6dQqmxL,582686,472134.832810,t6Jr867cO7 +981494,398393.077131,TYulfYA1ob,408349,561268.219598,4IbekISS9M +142803,998524.539651,qB9QmTngZ0,156704,586192.758140,2JSrufk6mz +789050,654686.796765,PMrLw9WbpE,130384,535857.673084,Wpq4a8634l +90915,228056.816123,FeQDW3N9Ch,150875,621499.495270,MAGHl15XOT +589000,435846.345091,4VlvHgv4XS,656505,23438.634999,dAWDZgv8OJ +23965,529873.483007,ZwEmgWQURq,236218,336701.882950,IhlBGp0Bb6 +159709,469875.504872,wnKIdElzDy,645315,716484.339935,USfWADi4Ln +858143,604961.488265,1WJ2ayuPAR,594412,208487.933914,8tly1c25Gi +279175,931403.838232,gIjf2aq88c,85314,685747.145775,h9vodQBVKX +780622,30193.218626,8ytQeyQkF0,894105,764773.833335,yKdS3YurSf +946105,229141.421228,tLXtnJ1yaW,111892,591813.038932,tx7E1fhwaX +358083,634349.677549,LnJ0PzgxzS,863681,358721.393767,CMHmOuPood +467991,659442.698030,YDfv8SAquh,905936,5699.017642,BdkWFQm3S9 +936450,636313.322120,vWT3WNxgHh,10401,965905.723969,iD1U3o1SDk +417475,65605.578668,XGpkcFOK7L,26269,755917.196860,6Q5gm3Zuvf +498639,336422.152221,TWxmt22Y51,224893,238435.523058,25lyLrujgU +509240,711378.695098,2dibRNQunj,3156,625228.533397,TAVR2L08sp +504130,759521.610805,gTsrgKxMEF,826544,935273.848592,5IkspWan1d +75764,587561.505825,abLFhSks50,772483,363712.961564,7MiPw5yc3a +450007,910117.042063,MS17uCTsub,299185,244909.090572,osC6QZt9IF +510211,160932.042281,lpUuRyvers,686847,547052.111599,n8ESH1JsMG +81103,623622.960325,U0f5yl7hCy,77778,971631.272062,136Rd1MOU2 +697655,637463.032694,cXGQ8TUonG,838331,167681.282229,BzmwQel2pL +357199,397770.425138,oC4zxtBn6P,289555,239735.454153,mLNLot0z1X +376985,513423.974471,h8CaklgWzc,563910,322346.320087,tSYBkAgmi3 +797076,137029.002163,7xhP6nzJVy,342633,805214.693430,9XVwHloDd7 +812407,490812.694796,jBLg6AxzDi,734344,456093.667265,3Nkz7DaeQj +792003,394203.471767,5CVMLvnrkD,683202,456189.274507,2eQfPLSPAN +520085,742503.063094,ueWeda2T2B,81241,50834.127572,XtYoBPRq2Y +939213,471622.668374,pt5qz5b4cM,936985,729645.843034,Saae7VrUj6 +625942,967821.635382,H9YbT319gr,896980,471601.240143,18WFvPmwvT +585155,949336.602281,4wXJqTze7U,195001,905757.574659,fQCwVXRlNP +111143,795746.581262,8YgY5R4z30,818809,731370.683903,tYysL2Ktv4 +227137,954005.474885,v75VcSh2au,248210,182015.170541,S8JSJarGKp +791038,634658.475755,MZU46CtGHb,249057,570799.820455,n0SHKSByMo +399605,198347.305684,xowsPmuGx1,969230,17864.235032,f1d8MZ95Wm +438880,324104.065094,1B2vPx5pWB,584752,539107.797053,dnyKvRbGUD +918867,334503.841484,RpKxSPVlc3,754462,833645.896321,TlhcpUn3c2 +521823,420135.048493,wyY7pYJd7E,962864,142198.584064,1BkBmN2jge +817698,153362.403519,3cKV4xfgnl,140280,583367.779210,sVh5m5RLFt +665993,684891.718002,hfF8IQvLrf,792575,454029.539711,KaEUCktgKu +613486,770450.589502,dROfFfyyNG,875122,461175.976841,ptVocLqC8z +270695,188604.549782,oSTE4oyDbA,988914,564803.795312,vofE3ckXti +195509,859706.038776,dpimLLseiY,643147,885094.977321,pCMw3UvCqh +691018,319452.023258,WSN2B19BoN,883380,973245.794436,6ct1oElN0y +694027,193231.635324,jwx91eDmrl,112459,32960.257694,jVVbRwYg7J +575982,209682.415277,0nbF1b8ELQ,54883,858112.653066,YWFvDKtX1u +90780,588281.508982,wYYAtSvbYY,814292,248709.346651,pyETVWWjbJ +745259,975584.638950,RnFr9pHeJV,143130,284992.985431,jgHr4cLTKn +488576,397917.344779,42T7Ysk3a1,188867,307581.994730,I5uIiTleWx +205446,514051.900264,yYJbgB8Lvz,579041,862620.548281,gvmiAz8Sj5 +890824,233045.541312,aejNKDDk9l,213149,778574.591961,MNLcHpr5Y7 +581447,617510.765342,3aST8wXBSh,158895,235823.964951,2zUNBmXq7P +593150,151140.453947,C0O31Os2zX,629234,327628.505514,LieggzXAvV +1945,330363.924650,8q9Gx7B25t,906477,636306.199094,dRcyVs1GbO +610461,718320.555102,BXVLuXyH0N,44027,322213.637480,Yfqg8yNZYj +214180,654413.507060,l6ihSHAteY,675568,376774.929481,IqzibtmfZm +507298,551192.151540,WLt5CWdh3S,761714,537522.162008,frrrrA5Nzj +948009,812324.251740,UNau9FIvG6,572264,80543.030877,194cuSLYzS +849764,113000.784255,EwsqR2Q8Cf,57886,668139.097249,0Hv6Y0nk2d +999815,531888.497073,w2euQfSS2a,911600,580271.039909,jMiCBmm3a3 +451380,625364.653824,dZH0uHlbcA,818884,737391.687622,22sMswQXti +571415,476907.102860,TuL9h5gy8z,685657,87536.309572,h3lLhELTnr +113615,764184.724979,80P42Omxqv,250774,846582.002849,0hopuIJQnU +998218,87256.934306,bV0GcVx1Co,217610,624343.310017,waYT4BeOly +564353,784659.617024,D07b71jnFw,614088,75971.407408,AYmQlWhUM0 +695691,341784.116046,yn7hPulJnT,409871,809775.116242,Lnj0dtTu2y +84393,831644.226432,lK8pJV7VcM,645850,128301.637098,VeySeTME3Z +629604,883132.987043,1Cc8r8tKte,741130,876564.980382,fTibaujFBe +9980,216571.386018,arRezBCJrY,575701,593606.452245,Lru6ZJWu6o +105637,434857.480688,6TA6EFNyEl,583968,327271.641657,vG3IizMjyl +966938,834644.254201,5KYNoDU5fz,338533,767704.868373,HWv53PzlgV +825441,687908.687288,wAoE0K07n5,255198,969426.898388,mNUSWi4LLj +914089,32404.384024,OnsLVI2Zcy,116755,466549.500096,N9HAwyNUIj +244301,510804.279438,aFYzRKhKVc,511471,348330.614647,sPTbcV7EUt +265799,505327.681934,udpqTx112H,669540,149988.573839,y4QmnFQAdE +137723,100026.767346,i3inrOGKMW,997667,649222.275679,j9zvFNSpxl +206769,339893.287232,wydW7WHXC7,759604,734309.082998,VWn4gNrkex +589116,410261.482914,NqQvW6Ig0I,922891,94455.783909,v0H2aGoohy +923541,383632.302667,8JZJRdscwH,184150,85747.718318,RRsPnh7SkG +285105,806992.339391,ifFOFH8GQy,925918,932471.093699,hL908i8NYL +58422,757100.345320,vWn013Ka1O,726917,663477.881197,ebQDh9sLkO +764849,607462.641189,G5KfNz6HyM,242901,686690.534060,L4VTZw52Ad +743943,350692.411139,y320ZkC3P0,562332,606777.561171,e9MEliPYCr +201323,694977.302795,IdL4IGeEOD,358792,15408.371141,rW7qjsnJX1 +148120,105094.557428,1yQk38C0R4,882098,642375.931558,l2ubQ9NF8H +240219,187127.453018,s20d0uMYF2,836929,910235.661646,MwdppqWlBm +358897,988881.790150,umYGgYNPXf,723827,69545.163393,I29jfplNt3 +39993,570473.587568,TEr7LEaEw7,585711,442628.112351,3AU7dAIem3 +248886,2862.906230,MZ4E8mMwUP,688251,821146.488381,YsMAyCK3oU +539655,191494.558676,4WuflCot6b,315276,850758.522954,eGYvX9XC0A +810579,601505.018936,hby1F95YfV,553355,408156.715192,QqFqAAzxdl +74830,358913.617911,SQbR8vtjtf,396091,861628.725314,NnXjAXTBLA +765002,964587.972170,yRnF1wgLFt,82038,388209.278477,CYheRMrpfM +382177,506768.002374,LIRTLVdy6W,77865,457009.469550,h4VobSSwWr +333595,160703.219432,ZKRjO6TUNW,388210,700393.060830,lTqkhIqOzg +589655,113050.482833,3w3cMPvt1z,393254,131455.901201,PmHB82d8Rl +995940,603706.213126,iGYzAtZDRx,254577,686858.488456,dlswvC1nFa +888691,869458.277671,znvfLogU4m,139067,851028.951962,KXOM9pYOx3 +994632,319788.420944,i84PQqnxvk,27087,242505.990705,UNTi2oAQ9g +980233,155766.345440,2CVuMgqMsz,905134,613091.679227,WP7fbilKBR +783310,5461.608579,d4YkFMMIdd,46292,690506.529502,fcJoNrvPtB +858766,792119.089430,zP5ItjRmZV,716427,853311.476717,bGeOtonKLv +526167,208175.967506,ibTBaQ4lA5,193959,562050.255594,xawdZ3SQIO +962115,30374.163640,zb7LdVfsEA,880383,371545.585548,Y3w2epvPn9 +646876,255709.961836,YazDvbCW6W,727339,975172.223062,LkAOzG3cDH +602512,795562.999120,J08SBDzy2t,770858,138865.095055,wbj4jy9a5Z +142472,620502.089856,8ww06m75du,392049,502804.795689,rQRjpwrI01 +581166,153980.133662,fw2ejnj1jK,410308,129750.958455,xJCB1j7esu +479894,959817.697194,KnJDg3W7gJ,578307,304390.425601,BTYdUWRR61 +527985,96243.563623,5Yod6oYMfK,39507,929620.351111,uiYctYjuom +86536,668055.694439,3ITaEFABmY,743337,585527.599897,q9XodeE86J +911288,801115.027793,qAxkaE5Fb2,664716,777333.087050,AkjKlWehtF +888856,967938.948507,1Y89ElIkRt,313897,290560.373497,xpEnW76ZRt +764660,740739.601027,2PjZK75GJ1,285556,409887.425434,ivNw33JGAC +558277,813925.880024,HGQ6ne7bJN,559346,524123.791933,lAuxROfYgr +922886,49877.798121,N8zKsKoZby,900682,728539.961262,6xpuiGhz6E +551936,381881.403679,OXdZIMNPyo,310120,988001.235009,XtdJ3Y4PMx +669849,462350.356063,BfW3k7surH,462799,762482.870551,zuORNdDVpR +548927,376080.126046,LcQH2DWjof,960563,156497.877852,8NTRwNaG9T +78338,347826.653948,Bj25ShqJu1,454718,155711.245448,p5Wm3L6Vql +908656,289677.271636,wzysHNRlR2,970282,126846.392386,e7AePJ96cY +981575,348443.476453,PuuTGOJsWh,707829,526364.442305,oUqUXhnvJt +991233,55690.357042,vfRfz9mkNi,219320,758591.229911,h1sdOI2OE7 +360445,474221.519407,eRSO4Q9T2v,795374,772090.662206,vIOwKKwB8n +237820,76976.048175,ZlVpiO5Sw6,147950,846594.437916,myMjl3F8ZU +743419,298377.220137,qm5CtVN7qB,11226,985031.022703,iIFbzWClWe +45829,950621.237405,8y3w2lozfK,757850,88769.440418,Xtmr64pXwO +840103,153045.358407,dNuuBzPPuy,979712,729422.782341,dJjKLcIujO +982806,893791.730403,GJhLnNaphw,208969,674169.754162,jhGwhGERTt +984577,552150.233818,lqQm5Oe43b,710797,223559.530516,tQeio2pCgn +116124,954277.927384,qFod32X0HV,758943,572957.127337,DHrJ3kVClS +813951,380874.216235,NBAprQZpb8,757457,50383.515169,i29BS3CX8T +383989,648771.538492,IqsLOLTTkB,602655,323597.991011,8DgiHINEQA +600601,23164.267339,VUNqAn1syw,865120,814730.851806,1alvZeU6hT +414599,235008.318863,KA74DIIPGC,458015,156919.362301,3h7CIKGHT4 +9614,429692.995198,YhuprrSTxZ,768785,255841.687475,1PQnWshfxW +784504,661275.617288,6Cu6HBQjat,252896,651214.331449,Iawzp2887h +614939,471336.669751,XZWPvTr1oH,765216,709403.424395,QQ1zDASyDa +701420,458053.190408,IWs8agv0w2,748279,627885.552746,2oJx4fXqpb +836426,435214.575008,C89sbtUNs7,753910,80449.346525,BSVYNse1O5 +507922,789194.257087,aLmbymifmV,259888,592413.206166,bWprMUyJgc +227575,283078.802120,FyJn68KoIc,340502,316504.434080,VK1EQmBZQL +472078,617074.025309,cY01abO5Yh,921966,627335.495799,qB1Bxo9OS9 +894218,653091.415787,uJdUTF81Xn,514636,904755.983549,er6RZhnoo4 +677024,682149.070933,zlgDVsjTcw,574620,955141.332881,mT04QXVIEf +208339,655258.491073,DxiS1G6ZCp,472542,776674.623410,Ts9zo5DIrr +788988,802804.601254,v7AxlDG7Ed,131242,897679.633658,NuaW1Kp2Hv +736095,947631.658271,mjq1UVbATq,678897,429867.147948,r0DRq9DAs4 +124409,748545.920771,RQ0kGbVnmv,881067,689849.299516,3HusVluAXn +11111,684274.366417,vTDCMphxkN,18020,413400.265527,VWafrNtuKf +303011,108077.655530,Z0fhP1qmFv,917418,990037.327205,9KkBig0mJo +664043,265509.187853,EUE6DJtI3e,916060,115325.857821,8EndHDbt3A +741978,72500.028224,CZRQFhPNEQ,423228,405101.967570,eMUjsoW3L6 +497072,768270.263452,kzqmYBb4Zj,593811,609714.074125,e45BABtFqC +995100,133319.968961,fYOExeiR3e,966959,201919.448904,EECH9HuPJ0 +480407,63200.558899,q1IswCRwYj,965153,837297.318748,5i9TcyYqDg +16927,175102.703054,xoGYItwNkg,553342,788858.170328,d8aWk1s8ne +404338,491849.417354,fs3hjC7JJu,313280,74799.733777,9ArXi488hQ +228485,837491.790248,S4Qz0t6vLD,37228,762615.041170,g58tZUQEcb +630869,747746.258405,SFPN1AKpyi,501506,947938.189025,zl51ezBnIc +982521,939063.378936,D5Q8U2ymB4,331351,998433.858472,HnnlqvOfrl +949240,687073.195451,uVkyY3yjkk,625526,304812.726485,bfCDxQYtkn +95646,174170.856125,HtoIYxvP1c,185954,547200.336675,NlKanG8x21 +557766,5029.761563,XH7KLbG7fK,99065,676628.772654,qjZCR3EGdR +214440,576702.422372,JVQTDlBowK,523221,505037.873642,1GUnfzyFIh +166203,732025.150804,ay2qPIpZrA,623298,31675.341111,Vp9dYWhJ22 +768762,723758.570061,ywySgjVuJi,212467,84748.812024,8nzfUOHBHb +727445,125172.189756,AG7dnzU095,291237,815511.267499,S5yMufWC7V +700163,903809.540329,keg9zsn28f,261659,812382.581464,vqGJ1N2pfJ +412977,719098.227193,cdM5ItGZ7K,881588,642231.832442,viFWI0U5Zc +63351,488564.548010,T0js07dCkp,980709,79236.085812,JzjmSOplD7 +670355,501249.243805,y0Hobz4QZF,501422,903290.089686,nQLrDdkw86 +269786,994073.140030,jbx5McQwL6,931765,286940.485071,MtKXd1xIZG +483612,958909.479962,6oqQGWghrx,774164,101972.734212,A0Gaai8lhl +731642,692195.712425,DV3E4YZvG2,127054,490085.984738,fCFCPaPKDN +808262,142026.478349,rRtLmKeMmP,141854,517986.143146,w2t0XSsZcI +146871,827914.812734,BIaR3eHQYT,72284,118281.719925,eFSjQ2cjGb +278601,881970.730882,V7hfHjj7Vm,437124,353298.085037,zwCOu5hbCY +500519,576696.949354,UuWyX2AW6F,472127,883053.110699,DkDdVrhkKs +608164,310585.667653,R9z93xxk98,461862,253423.829962,hAo87q3Iwf +794429,322547.240884,gBATjHEsHz,57369,70085.070946,EwHSzQS49r +764898,482765.675156,72PsWgfo5Q,354277,965645.882640,8IamoEyDQQ +736313,150901.862328,xoFm2THIst,905412,232927.887490,6VPD7oEfIl +868841,29367.150044,7I3t7zfEV7,919054,757836.752858,PvMofwT707 +743019,377145.992981,y7vClXLOhO,20331,983609.512075,zO0jbiDrqx +456105,8660.300158,hmbqgJ1ei8,339744,314086.275017,9vKNvmqZ4H +969177,118663.237597,MrLFt4yAhw,666644,624062.527876,6mIZesfxjP +269398,192105.811811,y6QwYnLajt,866416,932552.207880,a3NwuvXkMo +217104,77992.921819,xzCQP7MlzX,790578,975159.155058,JOuxoZC8zH +503778,965324.800960,OdGFPjKaXo,368239,156664.725735,dIsR0M1COh +203328,700635.828104,QjFIMnIURU,98623,463430.553353,ePhIQFSWmO +110806,812037.214028,HWfBbaIJCN,582899,717548.788828,nHAJADjndp +141472,526773.805833,PQVRzIGr11,891468,572882.140665,bzXaTVdy0X +661415,152530.936531,2OiCxzXKs0,756849,448421.503001,s1qhFu1zvC +221956,547718.378153,Gnl62IRNCb,652561,27574.147526,RuOfszzcDD +558197,308636.492828,ZLf4FpTRHm,46727,203362.348192,ROaycg14v1 +193113,173865.709563,XNnOsgXbkZ,263047,357252.039950,7EtcP3GTeP +518833,405072.080906,vnvoy1UQRl,355429,188590.356483,9WnFxD3MMK +122775,193910.680454,34xDjf59lN,111628,714513.076360,VzFAJTdEcz +47857,843996.716758,i1325oTdBW,478921,515040.860110,NsKyD2ws7L +824915,465136.829340,0BuCA6qtwW,79815,517341.049401,pM9nhRaPmF +896093,857242.540459,xYRRNqpl1I,639113,177047.918962,0MNPZfVgjS +157159,746810.486092,vrVsv1aHZt,230071,714529.347526,7gBNjXs8FR +968396,238157.766336,AoSrR4ggrs,91995,744964.747173,7JYkbyVuEC +315678,729126.302621,fmvUSuunJo,285011,968598.919437,v4SwUFmjlk +302768,216419.567769,z03TFtOKQK,679157,99139.902850,4cwECDEHVj +588394,727021.798764,eN9d3QoRJs,242129,738677.954892,iIMUTt6dvh +391842,940006.615019,7zf6K1615l,847465,8409.558617,MbE9kddCda +370673,736974.023906,6OaCFXvW19,96448,322669.409965,dbNjvQdWsV +785498,455836.142427,RehVsPCfu4,181265,233414.767091,dT3AP6MIqA +514364,922950.618953,TPkN6RDscz,199781,966045.351187,3O7gVUUGIH +292122,179202.331467,PYR61625op,819053,737946.080628,QW8tBVSLa0 +994876,455986.726052,0tcbWIR81r,520385,807204.551164,MoO8jkUM1X +974230,711105.087130,snBiGrnd9f,302238,229521.043462,q0jbLY4VbM +4740,872634.295307,YSUkynuWg8,468981,971062.899046,sWDEVNxTcZ +426179,233596.660434,AEXnFNN4Vl,80235,428459.123545,yjYCMDBXfb +208568,658528.306242,vaqG7fbLdn,41458,720864.526370,EKdgHfQb5r +967344,845080.879232,jsjETdexRM,139935,792296.771175,s7WUmxgEhN +12627,655137.476797,lyIsri5Suv,311889,196074.470759,6VW3z83cxQ +551512,899073.930225,YoddqK99ua,463453,863328.158065,vlwSjUazR8 +300247,857162.433852,RcwIhuatkP,960989,646662.128198,KVW9INfZtC +234698,681302.010037,oeVityvcXS,348586,189958.037723,ool3nJ9N07 +166868,140154.226945,fgrVkWXmWA,917967,771949.175295,5hDGzaGtv7 +238471,440084.279019,DHwArXIqxr,622976,965005.568649,xeLvHMc051 +663131,949367.061319,c18yxQ91fi,818194,500349.693654,myJazWpV37 +746155,70900.046270,NBh1Hw0FJe,409837,730294.960243,MUMAiGUXiP +923531,76826.007676,3LAu4fKyWX,942992,258230.859158,agFlGdz9MK +142495,771519.562475,ZCtyuh9k0m,791499,683873.265006,Kc5r4xp7V0 +89343,644890.178556,J4RtqtYOjv,165792,897069.650622,FyFS11SLV6 +674928,122591.223756,DBMhEfq0g2,373416,483023.525482,sYNzQxExZP +419155,456084.420373,S98IVLJHMI,218229,172857.999212,UUxCk4Yyd1 +247182,703496.246610,p4WmdpdtA6,55158,547650.293904,TT8iUGagbn +234621,373737.709794,RmoeB74fE3,969961,646058.121121,7keiarP08K +753299,712642.647806,2RQkmh7gOP,509834,544944.485389,ZtYhfHPz8I +544779,499062.504367,fQ47s0Xsb0,209758,447690.075496,1Jg69i4Uud +4633,790751.139306,K5qkAN58kg,510366,297363.283193,ULyJ1e7Rju +474327,811661.115378,uvdE1OJ4WN,166159,191655.778506,K1uHWDFUuw +467723,613052.502692,4Bph3hdEtQ,330491,720467.298411,IfTfY8eXis +988076,29307.649552,3y33WNo4bJ,652363,241351.017568,B4L7cDdEQR +213556,325210.117951,KG5zlW1ZXU,465415,990409.666648,XAnGjTUvjA +690179,627241.567361,FO8O4NpMYr,725868,522820.152435,TSH2gRYOhh +391208,506075.107149,wgSzpfNCxP,317288,611640.063987,uzuVoMzqFz +215077,191808.393531,5UgGoiowXn,220040,540916.378906,fgSepHt6dV +605444,154504.467991,IWKNvkfB4E,97985,858340.020598,TOK7145Ood +99982,938860.829139,vkfThZQTdU,498996,164660.254763,XBkrwFlUyf +926298,22294.892201,MzutXi3696,46569,112270.157681,U44ROW18uZ +321868,165688.139688,raFBGoNvJq,595073,678479.162123,Fne5Z7snbM +887215,927132.691024,PQdkjFTGWU,704865,249063.476172,5zajvg39h7 +896254,77394.024152,wfWf2S1hIq,956043,785687.225738,oXJCPNJDiX +931869,364485.351916,mRvt7dosxA,650212,176317.459300,BIHG1ZdgMN +399050,406506.181298,L5Wd19TsHr,635993,153628.457561,3dhEYLQaS2 +608049,20856.909322,dWJbsNjJXc,9226,196527.791871,n8jL70Vi7U +687595,459015.062407,C9L1QJqsJf,588148,939067.841008,L8vZVcMa7C +702517,773154.144125,MlPpB0AxRO,605865,834771.991640,1zsWCCs139 +542393,934307.719231,IuYNL7ynLk,77770,271618.154170,5yb4zimeB3 +99960,855506.685327,Nm9bUg7fmY,26597,514974.451756,2a9SUBts1j +429572,485881.996646,KpUoEfhI8C,245463,983239.165833,Vvgux59KTa +848905,964152.778723,NAEAbC2dKd,906558,628700.205568,fz0HaqTDT7 +465433,826863.593135,UU3to1a9oK,475868,136521.152069,2tMMiKa3Tu +124887,756037.177934,721DKCAfBI,143556,470650.173185,bSeJCULV47 +485774,984892.482505,ZnZZR4Dhfh,372273,247616.998042,TFZe0E1jn6 +326001,757873.473182,JWQnbZVwXu,714897,94738.762316,xM93GDRJXS +650367,817837.552141,CTkc5VixI8,359380,700778.935387,8HxRgsB7nR +904175,47558.508348,e0kzKae4vi,264295,333658.137041,NlvRypPrRi +412225,487420.845214,zvzSTp7rPh,944826,372012.863537,fKP9t1MZJ1 +780390,22389.282047,6oZYRPeoQ2,224358,471383.001639,0EbBMj6jdR +990483,952122.255176,89rIo6FoY4,578565,338278.440765,Ftlww5mMH1 +621577,782239.097179,7TDwUcLNo3,898005,155275.764193,PBX1ogioEr +955683,877520.989928,EVBQLJgY9d,851162,276866.266198,a1cZSfFUCZ +120106,233748.278492,SONR3TOGER,441264,405316.915270,RLquTslYRZ +338050,167971.855362,Um1nnHCBA7,305756,10055.034221,Tl9wrxsF6M +724105,548952.371897,vHl1onXgN6,201226,195291.049478,kwtDfV2Ylm +804247,213531.606425,0HS9kSx6cB,692136,714311.996910,MZqdJ7pntr +764279,190354.476154,GFakkWAvpy,63247,972320.928510,qNWrke5l1K +842933,154325.636236,I0aUMFZebU,892215,114612.698562,KdZjHo7z8V +907351,435597.861425,NLJ8sITm6E,570884,147866.123174,TYMkxkuoiL +516863,612454.872081,on2ek2LiN3,703643,157302.529136,r9rOPj2Cz1 +990795,260870.932467,ar9BkQDZ46,470775,504028.779013,cs2yDvONuT +446920,804400.084678,wiuJq0W7cK,815457,282888.413314,lq4cp6FzUN +54854,350812.683924,kOkgRAZcRi,519909,295206.466729,VG8RqfGNkn +247870,246642.450497,IiVTfKikp3,501115,237061.010118,YOBdsr6xnX +414020,689215.826595,9LyrKcS53U,985981,139565.643402,6AwUo9iLHm +645733,240245.021104,xvpU79Oq4c,944165,935761.547138,pxb5lwaIP3 +315987,730040.589816,WsL58Ios3y,230060,343523.301734,1Z8DCzcjTE +272796,248594.557037,GiRt1cwOSW,726768,678722.203197,9jx1aFmvNt +215199,986419.978134,K4jnG2muiJ,737128,483074.660080,ZWdBSsrd4r +585033,259337.536330,1sW5T9ZIoz,259886,141285.331750,Njlt4KlUKC +550831,816782.571335,8gQXn7xgvS,341731,760113.901085,dAKGr5fJT4 +706320,583520.037808,UyMQ7Hal5w,173369,38458.500039,w3laDsw8uO +436487,768460.283262,CPV1exE7ob,208713,112190.175697,XHJZMglHfe +748017,211296.587914,rx8G4IhtQt,758489,524071.552467,ytys038Irz +584620,428009.056227,fdDLZjWVBN,200780,913518.100295,BScGHA4tYT +541543,307900.739651,bP8GWxhcMQ,197810,290238.364106,kLzjqRLBdB +614009,278288.651238,OnAoQchWyf,318243,726009.807677,ViOo0fvNK5 +427743,772615.506789,RSHcAZlfjF,765244,923960.325649,OgTAQdp17Y +923653,115329.065061,V9KmDOfmZb,773990,708164.346388,2PPoWIIBKx +161657,85531.288132,Z1w5ISDCCm,830825,11309.928227,iEHcibmNKx +752020,787138.487021,vAs8irs5z0,61401,752884.091667,M1KC7KJ32j +172061,449459.722887,Rv90WwK5ts,722051,637070.063960,KS5XtrOiDm +762860,593159.923777,x21LCHhY2s,670783,836351.876742,DmoaySNzln +352948,192593.184036,aVpr8o7l3v,404305,14470.274996,bACQk10toe +345480,774486.682936,au44yWd7ck,699583,333265.437526,rkJGnOzdRZ +956886,192150.078145,QNLOU2BPx5,539961,210930.184417,e04VJnHmDV +503536,41423.320654,Tu9Qf09zFN,442623,665076.715202,gRUlIsUtFe +444166,569525.780204,JAcZ5ysxV2,853618,620837.463462,ZPVbd9KYY8 +522156,667592.349827,KKrJEwTBcI,894102,642678.974796,mIcZw0rjfL +592978,455491.272258,2DBeDLttwl,738262,410715.503384,U7olr0TB3B +933747,314848.897499,cpWof0Jh6e,522461,619725.617800,KtC4Q1d92z +127802,588365.584729,JxfGW6i5fF,402404,186334.063966,lKu37b62eW +938455,200060.473127,KUFZLgUKOj,941629,599336.364420,yXv4bnLQtz +271372,240993.540604,rAcS9Fp6ye,354358,473681.286686,qPvxgmN8Fb +729401,638100.559231,jTjk0S56nJ,388585,536305.065116,r6JRzvqYBe +744418,949024.397749,ggg5keZqjQ,504026,611266.364859,9GC5V2HIeP +354590,859510.842652,8nqtXTXFyt,456839,929958.449166,mHKVMfZDeI +672890,302448.923426,yxIQ9Pxcio,349064,607.314450,fKVimPWlqD +978852,780830.384637,cNuLHVN55s,603851,689665.834361,q8caNLw08H +186322,945145.595196,4ygGTRNGwe,440037,3362.411111,ZMcjsDCYed +305134,430158.698513,d7i391pWwL,253291,167238.495505,SdpgsvaNTH +151834,579940.079106,WJZkB9mqSC,728144,494307.206695,oHaI3DZTtw +663578,566224.956690,k7qiYgIrqM,56153,585294.342962,iyULytoacZ +81723,176044.844502,66Btd7UMrP,517350,397592.852693,dBtN2DXeHl +392328,999437.331906,QKat7kvdpH,976126,147802.836817,WFY8MVWim8 +629999,236238.600882,quEGDccdPl,723341,529392.246187,0dLRY41q6r +978681,538727.244525,sytHd7S78G,802016,600697.599286,WIz9g90L9k +465389,245089.702721,FeXCA6WbqJ,228058,891754.303635,n6Vr9gdqOj +794574,561531.888555,Rtg45IFZSE,221577,372462.826816,elgLYyj5cy +412732,306523.874531,WZn8AabfXJ,281355,13750.227058,tX0BqGBhMT +838156,325392.228030,xGPwEZ74lN,471066,544451.218919,R1Os6Eszfo +555640,582910.827114,12Gy3TRwF2,229005,457556.613088,3poyGfBnrg +561924,384213.059854,pcc5atUCP7,482303,415192.168943,S99j5lOUrP +582056,275771.704559,xuUhPcF8yG,908757,705960.933799,yBXmXriFWg +760077,855667.939474,AizpHh7xNM,974668,384451.589174,ufZlovRfeg +829344,341287.654969,TTlc0Olx8p,371730,558501.429090,4wgMfhe2vY +658197,581931.933959,YPbcY7gEIz,754939,925607.680582,6aiyYwaY4D +566140,570447.892094,0VbdLpWQxR,278199,816066.583620,1UbW6JpIIn +327227,559641.710439,dbXfiAJFZq,917397,324483.582485,n2fdmaqzqh +294624,619023.579109,BLCm4Oil0G,820439,312597.600775,wCTXvdRwsg +826336,678239.480212,kkSGxgVhJg,943826,850805.202145,Ccoa72uoEJ +674113,946208.694952,jxgmObXq1X,915132,229467.044395,TV1G3mmyDB +776163,460802.240698,beGGgi8pwy,400716,934784.045919,Um47Ztl3Ds +790501,569873.150570,WWABTWrE6b,354042,591223.999474,LvF9k4KXfX +395137,101232.287191,7RwcDKW44W,417725,656271.623819,CoRyHhNqzi +803017,840892.492354,JjtLSjpEyZ,263873,895782.414854,kmhPHEJXbY +732928,994679.973044,3YqmSfVD8d,289336,385777.382702,UsZaWAWEuY +822852,842835.914799,hH2mAtRCYz,715395,493277.507296,MxAh4vce5z +367094,286425.547529,yD4qifOkkH,564295,376574.479137,qCqqH9Fn8L +903596,878185.648009,LVVdtJFibq,932355,825129.753439,C5DCXeqwgI +120186,507824.511110,DGxKvWj896,369757,490748.962733,Ql1axJXZ39 +402731,757398.211730,I4tuvozaTP,117335,634518.729704,5UR2yneisA +862030,760820.591556,H8HN6QWcQL,870765,205931.051721,m3qxMwaWdc +541665,877265.556776,2DbcorCZSW,392664,856657.106043,AArYXdOKSL +12678,497722.379993,BcfD9LUrWS,136618,941058.715548,p9JMDzWQp6 +954290,407290.760539,q9ulJSNaBi,203374,591531.807373,XrrADahntE +220894,16313.122866,w7N7Lum6fu,29810,691246.747803,4nvKMz0oDm +814311,898038.688808,t74yFJ44eT,357080,891917.832755,gkAD9ZE28p +870471,617367.070267,vZA7n3GJwG,652388,939179.610731,xlWeIdrRpp +995339,705886.380278,vKCiGKXqk2,788645,43241.057439,irloioddni +322999,47526.139162,Akd9tEbi1l,647730,821803.388741,K9TJP9cpHx +263296,656427.613416,mPiBywA1yZ,36704,450578.487139,pbevLaXocx +720213,295605.749738,VMP5Ju8XbF,947670,378666.966536,ffAZVGtJu9 +832929,864388.802935,0fpieSlOsN,104784,965343.034055,kPd0K6uNMU +529491,611205.765646,fTUOdOszsv,866846,45551.412756,wHIWnvnFvC +359624,650501.592539,QkRCtIm6oL,786648,544727.048846,tbZ9yOBDwl +226033,246906.871174,0I00XkQMPo,123588,341879.979257,JYX1uEr6dt +974605,702860.945275,lGq2ST11QY,552397,439624.563587,dpVa0HaEwC +30237,761043.813510,5zuBm389G1,43305,633903.524757,2oA6Hpd5S4 +443717,973175.024407,9hpXrvSHXV,765931,109589.619138,JLWqLiozuw +755774,484648.509527,qIcWK6OWqF,837328,268369.712208,klfNBGMcge +987242,500734.137657,LPpk2YCEml,628795,215294.889318,sejIP2VI6v +573321,454184.575092,IO0UvORUwn,557781,404852.341015,qiEUnhnTHR +821643,799113.284365,0brmyM6mnc,495602,169238.490229,DyO2EZIR77 +603829,651779.678194,syDy2E3KFY,317208,101765.787539,JKtgCsgpgA +706501,725867.773781,GhRRMgbgcJ,225815,432576.811132,bGGEIzip38 +642214,448884.514287,KEkowzXqiG,552336,910966.889219,zenvUMs7Iy +694861,499492.266357,FD9T07QqXY,383992,460993.773812,j3ayI9FOr4 +624417,523321.699556,fUb3wjilLJ,586672,318270.420890,5MBOuM6ekN +31968,837796.351480,UyL90ls9ZL,609372,114803.808825,9TeyZxfjxM +253685,721864.424744,GaWQpnnbU0,139871,814490.890231,Hz8wnmkvJE +777887,927876.256934,Qvt7djZFGD,797231,988966.485208,oMEPAvz7z2 +748404,140187.945401,ex62qvXdhO,259777,405650.953875,pm2Hzpdkes +11682,285670.928915,3RXPvJ1DTt,150897,574736.149220,CFKS9GJ9RD +754872,734541.383035,qRdCh59okj,264328,734682.618601,vj60Sz5Bpe +695413,699691.838850,Pn167Bn9rH,797987,676206.325385,mVBLN0ExGe +399768,662666.235863,noZdlnwXRm,289010,118268.271181,kqoO4NCvOl +94105,130037.685785,H7rCcuDTuP,502525,419583.278956,vSw6HK5jSv +54209,568938.604871,dXF9w50ooG,344366,947675.916606,vwOYoUAW7t +235013,830859.502926,ZKTEIvJ511,985922,536099.871422,eEt2RdZ92m +363926,822217.144487,3fVGUoFTtZ,983887,907335.555546,3Y9Ps1mYCr +989348,396080.144116,YrYQPwGDIM,339883,443779.937754,vjEJilveOR +721200,510776.724819,FA6lhdiJSB,309244,660548.987368,wOD0Fmx6I5 +511921,150792.672944,3EOgXoWDub,764557,109257.527104,Gq66iRK7qO +181960,667129.545990,g1xICNVJz7,414855,654470.886028,iZvK4hHlXK +169283,37791.965355,yAEsfzCIv2,720179,711554.147799,7PLXxcyv6p +246684,682101.062168,pDKlwCc8z2,839770,572620.731589,B9ZpzsmbSg +578480,222414.539894,ofT01cZYpV,246734,639916.396099,bawBmNREI1 +341203,651688.333185,ZcMHhMIE2a,772828,563173.714802,lviO23hokC +575389,965657.646597,3n1Xb4HZEG,16158,56641.825840,JdSsSWKI1H +569096,889874.839611,U2jY4qHlP5,995289,857408.734869,tqBMpL3sOT +250032,96353.265774,tVuC0cu1Dj,710191,816829.360085,JZ23EUJsF9 +471976,69581.969950,DHoTVEIlSr,733344,633974.606891,E0Jx0bpRWH +451731,674454.455107,PKJOSuTZCt,101213,399673.608786,BdQU95I8U7 +432200,781172.178421,iJB6VjE2uA,755202,641585.008903,ZxU5egAJ7I +607298,820611.933582,r61REaiKgm,654880,283675.234218,sc9fvh4vSw +234400,231795.768049,VADGJGV84k,46643,651826.653033,HDpGIwdfyr +853313,724316.456358,80RqR4t4N5,432560,559882.580581,NmJznajqEj +565946,670317.046604,Nbc7HcBjZ6,921858,577184.103245,yLS4t6Roq5 +763036,821423.442024,MKGwEAWkNP,674817,243857.815007,En8E3Tc5Dh +515606,475876.484262,DsVV074P8X,888610,952042.170388,5zy7KIoa4o +485842,233042.457838,Lt07KyBjcJ,611603,264545.109089,dhsXtGZ9ws +661417,962166.335227,x0LB0aj90i,436194,691474.811810,ghR0fxRabu +233883,786019.100445,OrPbrV64Rp,841608,286301.798877,7u8iDYexRM +337269,983969.073852,2Jfc9e0rfm,75870,494039.672761,P7GNIu32Wb +906656,702158.349875,4oZiOCZKek,396442,983367.067187,ODzaCT4yhr +549239,62317.368248,jc8mo5FcKx,807996,99993.869306,OvBYoSA3tx +381607,548649.708262,B1nMgzFYOE,226098,537477.176100,XRQaxVVfnh +231188,667772.085625,kyO0F0Kly4,938957,414068.921845,dgf2vDAsXf +73053,419856.427284,Uda10rlr8l,962361,283406.881988,yKjAHjyVIY +111299,414686.764308,Lr50lssdDp,429714,658192.734488,W9e98SkJWy +210667,887387.728992,6kImKp4W3k,962079,57709.952612,eitY039JdZ +593500,429181.130883,2ysOrILJcR,833769,441578.821617,vv2Z0Cs4bD +40337,193094.403525,0cOKcaRdVi,306694,676789.371527,nrd28ktShk +222089,258356.055808,ShlBo94rZq,212799,676343.491013,jX0nUEKxjp +878632,806211.464508,MlZUYBxoGn,984132,896195.786674,pgvcC3N9zU +645571,852518.642228,7zPWfEQwH1,658574,450615.225491,QUY1MQSjnZ +343545,198973.134315,U76rndAKj2,629478,293239.846568,1rzOznK77L +76460,75917.270779,OLVWCJ4cEx,524143,608448.567154,F37KH5Efez +540318,607628.158660,EAQzoorwOd,479936,130047.964135,hCVTX3h7Z6 +565100,50260.292607,89mJwyB5HZ,433105,598844.597278,eNju503uld +966567,264461.561912,R5ZbGl3AOE,140443,31511.739442,1b1fu1Z5C6 +811780,27074.440133,8OxZqWrFZz,249373,648105.362072,kAehD3p9wd +199468,180507.495983,XXH7RaEsSD,373977,918677.073710,IXgNRcg87C +182404,142756.064579,7bk9kNCBc8,431854,376399.205229,D57d6j87rV +567602,665667.244954,OufaciiQrs,865900,197400.762930,Ooi73qwa9N +691251,697385.016324,VJVbH6sVq8,396501,190106.753915,uVTc5PUe3u +972957,632917.017707,21g7R1MU7x,486732,377263.617169,mtSbH7iSon +176639,245940.572107,RaPXAbFvFl,967661,478121.095659,J1zdrPSGzI +51053,77259.668665,W0G4A363iV,488989,224939.292112,71zw6fTpqE +320430,907108.599447,SIoG70Dw6j,412950,676609.308055,OJ0XFAWA9h +275316,977045.975450,44URPiTuJd,727014,190856.996034,8Vu08hvjZu +949408,935765.830522,vI2J2p9GhY,561687,930220.860024,ef4yYsOlM5 +473578,275468.705074,QtBv6aWdok,339074,238118.434813,xSrFAoVFT4 +116918,569108.466337,Z6QPuzhxaa,669641,497250.650608,edPfjJZlIh +585592,987068.347338,0fCByzaUHO,340874,895939.109120,Ml3WBQuzUJ +325397,325464.534035,SrLo8I7tAx,27560,579125.392242,ebHsK9xl1n +249354,828857.435919,ylPvPcmgfy,932881,753428.073475,Vj87BZRsTj +562636,608438.258082,BN6TKOcnBu,432124,162126.450767,WBxAUs2ONh +238682,201762.912775,TsuerIsGwT,13696,302274.498890,fQnDM8F7Zj +470483,940182.071891,DzYcKsUJmZ,925472,816465.174134,7ytFJKr3AO +295621,966094.900938,7nmYXV3EsE,362356,232669.946298,m4VZcFOFZK +165926,416055.821693,jzyuvRczlu,883716,994043.776774,Tq86QtXZiw +621362,887021.500010,P9ufysc6ko,68654,624345.823402,dxL13e0p0x +211146,569363.289280,unE0BZvcVs,889492,352834.907013,KngVMhRqiH +2941,427567.746646,qyzfWOV7jF,876392,620212.301257,yf9WebY9WA +924211,601700.359786,WyirO1cjoz,257194,316482.455745,dIiQFAcyLR +642877,518191.402939,X7zo619wO1,466274,345647.153258,VazwvrTmcx +25875,629546.802602,yW4fHhfWYb,540322,959475.945757,XhcbFnjgyb +515472,970263.875151,AUnukhMKnC,712259,743714.920836,GGecqQygLO +654285,169633.760230,W93ZZcQzOU,953947,657304.414166,VQ6vMgjTG8 +336600,638534.302788,jQ7iDbcgpd,305870,380754.909582,1I07I91veY +298496,824304.282876,JgKDrCARkt,31565,640702.220407,2KiohQWidz +161074,677989.694140,r89tCgxgKY,916879,520688.720390,wFFcLLOcKN +987988,308741.102064,ygJgXOLqeu,415399,808646.902672,A5FAhioWuF +574594,133956.513274,k1IFlcUR9M,294234,207914.082260,0It0yYn7R4 +220849,423086.835435,iqzNbe7En5,495214,972615.716336,0mshZrRTdk +152725,477630.760064,ZrorENhoUZ,488505,702366.454840,VaPmCw4VRa +732432,2789.815102,3uPqIU8YeD,770025,161496.567701,X5ByRwaUjy +261699,363737.600594,04CMhiRld4,703255,718529.894100,szqGSwGpix +428363,740110.762070,WmDLnKNjGA,851652,371512.450544,HGnYeHxRyu +923484,891633.693491,CUchJUYKkQ,195189,217181.238097,j6t7bRU32C +655885,167138.045841,gY4FVVZV7b,211107,72054.367534,rN4XdUXsfs +23898,344798.337918,yfQat4i5gR,740433,546014.388122,ktZ10eSCjB +699205,108622.155814,Vi3KoDpMRq,898255,614078.508747,trBAgSrrZ3 +136679,271687.537604,Bk8GWRuMfl,219042,648255.832852,zHBPrVMLhx +525894,557757.395902,BU8YjL0kH6,721822,766361.109455,KbzpNRAqM6 +88671,753242.684033,42YOoxQKv3,320899,68440.469667,Aouhh4GrS0 +307752,284864.281296,76A5AkL5WG,229080,706274.527898,9GtbXh06pe +524799,568111.453851,Mhto3nb20W,875629,226032.052320,dxpgMPhVTZ +649747,599348.724805,Ijv3W7O9cv,792913,601350.138139,9h2NlHhecF +515360,805853.500819,qnCHxOmrcT,751491,607268.964687,kOFDMm18iQ +714175,292602.142413,1Kbko3GBIq,99822,8409.888915,9Rl28NYam1 +298601,944600.540700,PqKYu8yU7c,358115,877840.838632,SLpMuv2EUx +354235,542737.055125,PuI1TJOv6X,146313,611107.335535,lyHs1GGSSi +647908,838225.354078,lempzpxwwC,993807,531710.191943,o3plH3Yz0C +857068,191590.338483,QoEP8L0MXl,770214,12247.250153,Wy34S30AIc +746895,869989.810792,VyQtneYil6,397552,720377.765099,uWeUsLqcMm +815318,412476.648763,x02xmUtvXU,473852,798200.398358,sKqC5hIlJG +689154,199725.107302,hUQerm002s,553104,64892.813786,8xKglIhohf +499248,137855.892951,CjbMMd9xJ5,422116,973449.217847,jG0MA1M78A +872145,56235.093045,EMhCB8WJi9,43794,807377.860655,jw4h5KbcjV +211548,983458.001089,UaeTwchZ7r,215356,757365.396421,QLHHuKAnmM +767009,666571.474235,1aTcqMCmbT,89620,498915.415991,uxemwFkwk0 +340651,642864.289522,FjQj6AyW56,507707,567876.478975,Z1iH2TNQEp +276839,750270.724855,UMQfHaZ3vk,801347,415770.497847,Q50Jx13vTN +410048,742661.844401,XHOaZBoLh2,635873,776348.476869,Tj4mpRf6Vv +127893,108571.959703,ynQXlqXqgJ,811451,817099.346806,Gi31NXpce6 +534973,612064.865126,WQLt7GrrFV,900930,295034.765295,7Xw3eebMnl +685912,31014.784852,NbJn8g2yMD,618378,844945.127216,0B6DTrRDwS +162396,671456.200944,pf9NcIyfhe,481044,938079.615878,K8oVfeDx8B +658381,542702.972211,vM7Ixaot8c,687915,121340.721141,CTnuBj0ssh +113833,444433.679863,OniSfLDYjr,132241,842419.363235,7RxjpWiMvV +837691,894168.948558,ZDpzAvqtp7,401109,69435.938101,7KsmcaywKD +354837,245337.909129,QyDzQ7YPBa,205425,626160.043229,Vd8jvqkGxi +397868,675418.300596,N14KsYJ5sK,227831,505850.621905,TxGRiGnCBt +244422,194923.215319,8vSitjTz4X,379217,964306.372709,b8FHxzJi1h +77359,251987.478326,GoGOL5lA9a,381657,208711.983391,WVxU3TDOxE +966472,847888.073759,lDijRPVE0C,661989,157779.855177,sFAtG33Tmn +876492,491458.216119,7vhB6xluGg,168371,878049.106284,GCbAKGRh4o +911055,504691.830230,a9bqDacYZd,177642,718739.900237,XwB13wMLGy +278235,50720.653583,Q4RTMRkCpa,961607,306571.550040,vTAXLdjXLW +668027,555000.639095,XYndCd9hWP,212144,544071.776590,d7Rjbnq6ku +769247,129634.917261,z81ODC2DoW,671103,157091.996318,fLCASZTtpq +619980,459742.203040,LXuZfp9sJ7,729730,361466.169894,SLjat58tj0 +961254,448523.321405,d0Ru1yYXYq,126168,65438.673847,w8RCZvXUAj +269528,919328.441915,r1TwVBjzlC,208948,479204.734832,SRt29LcRXC +503433,229278.870002,9E4QK9QsgI,93292,856434.154230,mJ7LWeJkJV +600356,294843.155560,VEGZlPhQOP,242227,945837.788828,Zcfr3bMGPF +993953,500000.081537,x8EY2hSBr9,26218,843549.397168,MOv9fmJ0pN +626246,642488.090782,0tJGschU3l,481634,863356.840140,jG7FTIGg0j +273798,5189.502259,2dUBsPLiAo,760979,440783.879238,D3e34lNT3l +867369,415444.843270,dTWj0JCtzz,826761,460517.486937,UBVwF2yNHP +857969,312673.213408,rtVQk9M1FS,407238,816962.647536,Eypk6zEq3g +879539,655812.753545,DOstvb43Zr,344126,783586.006455,pkYpQ3sq6l +620446,406575.392407,8AjxwShNZb,378401,934301.541756,8kLlUfJHE0 +67195,686232.364302,wbGVt5fT5P,564617,212760.526274,Ust0mEgdDl +2816,406130.723025,n4toAhmp4B,537622,872913.986756,26gmGpaBxT +902628,781701.793067,l8itwmWwHH,875785,894881.465807,bE94ApAJqU +25488,920828.093487,PkOsiPSEKs,210096,654796.398162,IMsZ9yDJkN +360703,602788.913059,gQPiKzp5R1,403078,490534.834285,LMXFxYfH6A +638770,480614.218753,xN4RLtDVfk,206805,955608.990996,WXjqOr9T5Q +570360,294514.005922,rLNwnZmVAL,254534,917187.208818,vzIGbHQJrB +187788,436148.357992,7vnvMooPyd,186019,373346.490479,MYmfwtldqW +404474,99176.742219,I5AVI9jzLt,518843,620074.792122,vZffdwRIpb +628888,327757.046253,ywAPeZxR5E,302015,567576.738233,p3o14Rk4lU +555875,31312.354231,cVQuMwunDz,289549,431638.646806,FnQ7OhYFKz +611153,697829.564886,CiGw9SYjFg,918790,326196.851369,FdpV4nxRoR +758438,137945.337065,gEAq0l7ukR,230196,762447.447739,WyNQZVQSV6 +634014,293812.814949,kkAakMNnq8,352495,223454.468262,yOCfLIFXhC +325200,774150.335809,EAAjaukNxt,758770,599581.646251,ORSldfSfXA +178264,194434.166284,3avsk88ZZs,568944,734488.873717,zTIndnjeDO +404475,102800.095752,AQEcxdMOmU,733621,548905.202405,jAnf3af05Z +751834,107363.902482,RlOABRknRi,539407,197973.610277,nd5oGBR1Ni +859479,258914.961170,uH1oOS74zz,433893,585492.949130,oZJ5bpp9qI +405207,811145.859624,LQKZTXF2YW,787352,905147.384474,52HEm2mvtb +724955,501592.101205,XgqM1xTppz,135044,636252.622440,J8jWEagfPY +606582,719128.850909,jKx7JDlcn4,646863,735417.494146,FnqSgaq07z +793132,694348.359774,kTUDjtVaU1,624020,349247.157559,gBk7BnFPVz +702601,143398.515552,kiwl6YM2pV,317239,732028.007447,0TSVmYsUmv +558426,264123.601262,AktiN5E35F,603251,831364.349209,29N6miGyuP +326735,814235.271657,X6Z3jMzWLj,689715,550529.543439,ETaNNhMwEf +995079,776626.806747,rSO99FwOHn,74330,98005.751081,bszMMF2gNI +491703,578144.234236,SAATTPrZZA,321889,43136.762885,vKNL1bAtkO +610755,116244.447070,JhSPeKfGUO,605520,92527.375647,AjEETax8o9 +257960,625625.459818,9nuGAv1HVe,804285,592247.300854,9jmSDMT000 +53976,57549.877316,0MbyqSNtdI,160378,585797.437304,Ptmybf0t79 +251638,581698.470445,wwMgdegQyY,290763,572812.758314,4FAApB8z1Y +664981,897173.501835,YdWmyRda56,472460,419587.392428,tSKuYjsoIa +391930,600461.911766,Zd9WGrsu4v,867856,847488.693567,jHfo1vssXE +705283,992632.599195,lHGXBz1v5P,547904,132442.511656,HFEF0tO3Vb +847965,684446.781992,clFGRrzJhT,264924,523885.858411,0lpJejnCzY +809564,570815.763961,YXP4cmdKcw,21749,869216.406974,ruPYYoFgAd +209448,453889.489396,jJHVatR2l8,909573,794140.811466,bs1uA0WF5C +166967,901286.443535,Wj45Ix5qlz,371437,755640.180850,jegLIQNjIK +750359,541112.465297,GiBo7lJWlD,772235,741412.502202,nDCFtvjmjs +577378,860799.547427,tZUhDWEqYu,792617,192971.533289,FROKAV9sgp +920899,538602.636757,JYNi3ZgsvE,598612,173746.384565,FHWCTHvnhg +87023,881192.478249,Jd3uTf283X,45395,580998.290774,hJczeIcF52 +615122,776206.767807,bX29hEFvS1,936629,134372.861942,vWNTap3LwY +541385,656714.610241,2A7di3KpRb,86519,752630.087207,e36WvWRzj5 +557293,520532.754668,mFplDAEQCR,814780,675699.014770,MLoi7rGdf2 +122228,694705.173140,24dw7uV5mi,756879,460247.438407,oFOq7OetXZ +976608,303194.834505,7ZGRqAop6A,951599,762350.988119,fyA7WmAJ31 +107154,61716.506405,RzGuXzLHyd,838096,917361.311810,cRt2KWn7DR +587331,255293.954599,vvs66B0Azn,127082,582926.323408,BKxmypwBde +64781,438399.552426,VjYArORKWC,981066,27305.163988,orr04GQGtJ +293600,312390.717130,rgzGoXHrCf,489018,711845.966241,WMmgbqb7V8 +454530,756130.337050,gj6NTxnT0O,414813,841701.959167,ucZ5VzBAwT +913896,346766.025153,6rKu4w8EMr,7638,301679.730924,LehFIRSxet +359744,563148.158609,KqWFf0pMNk,690650,645962.583386,96CR0kUim3 +475505,494749.610828,szEoJERagM,887060,613676.871660,exLT8TT3kK +932577,839867.568066,CvOVZtKh2j,785485,699026.749397,C2SgnmYvas +329272,736718.131605,7gjQM8nV1c,167227,926829.385092,aoGn5Co9ny +987011,48364.630960,q7uZ8nIzbo,203372,594387.284100,AAh1RsfulK +532549,661060.248234,pvpLSxrCE8,222240,432501.683782,Phf8V8Oswc +354402,857216.490132,2o0IQJaqa2,138294,360979.591456,cgpmgEjkLp +535772,22933.336366,UuV4qzvIpt,712992,913565.989955,hc78W3g5Gr +361919,347073.758210,HFoXyHRc6h,947586,942330.737425,FN60E4vcu5 +948600,606855.636439,KFNltkL9CZ,424305,898010.521907,o2DsDzXCrw +461696,419312.794185,LQmcFb5m9s,318573,80403.295035,pdLOUN9lt1 +983683,333883.006572,OHWAbEVIff,588552,666560.339623,oL3ycvHXHy +430574,982548.906006,5wcmiYSKOa,710949,178042.260880,qjdQHUkN60 +965998,369729.848561,6akQ8BFfJB,723822,952067.862968,hhCVyqEgyq +48043,31457.913240,f1CNhpbPZT,47772,567353.597826,XEBDcHeVxC +61110,679911.019047,3YR7DERIZZ,949404,202830.579228,zqts2Eovuo +655301,398161.977821,52zSd5BJt0,489243,342874.657491,sFysV6Q5FQ +490584,331734.539438,SZUtaK2h8X,929253,518504.791363,eMA5X5poDm +813947,786220.810835,wimM5Hh761,685772,602739.955168,RwAy3usiTh +461426,401703.298455,5mSem9CaCI,311394,871475.994597,XkcNXRMdSg +117457,113506.793385,2AzXuaeOEn,233757,882245.491036,a51gQdcDcl +874906,893302.598446,mYtitu7GxP,441824,893307.647222,NbqCBlqJo2 +567734,628272.319569,V5WKfJuE4I,396708,422877.756659,tsLYDTewj3 +388417,833624.341926,3cbvsERTec,904985,823372.054666,Jnx8Oc3Ylw +770058,215652.137326,kWSRW4EZ1Y,299540,58195.033473,ajpExXc2M4 +706630,353426.632937,hpNqPUDcyZ,50811,872349.822526,rsAmxz65ND +852320,367332.458738,yaU91vAUYj,294835,680286.282150,obdVlMbhCu +183130,94607.580785,vp4pS9R7TD,794199,165079.757778,rCDUCobKGj +288623,428414.503168,ZWz4Q6uAEU,953317,96742.735092,jNUTEJAKbW +306186,646037.086003,8mYqxnszX0,281895,715232.797764,3GfOiCiNXH +884447,782557.522669,WdlHtBfnVF,775291,61998.994796,dKVD8ODWUC +654163,923460.249362,rm4mdqlXpJ,620379,619797.554663,yiuquiGUrA +892253,20383.203779,r3cIZewDJ9,534585,216177.751360,XhcPu9Xv9s +143956,154745.897248,37XEvHQtY1,455237,250085.109273,8vJtFWG48G +387634,66642.705919,Gw8gLLogU8,403876,673831.752341,T0lDAjWoTG +991760,365060.672094,5ZcYOuTekz,895070,205680.181237,1jmqmqiylk +714708,934230.588566,4z4upvO0kg,436557,245863.845897,uotvAslajo +362211,591191.094482,4IYcPP1cAw,915326,701081.794043,CeY3f81uZe +593979,664524.717603,uAqjzsE25S,762592,129147.538038,lrIJqjVHJO +101116,406224.190154,cPNfS6lHRs,404882,274721.663912,sxWATS2qEy +189085,213774.873491,KgzxAXY1cP,545983,114864.404672,NiV3x9PW4y +707520,771034.805758,vJ5zm4cGni,364025,828649.441173,TIIAqLKZAm +150049,410435.913942,ITLqs1wmeN,789265,871057.563888,BvngTCZrwO +935280,79839.476423,EaDmOrOgmW,440009,613439.338807,6bjGh8X0tk +365467,987630.564526,BlGEhkdrjg,317447,192647.312059,6Iy0G3U9NC +614890,732486.560487,1z7KjG4FIC,209633,771778.785944,ccvzH5a96T +576074,464367.097883,vHewIEcomV,18755,837183.773732,10kuQS0txu +506734,241317.456585,YKbB6s4zQf,46913,709300.625670,zSfI1udXYD +389837,541125.383833,tco8drlsQo,173703,216512.128956,KwSOlNnq6B +25096,93023.426142,hdS6ZdJ3dO,590290,403392.385948,dTdbBIccSs +616297,408226.891009,jGA5cfCMDO,365787,817723.984115,PTzxLLVro4 +818081,474699.678543,d72WcIVhZN,743362,225092.530719,1LMDxZ2Ikz +958926,165353.659992,MQzR6Gg90w,289818,886164.005642,bWZ3b7SVbU +400865,653577.722262,zDp0JXhBY7,558466,194090.184451,odvn5g26hi +37,139715.604554,v0Yy4fy0Rw,272492,202873.839836,FetW3NI0AK +912558,331370.127399,qGHyf5jrd9,935137,235827.274578,F6lnr1S8Qx +196425,838269.684113,KS0oxg2ovH,89819,647717.671098,huZvcsTfSe +820257,343066.814689,jRUROzUmQL,190068,548645.559091,tQJICQ8i1k +157392,887719.023396,6iZlGE7yIR,693601,847865.668338,ISX6o7zL1H +855084,702332.238277,D3TIHYTwms,826989,577474.817338,9LtHZxO2H4 +266773,113793.725132,5YMPEOpo24,65505,780526.267842,crFEmGRJiB +514547,89251.488706,4PSu40FbUA,34833,849300.921615,zfva5SjX9Z +992856,858793.867445,b6fruUeueZ,101889,682160.545663,B9806vZPFt +815942,720899.005875,7vT8jExKif,638931,143846.196277,SV1cSxXkBP +678173,634924.110369,dTbvmTlKL0,513846,895663.735862,4SHYo2YBBJ +388660,653677.407230,IZ4nhKr8TL,662301,803609.068406,OX23ZqqZIX +776987,511204.632024,rCnLCXTwWR,417900,391559.031967,0HLOuaGwWs +449356,169156.621149,zG1Az0rAiS,690245,387679.141885,59KG5DtUtv +247100,151356.598788,H2G6OoJYoL,238768,122560.247196,23a2o7d1DJ +933991,518533.820088,VRT5hBbEls,521138,712040.040803,haBQxurjJn +433844,972015.394092,cZRSPD5doj,824585,688407.312457,4UC8oIbDXh +586534,581268.753786,NTHTJOTuFr,662198,708816.366169,7K2HcwsraA +325371,379495.172983,q9yruFx88M,292865,321349.906881,Yvqc8HFoMu +400904,452172.287637,fgi4oN97ZZ,964871,626147.512860,DWwVGgBDid +470200,856401.189909,ROy1Bg1dIJ,727676,279179.714893,JFb5svN7H0 +644479,317797.891149,D0luGjDtoS,628019,448827.662471,6U2fESPqLZ +420930,651188.360842,xbp6bGNerK,969524,764173.111772,8UwxT0dwRF +537221,311527.218488,dl3peYVtDV,935906,335734.660619,A3Wt4EZwnf +128974,592406.591302,AUDwJwIaZ8,579397,492614.276612,kdnJcNcimk +607509,787391.637544,hHGw0zKVdZ,766188,160448.533768,9EM1jrHhbR +316853,316335.353681,Paw2NrhIFr,599389,920160.350633,fokt7rXcoh +976207,166872.445871,9jf4JH5azU,697794,87831.585077,yFfUoQM4gi +513859,283247.251788,dvgCWFeXH8,92662,271747.670557,5ieh5crD09 +288143,407336.152291,uWlKBKQqQI,811916,358840.824997,L08GHuhDN5 +360695,767821.130391,G9oVkOjmux,273573,875775.058926,lX6hBbv3Yr +527913,381030.549058,knBD3ykCDV,124299,682803.040443,qIBDLMEO8Q +48566,260079.493372,ri42Sl6Brb,295326,185585.299566,QNmKpOG2DC +518021,36937.260666,mkRlOD7n7g,570416,116481.294219,VoX31a2BNy +933725,300366.968999,YGcqpEK371,526682,362950.605289,vqW6cMvOQ9 +728358,964801.266772,lQqoJzaPwj,990762,867079.929775,VGcP7QNYSd +132062,557372.983364,K4iPZIHQOe,573519,486329.910518,5T6Uolcqeo +243769,11854.717794,aH8UVmnkaL,352318,544837.715017,zXBQw6drB1 +682742,494194.196982,UlyoyQfe1t,606880,418231.081759,tHFqRcOFGC +296495,843410.948284,O5dScYyZP7,398246,51845.935044,ZWSFGWu38M +531991,207545.721019,q6YWTDxInw,805666,480063.289821,ce8FBjepmu +411370,914330.186409,q9qfZLNOLp,844548,526385.521632,cCDYlc0ikb +539403,754355.448541,NgZoQRCOZd,177340,105071.745636,lRDQtdNJHw +509498,419821.517417,dGqX78xvr6,211108,661159.602164,vQm0qylABs +748642,884674.566545,cAccgVF4lv,300582,457670.870237,P9djTg3lK6 +837673,304682.064760,fUthvxCoMD,724799,631912.588321,cwvJcY83qe +703924,625328.386155,vltgb3gTrX,192392,855509.402379,p5Us7FfvPg +599594,854146.237682,tGIi6RAtFQ,36303,61197.033208,OzwsgPD2wZ +123067,42754.300749,PVQvj7BH3D,712097,842403.887430,Un2SC1KhKC +328140,361134.849645,32ZYXMVbXG,467141,548937.786734,tG1IVm8VQK +42177,674748.022193,lRktlXb4tZ,711363,881266.948686,pzvzxUcWWH +700334,948046.488803,m2jNv6UOSx,247182,611909.438636,j14sQjxjH0 +766836,450541.613384,GuslqUgx8L,486520,777355.791178,n03QGKIA3F +415516,635678.323522,qE5YY0Zieb,712322,480568.718297,EwhCCwJw1j +881927,233828.671373,fZSdAuJOEs,377435,243211.551460,hTlLj60nF1 +789728,87909.604166,nPSPqvK2nd,470267,557005.673464,eLpbhORiwD +905932,605790.555580,gOpqywTVw8,113705,829254.302006,6IARCjgg2T +352448,109744.400863,QSLDe0SxcJ,172832,674427.219052,FNgAEZ0AjX +706094,130873.642046,hUK4qGIktd,188097,318959.829200,HIDCcFKxjf +444650,386131.516962,EqUAWL0GXE,318857,666064.463997,z8OPvxfFSy +168040,259194.617559,txqvjIJxLD,316050,375150.630769,lMnjgKypmI +162875,100410.144815,5HyxhEyJJR,332632,108082.007480,qpSLcd29Zg +771896,44273.071117,5iFOYgHRvf,133588,948712.271082,SoItPYONKk +23331,703563.028014,7s7WDPE3iR,479479,546150.913120,KMhlr762vT +769093,309183.758569,cYjaXTCSx9,90321,241417.368109,mAawjfKcg5 +46798,622123.792653,RODUfYc7M5,978903,549436.665311,GG4v3PMhTp +554443,684709.380937,TgOSf2JJpz,82251,199073.162369,phRFDLmc4D +180545,259833.375130,XgNgJK1VHx,6161,617317.604345,tQ0a6Vvn04 +836872,298100.278497,Gd5hmpJFzf,43134,602728.932353,jsUQmNUc2d +202767,997343.627428,wgfg0vOgmZ,548109,842825.351749,lWQDSLcygj +921929,3916.701439,EHGM7sJDmx,23708,254998.231757,3gCWmmCsuC +487927,485129.810871,UZEDfQH3aC,371698,723342.215642,JinS0iLHEt +991797,190322.461849,WUwbQwkAKr,139700,983238.669613,hPNCexHDit +11450,24739.091787,v8JVCutLLH,915057,92726.005671,8Ltk4svh9v +655259,358646.969775,eFQzq7Nxmv,10106,255440.744842,sbMzOusIQ6 +271360,414530.594489,pqVJhbmy41,205828,821925.393670,ojf3UwKk89 +699011,622725.811081,M4w5XzFD5T,803340,761562.867107,yywGornW39 +333399,172954.528588,nGPkk7lD6I,796110,102488.143068,YVVYwLbRcZ +374195,466652.818856,PFHwQPz8aA,175970,426824.074170,POhmHZGg8h +725567,133395.625594,NUsoSNWvcE,767934,586939.387032,jMKriGPDWr +672483,718665.542506,pcgGpoEQMW,950059,157625.453482,RxCJNITKZF +697259,377915.315988,gJeETbPjlg,227713,146218.501834,4nPKzzKycQ +11110,466021.321121,caxaTMHRxp,157828,926843.536968,5HRnOM3jHT +586753,190371.041970,5ZHukT8S0w,665109,252455.733400,7cKtFRtQoq +552642,534285.195943,0P02hWV18t,855271,832511.843287,2D8P3N1Buq +651524,321160.336479,uLd1N1jsXE,931873,998614.944693,y8oiXbnmn8 +321145,936215.060077,wBnxdPGjVI,895305,930441.365797,gKn13biEXc +643582,519947.572911,Dy9GGGECn7,408841,707724.015788,VjYpdmhbv0 +815664,265546.398166,5quHrpGFf3,894148,876693.861309,d0iKEhL2EF +101075,528716.368410,xLm6JoOB5q,343666,145712.092436,XicrMh62fD +813975,43700.449802,rVlVrF8f2C,211015,763463.352298,cEUOHT6F18 +905530,69639.303787,Dskxp8P7kP,717843,600980.031645,eeMeMvZ59V +788692,753914.035662,qzFqBolzGX,43063,42824.949755,AQRfcgLqZg +919473,186947.746786,VkqSHxN8dr,285319,286287.723167,U7iNCN2ukw +668846,49843.854129,vbngbR3LtO,625930,747997.694087,uVUrkEvZJn +491013,824791.275195,y4f8RupRXH,173904,660596.759310,bJKZtUqyqt +973332,41937.356426,lMRXexuaOW,53439,739702.336385,Z8YhgEQMIS +457975,923382.016784,8e7WJaZKgD,246038,372839.317900,LCbsIiFlwG +44250,641808.730319,44ZW1vyri1,972864,603216.949847,zdKerQec3Q +611122,279795.318345,0UJraBvMGd,130869,548188.575444,jV1VeOOGTA +802977,599775.086780,T2rRS5Cb1p,228193,861006.837029,y5YojNaeBl +768708,369936.207803,1XN6VJudSK,843762,243966.867521,tFcVntFmyM +581776,625287.052529,vlCTBBsKLd,960256,440366.317993,5U5YCT1whN +630751,994814.323751,M4k5GQoHWG,347376,744140.544555,Vrkk82ObxE +62674,9793.685462,IsC647tXlJ,599202,234032.866876,nlY9dqrGm5 +754521,380087.988541,4ilYoFFXk9,321792,595723.165860,IR6dJW4nxC +811988,985846.116173,iUdGhlHipz,880969,404890.115049,XFE260tx7R +94890,639874.369700,SOGhP2OLbe,539881,112672.722322,EwKkiezD1d +22417,561605.808149,31rbIjql87,531372,178859.103962,Fv0pPHS8HR +460474,278585.262705,kouLWtMCSL,18086,57092.071063,SoRXn9RtYz +446262,492200.322992,WmMzv9K75Q,668139,513237.404820,gpBzTujKfg +619924,795574.434764,xsiEdeeaDo,538337,579957.958958,akvpaUeRHn +296425,289918.418424,YogFVf14Zx,258690,877540.058056,SfeVwpjhRJ +15113,339309.398985,EFJr5W4Ijq,347472,128891.251646,BoEHU4Ait1 +731216,65617.630253,J1VO6wfPIA,821221,835794.046333,pLQGed5nGC +570298,562588.385895,jdm42BZ0Bl,444405,384878.152617,JtkfjX5MFj +79166,857210.880147,HpBkSWheJU,79845,238912.811617,rWPLXZXwwf +996668,440196.387522,yoqIWC0Vp2,660957,829295.737939,3nJnxQ5DqS +180257,779495.192943,50YsfSz54Z,82850,95819.352117,6JBjaKnI1N +640140,669803.350839,AuApuEpx8a,686565,966900.331043,70WFy0bFTV +915962,221235.727738,bfVzMhoVs3,327379,342953.485406,Dikkmv836u +829008,271856.775546,kgNoTu5yLS,410775,638094.445443,IrdDekkDkc +310120,666401.889337,hJxSpxkIyk,237998,649469.083974,AysZFcSMtw +618501,116099.796652,WAPZnnj3Rn,155477,495323.844152,d4aJtRp5L5 +196416,470025.965097,pmZ9gGMte9,914953,900012.847635,P618otIFZP +586758,561934.317990,dTJ3VWMzSo,469422,138663.474387,uiTd6zQxZ7 +956432,888062.012657,QU8sZywm4Q,273111,987256.260924,WffTeMrMCN +14468,885160.786166,HbHa6X7NaM,685187,545192.129029,2QIYsNoXc3 +698332,83773.372011,W3tRILLMZo,126284,202801.678455,uRy14Zr1Bx +229182,324546.047936,tb1YcaZWFy,859869,467263.936063,vDg1RmTRuK +524370,101811.719248,ASADmrrMO9,91928,370207.201252,mJM1hPMrJy +106125,511451.951832,GhWPeCNlQQ,777790,75322.208437,u859vzILSC +83820,939750.281527,4OpM56Wkwo,26471,594942.991955,WUellgLqvH +745044,483768.469172,1OLy0MpRXe,817980,259129.087073,c6OQI1KQOU +97259,992047.108406,VTcs4nr7Nh,704370,157310.654569,0C5i31Mxrh +466440,900882.784321,e4oCQWDI3k,346844,18101.058510,Y8ofn6OFjk +860050,515836.496574,un6JUdOwxq,533174,531234.251780,05ddgalwGH +374207,152325.356715,51LXX1zmrk,593194,290741.585122,G91HEtUPZW +775982,132574.685351,QfEiA5UT2F,468018,441829.724230,EGNgC6GSJl +815015,739194.014818,ee44nJEI90,671701,711963.360574,XRjeQVqI8p +400632,360154.750433,8QMZrDaRUc,159427,714676.040936,0YTxOHSLFA +30477,735394.891293,bwzAaNw47o,720554,841166.917748,u1jr0uYkjr +149062,855319.684372,0uEVRcbmvT,917691,615058.895269,UhLV3meOgJ +943433,842250.810370,xCNT7nuYlw,529867,292343.630794,5dBwsAXVNy +267703,68101.085803,dbGsYNyo0e,568212,490878.898742,Ov9U8T6xBr +507836,506330.229344,tSHOos0gsw,80038,577048.980181,dnSLgyi096 +879182,146094.056554,k6sPo0U8aW,846256,233110.344605,40Gn5EFaux +415531,164154.375286,bFH8MInR8p,790097,327393.037020,gibpFmi3Xs +233688,306625.961403,CU8x8dcZx6,546678,350312.935857,rkEPdOJM4b +83559,371314.068347,0rqksbYJtF,91779,991466.331859,IjT0um9QPE +71213,330399.106787,D5Ll3nBuKc,681413,862495.250114,TjNphsNT3w +261126,191446.590456,1zLt5Wpy5S,372921,194499.820619,jBb7hdhjwy +869096,469408.194485,7nmE9ejqSS,984702,864147.515483,GCl3sXQx13 +129403,392695.672462,ezS3yN9d0w,98582,957322.778118,TxkJ3Rsv32 +70271,14222.667499,3ihj0KqBI3,812733,447807.259491,wFRVvtNvbs +540976,942449.486058,vw2ykmhswp,527820,161604.293543,JVqy6W0oNI +539452,29843.764384,xRQXyBktLe,205109,900018.920659,5FgfCogS5J +730001,139555.908274,nGSTP9M3lU,419466,35313.447547,PAPrGGVAci +384691,193222.932393,yneXDZqpf6,996331,390009.357704,xZpvwLAhGE +528820,473665.381161,LveQCbDc10,795501,846371.377733,d13aoY0qZ5 +28457,682503.397984,HBQ1VenZC5,466030,742913.748271,ErnOlgm2Ys +862693,90284.030531,IfZ8zUReNC,557990,1383.091900,mU3rvzZiX7 +530349,242294.310603,qDVA13eg7v,527967,91062.294846,nb9HMEJBoN +577872,703544.952746,wS2s5uk88p,516545,173519.533129,8XkE6WRDhu +51051,382133.219798,BIzfCDQAOS,508001,209901.352299,zeGy22v93a +383735,214746.848215,zHDHoaFbrH,852026,232060.817065,r9et3pI0Mt +201329,28112.207129,GzVjWRDS3l,785872,451302.536506,1IEPGNyf4K +260947,416843.613433,NE54aujcii,91628,508724.941831,m9dnEInSrf +588388,645276.440307,Uh1yPoaAvY,347977,359087.195046,ov3c8vs6Uf +342753,221131.943216,gFSgFywTcm,990163,165025.663984,h8uwzFB5N7 +698544,495520.778964,zbTUlCPOm4,371100,94950.530717,Tn37Bc0t3a +927433,352764.349572,Gphje5XlnI,83059,390320.912800,mHtg7MaMIK +401412,758019.415781,CSPMcjU9O7,568619,142093.360778,KAybUf2sG7 +969713,550443.949687,Fjx7VOhbgi,13711,119668.169749,fClBx8jMhE +457593,476426.579512,qANR6FTqs8,63980,564538.748972,WFGswvGSiU +152212,903583.487372,mEjO7zQ2Jw,170641,597299.523656,Q1wNgKfdRG +861027,663513.097859,xAyEM6DKTB,947893,553529.769725,Rr826CiT6y +136117,127680.275224,9Grs7xa2En,866617,144561.671330,lEGnc6ZynR +885808,106927.945751,sScfvblc7B,757101,963790.037840,iLFO0uKHEj +679314,959937.119131,jorb7zyG7A,321231,120056.250012,Vz5xdUCekx +506904,499385.710785,dWxKWz2Chq,888800,885788.275284,SKdiCJUK20 +973450,155771.082879,2bP5pIKKZf,910121,659112.177157,YpAHH3kylI +147128,422124.394440,rKk8402HCr,581819,249440.706081,i71IAu5DaF +427284,231493.140566,6jbZMYmfzD,402086,535738.504609,Z9jMHYVFWO +595260,805629.932548,QP85lkI9bp,852528,483724.889415,rz4Gpf4W5w +836962,486867.136740,DohDBjs9CZ,906903,74957.635510,3B41VfVNoh +157845,442130.439140,nPOSDYQr2H,378834,442893.417285,8K5J79xs54 +750722,96230.426725,L7eHLprkCI,417940,324916.881425,V6ILi8ASvH +791174,780794.001864,OaX8Bq8KAQ,230937,684680.541911,naxrc1tgUv +451738,351538.647021,4QiZBODzlP,546493,443779.327488,zl90jGWV60 +660586,245006.642645,lw4XyjeAas,473720,834665.522143,2Upnh0Bz0m +822678,520349.336250,ahvce08MTR,29389,633188.654937,H0vQImbuml +305414,80991.576997,EBWKqUvWfP,908454,732078.198312,uyeqY2NGYF +367692,886236.847281,SIsbUbzVRQ,519167,55221.727104,6gwjw33AX9 +111053,386183.939874,4xJPpxaLiR,36662,329163.186083,tp9utdwFJE +178559,898054.742800,Jm6Z5MRgQy,463218,683658.041649,dJzALefk1p +677807,993678.500298,NuJcu3o4eE,71613,253668.396900,VOtmP352cO +905497,748669.273271,t2ngwX7tR1,686388,942078.273836,wmq0ybW2Ls +996372,654070.486057,IshxRHI0tT,174672,126423.382270,WYe0wGcOhu +704274,713406.380550,WrWhnEALsc,72747,673018.405676,jiUGsxFexW +298800,359948.009895,AA6ZdQP6Sq,284975,215579.226082,R6Ae2rv5DN +145604,600571.199443,5sJnmdCWor,871452,778348.579046,xpMu51YUgY +567156,666533.420866,L3vikg4yln,892224,520185.112454,zowgy3UcS6 +978967,488696.888170,SNpEj4MBQK,144407,596494.278004,eNLqP1gMJo +907616,301430.413911,KcPRgAAwrE,403258,712358.243115,31i30CtagK +359387,609703.159345,VKIoMm4PEf,532528,404182.321793,RMAqRfcfbq +501152,518901.459195,BtbcKFUQft,901873,638588.531860,YAiiwpDROh +331832,166277.611205,T6bZtzx6rU,668045,847875.425729,FpZaKcFdH0 +278945,727491.837620,9SzOU9hvrb,936674,689342.485615,BMiIYXsF4L +118835,534365.935517,fW8t9WybJG,858805,373273.952856,XalomJrl2o +860684,796374.129090,DEym5dB2uS,756389,45767.548667,HuynBr9nLQ +380448,241033.367586,h7FPkHhdst,951611,388581.077913,vxRT47UtCw +426489,882519.014713,uOnqgpspof,719226,403788.692583,kBzjWvPpw5 +547487,520716.688638,30WxWY62iZ,729252,904919.397794,kouEuBAzZJ +855202,59980.964243,QGV3IxaJzT,919766,457195.126389,3G1nNcpuSs +758612,723251.075029,1UEuaQh413,830282,554472.689637,WEOpN1Q7Mj +64057,128013.439284,jgXe589Rdx,730776,782493.318743,lPnb3hz9xi +434656,359998.113513,yXeENusCkK,675370,526528.670332,9cQ09pCLmp +151335,427146.122972,LbLVMKWHGg,988398,488411.984654,PYKekkySZH +627562,130077.065916,QAjDrjpqsW,323003,758191.948319,aCjUAjBcaA +605315,290654.779980,YjPds2ado5,598681,354025.452783,MZQr16QvEX +825266,842897.021663,xOG7Y3WtiS,123104,644960.469415,CsfFFsZCPt +840541,71591.389543,9chAf9aTKr,711443,373153.216661,gGv1RKOfrM +933144,500521.175967,HXkOge1BTX,283725,869086.662471,rUCQW8bjgd +269201,446463.452565,6FTleWM3iD,866977,198066.587467,hNDbyOAGTJ +805882,417917.221210,1jdcV34HtY,346602,680833.555150,0zK4mztYAZ +445394,747769.376409,LpgrxjlEWB,332721,580282.311078,W2EZbKf1Jy +1280,176785.542494,xyJMk5LOVO,223211,327269.833372,w4M0DwR1e1 +828479,772442.124966,zN7MFhxzPn,416070,42905.824777,fmeILWV0gv +971329,619232.897042,VvPQaE9ypI,765238,186376.948173,9o6xu90MBR +489299,628413.425545,svWl9plB4G,13387,567952.726607,BEtx9xrrIp +809714,75327.805507,ZtCkRE8pwB,103745,939272.257663,oIp9lPiWsA +763276,464752.269619,BvpC9t31aZ,258440,203576.736544,l3mgxq80Vw +722664,104563.073739,Ybowcm83Fb,350295,709525.038456,Pn9kTsJMJN +637929,631298.027324,iqJ5yddal2,623947,384866.088885,TPGt48vzYG +511997,309251.893171,v2lZ9XlEOX,12931,443609.318373,2OvWopBCX8 +530801,44813.896109,HYcGm5dsUo,527833,565486.292103,N7r61MoYsU +641579,997886.925899,x1xQdWI60s,397011,72440.160900,yNWOxv5IgS +504799,325054.207275,gYI6VcoVho,118958,170937.118867,CHWntXmtS4 +960615,939210.859632,XmbGI9giD6,503594,587691.544888,KIXRqsMpIe +210036,766961.877040,PDdB5gf37J,483879,795721.466703,wsg7XpcK79 +74627,692405.606994,4qrQIRyHwH,838578,757670.473243,oOMey2qhGM +646946,101644.211004,vnBpaC98mI,923251,849445.732234,bbdEFDLAc4 +291268,428848.422622,q4BFGVR9SN,345331,620651.633026,yjfoyOwXA5 +550,680320.155123,nrCPmdVG5V,232578,288150.648113,tFzEzdhJjI +855221,697411.599044,bGkDLvQuAy,81192,886457.116801,Se0GL6Voy4 +487069,779363.939560,xwPwWvNQq9,413636,197102.240898,nwLHuUJds2 +450185,33092.845504,bRwT7GZXQP,364143,167888.438691,8gDmBQNB8A +713430,522431.183970,4wH9iOL4oE,465244,8008.721169,14vMjRI3vg +773179,862718.654037,SxBkb2QZ2n,255948,25065.782145,1ZifxBKlKG +775098,139128.143488,RQ31KXY7wT,651776,825165.187157,VV0sgotkzv +2105,779888.225673,BeRb0x0BsD,576715,11953.955148,MTeMCRRPm9 +407415,160193.019431,nd6h9UefBh,497320,251660.109339,LIDZ0ScEMe +242469,414056.162877,l6xB3skPbp,620149,48578.402721,Udujelzhe9 +693575,76040.656800,M769B5bzSy,221380,630251.078767,3UVbGyK60Q +817114,266169.778790,1nyXwCKRU6,984823,243731.463530,VIeewSIIBK +707095,120763.362056,CJ9FNpmVAU,21328,122674.179337,lEUPCGsds4 +227718,474888.392707,oVquP6zs94,123252,942492.532595,NAgSlEbwwj +939263,97381.371059,L882Jjd8pH,228374,783760.631260,sGBqOQDjId +525773,283954.767072,vuJy8R9I9e,747150,278612.275750,tf7jOv6Yj9 +85046,1664.910320,QBjHYMUgu0,328110,250797.123359,LoNpG28sqM +786755,553307.935158,uqZYTsV30S,412827,526729.477045,SLuVfNTWlr +210,686144.628366,Y6sdgQQV4H,648437,20391.396367,w8E94z22z5 +228048,747041.436111,esT6B9M9Di,897820,602558.431386,uFBEexcIfI +813480,451448.375824,z6NSwHzPZn,499876,355901.959507,BvaI7EcIjX +96309,430525.783012,PbaYPMVHEq,5187,113829.549729,vMwqnuFyro +815677,82686.748160,Gj128PygRu,242444,826478.955497,BBME5K0TTG +664692,997477.434248,L2gZ0yYi5X,669135,187216.202627,aKWpp1modA +636764,484156.226218,PPEPFgwYWS,846542,524867.648235,oAznPoRjUB +246947,813447.773257,1h4Y03ednH,45635,109970.843381,czuYUCrYy6 +53770,393883.848602,hAxXmAvTDN,608303,516502.626753,ndAiMmFygl +24506,735340.053090,3JcAvyf0Vk,301928,373552.939154,3OIQyCqUXX +626576,284672.388465,HBpFMlyIug,741688,549659.737556,HqoZnAkZar +980222,26503.579817,y2wTb9kXWH,488020,195838.641185,Zlcz2u7E9e +681819,345003.141842,jFQJTAijEN,935448,663038.317173,ZGpcZuAmR2 +640414,156487.553083,TjTl1BKyE1,497678,271963.074326,l8yKOfiOj4 +638553,281446.529420,SHgH9RRUHK,910135,251152.475156,Dt7ZMCUAnJ +779179,568363.899363,tnpy1p4lKC,546704,51762.221088,9k54kkFB66 +457587,409882.407650,xqaqNmmyqB,330906,707734.583757,dLjvbXjW7D +971884,156123.943002,QtKbJPweAD,385149,54927.115124,y4hb4kobNr +671993,865626.228066,wUggu8eAR4,856421,460882.229766,Yuwly6CBPl +863137,585074.346418,mHt70OCCo3,977411,223599.019576,sjdD3A1GJ6 +906593,862522.827985,dZLo2elUhE,982664,727456.457639,7Har2MAH2z +10920,781066.608025,Smu3zVFJ86,667137,83320.288001,SnPl4zcFiH +744731,549664.241935,byzeZC4FOr,265348,830945.407910,BHxroym30m +308178,851564.766459,Csxzyg4y39,229703,657631.414805,jmn8dLU2En +576770,696811.115618,AWnXn7yBpU,935929,480941.906655,JFIqaxOIgV +96324,16623.272524,qaNzd4KjQW,844469,753948.846587,6yGh1Ojj1y +171265,593488.329967,gpr8bD4JXS,859863,126407.030659,3qdVzApjvJ +116229,698529.350265,sHTyBXtasv,149715,54039.844799,RGaCZHhOkg +591049,683426.570988,SiqP4KMc9v,511956,21903.780920,E0qyb2nvSR +509317,609273.708858,9rr3m8cVik,400713,638972.229883,clp3nxF4DY +59780,284023.994911,5nJH9UaOHv,530985,938082.618604,V3Io4dwmrA +699889,904049.494190,aSf7lnbHBM,354265,647924.708221,d6HVP7sTmF +129825,959156.576586,toft63dUuI,700521,90145.678934,8cwY0wABAj +989973,163173.960499,AfX1LwosJB,347735,476561.869828,c1tQQF70C4 +604725,281891.735702,qJVfRuGyoK,920172,785462.642582,l4OhckqVhS +936392,658839.966101,1d0XDRtq8F,62391,101049.085399,LF8cr6Uf4E +673855,85389.699349,PcCIJKJU50,171727,230891.558967,vjxnyUbG6Y +768698,312145.717420,JpLLNio5T0,970665,989482.866469,MPkgMijs0F +344484,254639.480416,8HdPucjJfE,522408,765167.584925,vzFbumbynz +214909,837191.250600,WNxky2kD6O,367060,199777.907384,cUaKSffrLi +724559,736706.447332,9sPNVZ2JmH,758263,356616.972463,qUlfDY9ud7 +616566,665632.411163,HTVQk9HJ41,532053,829979.195164,FD5BGOVDmf +470985,6966.142216,Fnora2rj3B,65360,104306.688801,OczDhOUnlT +514150,458328.792757,Iy9wZ53aib,102578,299055.606578,nrWfNiBoF1 +488629,87895.995795,9SfijxzqWG,879668,63937.966470,IC89slbo7M +277530,48413.406815,O58gwYHygY,447389,640207.375275,pYuHvvBhdO +373014,805042.204431,UQB0LhniQv,535217,749701.418815,fyCX0qPbyi +731537,783738.274268,KtGPpMUAfV,253882,205743.279195,RMA42fx7e4 +932788,865559.365240,epvEec3fPU,791864,11195.136986,bM17dhaKFe +420691,266944.305792,y5uTBx1QC4,554134,445559.947311,zTqV86HF0y +865936,495875.581416,1WIMTJUCeZ,258193,895884.504894,xkKdork78L +752851,397261.596035,oHcenX0tAT,891246,707249.531376,ZlQNdFGmfR +245701,322263.385621,FaDheTJbZ1,274970,950556.007368,agfvO0YNZl +165469,256227.816172,CXT8UIxxei,378835,619980.945212,VtqscbOVkV +368888,901455.295973,B0Rqx7En6M,835511,194829.154188,pAOHYHCUfo +71639,397227.967729,BUFIhxvrBt,927773,124138.008585,XY6wKqks3g +441874,370407.173244,bIT7RpvrKg,966861,949675.709675,PJ24WKZc4N +926978,971133.601398,2AoDU0wOTF,374796,184457.256387,kRjsUptLjt +609017,896466.431324,3cElj3hihO,710436,210493.407974,0maS9pjGLM +374416,252084.065800,ONHgu9ND4d,147179,252322.553338,k9Th12R3Yi +522317,252158.990808,bKyQK5LfHR,588285,498430.399379,v8jmKo6cY1 +126359,925048.181664,OejGuYFrLl,746680,530459.133389,HN5UDjfBmr +920018,134274.139302,yr8qQXkfbM,243484,804370.285964,UI4dStjmJC +21915,949638.936852,Uwci00dfMk,669935,358070.652561,mo0WawRKvq +544090,731446.566814,r3vkqsXvkA,482897,862459.160188,exLxPvwbfu +851798,314010.808047,bdpxL7ldPS,692223,815482.741435,L3DswfIypU +480701,317822.481516,XBxwLwssdf,328124,439020.792825,rOxroCj4XR +741855,302946.866603,V0F9bMgVRc,24266,287850.396210,zxq3YteWkf +190145,305785.117236,yZJfXJf055,227702,9859.327184,rsCODktC1n +855061,494317.665905,KEBCvJKvWP,318677,435167.814804,BQ0zj2HrkX +685859,415453.728969,ja895AzHE8,481895,475443.436641,mHh057kiaC +844776,768233.725558,MTeS65mo50,884329,774629.882205,bsIX92hnY9 +653947,222005.423300,NmgnWtOqyv,449412,298305.847645,mia9tZJGxo +973963,70824.246580,hwYujp2LZ1,49635,177411.582778,V1P9JGYprz +211502,273404.357402,Zy8GxfDfuo,285616,689741.919154,636xUosHpC +858611,458914.614664,zprdHY6p0x,942436,745149.702975,qVKDYSb4Dg +952651,232759.593616,IFOSgu6RX0,966450,150822.746275,euxo7YdsDp +596343,570289.783600,8yL7UjMO1Q,332241,635623.027221,GvRiolqTEV +71426,903187.571284,PukVTcwQXH,706507,266027.835157,D6M1DrV4VI +609439,703578.607732,5Rh88Nh19q,414727,436166.445200,j9F1m7UIvv +304053,805918.071873,amVJPDjLai,899592,95460.971038,dxKnB0AjRd +246140,420235.103002,3xwNuYhPlY,92720,139604.621942,QPtxoMGdTj +706088,847305.495504,zeaE9SMUc2,245973,623925.742415,9cvlhzWIgR +100435,280005.745143,NjFvXSQAZT,650249,196885.000389,3Gd1znASrU +843827,24725.874298,JBfujr0mO7,196278,381739.771300,qyEWVp1hzz +318238,559704.586352,yN0KcVIhNO,939023,101774.185054,TFDLPcqH8Q +276691,951099.406411,t6jJISFHwp,274971,755569.683534,E6KLxM8gmB +345847,410952.885414,GoFGwDRdff,151364,409377.753941,90zO5BjYJy +54843,315929.370359,HGa95wl73s,695978,839888.250935,HU3JiG2x84 +477737,728162.432043,SkvS1ynF54,288381,769058.394623,qCaMOOzsdV +179245,786294.934653,YAN65rEhad,4480,693109.388302,Kny3xnO76W +78026,992901.853275,xv3CN430GK,159291,854897.906237,evUmqTODJd +807675,833166.413357,5QwKawDo4h,15725,651233.455764,QnRrkW5FYd +592058,856128.822746,T8bEQl7Awl,171255,502813.636043,qXayNpWlZo +472823,138880.306324,UdgxMbXu0q,476204,415954.534997,6K7fiSX7R5 +786299,563408.968030,zwh4QkeGSn,47567,739652.467621,Vfpp1munc1 +928621,898870.768556,t205nGy4ju,864659,530196.583732,apejxzh60n +604348,464706.113426,PztmsvLz7s,386519,278468.193568,zeNQY1ZBZ6 +596610,598005.916495,w4cQB9eR6y,957545,523341.464658,tck1QjX8lI +644939,453109.368229,epxsX94wLj,295502,372504.876841,qcZrJUl6g8 +452970,485024.744632,TFMnT3qKFt,489752,295444.043591,raYaN4Lv2f +314705,374866.811156,CKmrbo43hn,616533,337056.952727,zWj0oQFkAD +721429,675763.445004,I8kBPM7dV7,231896,839254.104728,j4LPkSwe4a +924967,416259.106855,KAjqsNI5lF,338664,939821.924902,fiqlfuN2Yr +665414,677195.572928,DsW6xUs14e,61215,352353.082790,r5dkRyQEqU +407983,138534.182654,KrFCVWqKT8,718305,397827.895014,p2KTe3Uok2 +144238,229603.900767,RM7x8l9Cg9,852745,114345.799190,oXLuDLQEWm +718482,295358.303257,qopHHXUIIe,609286,52304.437987,ueytpuOeKX +895495,381520.595393,IIWbXujEr7,635648,373985.656939,TAfI3du7J6 +506329,925643.712251,RRQLPWYJqI,395895,351106.608498,Y09lmgnMpT +148297,298365.522930,p43HIGYGRe,292306,976230.619266,cnc86tc43T +407379,775284.853809,My9wteLfdb,718930,239611.640110,vHj0rHyRYY +906780,29121.885395,1H9a8m7s1j,205381,89354.982780,3YVbjENGXp +962996,585497.499572,UCLO0kYrkt,189232,973979.794599,E4iQZwjaPw +712125,860526.311929,nDrWOkgtmg,743521,570474.142536,AbmQuf9S6s +547608,690997.630577,E465oyxLny,777970,185430.057320,WYaIDJjjj4 +619691,771373.672956,Jebxvrvkwf,23346,839945.706288,xl1Kph9jpg +764565,333333.263283,Get5p8xlyQ,28797,310925.803461,ms4oCljWuE +972914,96536.955010,dYhgxsMPy5,59742,261858.233919,cNu3dw1cyf +114959,669969.266624,heansRBaI0,957733,258250.307209,RVGRe5Dagy +324585,515531.637601,CAeockt92p,51685,872572.438921,RnXurz7wo9 +801962,433831.144101,DL85dR5mLO,944706,532889.948358,CUPmahgoVw +715342,836835.125011,CXd2B1fD4i,962207,143464.551463,aPe4tY7A2G +960123,529345.949989,jRQjIbpEWa,591528,297899.148960,7zBXLx3e8x +717152,947865.642919,TttSJfjbVd,453329,105533.877907,UOYI7v5FB7 +82855,494268.063785,HDHUXH1wp9,447877,574185.639887,qy9Q1apZhg +917705,185841.764044,kqHfteDFCe,325656,791404.642245,MfTczijic6 +276244,470302.016259,IplO7MtUd1,54093,605260.729995,yV1rvoeDgu +241892,867311.438991,5mhmNOo1Lo,404552,943170.089577,3KmNGDHu5I +547772,259168.190387,H19r35bwVc,531435,582696.622191,HkuWuG0PRg +968459,583425.130528,eU4vqQonJO,300291,467547.616856,FirsbJlXNJ +910918,645500.454897,aPOutxWgyy,924495,218819.334241,oPQcYgarVq +479136,811087.518811,7DGUypIAzp,408200,136578.048514,jSb6ax5Uoz +927087,78801.773099,JsNlQpauMN,420535,757646.400810,dlXyD0Th0Q +823377,995587.033015,DdhKXbpzGo,581821,522108.772037,1N1PBMBSUV +559734,499261.780049,WoxLV3MET5,876976,676259.703897,CnTJdwhJoY +871409,640236.377496,p43XYyYKbD,63145,476958.495476,gKb5k3F2vu +563669,341414.097137,W8RXYrYdBb,614090,960678.272494,2RvY1wthns +669932,353278.561657,Q71djVq8qI,600618,509944.350209,dZ8uo4CPFj +172025,466678.640184,dAAHdORBg4,892283,483009.852758,TylI7tQ3t8 +851591,849531.289615,KjeUThpw8z,450290,994366.960596,sGwKoXF4P6 +84313,245363.489131,paDN8CFp0g,414699,311535.360954,zYy0WTorEf +61324,229099.991899,1bWOItV6HY,34429,309268.425504,SCMO5E9yhF +596607,716867.716923,ZNzzNF71Ew,31445,560245.861038,vvCMjS0JrN +61618,176596.842270,oEJx0C2i6X,649728,616247.428598,t4R1kGxGPW +368421,278073.717945,r4qs4BIQwU,702256,426404.773400,swxQh28euz +345925,937246.662319,RgNzB6fHMy,931184,885591.383625,ujUd2vIDnD +717295,635070.485060,Pm7esZWLCm,299743,161143.355977,8Jvop2pEF0 +310349,157685.747343,O3dbUq7eG1,23513,998294.053224,p5IdbFfavH +767835,330667.221516,Y0TkCS2FhE,997134,19206.103097,w95NfEGWFN +251053,118191.800158,bvXl5E0Ir1,914218,240616.237428,SFefnMYwmu +133398,325482.347988,XV7tlDV7JC,805194,118082.185019,ATDLU2yV6b +423941,856728.572210,mqy9HpWvy7,987847,697294.187312,7jXm9Uq1FG +336811,46427.609665,POVzkCd81i,202536,786826.540098,9RuwbZG1nZ +172060,878495.716695,L11DReZlSE,493052,437892.812139,Tdt0KB9Jsa +613801,7250.448800,8sQxyz0eqD,647934,96507.749601,380153jo88 +893784,774240.813314,utcW1KqVqV,560329,903173.664422,rDKjubb5pg +670158,896839.065008,qGkeHAykB7,921156,36397.712958,qhp7Y2EwZn +409526,209888.810288,a0qaXujISm,595664,689039.516549,4MWnDviJOj +454279,90941.055630,5Cpddf3sL8,361268,907715.292390,y5ZNW58zdq +990227,496052.564546,kHbQcdlkhG,69148,986818.699098,vjpwGdx30m +328284,115454.808824,cmbz2a9Ifo,147398,161283.353077,AtwDIG6y0v +433898,817014.277357,uST3r4MfOG,433895,180344.458257,ABO22hiqav +547837,773681.769279,FXLGcInbMG,560392,553777.099724,TM15BP1baq +52479,321183.561794,MPGsdQooGv,904146,820889.876228,mfa7OiTPA8 +808055,708753.689205,Swyl0o8hed,908204,973763.496420,uRdwBEelXO +257464,912004.799660,d9F4XsYJuf,843113,280454.127321,S4zjNvEs04 +77684,720187.068264,3Vrws9shyB,876403,31806.226627,Oz7I3nMPlx +556309,233664.878147,gEB9HfnHB8,182439,519616.343582,5jKu18I56K +452250,63405.127581,ZDEY21eUT8,165119,290447.724635,zlxWP2FXtt +568550,528614.962450,0C2ZZRYrb1,379837,473920.760167,AS92GPqX5D +453999,345177.317587,84JrKaOx0l,578418,997507.585506,QkpK8pXIq8 +963623,178352.253704,ISh3FnKNAa,148469,943769.578709,eiEywA2tOY +568259,621403.460498,MK8PEUj2hp,964861,445056.300869,QFzqyaae8z +697833,301907.963469,pOlinwzdEc,538059,612668.753711,mF9YvOVwVF +813125,450587.779101,eKjJoXRaw1,991419,161195.146036,4niytdiPRq +374910,104937.017308,34oownko8K,922074,7961.889645,d51RdA2bgm +640887,437666.309900,Ql0ACfMNp9,949493,58325.616881,HWLLABAeY6 +444519,818839.210102,F5POhWABK6,321199,327824.128205,pF86UZG0BQ +778041,464293.864370,ucp9UiEDq6,830427,241098.112701,DCHII3UmVk +570586,192137.089901,uPjd6TLU03,265663,550164.234086,SKACHiupeX +663558,764917.850885,eFgWlOHI7f,26340,297264.992338,hmLpcL18Qi +61450,853828.218022,27vYJ9ecLC,846954,334005.812689,C5qTYo2EdW +692223,111907.722861,xKPT145MwZ,399883,850827.945765,0ZseTDJHum +335054,218030.036845,CS9dHYIhih,942037,879002.878720,fwBwtiyhAr +568140,813018.580334,spF0WKVuFX,648773,314066.411917,xQyXYvYR17 +556010,798663.307022,Siz2xYje4K,544831,576408.038206,bqL9vgQSFo +364492,572561.908654,k9dJUDhO9U,993214,769881.797794,A3x2NXdTNn +180524,312604.402370,npmnb2vyE8,811471,380147.639212,AKoRlh5Njn +674156,831408.433926,dGgCa74ztb,974791,605040.846649,AxGsGd4In0 +983810,762741.801398,jPvqk3qd77,326015,280567.471538,B667PuPQ6Z +211317,466372.079045,Kh3gbUqlcs,522698,509021.585700,RZeG5UQjx8 +510015,555849.184891,ZrA6JHiphi,336664,829909.116432,yOIjR61Kpb +336513,158683.521911,ZBy2ZVNBke,300755,997043.030776,XEirTgu0tX +7794,608062.694295,VBB2w5s5y4,986255,603184.785085,PwPpKlcuny +570486,332116.067375,aYKt1Y4gWR,621829,583354.865456,I4VO2SBW7r +860906,758047.060246,SDWbhbq80K,567279,931483.715253,8B1w4gJfwA +197858,332313.560400,CF9LAkSJKd,958845,480389.395354,tuEkhm5tbZ +353609,944576.095530,hU7EuWSaqx,7473,206097.293713,vrJv4QcpSQ +51503,782717.471586,XwHGpeHeZb,657594,635924.615539,NNkNihfjV7 +638342,480933.787364,KeiNB7Kmnk,998577,169725.938407,HmCZfjIUnZ +961889,352457.468700,hu5arq64AR,86269,333477.843498,YzXUrcTq3B +828227,292266.335388,v9DHADyMRB,495961,396190.265961,pq01WGRJRI +554704,171185.369499,ngvdGqVE39,159828,216537.006983,SMSjTeI3aX +885282,814868.399545,FSRbha5rsS,196610,982756.353214,8t28xNQ900 +976915,96619.047471,PPKW4889de,602067,37752.074463,LloGT8bH1O +152326,508577.229772,oaQSg1pzYq,696455,222075.999756,g7x1JStcv1 +2270,794883.772916,0xbu56rUbk,732869,380158.702855,DUuTtUh9c4 +538426,851099.763362,b7vT4dUT3M,743816,558934.343417,LOaCMuZ8kg +667657,134633.093325,esQ8jh1sqE,882097,551777.740278,KdTmn3KDPg +955233,600917.310667,DP16X9puIs,919516,853297.803653,SzsV5ZPOB8 +727438,413263.754326,RqVZbL5oqQ,38619,741192.855282,TNZCIGmVBO +830782,973214.784258,YWAHtdfEtZ,759406,796857.450929,sS0LG8ox9s +102383,74012.114636,iE03BNXFBh,225927,949716.378516,aWYTvT24gx +515012,741560.305939,4Sy0d2gZ9Y,24205,17611.631299,oI7aiu3RDI +334166,115864.991661,Wt1rg24z94,409685,670901.017297,v1zm0Dujiz +666079,898192.188110,7AOVOVRzYQ,707413,577238.236305,6c7tAE7vNu +337329,944940.899722,jgrZxldIq4,517104,370789.928493,CZI10iINMc +845383,326249.796834,8v0G5SDy6O,60169,215427.749615,DYh0CSPdRR +140591,920189.825183,zCpEZRozAy,843259,208586.280474,2WKNQPZyJr +895290,206555.918607,QTwJMEhfDA,48917,427350.555314,byOsJcIqow +449557,470005.486768,sMrGRv62rM,433458,309580.708216,DrHLTvOvPi +986810,833059.130984,BG4JVkzfEs,284259,964361.351954,J7gBr4Fza1 +833428,123579.883374,v0zCM45stm,254646,104423.766681,3gZpATPHX0 +288752,144098.516442,zj0ctkgf7F,196438,471301.186772,udupLqvIxn +589688,241933.285699,4tZb62MadZ,67107,857804.886684,P8V6HmxV3T +340881,414188.408725,CyYDoQwqDW,449096,591283.113940,tWp5YrA3d7 +217011,40872.249524,WuPWLWCvmw,100206,196582.846633,F6hpedVHfQ +593134,244322.427209,x1fhAYNBPd,55666,156484.957478,Ks2nLMHIB8 +790808,989578.871191,Z1Cl0CAimw,510592,449365.312966,QlCTdHhPr5 +254283,279007.206360,lt6KeC4eCS,467584,408641.530302,D4R1P3EI9J +58138,528692.181430,GwKJEpq5JM,238552,87905.479996,hsq0yXTl4Z +57872,141375.912940,7sS6CZ49Pf,344008,764322.733322,vndBABfWDu +544166,571.936343,n0MEHFiLgL,580061,367501.040900,jAPC9CZPQG +793117,295686.573646,AbHhauqBPb,499630,477580.439437,okQUSLezxx +178045,236645.975311,f2erLv3rCs,811125,417514.918656,iJGiAsIbn9 +78193,978248.127179,MMsUfjBtsh,698558,157190.571540,Qydu4vPdPB +188239,198615.199781,zr6z81v4YF,130257,891023.603901,xJPJwzLOZm +306808,266276.214623,1koPC15p1C,635424,86091.862277,JTp6MmD4Eh +394439,69617.833322,uEnkGcqKQ8,375803,665686.009313,RfoFC4UtkN +696385,677475.613679,9sJqwM5wC7,892817,674306.460185,jElg6hiaL9 +701232,676181.467601,n9wdxdjtS2,941165,491400.144045,bfa53pd9AG +678886,310490.671046,ES8yaKOgLI,347479,518413.464327,nmOe8vZ29e +357283,740930.363276,M2AqYpnI4F,261350,602920.327138,0vc2lRDlXe +550133,678653.585141,ZcIvihExVl,13168,392656.765700,7vbI6ZQx8C +566710,775616.678877,Uen0yNcksg,271317,56742.948094,PeDR9Li2xg +371007,330868.585690,OlVk0PP9Z0,896821,463784.329760,g103fIIlqx +436727,690174.387796,6W9q95wxVP,725317,106729.597372,znTm3Qp7LI +721568,317674.288916,05IhEfbnQW,188329,634869.014517,vTjSCqVIOa +248407,433833.858467,p9qblTIofd,822578,973385.478654,C2z82418rx +97472,710711.525931,rX6WgBNDcm,777112,906044.125074,6KxJWZZFh9 +620567,526525.908965,DApchfM1kX,698103,41232.007643,zW4AF2TAsr +310335,182458.590995,yEHTzRFUmG,707188,976136.260911,kZevqLzVbi +644748,729491.590217,oZikmushsY,45411,29083.286964,uvKBp1zgcJ +373148,87463.884124,xHoQcyJ3CD,80047,951477.855021,BNDZDrQoAe +700765,736927.061495,0GEv55AuEp,651454,482140.154307,ZaVwkwpVNd +889990,88231.940920,h24YBraxAZ,868702,292557.269801,wy63XVuajk +590658,486082.024478,NpKuGuEG7i,868534,86810.496176,7gTmg6Mc9h +946565,229371.915435,g0OdaU48xg,994330,866183.417065,1vPa3QZC7E +471569,466446.050234,8Ws5aEUCRU,818820,665703.928171,PJWoPC7uvI +411862,911469.874116,Xyl3GZFdeu,704838,341054.073082,jHvjhockv4 +609970,171911.559287,dfawzH9SoK,322238,840514.853786,T8RJyL2AFB +765830,15321.543996,CNLqMs5sfH,659347,619111.054466,XLj2185YKO +903740,369586.033251,k4HnHbt7rG,789231,793822.635066,HnJkGMFZ7C +188852,688426.373537,kv6XrKGygO,535315,386056.950934,iuxTNFJ8d9 +910760,420090.089120,59AtXgAj8O,350882,620340.724260,VV3tYM0TN9 +132308,339188.053920,vX6oGVdaLT,705869,930326.288668,1KPzv4TUml +913182,238740.312723,TQnztABRL6,813322,734452.683192,wxBVdEFGh3 +990319,999448.393874,bzQo2a8Rh9,849506,633565.251119,8CJ90ZUdDh +378185,855341.939788,quJbTL9lix,764421,775071.140606,A1pkmrYFsK +731782,36914.923306,xoAc5h49v5,844276,158214.335309,OGaKLXUHds +135043,432633.937336,9ZyFC81I5d,926516,84081.743728,K10QoBa47R +907445,498788.505923,mqli1gnq1D,333945,810894.647186,xzOd2UTMRY +217129,235066.354840,H5SxBKtPcT,716999,197546.016099,MFGuQwxcfo +201018,242892.628450,fQZk2ehqhN,477884,393374.878070,x4G2edDLFq +232666,986218.726778,Yt6cGmUj3t,30673,671480.753040,B1yvG20uyT +269340,655494.816953,oc1xAor457,800040,760216.529363,Lfp3OUAxAx +366827,272028.952142,l8j6ZL4iQw,57687,543299.552366,nJJBE8Hfh0 +853936,975304.327535,KDRtSEdcyx,569838,356232.422092,JpoBvcPInm +925835,181735.644565,TFjWPfEnzS,150455,147903.466506,wnf6HvnMFd +73537,965445.769028,pVm8PbK12W,800431,544869.232205,iG2lEiX8pX +228584,394498.734201,5PmRE70rZl,200194,436768.328321,RCC1jPLau8 +968636,650053.317274,zQxjiUzocR,423667,13074.512170,jeXpofXJ0W +600289,416694.047874,ojHbrbFPgr,141574,685006.292757,PQaP59DBK1 +912155,556393.726143,1PFbyGM5a7,745018,83342.360224,F42zunWL2R +589863,760676.786750,VnUTER3I2V,682976,992336.110540,WKuwqAjMvf +319350,555998.219735,L2wRuGHzpi,289212,855801.586159,oCcjr7x1ZJ +270294,717002.194437,t4rYepXBGN,184033,847419.387297,WsrcqjDgTN +909858,947099.054701,tRyHFJepII,490199,505096.729875,OhgtUULgtu +420453,429780.185960,uvlmyhCI7t,828463,13028.780684,gG3L0B2TjU +706059,21888.141920,lhwtgMtZ1l,531161,717985.596702,7OgWuQdEb1 +939275,869887.218514,n0vpuk939Q,327959,952252.606395,tOYbDNJU7j +683325,482661.578623,9UoddsDgtH,648893,94203.418155,qUAzHBzcU7 +768201,374485.465753,om5Xzfnkw6,467151,468349.707220,mF63n3k9Kx +356827,941475.238789,mYKjcGi4R2,939033,270646.177306,DKlMdsANjS +952505,915329.642859,aIaKWcoXMf,108676,916583.619681,eilxqBZON9 +758941,940748.049996,CqG5ZeJgil,445964,167184.008579,sjnuFjpjcO +686523,85105.493524,2ungJpRbvu,490096,344441.963825,zEzNyRvcf5 +259487,303019.319035,5aqJpbJDbk,316002,752721.553588,6PQ7YmhBTp +707264,573427.423201,gNpOTSgil1,40588,742924.659972,mMO0ZQUEgD +876711,373950.155892,HKQva5ts0f,577649,319247.242731,UFVTu2lf7G +664273,535817.670803,WobjR2vUDf,720725,47233.650564,LodNIkR9LG +96071,924043.521997,9qk9MtGqF4,199655,967944.152707,qIptZ36E1g +882709,205807.359905,iqSb3MMp6i,561510,89101.865561,GF5YQjDKRp +219406,893314.991082,YsllgySXoQ,472666,973801.674016,rBEhRvgVIi +524145,736697.566818,pMYGuWB5YS,513097,719293.499448,ZawlG2Ilel +168504,527621.170175,Vap9KmeyxT,848977,486041.093017,FLtASDBgjM +11552,840764.656643,iinJ6lDTw7,721982,233300.923625,XijBe33DdK +996133,27099.171940,clWsgdmRqi,261518,130286.103672,VRp4SWAWLN +309942,467831.811373,W9dMmMVV4J,578212,631239.085038,06f0rr2tay +114472,26756.111761,GA4fQSQh1m,337372,158145.589722,HuV7V4MWVm +854380,971855.425911,ztHw8C3BF0,258082,325553.333686,cfZFGVJE8Q +260783,106018.107601,JyxX2HMTt3,444280,859866.989798,4AiaFwPnsR +466027,518336.352686,PAIaVWK69l,866021,232399.842445,gtBV1cn3Uu +890311,394849.617663,o3gnrX4nvf,786185,935043.968123,v9wDrygnVb +643071,69674.655798,jYik7Zvfbw,730837,681942.232571,SvvMa2zDzb +252253,876252.656113,gXUefQuZiu,764840,428612.430988,QZ1MzsRujk +531536,177189.967833,rmr5eB1xsi,287071,800296.472502,qBqijBRWvc +507480,709647.931838,Lh8aF2DOyq,690696,595022.431769,5BYkagTRdr +18962,302003.006601,R46DvJVuX1,773081,999728.866884,bLXitQlUND +726034,793700.403559,Di3Tgs9AY6,595421,121098.395039,wRxKWedc8E +186594,282114.341025,HVkIdWeUDh,434298,389710.232043,ky9JXkQGRR +585726,363472.311309,ZrbyBoXhhf,625120,777160.575545,GVQDVNrXGl +582899,674937.508288,fVR66NWf28,363530,568690.779423,xBKjlnk7eg +747983,495974.691808,Hrn1dp0SCc,42005,988268.472300,nzVNgNK3tT +671143,44860.402455,5LUppm3ATT,835505,703624.770366,i4Rghwn0Tt +808370,694820.182801,7VVs5yXS1c,762758,464498.753443,OyfSSPRFo6 +788381,634865.822944,lUtzrfRslq,840855,735745.229791,fAE5lZtGtk +899986,204790.021995,Rd7TTBiaGM,76016,116320.538734,SIz9OMGVkQ +247284,310476.528430,UrluvN6e2o,690757,785280.442290,lE9aLB4WVo +489609,169382.761082,oxTzdUa0T8,969704,623759.328585,IuNF6b3eW6 +871801,542805.954234,Ng5HbwmIDl,681404,583517.019412,t765qKjThz +722562,284448.991675,0VFBsVZWly,891044,15599.540877,RotY6cURkt +241053,898885.179635,obkqv76Bho,793676,535106.763234,ye0FLYsHZb +356418,809819.845228,eIUT5GjDse,872987,102270.056198,xlq59KnWwG +355973,789527.252892,hxH1ZiL1Zi,796553,231725.879637,PjKuhjba9l +888368,584332.914186,UWv1xBMVQZ,204173,100559.036602,s6DvGRKTtY +139956,6259.123881,fWWLfteyqt,267660,820054.099723,m2ZlX0lbwS +571658,452966.740592,uOQwAVokyK,800662,126044.861180,XIUomZ9tZQ +872221,978783.594890,xXezlLLwDV,218987,573484.659642,vma3pRFkBI +823331,528236.548477,Et3Wn5wTPM,942276,311229.383183,dTs6vu7n6W +911941,542798.854124,g6zru9tWbr,819390,821292.730424,0CRPdLvMLV +761173,582678.778766,GmDihTIpM6,542901,483920.747294,B6r8XJPzKX +191065,128403.335820,tTgHPyJc3z,502670,229259.417771,Q7Cs0TPo8a +204139,24991.588444,pjfxems5Hf,425640,784910.973553,Rensfqw0LX +464344,481807.510828,kQJTQsRmyL,730660,826664.259468,leEkCaAPlp +939326,520883.613703,cef3oEhPer,403062,537664.965127,eNYaBQoLeN +897849,688785.226469,NT9Bm5qq5a,642764,733778.538911,YjJsdnzvU3 +531581,469961.048228,Qj8pJAs9JK,139038,738216.031705,nRizsKCvWC +335625,328179.237779,UL8A0XNZFB,341571,643033.828420,ADpo7guKrt +733217,344972.529943,FOmEfkxloB,342239,438303.764278,FSDnp9MJtj +149144,544875.504114,cExWbSoGNA,150184,420824.978166,jktVKPQVrJ +287310,297117.631135,D4oJOepNtR,38469,195167.295543,Y7tCnVd1qR +893360,787256.898418,HiLQegvR0F,298199,128987.864311,PK7WSTaiUo +244344,980717.583529,F37iDax2oq,662107,873107.599564,UEG38y0CS8 +235696,367524.455844,n24Bak9hfB,499613,12872.317445,8RuDgJI1l5 +485980,84065.807128,URKnUbMvSK,635214,131462.447171,XCz2ot4Kgn +264966,951076.053394,IhDIxwce2k,410901,646330.675714,Yum6GhxA4G +230082,280648.012702,rHyc3BanLY,823438,285018.945029,GLlNUwD4fd +548289,363441.019658,1FoaQus7BI,242890,992584.864415,qS4JRtNamt +776328,988518.569123,6RKBEGb9G0,303518,68101.004126,XlD3mOmMKv +457352,891674.646896,7gYDJ6QBBJ,265336,595036.086489,CISf8I1Le4 +836320,237899.198032,CBWQkcQYGO,83683,368073.936816,WkNrbzoPqO +732936,690513.831840,BW5S4X44aO,892692,411880.330090,eE02DI81Jv +943639,682797.581841,l2PwSGrByP,297230,420697.797374,8Pln3dnSF6 +32500,379451.638834,IPWnwx41pM,833623,992756.778707,9G41joq7HK +497263,59299.311305,hstBtHsYRM,462666,717904.823776,1GFDzYDQGp +917564,447341.241387,g6hGTZh5Mg,816929,22176.615701,pWVH1GhjEP +211152,490694.956555,WwROcU07a7,380914,782050.969254,tYIqIZx1XJ +452704,397979.130544,zf7Hg8rH3Q,670957,706677.420181,u6Je6kBoqj +366051,954478.670185,LYkTwK98xQ,115848,211741.971389,I9CwRTYW1q +192756,94497.160999,gJJ6snKotP,268327,321002.660975,EfGWSV6oyR +500645,341444.702643,Kqd2PKGneE,574325,559495.646993,FDmv91UmOI +573235,351651.009577,WGYahk3cA2,402931,790962.870273,PfHYGCdJ2a +351817,768637.693111,2GqmM1mNLU,403797,812863.891348,nXcV36O0sO +517881,204417.852402,yB2oli7g2r,1072,162185.369393,jLtSQ4n57e +152186,653787.666544,ZDb00GYshn,206725,525984.853983,FmTqcxRVat +675554,744213.205756,5i9JifSBsZ,861926,981415.260617,BVfMPkJE6Y +14870,156848.302288,ZG4mbydLxF,749364,826728.687702,ZeX2AwPOdA +757608,586570.329688,9veOQVtSgH,974876,835498.332434,1qUYymrmU4 +988770,546932.330557,5An7DxvyOI,383185,591825.052866,xzflTvYTkO +389030,131652.858079,GKzfJ17Y0H,613400,622899.341651,F7187slVNd +997764,359682.937661,d6PrDnaja4,90336,664419.372041,hgGqEeFvbV +362046,232430.287261,LNLlt3Euig,11349,338478.440619,gGT5ojgBuR +12516,39316.457969,cVRLPgyZk1,437362,931353.967662,iNiUG6DAqF +617814,249746.551653,e8udk4TTNj,725775,862886.267787,XATMYp51oL +989744,625476.310961,1Ub3GJKBUX,344278,233238.009333,RwUPmJG58e +287514,241636.013061,QDizx577Qt,225699,507847.212749,0Dt1cAQ6qb +469748,904402.355993,jr25c6GLsp,748723,160391.270768,h0xUluWFt0 +611192,746478.567247,pr73EXgnTo,956551,734124.096804,R8rSjzPQTy +342990,143752.728224,9QX2kuKusZ,107826,302804.168930,V6QjR2BjG2 +291130,737278.981744,TdA2Hg85Ir,275478,631802.089487,SS5QFuN2Df +151434,776404.953750,21KtDNTeLX,116288,766412.690632,5GmllvC7gd +857019,214784.561256,dMohJOFiBu,754675,222956.248649,RBjWK9UYvZ +253513,507201.009770,cN7gXKdK26,111052,329433.103736,1L2aVAvXqg +459560,193892.656811,KTfBJfnjRc,586465,131198.008923,UvaJ7WFDAD +177320,190970.823698,CYLrSXEkga,379987,648050.423309,hEsF5OfcKS +710512,519385.864693,YeJyrX4Je0,87579,809417.504140,6eFv4e13eE +167419,601645.616815,6kimIP5Rr4,827605,889768.965066,zhAYTEyHLi +164055,285134.472586,eX8VQxuwuO,224263,202829.389398,tZxjOQdGM4 +529544,250902.352257,Bl6CyCU9FN,129810,659373.282490,aeHnzzNpVR +375266,289298.468957,qsqaNECzHH,471970,129567.251799,MAiWDplTk3 +71423,818469.952523,JfOAmv9cTv,538744,705102.049154,4VNrP2veBy +877764,354852.316062,SRhs0yfi40,828407,904186.580698,f86URU6X3o +155409,778961.320612,4vCuYfhMUF,177474,619283.775783,KXFwcwPpex +121127,754469.692039,q6z1oMjnaS,105151,93224.579138,FqeftRiqQX +738359,216005.186835,i1Ig1VyEmj,162896,875977.640610,NCaj6N31gZ +878040,118735.373627,9AoIu49kU7,825547,73164.125792,msp5838Uil +975634,730845.385492,7vCO51bmBU,354144,212698.246390,S7UGGZk0Qy +666080,115438.102331,U8wwxUW0xv,466929,29979.782870,opNlCjZ8Nt +747954,982102.914906,hATpPfF3zU,122299,972938.376719,XaYN1ncRuw +769698,58591.154161,Q0JAv0HKlH,848176,115149.533206,WZMphRbOCG +976190,3721.705515,pmNf1Cipqy,93968,74434.279187,FnhtxaZITy +121306,582051.712892,hbunHyi81Y,446928,113144.575314,jReiiplRxt +152724,461632.572818,Q30UtFjrcl,188714,761145.195501,4KnLKam7Vm +288815,372693.239881,uCqtBYIyAi,833114,74591.657251,k0LuvvOWUY +121621,940414.275798,CList6doGz,366682,187153.227841,5CqyEzEAcE +844648,5843.304253,dDwxa3t5xu,969237,726196.720923,LvX6nLGBKn +239965,588324.120234,sYDfe2TzwK,281725,296695.140362,HXiaSAZ1jv +347217,257489.134794,unRtylNSmX,37616,67355.303258,YwVw7Rqu1e +225156,894358.570846,h5o7awnJhX,64582,315925.875831,oIfM4CM48e +583605,11446.538681,a8qmyUEoOy,815043,987409.132924,Wauh9gNhHg +912395,234790.299560,vZVmOj188s,694033,747941.393233,ZbpB7WBf5Y +596108,325058.721766,2CLjKZIAkA,927094,981282.663552,ugoiIMl5wF +917393,166783.848121,3VC8zBs2Oj,852405,31633.411259,y0nmSMLz5n +424699,741006.480700,e7nE03QtyW,722707,927961.244574,W2qzwA9zWe +870667,829304.832827,JlFwRRrWOe,701495,275377.830747,vOnzXEy3a7 +218667,664782.068725,Yxmjsg5IZb,955449,503325.278331,gV1LfMuGsb +619888,648951.227734,szPhhezZ92,706679,481204.031563,7qECqkHszi +412116,600621.611291,xyZbheaVvs,665609,696271.741650,E43tiQ1sMm +665652,304941.366489,zH9MwB8Wtf,32477,943723.077888,0uKjVtrUOe +423191,849848.651607,OHzNANyJQM,803833,959162.215465,hCPvZh8vLJ +662847,375404.510291,FJqepSuZc9,927469,44101.086743,hYWv5sPM5L +597354,265016.756979,4YvLaqEYVf,545634,592310.643389,lm5D5rAYUs +254604,38051.195447,KkyrC7BEHJ,857751,440.190480,Pw1JmWxRKn +337557,228899.594378,VFZwQAsAVB,941447,381421.899370,KdEgwrEIBn +485298,299147.542267,5Mvyi8oujR,787088,911121.390700,ywBByNReC9 +680867,771132.459810,Oav0gAw8AG,547923,549226.733817,SCBuer1fIp +529461,653204.437883,x2JFrYiZrG,883890,888134.982070,89Ek7kfkCd +428893,155213.359394,Y8DMoabR2y,582645,911953.207989,aZS8j71Isf +274382,870939.434505,ywqx4djKSN,882261,690461.364663,ggt57ee5UN +48923,931603.755000,yUNYM5W2Dj,197818,138302.650913,TBjp2Gw3A9 +794609,756495.856979,5BdLmHfywJ,439070,347809.852585,B2pyhGx9Sn +674133,347382.099085,Ym4LXNp0Yo,369775,468839.783764,IyDCq3DwN2 +938630,143246.146830,NrptozRTW7,115399,232745.791607,BjsQIyeCD8 +869161,779133.777683,FfJEYRSK6N,490587,475240.696992,TLbXUI7tyd +676438,406886.466086,jj3p0KW0wo,999591,766188.046195,eMc5kZoPLv +419114,481416.434367,UgKkrkoJKz,468812,444810.781586,Zx7bOcl9tO +804655,125505.100849,pMWHqfZq54,255438,970792.363408,hznCBtSE3w +778173,650732.738214,Lob884SxCf,476056,8519.087558,TUQrkwbITI +502272,275040.246564,Tt3DwS44fY,728674,650950.719937,EiCD2mAOuC +235712,616720.717185,NPbkKnBPZU,785050,405227.440345,4elVcVvk72 +19170,861730.469654,T6eopEjrmL,560360,226757.474512,5qIPyJpRjj +354528,745150.561119,9ZnaxpUbXO,350537,705262.388241,Nvd4MwV2cq +718745,942390.245804,hQ0fPDJmqJ,706662,956585.054760,tOsKtt3Bvz +100636,251391.055392,JjTcJ86vAO,2376,52949.122767,ibSS72CwdU +544642,660411.691785,rgAAc8m2d1,174473,181272.664517,RkrFciMMcK +600107,733429.310320,jHaPldv1ho,650327,180132.419141,zknGATA7ng +418596,601149.438537,V6pSRa3BsF,539187,888156.228570,oCBmX9Spkg +355831,769422.117689,NLf3n2k9lb,777629,96337.705407,r71RFX77To +494465,602025.012277,bJQ6GNqgjw,998465,558852.915850,mNCV1DzLPv +567598,641952.119506,H3UBCAa4BE,796096,297408.861706,CTItGbdxIB +379562,802485.630981,NGBVNrApAk,95305,866678.461158,OKw3OQ22jS +688722,782559.193990,7TWz12ypCh,723333,547953.217271,hHbg6sVBy8 +286574,77688.020743,Iu0e77m0dY,534928,948642.939871,s74K3TQIuv +692499,425965.921054,wMLMwuGhCW,658212,175884.969863,tR2rJsZOuK +811267,43928.210854,QwWsyEhiRh,813028,643875.077247,QsuWI8RPEs +755739,449343.898601,jQlMzjCjzU,871348,97495.233166,Pwxc9RrzLa +457731,62615.600051,KpPtQXHKpy,662915,334793.808431,nTESd5eIDm +550925,886875.361780,clp11aGtIY,24947,703556.020877,M3QByL8tBu +203657,384177.388905,P1RXgIEdBw,200768,41972.543044,KX6OECa7nP +847822,657832.259289,KGelZRl2gq,312332,875547.309026,8bIb74MFyO +743825,66928.543286,6Vlw7KWAZK,263837,880801.010986,CHKLvm11zt +827386,289220.320332,nyGo7ASOdh,118000,424636.814944,lsDtpe6bPG +106541,566487.200056,kcX1Hmhbtt,622649,648394.465391,0ugx3e20TA +889922,182712.262707,8wydJIttLo,213724,490631.346355,0h5qJJf79t +155450,834408.992078,vIR9jcqzb9,328816,871671.087808,rhkdjbiPlk +276080,551196.160604,wmqLeyDRgx,459623,756608.463469,Hnbd8fi6ue +488567,91078.007982,wA6smwasgV,344275,741992.783932,HYi5U4qzlN +573247,119892.812102,PAZHCi0Ssu,290482,313665.603878,GbAldkfs3o +392558,241932.689801,yyB8zfuhgU,885973,242888.875261,96ZgiK241l +483813,35017.237035,3ovxtf99ae,267377,893188.098217,YM404oirqE +646766,421903.289430,wU5Q5Nb5ie,151640,283577.483560,ga9UEJx37f +991932,856656.305279,T2VgrTqc3Q,276250,385253.210511,WHW7W7cOyd +952018,526838.405316,2TrJBwWXYM,831643,328066.755151,z1YXAZLRVZ +575383,833868.469799,qDy4jrhxv6,997002,143226.855919,uCWwTTyftj +338676,858335.396993,jxIecRY12g,985928,749174.336886,fB6eBO4nMa +290312,613454.701311,37THBOOOaU,882007,914807.576655,UyTaDSwQgT +610015,630205.583860,shDwFWLq9q,100547,755055.499580,NhXSLuhqdO +888825,327188.962517,hp6FrZmez4,854927,466006.247392,aZqsAAnZEZ +248531,850448.172916,WAYLhOpSMS,791065,456043.144851,qI0PSdM4n7 +73306,495453.126342,dTbl33f0qP,274118,347106.870125,nyd2bxzYnb +492561,432479.435302,qaD2AkOTKG,590475,521056.856886,RUwXICkDre +522982,389218.770364,k4AMLtrhC3,856420,583923.117744,kVI67hp1sL +627614,90084.427970,IZ7c94tJDp,699309,422604.332456,OyQy6IKSOX +85749,123411.578791,Kqkwhwy3Uo,471287,391108.844698,DYg3QCbMaq +384835,308098.801397,2ZJQE61gbP,397390,154746.542901,OUZ0brArFa +499900,696625.406674,BoTpnLZccj,975327,96040.525725,464hM3qWix +972683,200384.058201,GL6fc1Zxw6,432565,58125.441932,85EPVgtjuP +250314,23725.367062,Wnd4TczeLw,783415,816595.338097,OgllXVMHdg +921849,107664.587550,qzyJsew4LK,826528,350002.895712,4gzf1Boq2J +900355,647518.989849,cnMkBdNMNv,392573,464740.182551,MNb3ci4dSp +804817,971783.337928,hSoi960JTL,123416,301083.411165,JAC7XcJXbl +341380,269963.375741,PdNFcDj5j6,546267,777743.516103,gmyma5RyJs +711125,335860.843559,lged2pVSxs,536355,17764.579317,x7lO6TfJNs +907299,117000.651862,uQgmQRomhf,158249,295482.034617,QoUYN7DtBZ +521093,964272.111929,xvVxDWSTjQ,951812,752621.701438,zdVcpbRJub +236760,83441.007409,Q4Rc8utwBi,474051,890921.643846,HxlPlvje86 +879498,668424.396924,9DMHLI3Y20,664575,403584.597687,8vEceGh6po +654105,850220.189180,XkkqszUtkK,196206,638372.841396,PG6G5tUcbN +296567,93987.079258,uiptaVrrKf,92218,328673.387437,XH7iWE8C0x +515488,947278.304931,J5jKvBxcHv,909592,886714.076811,5KnXPOhGoc +154571,911586.942726,fU6Y3kGMW0,458559,933409.353594,9TVTM7u7B6 +320248,174504.988279,18V9jGnPkr,532273,929040.520844,JgMkIKXNz1 +662296,26902.987887,6XMf3ABTjB,699916,290779.971198,OJN2Pm3OvN +148424,709166.833574,DGiWFgYCaV,287308,477719.562331,klvxZhZMIz +692794,696706.949556,w3m2JcYGnE,555101,635784.089834,9iIUkHhLpy +471119,525281.615664,7CcLecFcls,973166,402508.302074,pdMcC4lSUi +902083,545632.450469,cr6tDwHcTp,33348,374929.241071,jVjm3UICDh +839175,373730.050331,J4tcMxL6rY,509709,187834.271884,n6GPU2149K +994312,584282.212869,KOweS05Eek,889534,289239.918737,ST8QZOQKPF +507406,265303.265243,xSPRbYFAeI,370199,361144.628384,c9eknSG32S +422187,731315.804612,PA47XP0nBO,236997,701766.626094,IDOY4jGOiU +140766,569171.036423,GGQreLhvCr,83147,388886.727481,LPiYi0TZut +831618,329474.195884,OaQo4b6Cju,33419,48968.622014,frU38eQrZj +372994,931482.905154,RzB8B9AJN1,374077,470782.859425,ERFoxYXUS2 +452192,127772.644847,PkRZ2BiqnR,277329,134067.655406,vRUFYJ8WrF +750587,886051.017871,zh4JJBO0rl,228858,397708.651535,csKYO3mex1 +135387,422867.958309,vduKikmslS,339179,307237.400635,uHxzlClj0Z +765248,711160.739199,ujj80m2QS0,60470,851228.860049,67fFgDbFyW +28184,347732.963677,iYcsJAUDQ7,143851,658421.449078,aMGmIMdakI +152224,733930.192626,ZQ3q5F7xjT,274779,267903.977440,lkviJagE9B +126734,208170.636175,wFhiVNfJN8,832989,775264.649069,55lTA5jCI3 +938987,749620.717381,LClVRdu4oA,84145,626157.836898,sQhH20fAsd +323573,174661.198189,6O94IcRQHB,957171,100658.789765,w5gR2d2Lp3 +498828,317953.892160,34GBoGmGsZ,207456,321703.674065,Mu85TwABxI +674144,39234.408268,uG0Ofp1gFg,766873,170497.971894,w1mLq8Z6BQ +648245,716752.058423,eaRgwTAPk5,279151,832898.165242,Ov2oI9ry5u +70467,687040.132640,MqSj6LK0xl,739185,967124.958624,WJsoqHaxr0 +108413,340541.805976,7YxZTISsui,676417,627359.288520,idbhMv0fQh +382736,170658.543381,zbAtrjghA1,660033,586389.792310,zi1TO7j01C +921968,3725.714237,gN0cHYASFc,170016,886092.693796,8XQC4PftCf +153513,723735.477667,ccNwbjDjGQ,634523,231899.184748,E8ul14Id2p +855880,942793.896895,iXHUS9VLBA,378780,138820.907459,8D3jr6Y651 +255016,817143.802606,wj6BUzsuyg,412112,478909.254277,oS4rijpL4L +557274,808248.596604,iMR3riJ7E6,512179,736480.608242,MLqVAuXjAo +52178,769280.414622,JAjvnpyDPn,261117,9472.038063,c8sUuEdcrG +244090,284025.668857,chAHOuPqb6,435602,955358.071318,2t1Nf2tMpn +134766,71192.293971,thFsE3hLGY,684685,368531.948709,pZx1c7s0ie +86367,410327.647594,0w89QrmHB7,350405,174794.176639,9nxFKu4lNz +292787,452327.855252,t4NWNQHIMw,424738,587252.197203,AYHkdpZKaQ +564480,190499.018885,90uCQvV4H1,860777,547642.255539,53x2fZMamv +946582,137137.940281,Ro8pCYAshq,929449,46853.094879,2ezMgrxEQy +974176,567922.426232,dojmm7Lo6A,733415,982722.489059,auTjsn88eI +982808,82071.053651,PazzO7fDIu,659227,765107.996687,vki1mSIQC4 +842519,898983.525406,1WGf8oDQK7,181302,427751.889742,9sw5owH5un +361465,210558.001695,T66LVS2Aar,877125,196915.755788,jUbztZZZXF +768608,242430.549612,4BryWklst3,875269,782354.837250,I2Pttmtc3T +604911,186213.468298,j3Hlu4mkA2,586216,798219.387977,btU5FTmHgx +379690,922078.447822,XvDj8tQCdS,382593,885923.453804,9bUa87szWI +85189,611698.705471,IWRHJMrVOo,665005,112447.642189,FkUkXXpSm4 +408239,513871.608177,48vT0ZVMN6,704331,246145.596576,RAAZ5Tonkj +835754,62608.307104,39aC8gUkuQ,918094,176939.434076,1Emr1Om5cl +473097,262932.951370,MVjSagW9jC,46643,59798.179131,3gp3p790mP +137140,504587.598015,6YvbolVwJI,520383,678185.900878,IJVcKBBFNG +531086,634709.645427,f1OiXaD8nB,566548,406718.141218,jfUocWRZ5I +393834,340799.595721,92vTRBqt9J,136441,977162.003482,DJas9Me4Ve +956229,287831.314464,YLbtMtd8Sq,815784,209482.128337,3ATnz2UqXW +21878,914720.143052,wfKXEDFe1B,103240,685614.535915,hJCU9D9RJe +121566,324339.906189,u3z8BrqAQt,162315,599302.322135,KNQFYOcKGK +837263,920712.134541,1ZI6zhDgEJ,668668,317600.938135,EtPPvlFjrX +779070,988598.946545,cP24PnOr79,940270,34697.619113,mgVRGk8L9u +772172,371537.267223,HDx6STGZhD,501934,852189.540630,16Mpk4BhpO +784001,456073.266436,ax2ZKAjzPH,144412,915314.429697,e3Rc29upiR +207803,95511.347831,QVPqMKRGnx,763166,886750.628637,OdeE5hakWd +833285,369767.211393,SnOsJNzW6z,431112,734499.460408,X3Z49Vfbic +927026,583539.873083,ksxnyFTPEd,286890,433029.161415,vHYyPbi1Xp +194003,553354.155236,fIR3qSyoqg,787960,720287.071652,ImwzbTGqke +90449,728113.709796,wru9XSD9gx,235719,97525.889061,NDcg7moKoj +92681,873612.182940,JCZQ1KWKR8,487128,957660.596807,rlO8tfnfLT +183157,723172.741173,omFjSVEgUo,416905,851729.066596,zgTDU3AUF6 +383673,339208.359406,Q6U3p4h24U,724602,15722.550605,IlSVfd46Pe +590547,253121.134578,VXXp4vXoWr,565021,453539.222358,mp0MSMIP4F +952492,572342.372502,c1vuqY7dvy,802534,928808.059702,plFJP2IXFv +394232,647302.385413,Wyn3MIxt9m,108090,766338.597777,WxHWlT2Vdt +697118,154234.111163,o3SmU08je1,168765,665877.005235,agZENzXEL0 +631991,971982.158506,jsXmnMwQFi,684982,202287.624613,9H5cDH6xjv +499641,227267.865147,sYOys3W1Ys,113173,123900.609768,eIbaxsyZkh +555930,167067.415788,KEv4zHerT0,413258,526285.450513,o13mJKOWhe +525031,156858.527563,0bLj4J7wS5,272442,855804.001881,XB8PpB5TAb +799894,549565.320757,EblrdXdQui,523964,72129.125955,gBatpVVefQ +545282,192793.940894,nnEgzM98zr,762346,263664.924090,gcnzOnMN4S +355048,380210.791122,G8ucnZSDIa,705124,134934.726069,sPurrypMc2 +475314,214322.309439,Lcw5drh0LQ,991235,806201.421799,yhV0yqjYM1 +102048,550074.901621,BuXIThKZVU,558746,376810.021295,zRdoDprmLu +34791,359444.012516,E22aMfim0t,177747,913533.394187,UK1tuS6Xrp +855408,815255.027214,LRRWdrtq22,52681,502252.964831,zIUAaeRXWl +508368,22195.728815,GENTFTnrwq,508279,289653.923808,3YiWZPCLY8 +153933,63017.394766,RLwShyIWdD,292721,492262.494385,5SkZsVAh5C +462589,3052.901648,dLBGnIM4cc,858534,351720.330993,DWfugjugK4 +813059,509696.698676,UgBcLQAYzW,467704,297251.082893,0uwFsBX5ej +418183,597913.565528,tlNtfkAeJP,316328,794475.323993,TVT0VvwIcr +518432,718302.284434,Abl71RRQno,573428,33641.742053,vmPAw5nh1s +521049,220387.391430,n0wCrBWc26,361194,338643.634572,6RAfIc5iCZ +894577,684220.389678,iUdim2ANRI,457627,525863.251884,BtALEe8OXk +138384,146027.949652,tW8WKg2cQJ,508122,254093.586729,pnIYDVgtIH +460655,126125.923365,8uirqmqJEG,183337,378986.246429,slZk17k5E9 +469069,953011.328712,HKbmpeOEyg,452786,918138.413308,ML7XB3OJAj +213147,721399.271983,d4aQqQLtqk,594648,521177.553900,0I4VMHMlZn +623286,306451.081543,EvbpwpQ1oO,297168,426299.699099,pvIggC9DaY +899990,369552.262012,XyA8AMPzoU,734785,454380.359831,7VKPz9KPb6 +717946,966558.347524,PdFxH5SXoT,237259,695295.926426,zgjRrkqkTS +90361,539314.967661,FJqlXFQYQm,542866,818720.328586,3CN61tY52N +566460,758619.641520,Cx2499vatc,633770,819445.514317,8OMXWmrTah +150245,126291.691831,I5n3kP74uL,938429,636862.566182,PqkEI2fane +961193,964250.450769,v24tyHHk4u,910228,623133.715615,RfZyroC5Ft +720856,271544.206650,t7lN9shuf6,377701,16052.271777,Y29Q3pSYbq +864480,992142.970401,jZBTICP31s,37167,601194.292768,7XyLD3hfUm +268138,401163.945007,ll6v913cgT,726707,159744.618846,LM8SfSbtJ2 +387046,361515.821128,dezWjIOQm8,498793,180097.071757,Th9AkRg7vX +702985,913010.051351,UHqpBr6Awm,440925,810347.979214,wxlMRuID35 +91770,817582.985835,nM6zONyJtS,108069,500254.369178,r2lgJJLxlo +585574,302500.775070,KozOB4w6za,136730,189914.755374,n0FCW0kppE +950619,88011.846484,ljN8BDjK2j,255144,34708.068987,1fu6fvr8t4 +366525,836697.349297,lQDvX0ocFE,215888,218294.612557,QUFqsty55z +932989,766820.629010,xAQgVoT3Pz,498896,238720.905370,dcSulp0gtl +111826,393062.030904,ZJEj7WWfR2,439089,228510.165986,To5XzU4KMv +206464,779066.814121,SfeuHCPU61,870345,112657.520591,lliSrDnfcX +194985,421941.665008,dQHJFW4El7,768408,407559.562429,Jfwjq6d0hZ +262820,399833.148216,1ZQsTRJ831,649982,286117.049730,3hNxeT6MUD +980888,3215.018632,hieUGpFsEd,938744,359710.619546,GB3E0rDlQz +445137,548473.061066,K2dMmxhKW1,594707,943795.253774,1RTfLm7fmt +760976,920828.323062,zwJVpg2PUb,804621,771366.200186,rJ42BiXsfO +67086,619913.037267,qIzzRgovlm,882863,302071.228011,rn2PImVkYC +916164,863895.551036,qV7KDL9Ubd,813872,664943.749588,YgsUIA9xfd +232872,992145.785292,hee20FUjvA,862273,637741.641872,DyFuTwClZO +949081,623263.047650,lxifTHnRXa,87426,816910.197482,OTdkrWwqRG +460414,520423.571444,nzfR92s10r,492565,796420.116587,jm8cCIsxjI +167661,469126.583736,RzAPNPDV2y,293922,622451.287740,7ndbhBvgqC +381268,784845.965976,us1RaVdfuu,73867,689317.370360,nFePHOHTkY +458264,336275.510053,U8dPIvA708,436099,881881.943073,58pKO2Bq8c +927453,383178.186323,xvdWsbHs4L,369778,992948.839082,qShV9XhvMk +396067,421724.282297,nXYP6ROwqZ,816032,408929.183137,e8uwVUyB63 +864797,665912.065134,PFjqZ9VyLL,599732,684150.151825,kwpZJciIP8 +489019,499390.140305,9ZvuVp53jS,356447,425540.451023,45xnT6HGGy +569396,524092.363800,AvnNg0uyss,578727,790034.898605,KUBUdop4w4 +735811,769947.761600,pgMFbvebYl,698897,676078.244646,gCIYTGWTzW +786530,643799.117413,UQjz6ae7Jo,3458,871934.901360,0SMqmmuEpU +775156,129133.503416,bTSD7ZUCtg,533570,34028.657287,i4JOocY2pH +744402,521263.264368,qdDVXklrF6,539701,564478.113737,LQJnjB9pHL +912691,260298.576108,Wtdkh9Edan,374056,171407.072903,h7D4nueGZb +917688,579766.459390,HSqNcdsuxP,118056,336510.538976,nhW3RZlAas +717485,308914.846459,Jt2qEBbm8o,293957,139733.269247,ibJnBHOQRi +846815,738428.019356,al48wepXs8,670088,818579.380830,OdRJO95dY2 +246565,533460.290496,ReNJriAtlr,150391,792141.908187,V0VjMvhLSY +5567,83693.116620,ofvW7p25h3,742731,871582.784071,KyFGDDJ9rP +411567,84538.861514,Ecq6pQNz9A,185692,644740.566022,ocX8zBqHSk +325673,526323.389997,ntoXWozTxd,707016,363755.418447,PlMsmi2F2s +958275,538766.704067,B6FnMuhWXO,963865,236220.011314,bWKpAXMKwS +743874,290816.789238,AlOkGVzUIh,844923,927546.927517,AaZEMDGp1W +646068,760457.742331,2kPrdKpWku,455883,983959.874146,VgXxg769wn +956779,39287.501988,wI3x1rj1Fj,578536,641850.339897,qIhjA8Lat1 +381334,337862.052149,wtaMz2Pfb1,466656,771786.057874,eJ4mDkQXVx +422979,196695.057000,JxXC6fFqXo,181008,205781.024624,Qob0pneFeh +734866,681376.690842,T63HIld2UC,644763,88177.651975,L8yKgCuy47 +97040,524947.431856,FgdGlV0Oa8,121556,750106.173678,cfe5XAfMNN +131683,439224.715919,3MEiGB5vhu,726845,605307.297909,UMPVPM1byN +664975,246540.929665,rucFkn2v0T,479703,989997.155686,ICWl1PJMrM +648251,495805.804686,2jB20wCLyr,753021,254401.634626,D8kef2MMJc +191471,100495.817317,jrx4ntPhBI,103731,954449.622483,7PF5Bl4b9P +862443,751172.197509,e87TgUd8zR,299361,298545.668398,SgZhWu4g97 +400930,979365.547697,LX7tSeToJp,829830,910742.616977,pbHNMTXKFU +40769,905040.547316,kqSttM2xbZ,224817,683021.232103,j073KVIDhY +369328,548225.457659,RgWWzONYm4,300095,315710.398821,WAzkrcqhV2 +929048,605994.764479,AY1g4gevB6,680726,288200.694204,AQKBgtSzTg +828261,128334.417946,w4KZOHbeYo,141462,12483.661237,SKoSAoPLQF +791277,211478.626582,9PTps8QquG,509339,277051.148720,1qyXswo732 +202788,20010.344112,qBav005D7r,836772,967284.873263,sT2DPZFnYi +897966,130346.412100,NM3mBo9Emf,560932,609935.883144,BhdbruAIZb +679897,68555.297583,s8mtq8HUwX,757353,324774.566895,QXB9qIKMM6 +160547,953151.165699,lKWKkZvuIR,356321,181078.184991,JQodP7PxQX +228526,136947.524299,kw9MOH5zlP,292002,591574.537395,XzCCY4sIz0 +453510,802923.940729,9KUmIdUIPq,29633,513959.688604,FI2OQAFNtM +226253,330888.877692,a75kGZcoa4,119444,843539.251359,u80i3icH3Q +145524,873570.409630,62KWZfBTKZ,405359,496505.146142,I6uZJkrTPJ +744866,188454.934242,EJssWsfe4X,805759,869864.424438,rKrdNY8Aei +803632,889184.183579,rEv8UUSeTL,636467,845875.600993,DGk9O5ttNM +707051,477821.463369,uctYvJhxSI,464178,658432.427436,xfTXE8bS5F +209563,980742.802397,6lkK64g1yZ,903984,643654.974281,R01gO4YkLe +138721,150642.265242,0Uwz5KoKnQ,766333,191992.135716,v5fwsLtPNt +223453,36577.524892,vnBVJ9o1pG,911354,545766.284173,RFszk18oEF +336461,583056.749636,xzZzTWIIt9,315123,475985.898984,tRTuxwoLYP +635898,102814.504812,4Ogu6zW85p,452687,696699.795630,wxRstlnwsu +525595,383830.210893,0h3Z0COGAh,926819,865044.063948,CoShV0tnD0 +806789,360179.834024,QJQnVsfa5T,197335,514202.047317,UeS1kxrgFY +255940,835552.202984,8QNT8yBJKG,494440,284430.713021,SS8ws3poLB +572293,462907.140745,lVZRRSsCEE,320556,233531.434549,EU9T148lzF +928483,101549.892795,8xE4R2Rwli,794359,942249.361411,laS4ALTb3Y +469591,358795.490324,HBZt4Q4I0M,973260,298879.364522,Ke6qCseRJ7 +839681,355333.391992,DUo3xoUDRO,898072,669012.586055,pI919Nts7r +507107,40275.091703,FnrocwZPzC,200256,577848.453705,oflu3SIIZu +585057,971772.036844,EVFsCjMzcb,639214,277056.194567,g70bDzawAW +81716,320433.894136,HJ5LYko3fH,812333,373896.871070,fs3iHBvIAx +924833,354330.271623,ZCx28pxtw5,261727,442101.594014,8kXIXJI7TB +16871,262825.475938,IVcu8OWZ8X,492606,574663.633393,Yc7dmDdvGQ +60800,382412.196473,Yp4ELcmpM4,856506,903578.811483,Z4BjKC9UfL +218643,174049.642093,OvlWV6wNjF,385488,377403.260250,t6KgmSVjSo +519493,367461.852420,tRYcpAChZ8,235595,800969.633555,ldwtHMSJ4F +306582,373547.365784,viloUVZ8OS,87504,736516.481881,NMof3VthKd +531657,888397.514188,sDiMe28LZH,609655,392720.953830,1HcXrSW5Dn +63030,528305.541579,JGDzl10BF7,101238,830327.414095,xqdMQMfWT3 +744373,81059.024321,Hj4Sdktxmd,327348,122710.287299,dkosg6xLbi +701060,999895.225717,x3y97jx5c1,30418,308200.790910,bQJETmH78G +675296,893889.949302,0hECZH7lrg,769002,902791.015949,1KvAbW0PcS +748629,740272.741723,2DGYHic9ne,110753,546673.757865,BDKXh4v5Ca +576824,90748.433873,yuScgUc9KK,260550,587703.406292,pWg4xHn1xf +596854,703448.590365,hVUBeaYoUB,870532,192169.644594,lqM4tCp20t +222921,508720.330369,z0xdJKcECq,135138,543417.683963,9eVDy1gRes +420810,41661.896170,6uo0reH4bk,89584,605797.748903,AvACzKjCu0 +702123,658272.220124,YiMch611KM,573235,134401.484196,Ud34OrAp2w +987414,365567.707277,aKpttjaMLv,83929,483223.033490,00f7HvKmU0 +363793,501810.368644,BPjL42bW63,463214,551432.859114,K1QafaLGVV +274655,594744.332239,sPOMbjef5h,867088,109760.321690,KzDvYqI2xX +472575,881943.195895,QCAp78FG6k,934753,607859.414835,S8chRhHHx5 +570111,713307.494993,zioILDzkXW,625589,7423.496147,LEIeGyRd0a +20192,111132.173168,qd9L3UhI67,264798,206664.632311,WgxwugLCgR +641547,65112.037994,2yQjhTQhbv,563809,764804.570675,5RjcKQZMpw +40435,439162.062648,dmDF25bJxT,191502,809983.695852,vObEAiBjCy +142968,938680.371116,L1kk3oHDip,237743,25755.589049,diKrXhNHpi +98510,177528.390310,kpGfkNEqnJ,668592,975394.715942,jhDnxRh9vK +304727,959122.725610,gOVDTwZuS0,42996,956070.559938,Nez9juc9aS +501036,823685.411782,X4PM8yTqk5,873204,868243.397956,vFgkR67XQ8 +127878,486105.717568,AvwmtwTl7c,325811,146564.467359,ImPWjgze5H +127494,656179.081540,aoOOAnDnpR,655461,875417.780188,Y3nYhoHnbD +566091,971387.778866,kXSBMyNkGa,277898,589721.962962,BZLn06WELf +363249,769701.099511,9WfLpN04tc,258155,303004.524409,E1sgodHZJj +230556,529170.680825,sJbBKXCIDI,806081,286530.000036,5r3JEJe6BN +800946,617186.449098,N0icpcBMCI,86397,18346.215627,iKMHc71YYq +244557,65066.364724,xqzbmFazy8,369873,879287.693485,nQDDyfnW7Z +134414,379765.973537,1Pie3sli6x,122392,670296.233982,IxYanVw1dG +293250,592712.074766,CMXa2KS4I4,205108,211942.809334,GARr9OvTQO +276320,505839.357929,jzOwypkQgJ,595174,220097.916744,F4nfjUjI2A +762605,367888.379352,wEQl4Nj2um,622179,611279.459388,mqCIiP59RZ +821616,492746.257323,Fbx9yvg2a9,198713,322372.125431,UFbSzcVxto +307379,876531.133061,JJEAywtUUx,603023,994464.185825,T6WVnOdLyK +495792,57657.028984,oGGUw16irB,151257,923585.187718,HJg13KiO0T +359552,80060.056129,ALQTWvaDvf,57099,35051.985074,DAY2bmzrgE +473742,511998.564680,SCIiEZ6sxu,970564,890293.132000,ZUdN3nymas +605923,254891.325159,V4oCLFok5T,569006,436716.720451,fZA7TGFn1r +51157,352629.524630,H0axTjnl5Y,222541,318039.990861,XcFBfDEgBz +103858,806696.529968,nMrQmO1AlU,735435,767112.795489,OJNrp4Qo2C +399832,990030.790702,YTq7UHtE0H,94326,374302.887500,vqpQhiFOoK +229110,152490.687150,SEttfEUkAs,943545,124899.134666,Wz1rWR6fXW +115671,986751.180373,VrtKsBWa5T,584465,440735.223658,sKpmiLSPED +687188,325564.272923,LjXCVct35c,5270,593036.513214,KXOxAk7fJ1 +931253,513757.348420,ocod0vBL5b,591062,312036.422739,Z2B0cpKAfU +527758,846187.732478,OplKf3DuG3,491400,440317.843243,HhVTTvHFad +226247,732326.775955,7wnOnbwXcC,225772,238695.495286,kecByUC5Hr +305327,590749.017609,HajkfFVH3V,772310,18365.539503,WhoyBobJ5B +543892,466508.691960,55dw7Rnh59,69987,492386.440899,pJwQGAyIbW +913115,287180.437427,Mvdudw3PmU,622747,763802.335023,KI6uvNkA25 +639085,999650.167922,zc7ibAL5iM,666263,217676.074889,nVAlAJx5AY +301497,46401.819232,W8G7LAH2VV,706388,48502.134073,biP7OOQGKd +853302,431021.933969,hx9Ng7cUjo,558647,654586.187788,88zmxVzuL7 +963223,349426.156948,NhNKMp5hJz,451115,510470.380440,xkMrKj3Mzy +392005,423430.332355,FDWjEb63tR,207460,309743.174754,UzbiPjzwYd +450186,269964.484242,ZikSNJMIQy,424344,675491.754133,7v95X5TRah +466352,82488.062737,L9dBNDGAN5,954817,254902.669514,M5RIDykhQF +204014,570670.277423,HatX7bfTUF,354656,672916.690457,kvmmnRhAdI +871295,233879.242762,ZICYGXB9sX,799053,563963.697355,8xsOCwV385 +563946,42425.145573,V4wumCHQqD,507547,946131.638893,vwRjOH8R7o +852580,129665.041361,ej3Bpyr95K,303085,787430.916528,yjhVodL1Dp +188236,457323.255270,v27XtXaTSe,918517,869987.289136,2KBEREEK5b +380045,372.673036,n233mJ8Dji,768081,262693.963828,m7cDurnbQx +508546,864476.127341,LO5uz8DahO,732375,818693.548142,RYnnqisxdw +194086,701240.329708,9KR76wbsss,71175,142481.155442,HXXVdYHp6z +43181,135586.751325,NbpreD14Kh,222485,605309.443183,R0oKH35RW4 +812274,125177.979756,HTe06Eol1p,556404,852099.722728,tY8NKcFKPk +132139,86544.773259,axC6kvZJ00,465679,296657.319073,XAA00SGiGX +771108,370534.056655,ox1gYXN7Z1,468179,595084.377065,D9Ns34ZNfs +297917,373147.378274,omsJhXVIcT,317664,262133.676209,6iBq30eq8R +962748,701476.342936,GA00bRHTS2,831706,477120.475133,CU1qMLJ4IC +697311,680038.393648,Nvu2vdRngn,907525,872045.189095,vHUPzxybXS +756160,192655.370980,zTy1AmGYk0,119542,81476.608465,PCuetkOoZa +373786,382257.046895,L1rDDUFMiQ,995327,101122.413256,o3I06GYXKW +462790,669249.855668,vcFIt6X8cu,676777,869386.544478,NQPcLWK1jE +68628,365743.704551,Vljye8ltDr,680861,724269.111178,8AuMnTKDBc +38238,599263.851081,pfJBLHTyit,977471,109221.000698,nBNGCNQn32 +899223,255670.856652,fJysaLaIm0,963708,856148.572107,hCCX1KaWZB +399225,256112.594763,lxdCX11KsM,303254,398042.709072,ecEgDDdGAC +585882,990145.168228,RrU13fpLmk,901741,823363.406095,QUh4hVEdqE +344157,888092.649647,aYGJyDhLVe,758190,481608.781681,eyqnA4GFVF +334570,431739.127409,xRVBdn5aTg,521926,434188.938369,goUphPrpBl +589006,489334.644935,bIMxc9YVVA,505731,249954.546829,0ASfsz0cfv +799662,424684.788832,GWRM2KsxDZ,522437,174972.290413,lP6bCLMnMy +54286,806077.439723,lzmKT4ZURZ,904319,402565.581634,uOP7bc9KGm +788070,166206.589768,6awliCNFS8,217871,506067.049799,mYrjiSYDWZ +43608,811526.008181,kj6KL1ASLY,774851,74797.211031,EuI8kF5fuG +248871,440518.484719,eM6szGf3d3,389879,365918.981497,t0vh4xAnoG +299210,34561.186318,HE70abJiex,321200,844134.441991,FbTEGLI7sK +788406,745341.471910,lnTc56bP20,995866,165280.462955,qA8jCEJ2AM +596918,405856.135200,pVChFr8Zwc,713292,920137.207131,AbJR9dx3xR +491071,192271.060528,g8AHzm0Jog,568943,65501.608352,8T6zXSqUCT +745568,902796.538020,95mgwfyX4K,525880,103535.310411,5NGgmYcMSc +447430,58281.660478,lvbTzO2JGb,388762,835154.811184,CBFnRjRiQW +509685,533164.384865,vlLkV5FDDn,261030,298836.759100,bNd6NzuoYY +153005,423436.008163,KwuM4a7adj,967440,353035.976153,kVs6DGyxcZ +39143,517682.942732,AMSSiiWE2f,428221,850344.457259,yRppoS3w69 +142066,707890.504358,0DO80DYM1m,936040,283716.447836,zFvmNLHbdw +794538,155995.680949,DDTdRJoea5,318817,467529.140167,9IXvNMuDOu +825275,34860.786414,EhCVkiGaMC,963800,601135.634275,aeYKZwDuLw +850805,652520.680429,Rk2Mg9cYVV,480297,353574.624467,fxKe8moFQ4 +746731,965837.791998,RG7CEfPaud,777946,174058.908070,3baRpJVn6R +487906,176030.172484,bffT78nNBl,933486,614383.028025,7B7zfHEfNQ +734594,707301.671008,NkKKbREs4A,203535,512761.681001,7oIWr2k4UL +58274,648685.962657,KO4dPbrrF9,830529,410954.675286,E8rckv33Qd +613005,827918.446675,49wh6JRcPt,219106,817465.908221,aqU1a5KxrL +724278,861043.275911,o2SqaEicox,525900,728570.327709,WhYvckrpcg +774539,191615.105373,YqMzidOvtD,532174,402110.713335,iOxpQGGmvI +728465,122163.160359,MCGNq5rh4g,672886,110599.100210,2qWNoROVST +742931,746254.269553,ETDDW3oVIW,923332,499603.322573,jhWvq1yU4d +48590,58931.411264,Rh5tdyN1iW,583736,404347.425442,83FmZ3FJlv +539003,536772.737215,2E7wHpp8Df,137915,7078.041974,7TJn9naZ9F +117495,179016.904194,9o7S3f7CJW,748090,580412.658404,FN8b1G4Lhj +246907,997354.183771,OHF55pP8w8,434194,873654.549543,lTimLz7jaA +454462,847469.093681,TFX4cQkvQ4,882316,485580.067509,gwxILc46go +30450,169937.902210,cEk2FVBypk,415613,969392.571391,PhnPVVxQvx +103844,521008.653201,3Vou5YCkqv,80681,474474.312278,KX0c7qbS21 +513652,113098.965213,Y3D8sr2Zxw,62343,58224.884026,1x7Jet4FzC +567479,359897.305872,SaTpkd3Q7l,632280,998833.575216,sHjtxrHg8Q +881389,894290.990622,tOW7oTBAoM,758010,9676.244019,sGvK2o3Qhb +435300,626603.820281,p34jmBtmcK,116834,298401.291893,K24M5t4vG6 +750813,957956.386862,uLeHVI6V80,231892,271240.631726,hgBXe2xIYc +519950,64441.823740,oyJswm764o,614029,95409.822018,psCW6WNdsx +531550,243449.435950,ZfaNxgP4Zm,139355,450164.443620,YJN9G6Kfdo +323035,873510.152766,wvfNozq0Ui,238148,25636.570554,Z8Js6tlyFD +321493,689927.306258,wfFfLllpSg,442934,128186.533094,jWW6Kxrfw2 +477775,781852.426277,GtK2lixqeF,65680,754852.258702,PzUNMQALY9 +933705,811210.049246,mS6uVDSDLQ,519628,205331.135777,PEte6m9Z7t +680330,282203.443230,WGGUtJ1JAp,638729,33139.068820,3FY0vVmfUT +313995,609204.035297,5XyQBXSVTU,270133,313882.455348,QmRugEYoyk +740207,421902.867631,JISQYYyDh7,879464,846729.521723,dk6jJdL9Y2 +253782,138572.542065,8LYkgXLId9,262249,186683.719238,qRSGsPqg6P +767313,991352.100598,pwOchggDde,365382,545945.158141,OJkt1LhACS +635944,156314.076380,kCfcA6LlRV,43749,449720.466483,x45GVv1X78 +713822,101462.652649,bD3jQnFqDu,798190,929040.234017,TGOQCPX4lD +796660,189517.689166,nsE3JmqpBC,873953,184674.484978,Ckzg4NrprL +404641,700673.831733,ygTExqUSOW,346500,906602.083424,RIn2SGTbnT +499402,937661.140360,agMZ0Dznjt,749752,795359.907896,6h86rbOW4Q +909071,569385.353547,Yj7cKaC9B6,69627,781809.677896,ooWUz06PMF +160326,139480.530612,W1a9UKeL3o,678849,819057.954948,hsTLgydlQq +58942,908421.018032,rBnoaL1rpv,969810,754273.622376,n3lerlvKSu +260625,88283.604174,DIoPhZtIj1,87698,1758.565774,mR9PEs7PH6 +990664,907746.031611,XQh43G8WMk,972149,535865.324110,BF3tA21Z6U +177182,392133.982921,RzSgKS9kiM,567952,91869.675131,s3M2A3ZYkh +337143,482331.748490,lVtYCMHpUX,746824,252484.277672,XCQKkKrjeV +364622,292642.397959,p5spcwrbtC,907089,732023.359566,HwfaU9sQB9 +4982,281874.435218,r2TFXuTp65,217996,553284.668414,JWsRq8kRAq +90525,25338.720212,JKQKYuGRbH,645539,931943.980115,jfimf42ePP +25554,369891.055305,20rOfc3efq,932907,267892.474600,ZYevwIfWIr +30686,44856.117293,6CR8jyryg7,259543,97542.929544,pKLmjk7QOz +750132,353114.415535,i93CYQRwYE,803634,490973.000171,2WpuCHu7ab +666686,365050.307395,JJ0BaDO6Jr,613683,320375.442095,c7bWhxkyMz +827468,961168.161520,Yl6sXsHjdX,932346,41063.423261,JnTI6PTJNk +140373,310288.591181,0O2NPiw59X,350267,862837.640117,dbmzHn8N1t +967531,837673.569757,WhMQDbibCb,770705,271044.666359,giiP3Eif0t +785454,449171.412033,EZGyZGZJUC,434756,573473.565317,3cjVqiL6hE +839454,902355.891023,O3c5seYI4v,236004,636172.268376,hD7afEfMsU +418628,780011.595724,Qo2FRoRkUN,259877,454183.968522,ihXNzBJXt3 +10182,241343.897834,A0DkDznLqH,817355,963050.170303,62oNWX5ZYa +284791,374944.918128,qpLlXI9sWP,772975,414533.041072,6YD0oZ2cYv +676539,235311.010864,CNdTdW6yD6,304044,660929.934719,cbkOFKE50o +36248,238388.859506,XdQy8FPXSR,46557,946671.160553,Eqp5eshZD5 +122597,994724.942146,vM9NS2sMQI,573722,667109.301261,KxK4sz1cv4 +561845,380825.589571,xeDTj2Dqau,104985,51490.499596,Q4rCSBjoSO +123591,252282.537966,F2qMvYnspX,854728,352557.153400,xogfzk9eYX +657341,892016.212882,W5PJoVPq82,782709,530973.689952,Gk8RP6X5SL +796459,316147.853802,DojwMJdyhc,414083,379969.565818,lYo9HeJWdh +746477,750798.030252,iR58kbLmWJ,803812,266939.106837,mtfvLUceb1 +804323,638743.646179,phxGGh1NGc,754412,729537.769956,C92Dbqu4go +84513,685096.132290,Rv0FdXivdy,150203,296687.419652,UJhWbGic7x +722907,258811.423233,aM18stIGxy,19557,155952.614048,2CkIU5lYiP +566021,249685.097499,wR4aoeyJhr,38515,828460.160135,zYcQNcBwEM +9739,991537.973231,4JVLJC2u2L,165120,919315.467961,PyKGwPofQd +769645,197638.950197,gV2cR3kxBe,159322,84986.833021,3J722seiXf +239912,81191.180595,BExutyfjeQ,989992,906157.730385,CxWHsEVHR2 +330214,998049.693229,QuWSb0SJJf,26124,913620.837095,n0Q6joefko +474311,181601.481289,Gj3EY304Vp,648144,94790.015771,U78JwhhVqo +792957,284504.527371,RWDFgupamD,889565,746931.713713,BUWuWSefTa +402509,950083.907039,zsHhMuNxer,725680,233491.998772,OC0nS9MIWM +91251,474740.962695,S8kXFwPEin,349996,61061.895150,XEkPEzgTEn +374013,46998.931631,XdMiY3UVcG,891728,532760.844235,YOMqGF7WTn +669316,172112.588476,KteQWvkbsp,113683,771824.655315,ZUjF0V4YBB +871213,580070.051672,xXsi7oHtdH,807574,830324.534185,t8W8bJDH2C +58658,354617.488579,pMdfQjpFeB,183715,583264.599037,3DoV7xEboS +795166,491650.544508,Uo85pk3XgM,332042,959852.384618,yVlMCIZK23 +736144,87374.052830,i8bCjJbJ4R,518466,888729.754883,mSI8R0oh22 +694022,875830.084998,B3msBKWxYP,743797,308529.786026,jODxrirn0O +836110,811786.082870,e98nLPXzxP,305444,721297.275208,pfNSLiOEp6 +511518,666520.624704,t377ea8rID,936425,744233.890173,i025Ni93Z6 +94366,172140.101957,EzQK9fZTbH,518665,790555.856974,eKzRFjYsMS +706584,216402.656633,mvc1QBnEAA,66194,74743.733380,X7qmm4SeFP +55776,63393.408515,rTBY3gjAYZ,553519,247186.697338,Z8x3wCOZMh +934900,846482.910706,2GPfflQmho,535802,703595.654524,IZ3bEmbKll +981860,833946.933158,k0RYniqcIK,240379,295558.256467,93ZJo4twrr +997481,184673.014700,I9UkFtszrv,616276,794236.892808,6CFttnV4gp +392540,903515.558743,7ahcQgtnJs,202279,192678.193727,u45SK5p1o7 +604078,184442.281316,EtlDqNuKtV,455020,147917.541744,fOktFvZFKj +803,937221.589917,Y0vlcyKppU,173374,597735.053080,3Buw6M0U09 +679385,303357.939476,PBGLEZ9x5p,193490,499002.655429,wUPjK0dj8N +294255,215461.253017,N9rcthDz22,857678,171979.756204,32JgtmnV9u +415401,707635.926742,9fgFg6yiaU,869502,240630.625979,sJbxwWymDI +721470,323521.146045,dTod95Qxr5,972734,768466.737619,vCNGLQjTN3 +130806,505456.644703,7yI6uo0wgS,660881,110369.507508,RgkLKd6vw6 +736543,857573.014842,bVcjXFbKdP,225494,871224.068378,WS2FsRiddc +597722,20785.382536,8eCMceAPhZ,96063,617726.804503,JG6NiU9bgy +651038,596651.659888,pqysMGuW3y,313533,468504.288121,gk1PEEmVya +531850,971220.522615,q28A3R486N,472608,340975.361368,5YGM1btdyQ +704348,223489.539127,okh2TQxfZt,714406,776608.411040,FaJPVpFd47 +991995,256869.836135,AJAmGRwGJy,950498,732162.737672,37j8luQkQ3 +795145,10263.409700,sG8TWRAHaK,65028,840799.379796,cM1dG7eWq1 +121511,432365.195843,1v0cz7Jnq0,807315,44875.669026,q5AqO2vM66 +616902,389746.136512,5Cs4Qurvvw,711309,915437.745170,yxcDS4sqw9 +602330,780993.754225,NzhOx2zEx1,234981,640792.697669,QEqGfO6D9f +848332,22275.748080,Y9ZOKQyKYI,385598,776017.702954,APru0OidHU +147845,396727.703086,p2FlQEvXI4,862617,216205.092205,BQyIyMaVm6 +100722,62667.452029,U4w1bo3kd1,330465,964383.316856,9UuCqIdLHu +723222,555672.976076,9HDkS6Fs5G,630238,333099.463744,kgOxYFT23X +16563,70263.970896,dYfuUMyhhY,986447,162626.598574,JYS2d4MBkT +296220,130922.346514,zOruHunPCJ,519253,634356.531355,tvnd2aNjja +772315,362587.067125,JqN2aKAmTh,705636,162692.058156,PJdFsUEfnb +21349,293295.013989,4HiF83ZW50,348306,593972.641123,p0bRh2R33n +53750,955806.399758,l2cSQzOdNC,130369,522284.770220,iWYSygfREm +364790,757016.816875,1CLLg3VdQ3,966422,583489.068774,lL5dVmiy2d +181080,147193.554142,3zHhsUTrzc,39798,735105.568826,bd8R9BkgUo +162218,527658.465704,Skc910qv51,670893,85927.417600,Ac3iaT9PPD +474616,757526.746138,LHek7wBWwQ,363552,966753.296329,1GdY4HzH8i +346720,641990.602396,SNMV7TO7zO,492397,724074.405156,6jnPYPCSxG +515368,909515.125501,FcPWVAXhAQ,147706,173558.853064,qr3dE2ZibK +847474,178268.971654,eAlKHwpL8r,406002,301089.797586,0FCOQeKqy9 +677807,205152.679508,H0vD6PyJa7,716252,176506.755346,noaq7N8NX4 +540084,728426.275228,piIbFPtYjF,78320,310832.226554,fMSXVREtiY +797114,1587.265593,Umtk7wGo2L,585702,163451.295253,3m1753oO80 +563482,493734.557564,BkhqLrQDZI,569004,650072.238185,otPO5D3FUp +563794,282297.193712,L2DujoOb9s,128469,832904.839582,LmUu4gwIx4 +796588,304706.697234,DJzuxa297l,824225,121815.646156,48vZ2PFT1h +35512,65272.185527,ttf6scnbeI,59942,814175.918008,91LsZEkoFb +658562,159110.001670,xxyyMIZ1xm,636330,700515.165855,FAHoarlZT1 +659375,638410.829510,I9wWQg5E6O,892873,495446.064786,HAXwA4eKg3 +318244,127416.819628,k2n4vDqFLl,41739,583235.657280,fJXRDWAvAM +238681,804430.876901,E7bSwjvnjL,565084,810494.914382,2hRk2RE8au +66663,154173.822717,jxtVUZzp8b,890965,887869.198746,cUhuKzwtlS +134253,277035.999458,8q80zumlfU,907975,702720.487567,cJVWdteBTr +132424,300124.435403,PVPB9tBNaa,855876,793350.782354,q1LGCVimgq +706040,149066.436184,4CCWj2tOj2,39054,487630.241923,MEe1e879FK +577423,29674.723440,6KpUjk9A3o,148531,552856.198462,zP7base94t +790558,833498.376843,cFAMKJaC6T,872808,845244.424061,7BMpichYW3 +984406,929126.779312,Y8pV6kq75I,484019,509036.206325,UztONSCS8i +234280,634399.094563,lMugioIpdC,947117,218908.994950,zvRIESHosc +389845,835782.719845,hG4TkUhTrd,571577,192827.519758,TT0CYD3heU +520473,24791.130517,gdXDNhWym6,232467,974516.616539,grTwJo7ior +163886,366014.129753,3HhS1UnMny,608348,749340.345750,bHOMERpaEP +667872,628710.856576,QuaLVGyD7b,153203,72608.839227,VVmJ0s3FeN +525059,187806.005578,iv3ku0dth6,892463,715728.215041,WUAELzpddw +378872,870291.761408,675JrR2PXQ,449154,466870.184764,KJx7HyGBE7 +925132,707977.682100,ANCUiQ8qsi,593578,871562.809302,9fSpmaQ2Pa +73439,620647.000879,fjcvxerF2Y,732536,662780.184668,3pDYzaUyop +789944,1544.598913,ZYoRsABnOs,727088,518503.636630,3S4qlJYcbg +607390,912272.187140,fo0F8X2zzI,830479,389032.065558,D5k8TxkDY0 +941480,782034.212436,Z4ElxXvcec,627174,43150.534604,zz1g3W6eBc +704015,385612.010919,SG9zkx9z2z,483325,930458.146182,NcOiKsReTc +26582,841644.979071,TcyIcpbpM2,576725,372484.471062,8bYV6SJACA +506526,178627.489237,i4Y86zEhIQ,291334,664368.056549,zRy4667w48 +2559,589018.131205,b2fjXdnsvP,800653,85902.967228,nnezfGdR3H +190761,852264.618817,telmSkOXpA,509290,456634.743934,IK71vyFCSo +536834,965932.317392,BQfgFv2gAh,800800,910075.265795,nsGDFFkajv +414258,768382.853612,MlirZ8zvhK,721014,984143.313254,3iJhfbI4Kq +529022,956105.879181,lgvlECaUxt,931599,468100.380168,48akoQmzw7 +945711,664876.736689,Q2nPP8hI5I,741128,471933.195374,vKGDtkCbxB +342979,697736.175151,qFplYo4J3h,364382,133324.659996,SYeP72xqLd +620249,57854.539006,Dh4EU6CqJ6,43927,671970.813454,u71cfTHrQM +167869,236506.775065,hINdJBrRms,412322,167865.476653,9wtpCvQqNX +228745,82744.783977,3un3D8YXKZ,805479,618573.740725,vpZs3gYCgl +895768,34843.757056,UwH3vzfgOC,868924,239838.549189,9CaK83rWoH +681453,939605.075165,duMgQ0BW3q,151423,883335.983370,vPHJRCgH5I +263902,942155.017789,zn4H4NaWYM,478676,597213.152378,0relrNP4If +511807,722173.056139,uPfGzlxdZt,585543,310338.066226,ep2HUdSq3E +269114,399049.028266,ygLeILuVup,353715,29438.603383,HOZN6XV4EE +106852,186487.181982,QN9AJ9YpHs,853803,426291.492481,2fSUWyF63L +442266,563008.459441,gze9NN6muZ,162297,663659.559406,wKllyqhdGJ +961498,19490.349625,KIRv8JLLQ0,504446,416097.566350,LWzoQMAhAl +944487,183193.690574,UgArK2uc3U,653181,862481.747283,YnKlxCdiQu +759624,990699.799153,KtMDFoCNA0,679618,486003.210642,BW9Jan63iM +349522,125189.417350,LU5o0YWVRL,188537,84214.315618,4trhtC1JbS +873707,764828.862259,kxxYdg4pwG,872608,185529.577774,vwntEsuLaC +937373,967489.311847,NCA4bWdDLI,119711,695694.306347,gCcf2bpMjP +126669,281930.915288,WXv8zCErlR,936359,818646.038634,fnbyyxLQI4 +706613,433006.309140,9MRgIn2XKj,802973,229126.987609,KDq6F07Jqg +50756,678776.818598,dpYEnwBQlR,452310,854728.205164,awqcmYeaCZ +831161,47575.000929,m1QTVEO1CW,559687,930800.276264,3MRqGzffJq +113460,622898.406301,gIpbEZ21nl,794196,476554.576573,bXVHOOhLJA +698375,543004.869307,hr9J14mSKh,536890,338236.215294,9ymWJTK7eM +582906,127967.299822,Zpb79hFwhX,640092,285524.140966,Icyfmx1sJd +427664,939720.878346,7QPKGTSK4Q,377482,751704.350118,cYuWA8Y3fw +479467,251664.573357,x7qBpAowot,608049,987238.390590,03ghsaEvxk +41410,57686.367729,Wq1riVrDdg,295798,3240.693185,dDToQOQXdz +750289,456663.074953,BcIZtuwdCt,568197,672661.540079,3pbDwxTKEL +876359,874172.752777,KO9qCTT67S,400019,131516.398133,xPC77Fgy51 +42583,724762.983508,k1xDkVUuW7,761279,884375.217553,ffHnPR8qjt +947840,733813.400553,AYu5SJbY0N,274977,20349.045268,WDrmxZfFfb +284327,165224.384321,ZhtYgkpb6i,662480,397453.412697,tRhWE16cfo +697420,501143.165239,XljsJLLjpE,298777,104419.846988,vie1M7MIWx +805913,283063.874481,vf5LkSPuM4,288044,425163.046178,aWymNAoezn +82103,716283.561482,DoutuMxerz,187768,444037.051378,J8GaScX0O0 +151152,914774.605172,7r3xw3dg7L,861961,519172.978352,9qlbDOMWYA +662186,561243.038373,uylXjgxOJr,219112,209056.692355,FjUJ8iMnxo +551001,522952.959683,gPvx07BUkI,504645,588071.406037,Dml7P3ibik +181443,859867.153227,LUvsvrsca2,322223,901440.086690,prYFr09XyC +933960,937651.807639,BK0p6oRv8l,483809,519984.346830,1eq2zMbAH3 +153914,83966.257716,Sr3vH4PVx1,788381,50869.348823,ITpBShKzvT +27136,647591.133658,zVbCHkHjG0,954670,472714.177040,LE1NcRUYpc +788852,218819.911165,DCcS9QWWTJ,372990,579130.464869,PDqM7uopxW +418477,407923.822102,atoLUGHT9O,365894,814643.423182,UmxpcqyzLP +939491,697609.011540,YMt0zno37X,641269,784335.219710,RwZo3UU5Yh +418520,552862.162832,uDchHnKye4,276001,57161.088072,SwHhbKhjeT +433154,245054.691810,D4mC0toExE,679404,511017.941881,K9AR0MXIvW +500592,61247.556456,bfiyAw7fdJ,42800,557937.197367,LUBJ6X6JdJ +138196,439707.294477,tGLI5aog4Z,276911,476138.699204,DwJtR7d4Tg +330971,236796.209075,qdvSzBDyeX,118116,276237.765824,KstvXPuiBm +596158,911659.707672,tm7LIwdYB1,630074,520875.937240,n16xO01X0b +595531,205288.242556,fNjaBFOQvF,118365,89765.652799,cPJDxkn1FQ +645141,348310.262050,Tzkqd22jDK,171635,690531.067745,cTqXChkKzx +150690,607592.466011,uDm03YY57p,744406,485927.001506,U9pSidwo6L +642894,546467.813157,Hs9D28athy,891017,362771.531290,RNLjhZYKf9 +449976,74393.703280,yiN4BJsayr,139846,472224.525277,eQFWENDNtC +752908,921342.890294,pjZcCIFIh0,495792,220188.926307,TMGsBSnCdF +297640,266938.804760,Vz9Ac8FFYD,624187,573043.398541,2hdLPlyrJ0 +588745,542763.654255,dr7R3rMski,720900,988567.199310,hmFySscDAb +461180,209808.320350,vTrnC5uXCN,730723,106750.045227,wbfRHnJXZr +392165,908834.082533,XZKVtKjZSV,204689,440443.279878,p354x5QyC1 +318415,17739.870748,2XjMueina0,926051,285203.876183,3riZrnEvvh +278460,797788.469434,IuPfIb0yvg,203012,488500.161023,whyIyvQuFD +739618,704905.393010,3r9uHE2xw8,995523,870929.527773,bEkaeBgPjb +382081,518965.251102,TKBbjYpjOK,158133,799236.394827,J08WNyo6Il +529266,427260.804527,nGbzW9oqvD,740911,68988.535191,PlYGWmt2MV +837750,798609.091564,gXhD9aubS9,615690,838959.792537,AUBxNzEkij +662333,374607.854640,pTv9IH4VQi,447934,295828.454720,q7FVCglGNL +699708,564642.786153,Pis5m7pQcQ,118068,152638.971022,LjxAnDjyq1 +936839,523064.618788,k6Sr1lYwTP,653503,830150.389752,8Qfi4a18T5 +470430,637664.386401,rQSp0FvlnY,358284,392905.235781,ZOr6LRaAWY +630662,986662.452813,rn1bOR0BJe,715976,781023.032062,z6XAuBT1wm +31318,102978.494719,e8q0ITkoV8,954257,697065.095862,vF8hGk06Vq +200859,898902.441696,zrpiWpa4MX,79196,993986.233257,4kX2h0PPoq +226043,505083.064362,ny0QHjrREi,193006,848320.645726,wq2QBMWYkb +175589,735138.576871,V437mI4ObD,581548,811660.968382,YaWlD7uc9O +169140,336875.216752,LQyVD4LCLR,250361,806097.437705,aJcBS5zndA +886323,209936.906094,Pgq4pNNfMs,645436,598339.026154,GZ6GpJnyf3 +458596,30309.951437,hApS4Ah15x,669806,976606.045726,9EUJRGeQvF +697683,141255.530384,xZTfhu5Zew,563556,133568.982405,4vMmMqARSq +21096,49465.777872,ViO95WibOQ,321970,59473.955277,nfsdALeAyo +924022,221508.941225,MvvqsntXu8,277109,754989.395244,1OLMb0fR1w +238065,471178.440169,zDWA8KkClT,573224,984511.069046,h5ulPegVqG +265720,505592.835398,p6TgQ1zx6y,889682,360744.971581,8g0Y1PqpXZ +381413,460246.512783,GCgAPIoP1H,361631,390802.943815,FcTYErAfd0 +722739,430230.040890,c6b47zBcgG,739625,612491.835971,NcJrjKlIaI +547501,667692.051479,MG7zeVxD4X,962846,5041.723789,pVoK7uPRnS +838532,561760.978334,HJlCHYHIbE,569215,360252.734702,DBTWnaUxxf +47805,714210.659428,8GLmFrj970,438196,464851.808477,ckWoSLoTEY +232397,811823.863103,H4mMApXfYD,493587,844431.808630,bEZw5IngTd +191366,114615.654685,vPFmeZDj7y,717688,551970.345338,cm2Sl9smEw +595409,445809.100768,8GNTmK3iEN,362693,659279.721962,wqbBM9fip8 +12093,622525.173928,3cACzkO4ti,559610,875550.014983,r3f4SwaJpc +398577,173123.614596,C01G1XpjG1,754756,911508.801296,Sx4peogxEJ +678584,242245.707236,LZbutXcSFQ,444230,697527.463606,sjKTZiaG1a +244126,327169.588031,TRTM7SLifc,89639,433760.486961,N7nA7N0Z1U +503112,423340.409324,5NDlLFOp0Z,821173,445510.697206,ztl7I9TGru +819481,3097.178702,zgW0VzRoEN,495060,710147.128955,0EQxEXZUle +300081,66837.351147,OBbgkgkhLi,296836,812044.332319,oWL7ZSyLen +923207,219013.713604,3nRyYhjQ62,217433,4541.144658,JoTkfStlqn +313729,778365.292172,PyKDCi4q4y,318905,61866.410781,8aQG468sPO +729172,1907.409959,kd2TUJI9GD,240376,494465.245937,CXdaKBZN45 +884871,572874.515037,pnC5f0nJrQ,213599,243231.117687,ikDjbTiFZp +330346,336306.292677,NEMdFzLSJs,923014,213207.829133,UjMyZnIUMG +898980,287924.063639,kSufmiYeuD,658245,745728.393669,7IcezZMXnR +44208,790610.353229,w2HZru73L2,375888,435053.962653,u0UbOlGlGr +905068,462924.636683,vHGfMzFLzX,515875,177145.798436,nB3zrSXA8x +757994,694309.263869,ofIqCdcc2p,78881,781871.675132,ONPyc1gDmu +920358,532496.971165,iezWQzuAxP,840592,289936.058372,bNgW7EMBO2 +670709,654145.008669,4bQYaNsP4F,808374,794894.814906,SbQn1NaFRL +820673,451489.043399,xdUFOwLolr,12843,242047.890187,jp6DX2KP5t +589259,67249.887258,2QoZENyW4p,644019,544325.740484,ytvXdSanlo +964906,962601.781335,UUw0oiPOwg,53977,611250.706446,4VGig3As3e +842504,124600.734714,WSvrdYSaLR,330884,681194.717643,DvFSIYXh9U +411244,540768.077260,msWMTxXBSy,425761,446580.301463,AQfikFeh6K +152020,166527.817073,PC07nz3aot,438334,880452.743864,OSwBF6Xq7P +844867,797258.056892,HMxVEQJb2z,550180,694369.359886,fg5BiDlMe0 +526959,718815.910179,SDzmMzGfZE,334470,716428.683256,CJHwSKrExd +684805,653975.895312,aBjwFpKkrS,692187,219271.161231,mxq7VweCB1 +259802,380128.153989,XBwPP9gljT,571222,988092.455967,OrHMK4HyYq +154679,801249.641451,GQbxoIsKAh,406690,815638.704537,e0huidQveJ +332425,448766.961921,palnTFFoCZ,621426,688996.990233,ZgbulkA7WY +385062,679000.546936,Gy5kPqYz6e,352650,993982.781563,aL0YXgFudy +613371,245795.480829,DWEg52DLrC,899127,774125.471277,0fkDmaQaMI +858742,612807.835855,enk6QdHGoQ,166045,483781.005119,0qxAEn2l1Y +967990,999538.276292,V8bgLltYFc,743443,213728.487249,c1SC7L27JD +423413,945103.934162,cI4JvmxfpM,740418,685001.412653,hJZP394Z7P +501173,733813.306856,68bWQibgLK,258317,526679.930443,Viu5SbyyJo +887316,577511.929669,iTg00adu8g,659226,676029.491699,Vv2hYawa5n +60639,571234.022416,d3T5c2ELyp,936223,603826.554254,uMlQP74RWn +499931,221050.009109,1O5N1yxlUy,403937,385981.996650,L0TBTnvs9Y +531269,757141.269695,SUFSOREGl5,903490,304547.544357,VYrQAptR0G +450250,840186.600840,enayv73awA,643329,320493.235572,J8ReUfHgiW +926915,440341.480935,62XfM4o4pO,111288,851028.186747,QDvcn58NW9 +435707,566590.298433,5bpWYXmAvj,158874,748844.618847,hF7J53Vht4 +839017,998963.707013,hlhFWkKp3q,331753,43720.135234,r5IjYx3hGv +305121,854153.633546,FV2ekqLEjq,371353,788490.598267,yL7YB2Bu22 +598515,581442.504752,wrQr4HW8w8,288730,515903.961483,NuYeI9XRvK +7581,224288.888211,xKgKFiMLmc,93174,113415.911930,fobms7uH6b +717367,247943.259946,VxUuUy7Sst,447584,811777.362639,BYGjGO56F3 +294868,567672.526276,soVnW9VkQx,246497,90005.444768,B81mCGrmrf +460469,353214.527392,BE2XZ4RcjY,470553,343793.699124,JAxtjW6iCd +805697,281052.046069,aK7jMFjmNP,259804,18287.830566,OAejEW8iiq +219974,201920.580003,ejt6CPrXeQ,407125,144214.967500,rxm5aYaS1h +695073,477332.474545,FDHeNKHULf,438820,41140.101016,fePNe7cuAT +162207,527955.361561,a1fIjHqX71,595107,757374.650578,xTVBYnfABa +149038,430716.880163,702VSPO2Ww,575909,624028.918032,sLzzYiIWf4 +53775,70563.916713,JSesebfeWI,129159,81880.513433,sjGFkzrZwY +559909,735714.028746,rIzY4gEy7u,260214,80421.764133,FoqGc1t4PW +12081,793484.519948,OaTAsxwKgv,579111,208630.152558,DNvUxVcOhJ +761149,115556.320431,Dwym3pftm0,346015,959125.200703,JwEx8wx5AX +966710,622701.927367,uoN6Ux3Yjx,324468,948902.456605,Jckv054bJX +168314,829792.521065,7t9rQ2puU7,997228,272890.482917,Fa5g824bkz +509719,452696.622843,4FPBomvli0,547450,332432.124050,jgJZAWVUhu +638396,555903.393686,pmA8o6Z4CY,427690,352533.621217,ihy3qNYAoo +996065,984015.423843,hn9tHGuF4O,527067,93582.447571,y7oeiUonsh +895642,475566.603501,1GynyVWA24,607023,302459.808064,CLJZBnMKJ2 +636388,252896.437412,sK1KqS1Tnb,915504,171559.134227,hoJgpk1CmT +854531,607971.894308,PGD2qUj2OJ,245629,951809.580140,ysxyR2fm44 +914401,579816.809062,vnOs3o6bOa,139551,686310.294022,cRosavfUnn +153920,454562.018611,QSwdINJu3C,893852,293310.838947,ZXrLIaF8u0 +115551,630684.352413,E2ixYRo0QB,506465,696895.770841,pzoPpEvOCm +140904,83012.536125,qTELIrZMhX,771284,949818.327382,7o6GAGOORg +604141,202346.913730,J4RkglqcfN,718112,221658.105721,Dh6AIBlMYJ +905838,503119.376263,ULWTuEimCd,124651,67463.815128,KPIvx9V56s +962886,140989.139550,UjrAzVFcez,872266,612512.597207,0FhzWSoytX +970524,597603.450880,VJMvWcLV2D,894398,451339.296617,bOF8TJvkWN +141080,443944.156497,NppYwNE01r,425784,239629.971339,woddxGH5u4 +998239,655269.407449,Zxvsn7sBGK,489377,701881.990291,bI3lWSyAZ0 +128596,53267.969389,JZOBNTR50x,839179,205315.967567,z1aen4oWyf +763077,41779.928212,eMWwCbX0Xy,74404,521247.435269,l0r4778aof +157604,78234.637120,JId6VnqeXJ,677768,54688.241042,v4adrPRbJn +65115,582954.735447,49eOZFlsio,135790,810641.116077,QaoC0vvCHw +608633,641867.159018,O0CqmqeN1G,864276,830198.747380,G26ldiJrz2 +881851,776773.175540,VF975yg238,221155,554712.033247,rCA2BM5xqY +641047,707299.022115,8zexTYhkQ9,534006,248969.813425,MswGjICTA7 +572642,928363.462278,Qzn5ybeMzn,666853,240837.642705,KbJeQSfwEI +850183,705288.344013,kY8eLk8c50,254881,877457.090056,NyR2r1mg5S +909465,235032.608638,SKc82I7Kkb,724605,220150.611396,7CeTgw1ZQa +938391,176494.084222,uzCtFTjrrN,825968,824367.867018,eZWhVwfpOU +515321,648412.735695,jNA8R7rvlH,240759,377439.492093,GrBAcDZq0k +188372,595107.986116,EQeMJ0kcut,480883,692749.772703,BW7PdwNBwx +140496,631765.432070,aOwK3757gy,420773,909130.951736,47W7Tk0kNd +116723,684578.520603,puLwhWn6bA,122137,545066.419669,7R9JjvBt46 +314209,383794.796090,sq0umkbXun,576463,482399.859833,6UMaJ0XLUQ +401564,903036.058443,spvFEmEndT,779531,186429.691335,w2NFOT734t +855484,619874.083562,hkZclLmHHe,882964,20988.126909,6Ssuz0x4sN +151257,415139.439440,y4vCSw5pHk,682282,639042.897972,7ScC3WhiXU +280784,984781.379969,YRHUGSJdQD,715501,889942.350111,0TIG5B9tWP +763592,671601.747704,NaDdtGtaQS,602037,278220.328621,JPf5dk9aAU +644414,387262.222673,TLOzxU8BUd,465578,4825.233600,KNw9ncAork +198018,90258.299690,q7NAKtzCJe,602184,851577.259159,vtfwIuwUsR +735848,74883.742130,EhBAIQfsQJ,939791,878398.947362,e5ca7bJWSL +884086,73538.332290,ZNeDndtnZB,706330,805970.935718,XWSyVpw5am +16228,438991.324027,YZo7OE1jGj,181946,343590.042269,rVjFvVZvDx +365662,796950.823998,Jnc4iX1Njx,827039,943907.734934,RUz04idl52 +81166,424544.234214,6v6b1snZk8,472422,357056.846590,Jf0EapUY6g +661783,958128.054567,mGsPvQjVfE,279267,942969.251323,hJsHxCbAG2 +149275,653803.903024,4Mcw4wcAFs,469637,263785.083653,i5gpwdFMGQ +892061,364860.786589,pYXhh9Jx4u,707794,408308.521292,L9ca2oyU7c +241574,700649.564922,RlRJIouMKy,334620,976553.114134,3ouoCcxfBg +401121,124762.466811,M5HSeqNsZV,886573,99086.632410,ebS9Ce6wNo +197691,89704.772555,k8R8dTEOpE,218607,522440.588973,F4Ggx6iDU1 +467070,200302.514334,soh7hMEkJ7,148173,568911.948107,OJbL1ILQSI +413298,768463.045967,U3qES8osjX,712775,811207.663250,h5lDECSWMx +144822,869185.369413,DdPmtPtNca,907516,82711.541924,MFLSwqOKnw +956943,728288.976974,0v07mM5png,717443,122903.206133,oDSIlRp2ue +452061,247554.280911,vNXQO0AinA,158584,173340.437882,4tCnbPhn66 +465865,381579.676170,jcayqVmPFU,522278,466895.156671,QrLawvqsCV +24537,952413.305969,GB3XHC80uZ,595051,958120.503947,iXg4eKecBM +189965,600614.947215,o339N5HR39,558811,938885.652487,nh6fnVSfn4 +762988,337332.435946,dDSpfMm52p,52850,22130.214938,elpVEnjm7c +907775,138022.526442,ZqpUCjrcsK,190387,204130.579669,ZqZt3d3CJu +533385,592293.106367,wMZpWjQ0Hr,594993,608269.874713,FzgkMY7W1I +821153,332289.755341,qadiL5OypW,261910,565947.291860,NPkorgwQgo +820761,728417.215278,QVzU3UQ8YJ,164868,361920.881250,1RGxvtCtXR +716863,512346.396897,RFFJkiKstG,423040,783445.371550,m3u9At7BcU +247758,87450.995461,UmtrB2ip5n,198748,493997.165815,tanoFdNV4V +832299,187178.318563,Hi5jESiICK,482609,353403.752851,edyR039Bp0 +419271,364997.983326,qRiP0i8bKq,583045,87283.236454,7dEgNdf3dK +106080,645537.517459,WxRoEbRTeu,926788,711450.325247,Y0FmfT2R6U +908013,664810.375494,Hf0DrgTTGY,492213,926099.365467,e045xPGhYH +778200,30163.441256,G7fRe3uRdv,424318,165509.674001,2PPDcroevt +466798,154608.518371,hNlX7vtMOU,376867,630419.298246,VDIVBI5qcn +334682,890605.394202,Qi4XVSYQt2,5495,739663.027661,ZHOEPClWfs +459562,272492.558646,MxojDDar6R,429535,475609.139540,UVowzqSoYW +734149,542030.011848,UiIeHKHk7s,281096,720675.791954,51vLsu2L8b +367816,544424.135764,Qf3BgNleIH,582215,139991.407700,Gp4472lZwm +695948,116354.865891,ivDOcDB9f7,303644,675600.165370,xymW7VJSxP +367660,927793.355131,shaKEgUyhh,95790,812907.487653,umQwtvI2Rj +64991,289752.942764,52nU5ORCHY,250134,341692.219650,jLhixLQO4u +42312,84829.127165,UASOVwFsWK,375131,894764.709196,N2FmdL78m5 +984541,490130.716152,a9TG5K8smA,724949,256649.346875,UH4lWURwsB +871451,913171.349827,epnDCUOHpz,435207,620112.306203,y5IpyhFKuA +51073,210404.843194,ZxxgANopJQ,787521,288802.931290,8wGWEbWdUG +861350,312775.870798,4Z3sk4PE5x,989791,734901.622831,oP1Tz91SKh +439196,512118.511280,p1F2t7ST1i,881384,235515.191812,CNPfwxfByg +997994,794230.473874,G7kDpzFQK4,145224,978522.043926,Aggk3dtTl6 +742764,711466.801579,Qk0xWmhlXU,80243,768946.957291,XiVvVyjite +640376,797319.866422,YfxhGzz8e5,805720,189997.980525,uxGlnm6rLw +3325,419039.656593,2UPnvbvokf,757336,968383.983852,BrJHPL6ho8 +894619,289586.054193,51ypZJlcDq,727080,742371.314417,D169MQgIHC +782820,354152.436232,FjytDC2FMQ,623912,914397.892816,VVofwsgxfj +588591,360967.270435,Wtr7ba2ik9,249035,756527.793170,we6HHCFmCc +80637,890812.857796,CLm02ll5S0,677272,907778.152712,NZP1UFOXC7 +592885,512084.461223,kAG5kNL6wS,173182,154905.305059,AIDSGz5jik +426412,356262.920990,V4hErinH2A,904752,491504.841537,jp1bJ1UasZ +538001,569230.602752,kyHQq6ozQf,673368,50461.581110,4QdTMaYtEG +537110,369922.303664,rzICqcNAKs,741064,984564.730439,CJnxYCE3L3 +975498,464351.247572,al9lzKoO7k,139166,695384.229245,WwFSsUcZpL +417422,640892.702559,UOj3MUuDGk,486384,896185.766585,rZnqLocAXn +376998,611134.567616,03EW009nMR,507839,757046.536270,8sOWOF23Jj +229133,944001.839429,27JMgtuPEM,596049,900809.590399,qvOfxuiSXt +442536,514770.449745,fJgLAuoiBq,36974,970683.327271,Ujin2K5RVv +224619,865164.173091,6nNd9UeJ5x,867195,743671.628550,OTavO8z7EO +131797,504238.608315,kLmTNRZs1H,109464,163689.120319,f8jAY3GOJq +729741,110048.017944,IbBJrK4Rom,215892,811484.771594,p3G6QlWao4 +857924,673030.355032,SpsgvpGgBx,110590,856827.325171,4qYnuea5Fi +867043,29176.704198,VJsQwv0cmI,31904,582456.002598,q5kWefcYjz +531391,604582.908520,i8pzpdH1jf,491223,918602.055865,ThNhe8u12a +695943,723119.177161,eNSZWG5BRZ,882900,189920.059073,qqsfLBHhJv +924100,73884.650517,Jqh4mIpUnC,513577,248599.677994,RCryd8foEW +527082,717389.212598,tQQhIJ5zSM,175249,555013.630367,0nkUzpbpG0 +235187,13713.220084,PBI5t1MSH6,491035,654482.939871,0K9OHkJTFc +290438,402098.232365,XTV6t0oZ87,764234,300339.926039,njNCHsNeSC +13663,24941.982491,vpI6CdgxQx,841586,473456.240041,nJafE0vG0j +64681,363906.995804,uKyaypglBU,883904,454286.876802,UkqP8Etv2Z +766909,247948.192487,EeUlXYj8M1,977984,637711.573136,KfOfChwHkI +732787,750642.582768,ZqRFnDJoUd,721289,344033.447463,IcxQYoru6I +149525,323457.050560,L9RLb8o5Ta,241721,526237.758108,eQkbwITlbk +426788,953975.631790,QekbbDEbZE,997049,56235.788487,eIcz4bXFrG +166710,285947.012880,qBpzXkbjom,996140,230637.976955,rNLCbRhi75 +884210,459307.526251,7tUjH1cpsZ,188369,883740.015928,4cqoP1DZtX +845800,376627.354476,RCkDFtRSWj,813265,933501.289697,ZKuzmkxytd +458333,405176.077939,BpJkgHCREX,218190,205431.174237,UkLVWp1tDT +572660,229717.306192,VAbHN3CCnV,562886,783154.150342,UYghm2AFSL +699463,219763.751134,xLRsOuyXFl,77725,393857.711918,J3KPn081dx +196660,782358.577137,ub1erVER5n,355516,925194.927921,uWXZqYMg6b +598748,589174.462366,Z76jZZEEvF,366262,681455.999132,baunaqS95d +630994,732030.222619,oxDAq2WJ4r,836752,920270.278499,SPakGWzqBW +641817,159360.357491,wPAX3A0cdH,769557,442408.039775,zwLihScb95 +625138,437713.574392,PJ2VgeBPX4,747942,371153.118497,dXCFgKrECc +61580,727400.551304,TfXrvlmSXK,758673,55915.130838,PO0SDZ9Y5F +548919,852216.053878,QtHODel93C,134840,289995.780194,xnA4WGB7Ug +574640,225315.669757,rAdFEvUa4k,159974,809663.625153,0OnYGwspR8 +321195,542276.250406,v0Ka00JV0N,239548,451635.918096,aDpJcC8kMV +48299,365977.474373,n9cmA1oXgR,32904,815298.572383,oIx9aBSptO +627697,933867.512035,zlzhFsOGPu,313188,414684.266700,w6KCc5eBaD +996520,910773.099681,KUqGkglp2B,583291,631968.708840,FimvtsfoNa +779964,380154.452888,M5lxKvy1Ig,562670,639507.843822,r6uNT48W3t +554499,599542.095193,icIjg39kP8,89501,803494.090099,EMDfWPUzw0 +283139,950166.448635,hvxvbcXUIy,116184,176115.560469,pGBsty6HEx +816414,917038.759306,GxFjNdnriw,801362,406994.900859,ESVS2yGd9n +254320,408877.613016,98lGR3I4LN,574611,18748.617911,XG2jy4otjs +524372,666362.761431,6dZPb689ee,375064,801133.383713,lS1s1JTLu8 +187386,754232.585438,DgYQKdGW5o,43596,948757.264876,G1fE7A0YH6 +757887,451813.754433,00hHrBmAwC,862500,363219.871967,uRslaVISm8 +956573,510611.514436,cAI32EwHPK,517023,272773.254935,xQMHCzqUNT +634374,682172.417956,kiTFaNeFlo,192341,901024.424937,r8grb430gR +415603,662869.818449,YJXx3MPbOG,994378,15790.044273,mGJRih8VEs +874111,181120.668266,EMLsI3Ut92,243796,124903.413485,5zrVcrx3oz +739287,766397.890259,HiCciAYSOI,875027,518242.277914,jgyx8urVTV +589399,51672.698881,rxDscB6zLq,820728,798861.735283,SWHRkENJbW +742474,347903.094416,Yo38HOzgjv,246596,531241.027964,HrvlI4h7p3 +51121,410749.206769,oa8PRAKLKQ,293989,287605.968540,OnItNucenl +105106,795999.766236,lpwy7ghBtn,858314,69238.802773,nl1LYQqiQH +860740,373362.048116,jgUZAdB8i3,160468,36942.786511,JxsCsjbRev +883875,79189.455686,eJQSqLJ3lt,364044,105064.933831,GcFMd6Vnvd +585828,679926.851674,73OqMeNg4x,544980,880874.086873,9LBz6heNIq +927228,852177.970691,xuW2iS1NQ3,687267,210502.857796,IrCmroiMze +700636,735171.813876,y5QJDjTbVu,142284,649724.708716,in6hhX6uox +400106,649407.751289,qx8crHSRqJ,520476,643224.941441,7kE3uHksMk +189729,785897.144626,zD4vn0AA5b,695836,56463.044244,iV2lpjfxuK +142200,440301.535036,brtDDxteja,687535,638840.104721,viQFr3vTcU +596048,990317.051796,11ew9JXCYf,555810,690528.901782,qdHW1aB5F9 +865516,991589.230171,d1SIbjcQbJ,354661,515205.272794,pPKvk4zEN0 +45592,352317.331738,xc2eKYHaUW,700756,667840.303152,Dj1uJkUNQj +790901,829619.129009,xq8sq4DSws,522146,432143.770465,oFWNBs3hLU +430158,529436.071116,rRQCfUKVkx,360744,42023.731702,RVTE6xoVCG +202244,121987.388129,9YgSFYH95m,677811,127605.552435,4bRxJG6WQC +673116,848789.756078,BVKHEFHpCx,325766,702557.240462,m7PFiVBJJZ +194402,542931.233147,EMK3AoOOWB,447872,297647.402616,O5klr5tbxZ +84795,72446.184417,GafQviZ0b4,970503,661312.279769,DsZHnu5lTE +713426,856081.648258,PJOomWcmGb,669356,807237.811049,b6SitTN4AW +949688,280262.300797,iGo5PMPX11,782987,785868.843430,xTydundr5K +168043,778739.514746,oYigTEVhGR,478719,227592.475134,byVdpGCeAU +918034,40517.745607,fVv2VoEgIA,667640,708077.261739,w4G3bLgj9D +124925,213525.375095,EdyICU8vzt,277036,451612.229771,emAEPfNw0t +705679,255553.767145,PrRgAU5JWy,592160,51178.833614,LM1tr2zIrD +901429,146158.692742,uSNLOeRSbo,367993,11346.839365,I2tzI0rEBW +82004,962735.256682,doTBPROKvE,139715,41693.239892,RgcAdFb5zk +593464,352135.319849,ZK2TsxQ5qy,822262,686606.509235,BhNbLW9FY5 +663805,440903.610111,VFepRAXKyz,847613,605406.829373,cbUxoR2KfI +638434,316952.682934,d8Dnf4Pofm,110003,45183.648998,oH2EdGIzgm +438694,850624.789311,ujqJ4PiOpQ,911159,469666.148171,FiHbqeuryF +267921,267302.185282,8t0oyI68WU,542223,16545.831364,q5PmuDJMyo +736407,834101.782510,0Iw3ZyY5L3,127957,345151.499271,t7TER5c5cd +685578,24560.896246,a7M7Lbj8Kw,404412,178273.598505,anyVrpHAV2 +274640,745250.517228,8ZsbBmoXc8,833385,83276.108221,r01Ialb9eM +148840,684241.117993,IWL0al7yxd,745577,948031.474065,dbZPOcrhi0 +210670,504985.082556,tBTf0Bwfdt,731335,347850.691670,MYJO0cHJHK +395099,467640.757056,rSVs2xuNky,532717,998832.740057,EK6oXAO13Q +193063,540870.875413,srPerRg9Nh,433799,750382.565315,6eXt8X6IML +704176,160669.050795,aoO7szqbPi,412191,733321.191481,CIZILtaHC6 +975631,267750.913060,t4F2ix45Ec,644251,933593.460908,yGaAqGiBlF +108946,534570.076634,5uaOwnpzsl,4522,344216.968606,bscqUg3hPX +986331,573522.010378,Swm6u8OpDc,275441,315438.798443,UpiwxcwArS +647490,634665.276082,Ysyt4zjlV0,38996,533569.398163,8bwucohczz +37762,237363.583284,x6sBLjXZGG,560704,156891.873737,BUUM2B46bE +28622,735607.428624,nSEyxMDfsj,393306,871432.983994,vTLja1geRo +598562,297087.456810,7cs9LOfr83,940460,686118.906290,ehCUmiP8bJ +852597,204241.550896,MHyQIDWF1i,509314,347328.356579,7mlosw3crD +581053,975978.693638,ufmv1p5vXq,734740,95938.251312,kwtlnevhWh +509534,107366.534174,7MWDweddWH,317165,563955.296674,GUbU55JE0T +613493,32880.926001,7RRlAzURVN,646178,58006.188920,whYKd7edhy +12655,791237.130228,mWgGGmI4XR,129880,814825.154780,gwOzjq3xI6 +574226,827840.473371,4niSjXpGe8,409735,58158.860553,QNusK7iAFr +911483,954999.406611,NHXpz3jlP9,137375,626264.525963,MmmbaJUjtv +882594,160076.737092,GlbAc1vDKf,10420,733084.447070,HoYZYjLjrL +88554,797630.310826,RxBGsnKNxp,592595,325225.547219,BwF6y1umpP +751686,41695.061612,gPte8oMWTp,145489,467410.796727,UvEwCGrVyG +510284,333426.763044,uU8dzdStY5,103435,759370.546592,odIVqEf1gK +775510,229843.262727,21vYoK7Q9P,833356,675986.117478,BzS1KmPRjf +844894,864063.597436,g3nOTzQLda,397748,97242.354644,rSdDqtKeyX +2965,654714.275948,rqVTqbRdS7,7143,885444.540059,rnk93jJ1p7 +20,4927.444921,REwPh7DYx3,472701,237985.619760,SptKrjnC4U +284573,163087.419818,cWs8n0YCvM,997097,788629.748227,AlS81reY33 +309032,834042.970948,iXYCrvJ9lN,416829,176254.001747,TWCL8dzKrt +248585,784880.482917,mnadP3N2yy,961038,798608.925896,rtYs7yiLCa +233271,698590.089017,nGJizGX84E,474298,765502.534419,PLqCquCbA9 +452366,487256.142667,lG1QFCPohH,197936,975769.791323,Ty8giL7ayz +569007,293783.143239,CMRTqiq8li,742468,22798.105129,aQzCM6umJG +920253,889846.868120,dmEDY9yhFr,497587,547912.956156,xWbB8Q5pN8 +934692,945150.997221,53qOPUpp2l,326401,432177.434704,hgneiL4sKF +797802,15117.132685,8yPsqDSF2y,52089,3561.550518,c8xQXI3ZZo +842414,697238.375468,xpnO4FboqJ,629420,916172.469045,k7gXfifXZW +490607,550599.877351,w6NPWTROTp,509970,942173.272398,AhA8XP5Stg +933877,816208.366227,ghXnbYNbVn,907502,549859.177867,iXOfE6YlMA +222876,504148.432138,ujDOw2taec,320509,868534.024956,iYVnBoVIeE +456397,620713.367997,viXunKIoFm,748364,125631.193174,R7jdvQNKS5 +516541,669548.343485,tK45bqUfGX,86928,39734.846422,O3H47KpEim +163746,734003.852879,qa9uXio4GF,655677,325191.315813,CaTQ4v3xpu +543161,462345.796139,aQneyxfUtN,98090,214528.150273,QvCNfcwLKx +157741,174517.850456,qidFXih3rT,179525,226414.409922,4dOIistlR8 +744007,200082.005461,Re3VVrIPQZ,423474,240086.871932,uix3O073Zz +672876,471481.526649,bOgvzi0oGB,179117,290.528909,oEHA3nLPvT +442525,687746.677307,onszb1HDxy,443980,91679.199151,kUyvfriQlG +209672,202296.985137,imGrXv7sfy,27482,238321.527476,8oW7sO4Wte +177374,186039.329553,Ej4Dmz33en,420712,726303.895408,ZLa09IWEOk +482716,479987.211791,6QNml2i4wm,391034,120681.645303,1WByrau5gt +885894,774515.090717,4QfKHeX7R0,12509,910516.800912,uKtsShVuuc +37041,462582.562194,dHMniX0g5b,381126,706474.738872,OxV0CUYImH +678553,77154.041329,Wh9SxLkfM2,946725,210406.025550,A1nI5VmWts +496153,922357.811373,POkAfgQABY,384371,717648.508601,MZtAh4C3Is +332397,469291.389578,u11mGLiTvk,558312,556042.091093,p8OxM9zTOG +164989,580138.705827,NvncXEMddi,657875,41916.122724,vcgGg2I9ma +130639,609736.511411,5uT3WTUB7B,367711,970947.670749,BnOgqEQ0sV +44629,89377.589847,hmpvbMxn5v,557557,162062.576685,2FOHITDmah +472583,518623.817384,jJ2kVnTdcL,472111,17562.427713,o2cibDncqM +400767,614337.841311,mUrSLGWWqQ,33829,368688.075759,KHuG81cJ4I +803948,690973.448900,IzYEpCU5KL,477648,564815.737235,ZV6wO6ZiTO +391471,932987.918118,ehnntQ9HBt,635611,545924.126863,nJV1VWXirB +858046,364542.062756,PUS8Px9Kgh,130438,838610.546514,D6CC1Em51I +684771,593987.702205,4FRTEkyx40,360322,496338.343541,xpNByGCZjO +126225,394453.035858,lN4PpzIrjt,312713,277787.524425,SmNpR1F3Mf +356410,65152.317896,gcN7Euq5nC,696115,724803.080072,LquBsjsrT7 +705211,177251.273392,QLNU1Vr6C5,797919,4047.108295,ZbCHr2ei7z +553499,486368.909848,RW6mf6Ds2c,267923,487099.708040,9VeoUZCt8h +434793,731521.287113,Jmvp9LE7QW,154998,743305.848390,7NxKBAY5Hr +831887,596474.716297,02tctY3twE,486164,109128.292120,E2PU9FHnLb +491939,933644.914812,P4KF1NyRIx,632033,715901.599618,LtTRmzoUG7 +730817,227643.686714,neqDsQFzzT,707111,108928.018602,P0bTHoCdCq +760912,353276.438946,mnvYZ8sT01,308782,181296.714361,z6xiLYxBVO +1824,864936.733898,fAyYpohY79,820153,700706.656284,mwMjHDfJHK +881493,373877.675515,bno5NT0lZT,984155,102615.814198,Boai5U1zES +784602,628985.195672,T01oWQumKW,1189,956281.152857,lAQ8PC11p7 +83984,310736.716772,GyWJz4tpYu,743276,275632.613506,kOe1Lt39hx +975012,846524.352750,ghCnrknqap,307552,603371.047502,QlC5lO4jFc +817166,514084.473388,bOdjoOhbbc,370816,797630.287398,cYzifOf8zA +153094,931557.567545,Mjy5OWsLID,383973,56558.445975,mFNFmyOyHw +995037,92868.102761,XVouhYaMPg,955190,437470.901783,lhYWBp458V +405668,175999.524939,xc1xcjjRwc,138321,288615.865634,KPl2haPymA +122332,212692.837116,qbO52A5P6f,151146,754557.825173,sZG2brBgOV +262096,571695.270591,MmqkQdY9pl,19062,63238.914243,SVtRpqTJPw +95076,55698.401003,DZbO4CHlar,133897,794022.694470,JzO7I2ETfY +438143,992982.261715,9SzYHgRCx9,977037,305590.383760,zLoMOFacGa +523245,200207.559669,ODTrPcF5eK,500974,486826.574603,Y4gAWkRfXH +849609,206421.487299,YTKDlEDg5O,506309,682095.398709,krJd9PnK46 +771803,418975.093523,ZNQdx6OZWg,828023,322085.014693,XsZoW53rB3 +428707,657498.614139,r7bo7hfVxL,646015,857294.809137,JvgKoAbpRV +4146,876733.106260,UNIGlMuqYb,942236,446704.560572,z3RWVY05O8 +37135,99039.446588,8Zw2Y3aC3p,536414,238521.170484,ENI61HcMN3 +807921,601604.096822,bFnSaoIpif,473892,321258.301427,7EU3Z0P2Pd +992659,33825.758219,NE2fCwoX1U,418492,907484.056819,qP2NsGlC0g +594535,305878.795968,sfTslGV2gT,81778,258830.964892,ueTJxFdfSw +808949,658540.899291,OT69gVFT2k,843106,856339.026777,74skEhxDv4 +125969,850879.186056,IbqcBhpwaL,888252,395992.950913,dKGqA2Q5ej +566712,885598.107923,YI7a9R4BAL,582765,133790.587753,C0lSPcNf7v +304499,439101.754494,HnNj1eOjoM,58679,975357.068535,7wABWzumb8 +61771,110712.857714,bSrr0kbuRf,993370,725183.028951,75SiLJMhCX +408285,28350.284344,7tlm0DHMO6,763216,74102.731776,EBbYWDK93Q +721753,498375.771767,7VKqVSqSBZ,343044,518162.950202,fGIUHGulBe +640212,155200.759687,p5kdm0zt9E,386596,506085.170751,vlGpDfzSZi +391053,791185.456245,1J0Y3ml2XK,15663,126026.952130,nleJH2YS3X +604674,186559.898798,UFtKqglaN9,741352,833964.814276,nX5KpnmnN8 +537818,882387.975274,n2ibzWlRJg,652001,682555.270661,47oRKcWVIs +948522,446757.540189,8BmpgMnJkH,704854,29245.971180,UvLy7M2Fkp +681827,732700.001342,zMcGMpDTAk,20577,111397.994886,h32zbzQGDf +194312,886352.463837,bMsS6AeSdk,214142,704953.239456,YqiqucsNPw +317890,331592.458275,71XXDHNKIX,863790,922328.408622,y5lgJu13fe +499405,995070.864143,AvbjcWw1i6,575231,548218.840277,k6wGud7toX +590846,399293.656701,Evn6z1EyeM,226098,847878.771304,xfLx9qVMBi +815394,998683.179822,EsPUSdLQWt,992992,251711.538848,ZH4OOUOs4r +770178,809253.504751,PfWcPDvlPF,94584,181266.342687,TInAKDGIl5 +502234,993007.647738,6llntwlbyN,90919,782018.065117,V8SfUPnzun +386382,443851.010416,dDCmOHof9m,275354,446399.278599,H4IyiVuOX5 +22652,759141.113764,6fXNFK3PxJ,747762,430009.350339,oTBTAhud4G +314048,154206.754381,mJFalxfRmo,874264,57804.967292,O4dG31I1H4 +45261,489792.490554,k7vsNnuNV6,231298,914703.715349,HzQnvRtqMA +705283,114992.809568,EmAWEBFSxM,566002,727061.453486,VgZBUpoc8o +610671,127318.321959,84nqBftYuC,155718,798575.991501,CsFqHOk5Em +84829,77949.961218,5FkbsNTsCe,345509,745711.143088,FGuFAQMziX +680635,989982.543261,P9yHD47YcW,131252,34261.706077,TNwSSmre8J +52160,624482.851522,YeKlIsrwuW,654807,74462.714120,uGlmFz8Id4 +196872,692533.829635,z7Llw6Wcjs,219942,325879.519323,j4UXQxJWDX +918477,634617.626327,FqzzFwCZap,362368,394863.939449,6ibGYFxldM +201501,146322.217461,5BtyoVfutF,414254,396501.029519,nQxuxguOeS +497771,579915.156435,xs3FqaGcn0,428451,191466.532083,24CR4r4vQz +697730,155733.905732,2rXC1zFasS,804608,672046.510657,mjsLrMaMos +340703,604235.152266,vahpQo642r,683674,674265.759454,dWqSkqhtW9 +722560,725183.677942,wWGZjIArsx,295648,247584.977292,7vID1o4vqt +164607,553241.704212,IFEyyfcplH,216800,758018.504928,9v9zJ59bo2 +629463,705759.786948,zc6oyaK4qq,227295,585052.484170,vpZK1dSr4O +373875,436687.837204,aW4K55UDB0,16113,635166.523989,PReIROMXV5 +66998,550574.401420,TKSrowv39f,644930,279093.306857,qrxKREYbTA +635607,141537.000343,bv0t6Ku3WN,911173,663682.501971,ADKWd6m4di +828235,849959.369748,Eu7PQ0BGe4,994411,771362.380735,pTwuIOMLBV +768952,235723.766553,IvhDNQmaRO,83135,452547.041914,ugDYpuluSq +67583,841350.897692,0BqnNfljAJ,88936,705098.391761,XrYrN1A7bY +265349,738200.801231,sKMyZVzEiA,299649,503903.784841,Qsesep4Piy +817049,687874.271029,QzBTZHWxHo,151685,198722.075464,mR7hlK4zB9 +492549,659437.947344,AEhJydkpOi,660529,433468.539826,xbmtkv0A1F +222887,513876.919604,ImdcSbGMTf,90097,985613.290356,mZ0llstThK +396797,205747.150627,viVKCSBtaU,152331,834745.061777,5P5vOaUsds +396951,938958.195919,x86Hr8J84Q,409416,238380.727498,V490nsOI52 +79633,652625.082697,4zfuF2xksi,618683,447133.495707,uLBlKNJOSA +206518,695822.411818,KqgpieZ8xc,630002,29904.696075,d5swWQ7tAU +87746,835717.700601,yEtOKKqdfu,720128,120739.759321,rbHGp24wx7 +700938,824118.326458,rYpiiiTm2e,637214,580192.365048,blkxMmzkt0 +935368,8102.606871,l3L56eh5bT,828833,958958.784297,4IQB0S9RZY +17003,868923.294699,sd4RmQlDJf,420383,899440.277981,EjDixoaQRp +196142,568356.038537,bYZBQKL4Wn,244317,182228.094777,ZzR6TqLUgl +241237,69145.519402,NppMi5luXf,936479,367887.572106,AuxGitS8KL +156194,975469.865379,dumQuozZk7,226208,801345.063537,qP9ZbexkCs +59393,965987.768950,7LL5UcuzEt,650061,159616.440763,hTJAIruoaK +650582,265568.570298,BfZZlHZTrf,522206,577152.945477,79rQJpYPNz +82066,290124.945783,XkxTQfRctl,272483,694031.198953,lUlcLs5hpO +315245,698449.859398,Vmz5GngYpv,600632,246034.979734,fpNK8DvmcE +558622,968651.551030,03Rg30R85Y,64197,663684.349752,1h1tnGhlF1 +238784,249143.908767,HOLcgsGZ2B,43676,589482.982369,OckJ9jlpOb +872077,292732.583419,5eLiumvy8t,975184,699427.916366,A4cb6slrz4 +395240,903544.290449,jIc5TZWrzi,488546,238169.443817,UsGD5konl4 +450690,645299.078472,8Vb68vuzdY,375876,188272.108406,VRx4iQb0Ib +142489,86578.441445,MZx6e5jXMv,732850,805780.811805,g9TYXGjo4X +520984,986488.063932,HnjURK0hQ8,238902,940089.783123,G5E3el0a8w +744256,395471.261703,l4GsXVxCao,555498,308197.803685,4O0Nr4Mh1o +421564,342930.888283,psZyekMKMY,761335,652119.132009,nE5ZzZ6eFk +869417,818641.950127,UPjgq9JFFn,78125,857033.936657,JXBarg4wwE +96109,824942.515118,xsEwitBOlO,747746,632543.901299,jU7TuBaZZ9 +413392,259208.140331,agN6a9j6xG,666969,588507.085421,FqBfKcm8Rj +358209,257805.753917,r2ZVqrZ0h9,875433,921025.427821,WNzCr37BRL +288632,122961.231334,ONnfyjdUzi,830842,64276.861331,MvUwXPF6KL +373508,481437.689555,Xi4cNFhEWn,708057,796072.668113,bkhMiqYdj8 +593860,43634.639215,0pmxcVbxEh,406292,219667.958719,2ImcyAnOZl +329726,44893.351139,kfleDIA5wf,730180,121822.735668,obQaXsKgy3 +783081,302376.371337,8XeuHlLSLf,759235,894235.951880,zuQi2ANZFJ +30768,530031.774306,HXOJ4ulX6d,856060,100957.857604,5WRpeX0zYx +465846,428909.085245,EXJDqTPYmi,433949,191553.817414,qB7SqWzDsJ +860855,105176.402243,0f31hQw5xB,408375,651045.704341,Ccd1tR13ZY +110976,420618.039471,dGtnFcA0s8,77408,984939.834847,feW9ZAhq5y +558096,552363.799261,cpQjnNjarI,451123,416586.025165,GuUjfp9Q7N +82177,827259.673647,15Bo32k72k,922331,990150.295720,b3Ttq2rg7o +220225,452395.879249,vD0OuGhCvb,866767,372584.132971,41QoV2Id78 +394469,995325.898925,KQpy9jiAML,712973,760812.068714,D4ZfN7913j +551810,896024.204304,UqRyTmhrkt,419914,538903.155705,HFzGqSx9JX +37,174682.957543,jVuAk6h0BP,185777,267771.668245,6NOldErtye +616272,672779.546919,4B8BkrE75A,486612,818759.049625,yaiYdKsdr7 +964756,286008.362139,oNDjZ8jEz1,675800,597967.196975,lyyAtwL0Xe +205380,690789.173430,MAaq54jgDf,58276,973719.551550,Q4hWYJA3D1 +120221,27410.507886,KWxED8DMAR,242835,564649.029264,Fz9lae6NuK +920908,539270.824614,rlIxQ3bKku,599094,125223.660934,2OyEFhLEa9 +298286,935878.892736,MRQTSG7YTd,593728,938403.418445,Ylh5YHMpTq +641007,637224.258357,hdaIXmLEFJ,257546,29344.425660,1oPTlGxZgo +326016,951767.063550,A2nWtJULPO,44833,781048.136356,milRASeEDO +647507,488686.095324,FUazTkrgoB,492344,593568.502475,zVM7IvacGE +565302,824041.756390,i51bTOiSYH,382239,980230.214891,gtcerdYlnR +937726,54203.375770,aCRfFaumgB,956648,874950.818892,qsy7dY3weF +909433,500335.246720,ZX5OR8aGEW,718378,317258.376581,tcQiOnmOwf +284937,195343.237028,J9M1oN3RWB,424750,245314.418465,K7VRVJIA8L +516408,200959.313282,25lziySlGQ,587792,573551.379645,l0lU1wXjip +575020,317165.060868,oINvXm7F5A,73439,616271.428153,5ifnOGJWIT +887439,50723.606767,lpEM3smog2,294935,201169.759731,DKFn8IYAW0 +341039,41814.449832,roz9jLIV9E,429120,650017.226655,3r1j7IhZHr +640837,352877.058158,5o7HozqSx2,291717,640106.424559,lKfLnOSRUI +407152,95623.672133,dH5JrbcCoX,396977,164183.529193,QchojHAwLL +796594,472685.766070,tw3UflVJPr,685947,19712.154080,a7DKtaiD8U +491313,339516.064489,VWAOGWQcbU,443989,928332.439907,VPLaOCcg8Q +709055,786945.848134,3DLxornan2,490578,406261.537497,g8fwB5q2V8 +171130,118089.775379,vNxcBHWyZb,857373,2758.143035,woPQ2XFzFj +259668,242945.296193,JM4OGSDV89,510352,693575.390647,nTdgIoJmd8 +162965,193797.657178,c1187zlImc,657388,434201.170824,7P4w3axosj +765262,823754.382052,KNTOF6Hl0Y,353554,974532.153494,BywVrhBko5 +782167,951160.510079,7AvNCEt5bh,699443,858085.549453,eDbMCOTfpM +952329,359713.088130,Z3vabk3vdt,434291,213865.755471,QVY2Aluun9 +825469,60510.258516,DVczmzBGrC,682311,108188.078623,xVv8vbtzFO +781638,319885.382633,PbZVhQnJ5E,769745,584788.086977,GCGXe1ITOu +521282,507521.387432,70zRO3n3Rm,592639,714350.606741,XTKnb2PXHN +269786,211752.473629,fXsPyS7KIO,926590,860697.286150,QxcbHckeFM +315258,185012.431266,jmguVoKZ5l,801021,310637.495515,NVQ57mFlqV +411845,894949.787273,XmhINSWP1e,834550,103294.042270,D32kmEs5CV +203535,118664.989358,mIStynbYDK,942554,966579.671523,9H36tJ84vD +971814,785732.400471,TMhNI2A7dc,95460,146277.502124,m3gAczBD9d +29772,660223.441148,40FJZHCJ7y,347951,510274.588678,2y0Cdm806W +57404,320113.808115,1PAJ1p8PHl,240323,106372.487444,MZb1naGPC2 +575325,253609.099795,AUlVbJdppT,19134,809598.540537,01DM9y5MiL +963523,770291.270917,43H5IZUi7A,868127,702800.485284,FDQg1kAX6C +844704,984479.530855,KHKVdlc1Qb,414448,849498.211006,1nuKFyXmzF +819368,420420.966539,hQShK6R2Ow,465666,884236.431928,CTulw0WZ9s +991775,482982.468193,xxDENuVd9w,49213,17724.727053,w0HfyoEmch +706419,995952.165716,enRSxLobDE,186118,810362.850773,pfa2PLHM2G +973569,184031.318261,ObEEMWByNN,672419,692821.069210,dlGpd7RfT7 +412448,927327.952378,pkf7rKndU7,689849,557233.831539,sONzhIYTVB +62156,685455.125676,PFtFkCSjkb,435089,213853.409887,6a2aOTUb0b +285230,975787.742168,cd1LUMomjg,999081,879187.508531,6vi3ef7loG +696706,585046.182928,vSDxnDKoOL,395413,719180.443553,Rx4dFjXZpQ +739991,168053.027920,ZBy5Lu4TLK,513895,71505.945955,J7ulT6do9M +373665,988447.926804,59voNMQgWN,870430,573277.396326,IdMwYRnQgM +118567,945871.323907,9OdOwrR40i,305734,861560.232405,1VOKWCwRAo +425823,951807.266319,MjbH3opNbQ,411781,616132.538194,7BAHCQLaIM +170269,732009.455830,aIyHRrWAKH,646979,119793.600278,O018YXJMfi +112878,936454.524447,MDQ41Al4by,586525,824763.504803,PDrUhmt5Xr +349796,917752.563200,4hUvSCfFNv,57649,198439.171696,UdjH3S5CEK +116812,178923.398683,vM6pFfQFKF,411767,31421.128968,iRMOwITsEh +204104,621700.835030,UxdayOfa1F,816988,980039.291395,r8nLB40fa9 +383805,464568.178197,banVC3AstG,235110,256803.051762,dUvsi27Zcx +912923,823357.149393,DT1Ck1rBsA,278582,298030.057855,0wG8Nc8EPQ +651987,388676.971837,cMbU1oo8rj,870709,836510.374430,8BbQSUzXjY +101394,395870.150209,Mq4lxryQwH,880935,882825.206700,ZfU0Kt1T0O +532588,450304.308551,dMPK0ufGEj,5674,516094.884038,ZoHifkveY7 +191876,10729.819714,BaSRmG7jV7,34957,616562.014077,Ot4JhEai5o +266641,170983.835973,iP8vRTNaxQ,355300,698235.562231,uXLszkLVDk +265917,110206.539178,9to7YpWDyz,944379,591956.220128,qxWH4SjEbs +522238,924539.453014,pHUvY8q1X2,192870,848328.196332,fgc99xpOui +410713,491450.132669,9HRmXXpHd7,910481,643448.958771,R8dzpLFeoF +54855,544690.607315,7pBaFaUCcc,805025,901367.589429,tiM7RyTAwJ +328706,195785.362551,OS7q4dAtAu,343876,763014.040029,Me4Pfjkq0v +696298,159403.250090,aPu2CW8WIH,566908,696373.806145,95l0MOEih4 +706394,294977.979140,aFyKLKwSx8,953954,884658.346718,vJvH0tQCm4 +651236,19298.172609,MNNL5OmLLn,68220,850670.185069,IW3I8FYNK4 +992898,931770.770100,9JfemwmjIb,873228,294588.065070,2kcFuihJ3D +742021,995830.716227,WVqWBmDpxl,521351,16701.177011,caUkzhnjho +406969,351140.611176,qJYnoEKwuW,598127,106510.028199,n1gJAfKPD0 +163641,509241.295452,wGbTK9G0os,453403,215117.999312,SCb23dCCbK +159860,479542.541520,yuheccocgq,967628,517564.412509,44aPQRaRFC +131216,985418.680784,whIAnDNrJR,976087,42082.730520,x9hVeHBkWo +525584,410932.438070,ZjdavXDYGS,666770,532786.010922,zxKkmHFzM7 +321061,927710.448850,dIfL7OTw4H,246386,185099.379774,gAqZ35yCyW +407013,377677.872621,tKlNCVZH1x,398833,985289.528228,AhX57aC0gf +389234,109360.131203,VXEeWYZWgB,662195,451295.645270,VJ7DJHp7N0 +859975,952573.188994,Vy2Q8BYEVP,997390,992986.001006,fhvw8uj305 +990305,87501.356591,ZTU70AkRnZ,409607,292689.394612,AWNzJIJHIv +403331,118918.535091,dadpFp8IS6,640474,292029.217167,98EaTUb9m7 +215109,509258.821866,CFumbKvMWz,830386,41753.923433,oprqMkl5Fp +629463,674888.920483,bgTwt8GAfy,360350,208372.884035,00CrVi95G6 +663746,604332.191834,bcpp92bJQR,922641,985468.585910,smCyEeFZvf +367149,977859.116597,iEkvxn2idu,282162,626892.089734,lYthWi0voy +929852,852384.862767,mHktsqrTVa,987031,274219.834139,Dx86LM8Z3e +598505,520179.383104,14UUsRHY4F,253306,468080.504848,IJevrDWA6Q +404670,766828.640360,hkpH6XbjjE,267136,563170.573502,4KSoAoKBh0 +227106,810862.319446,LmcMwNYJ3C,433212,359238.194660,nB8wdZyhKb +118031,95373.559949,0VFKoIpzgI,767050,869776.704688,LQYLJFD1Mk +505515,405228.836267,66GKpWvyPm,956928,84616.806423,SfjbghSIv3 +585746,219670.123416,jq2tKmrqKg,14106,642881.160358,NopmgKeoiz +106149,570182.465643,X1XEIgCqXq,715118,835552.028080,JjcZ1awMC0 +679284,127674.018606,hs36u4mscN,649013,263046.984472,3QmeLeqTV3 +984898,599485.801770,FgXYmlZNdG,381422,492919.425368,27My4pZRe4 +714659,48207.834848,v1KyrTorwk,202965,325672.875311,eTFD8TgXJD +633022,618266.628133,kG35cBOWez,41449,621571.027717,2xycylcqSL +920109,543768.240065,vOjbMawRTf,310801,37643.376364,39qPaInB44 +419926,330473.625005,im38ep6KQf,435588,265538.435215,IaKD9PSTYZ +479392,26998.497157,uND9WjRzw0,665943,229781.722922,3TY9dVJcWg +319397,957007.558871,tURPjel1CK,848142,470304.939526,lnLoOhhnHK +28592,464557.547598,4IPu63kHrm,666436,68568.197671,2sswOQo41h +541314,99299.612520,XvyPFNBoDa,780587,397362.329894,kmih6MJRlj +888911,815091.206801,LPItodTuw5,557844,149611.945490,2oATpMClAh +782685,132384.968310,7mmIDTs4Kt,79973,438019.099595,IJ4AdJC6xp +141282,274514.073709,hnq93GFk4x,684948,696576.826686,1xXV14ghMK +773941,713881.400295,vGeAc1gbTr,807711,932003.501513,BRmBxYmRSS +967316,424501.423758,ilitBrFxSd,378912,354815.843828,koKaBEGLjb +292830,405742.749302,bspPlSrwJp,96868,408011.730093,KoWrFZ2FP7 +116698,627214.649544,TpBywzUbeC,187830,694619.360265,ZN2DKb0p8r +798813,546355.059813,pjVP0gyo5w,709898,879712.808521,XSlUyOnQ5H +477253,249514.095044,NQPuKrMeJN,71585,999208.987128,4lACQwIpk6 +744871,570357.804306,Lp2l3wGptU,598096,18804.815392,1UrHDwv8kv +242509,472357.410108,pfl6eZrdeq,221797,298090.084672,p3oOtvSDoI +350734,723862.689503,OxdKwZFd2b,330261,997240.009848,7YpCb4MAEN +583301,442042.619664,inBDAcyV1Y,527169,728602.397747,gJyxcaQMMO +451950,979571.225460,WVLIxJrEC2,122251,530515.273378,nApLzVINyX +291645,186710.630273,TDBSKhdxoJ,351369,792065.931856,tPLpaUdVQG +698477,168516.201616,ksv6XQSFUI,17965,341766.507226,hSv29aVPBk +222965,713115.264579,chQVjgkx8x,797501,921212.815017,ThKpG3qMHz +979962,373575.446248,GasN1JJ3YF,735331,506446.142399,bf6z4xNaSl +402164,383805.814233,9EnwLDExMa,966952,227994.891805,nsjUhYis8M +926988,37310.569508,ZsXXyIOi8f,839864,121491.944625,0TFjTt3mkc +374636,522250.807975,Fe7MxJcqHl,832085,897968.096382,WQpWRoQXVp +790141,820097.514212,pQ1T7SGHcO,907048,733323.134460,cete4xnNJN +626952,713458.881666,HaDlzP67wi,576528,526825.687608,54WxMm9jd6 +625158,206148.993020,yTw9x54wpp,348429,696305.969107,MbllHLdARl +144115,666865.190287,mmdRNc64Ec,661687,824792.515527,6SO9mEEZNR +320093,524814.979500,9qBl8wo2Bz,472284,882322.024675,hTrKCeYcAu +714464,355224.423115,tXhVpNNQkG,14334,834437.629496,8VpIyT4nin +100401,623668.058250,ClVU115yYB,138241,910134.306516,LLvNEcLF5g +289465,865935.619993,nvmnHYXMnF,830586,401893.173912,mJvXnV9D1G +835268,242824.635790,YisWoxleTb,787767,799465.916764,3RxRpR3iU5 +63001,697280.293202,c3syk2HdOH,634888,818670.569915,5XQJ7BDliX +452980,796415.991083,tJHKXrzLrV,185536,33608.337948,d3iwYusstF +797548,965571.396740,XN84o7QM1G,132734,447278.594588,qkmjyhVWrt +648172,196004.967033,3XuoQpdA6O,801165,709676.604210,a6TkDD9mm5 +296456,219836.933303,GIwRbZWMIV,505622,579406.674834,zIwsdxCpBv +738211,17693.624813,KFnlUfFK4x,855813,192363.644240,Zgx0nOnWos +441253,191140.970280,3X6CnU0VrG,69682,214554.145317,mbG2l8zHno +135649,575720.079061,iJRcYA9RfR,369007,321445.310553,X7g5Q0U0i1 +581855,192876.471580,ZiMuDh3Edf,23279,486530.769496,3rU0cdHwiq +808953,693027.945785,VEk426gJMg,797835,152183.983655,HFoKX38RUE +933712,301881.070302,aT51Rzs44o,756163,653754.118798,LW1UWbZCY9 +233333,154162.868446,9ie8zpXA01,567334,292387.455779,OlSZahPZVw +356623,190257.550976,f63Rp3M4E5,148616,849351.782740,oU2ERt2J0V +639365,699209.328897,Nx0cnmgsQ0,928744,341114.837852,OMfgncU5uZ +455153,818927.055369,A7Al6qlrox,618322,182878.397635,DA2hNBdscq +299745,732203.786537,DHpkJMRo9j,732764,325938.090652,l5OeLiDS1x +397959,187239.438937,4N8AZjAAjc,826497,925088.112621,1YOSxTJCyI +182563,918950.500545,tA7EADPIsO,788469,690731.208318,qK3mXVf2w6 +369236,69617.857518,6z9Eo162v3,373528,860798.979284,rAQYWTCgQu +932913,456893.806469,FuKcok1uZh,574458,380980.079655,xAZI3JsXWn +784953,157572.209328,aDcA5rKLym,715429,796104.831552,3P1forbscM +470071,636509.884755,5c5e6TIrLX,756542,647217.624631,ub406umxVY +257357,228920.045795,3iHmrYzLxO,106324,581024.342459,ktxIIFCv6W +992931,853565.904844,vzmCMoVfEQ,981454,446769.791604,3FNyiGmvcE +514048,285959.277051,mD31PZg1qi,929877,953300.908377,ZwWaoPQKq3 +136486,431522.471428,v6NBAe7UMd,718948,488012.877310,0UPxCtPsSH +507757,897414.325751,hFOcs3krS5,257711,803742.434559,BnluBsUz79 +650726,323812.383188,Uccucl0sox,121259,204169.406218,b6Rez5CLjN +500843,947868.615068,2Vbvk6NWdi,928923,28941.353350,cCGiwjSWke +757254,867849.852105,MPgcTydEdj,344539,456476.534429,Fp6PAz7YjI +253590,798603.330595,6E5sPJs54j,927173,668427.453827,tvNaD91OiL +683166,87513.410245,qQLKObCSxp,104888,210597.473849,ECRgE9NXSn +113021,772939.154803,pL80kRhD6y,883670,393475.328459,t88pA0Zz8m +731376,777690.869469,RBJMfvtZLw,280655,854201.548410,RCAhHZuaNr +755307,258884.976070,UL0FSbnF65,95922,971942.836778,idYQh4qPSZ +757823,915855.607659,InSx8dXt6d,899430,452904.497567,20hiRQZDMb +336772,429471.955706,vcdf9lsZ39,992115,329086.084080,QRIlJhSQOw +73756,819490.842667,2oOV5qUET6,250423,577012.908684,o9DcZWtfWA +330880,23902.484903,gzrzYB9CjD,144653,729946.241391,uHLM5clTMQ +129181,885665.191953,35pl5PUAtX,100797,780706.350332,yYJuaVZ0aJ +174321,939210.264269,2BEBKOortW,322035,940361.945488,aOCMFK6N40 +484249,252883.390214,AO457TeTUc,638380,585948.142943,f9FIV7bNRe +115746,178772.613623,tgDNNXX001,854827,271945.758512,PplHcqXor6 +402195,336380.743442,WSLLLg3HJ9,871474,313670.960330,4zkRw3NsGz +891075,58115.465906,ctv4XmT6yx,272175,87378.467406,ZwRfluXrMl +253820,940638.890805,9QaAANE3sM,500025,246134.664059,NVyIKc9mFa +219002,798091.572311,wqHAiX7SQZ,142934,829425.118886,EPG5GAwuqp +675710,59842.639140,Z6IWFWSGk0,556076,843519.669557,5CivbzEPqP +406659,287749.069376,WLYxnl4WWH,14035,20393.488743,1PfEzsEnQN +896182,191176.372205,MrtfOljbld,626152,768441.175472,dYtL7NBD8q +172286,193444.875422,FMJKDcFdkN,300276,781641.817849,Q2Gq6Rwocw +807927,294433.360426,F0dfRk6b5r,124571,807023.318526,xTnoC1a3zI +786387,224892.698043,ryAIqSOee3,35574,909520.756644,VwXglwZxJp +799495,412824.257526,ujtruwq5Q5,957777,640571.756604,teqebh3IpD +363812,679459.580683,GRl3kH368E,836627,250436.499834,0bw7qcUuNP +10160,198971.906908,UbGXIOT5ZJ,909499,675387.792350,rxpflnygQX +446588,302627.257872,0M3rHqV15z,539566,580051.682884,FQHMLWmEEb +748268,10565.601943,WVGMZIL6fI,312268,57731.916002,aqXh81tbgw +162776,84811.226596,LwE2Num1qX,350174,493776.548432,3cOxkJXzFm +949172,569206.458237,EC9JG4Gxxy,904963,138652.239150,7cJCpKkTnw +129235,60580.497066,A6kOhYx9kO,98196,383288.262520,DzSD3xznT6 +798985,381284.327986,ygB63IpusE,756352,689483.413930,3JAxAW5Qoh +123717,479442.284123,i1KN5S2xJs,513201,954910.876440,Ix3FSXddxg +669972,763636.118939,RgbxQbWHiA,290870,89563.785783,7h3bEVyLHl +861702,776271.593528,aSaSgROdI1,613703,125949.904356,Wy4ibceO0D +950985,151360.886195,VkSC5GfD8C,969670,703194.401212,vZfmHmZlFb +598719,360580.498941,2OljYgAPko,288423,316269.159956,GIbNm7inkH +916930,323709.753150,rh6g02Ap8E,48910,158698.237947,dgUqmNl3Lm +280501,955436.050699,63isFnpI8y,521263,539859.694547,xq94MMzmIF +937369,654636.900956,SfkLMfBDBX,86672,325907.474752,AZeJUh2Raj +315455,231610.012915,5FsnxbG8if,466668,761889.922596,H0U2qNcTNe +723559,779161.172684,Sa5ek7SKvg,937934,616375.182262,3pVoab0NnU +230881,715684.139037,acT0bsaObr,667873,134980.043022,IqL6iuV9ym +821950,123176.066500,DWKfLCD9y3,446398,62377.538857,GQg0rzxbo4 +595979,12869.065681,4IXkIs10M9,245006,538427.316951,hZ9Poa5oxY +303738,33551.098873,Esq7lnnots,660011,663527.957253,bCqZisJR4Y +186491,167295.688916,GFqHfXYldF,9214,265371.081901,BzsQa2cukL +566081,70556.174470,kM8nxBdXmW,653069,749559.071964,AKOinkC2x0 +444487,380229.728048,dVtCWLEhAI,747833,22725.218843,E7BHedK0BB +272040,204619.860120,197zOCHM1I,250325,934145.550499,UabKBdEzXe +580010,192443.093334,nXynVubIxx,7990,233113.572836,wcF7kqnFz5 +96103,36609.829355,nzcPWPmoqQ,305525,382052.700896,62CgtKf5BB +892073,262999.082689,p6eF18i44m,601739,807813.847794,2ubgGcSfkp +514745,344588.344242,9emH3bxIkv,515406,267001.674102,gDgJTkGSvR +982691,267132.969996,O2YpGoJH9x,102513,612256.572444,HPcW4PBe1p +752098,707136.103956,u8O2rYoWl8,915644,612751.222796,gCZpmf5zqa +815054,542154.285140,XSg4KLtE6a,971772,199182.210386,GieuKzfJUb +892172,784983.322725,NZCuBA2kHN,800921,896004.548824,S1N8Ac5RDl +303831,554020.808994,RghXXY88WU,663769,195695.999002,yBE9cR9ZFk +344719,430701.809302,txfNwhklA5,306888,618092.599610,fqZDxvyscu +650727,39338.498269,bgKY1hG2H9,480661,796177.733541,PFAD0NHegJ +124806,717879.240501,b7M7XfmZqE,427722,146157.757795,TIpgQ38p1J +902566,570025.714134,5jC8LKieMX,246878,382050.114827,JUVzxZjqWe +426221,434369.338285,f8RJZlU1RL,767293,857419.133260,vnMJQT8RVl +383618,785275.450125,wwpqzKfnrL,345188,611706.784762,WakVj7zZNt +199168,109757.482271,X83165vIbA,382312,628947.108326,WCoNm2NRKB +555427,532897.798105,hIx0bXFWSt,266292,948167.025586,58TCITrlQV +554718,307693.114316,dzUeJWGtNZ,280927,278426.618517,z4ezbJ4bEn +543636,895417.515188,ny2k2CWucq,731112,253830.145831,ljwQLR4GCM +634184,422231.714273,4ovm6HMnNu,674766,730709.051409,KUPYazJPHg +736127,987560.369002,MggoJdZhKl,507547,592635.072497,qK4JQEcM7z +905544,220027.725184,3bt9OnJQuI,954698,7725.540779,DNqZRJHwGi +127740,812181.360864,La4Ne3IYX8,485394,304895.745735,i7XBGq06iU +260545,264788.285114,rLKkO2dhWB,329913,419463.626225,74CMzm623y +335271,539187.462945,WcKQEbzv9k,444210,186043.598474,NB6BpcwGK3 +992996,47387.945595,CdBJeG4NHE,656472,506654.420328,UzHKXwR6V8 +171410,834638.734501,drq3t9p1fD,162594,973238.770558,4kINB1fAtD +132219,194000.762390,SPAfUC7A2g,112573,276245.200983,2Aw8oYpAQA +93489,555619.413568,gy5SaOIbiP,986658,572184.755108,m9v1jWbuWy +912473,141677.944302,KAbgSZZqGr,200096,922761.920027,Adnkaw8DoQ +961408,924224.538059,FREYWJJHhr,576260,29475.454905,IyqsyB240z +447685,56062.029804,DpB2w6B9F2,910841,160852.806098,rZiwELi6Rz +644723,625203.504893,IJwYSMt854,610522,713131.562841,7gl30PSiZV +370792,652545.833214,WinDVT0xwS,143928,873479.160088,GExxxRyvXz +696381,521475.520856,wJAZCUpYid,372348,506305.007101,q6XsP56wyP +881987,484382.926593,6gIJukuTgo,437594,92280.597356,0yf4H2DPRr +943149,600530.301351,1jTtSlA4Ex,701820,576561.361519,4l82bCHH4y +690641,329371.517685,BWRuZyhGUO,690692,764791.865478,ECdpGMfBY4 +274338,206057.670651,eiXXtndYEP,327150,854632.696155,dqbs64Iidy +334850,309893.802426,fxdZwogW3u,697699,931820.315121,tVkxKiZ2N1 +2614,272139.573357,LZhsnhqob9,634550,733365.554706,AM7JzZflp2 +521980,604094.353298,8QRmmDSqTK,207413,162232.059912,n7DOZlw98M +310332,620249.352071,dBXMrgX1w2,289486,611983.591267,PSxxqswsQ8 +873384,908967.988249,11YKSVIr7d,380069,374439.553720,xadonPAyIf +914278,786050.337004,JjlftbloHD,703535,488321.084441,e9tEsNmFOp +491356,567163.490061,8dIa1iNMMr,590472,37261.738794,TXT8Wr3LbT +787532,788026.708671,bLnACD8cbt,686122,476196.320256,XEZcjhWaNu +622989,721713.089831,0Yn6pDJ88V,207775,72891.102712,2qrsLc2D92 +664037,27504.953531,iWFIRnWHnd,955422,859934.145678,5k2grLZfqk +812447,377355.369741,gYurkd8pvB,856826,48034.657068,NinzJZprri +698755,739354.149517,mkPExO8obp,25361,480335.729137,b9oqx7VA7a +75099,956780.730390,6jcpHOlP0Z,747439,789431.864566,EhF9bcLhB3 +761883,949365.784350,8AMIWZc8lz,530748,157817.373913,VtXMunp5IB +658679,185957.605512,21Tb727WhR,623708,203556.973737,3c1I206xI7 +431410,269961.280296,qAATJGgWbp,196249,472728.475116,Dntb1U9S7x +384541,9584.034679,ppLln9W0UU,312412,157827.327821,LijVrq11sr +152970,69916.883471,hFwy1mfr7z,113196,953646.361093,8A575YaxpO +131433,661786.426555,Xe4Y9fp4Yq,243328,514955.785699,H7YIw7ziyA +339657,287139.115098,lFPvzxF4LZ,324446,186356.903176,xclY0zH7Qq +507423,444028.769206,IuBeKnfiiH,501901,554044.383806,A6BZuwH40z +937679,702016.659499,U0WhC6d4Q8,573069,699475.597431,0rjW9HRKDx +485438,636141.611498,QRQiNGFIFp,528546,360455.248897,Ed2vGIUx5Q +257968,793570.798086,bvFJ1rUsOG,210138,474182.915173,L0GCVURspi +719211,271970.066340,tKhgW0FJRx,557734,737653.445725,snfpq7LFZT +339948,902632.835420,RicnQ9eKL9,516015,405559.980340,zjGjIjckR0 +840497,87315.058575,kDNuujHW2u,533516,833076.340004,yoAntus4WL +553215,273479.664646,TsZNH4hAQg,100279,323415.272442,rjt80bdXra +604485,650432.067032,jmA54sIGAv,91196,740776.402686,7oDYdGiQZj +602741,86261.757868,QI7ZDJn5lA,141025,902322.550606,TvLPrpJAtJ +414545,922682.969215,C4nbnTV2gW,651267,401426.248069,VjAq8FhJCv +655880,535579.923247,MRzdzVMBSa,423290,807283.615126,tGegA7IdNP +428416,741127.006451,Um3c9nbZ4h,688883,539951.403413,w9pCwAbxAE +699709,863170.365057,ewLNXl75ih,815243,465606.515942,L8Ifdj4xUw +614595,475707.435260,mVLDUhm8IJ,856540,333835.772713,fOintf3plJ +194187,196889.916214,U7uT3bFN6l,436084,723477.262140,xAJGnag1IB +665402,42441.050123,W1jz3042oW,16117,188002.122694,dWs63u1Ko6 +803156,732291.726396,rZ5CDCoyZH,3772,869462.204679,TbqEBcaZTW +649181,69946.911708,CnJaELpHsR,220108,342713.894128,9zeytowEXa +66817,499971.358624,8d86Avlewr,231509,641877.681078,vhB5hGWMTz +930881,640218.557071,l2poGkVkN2,198142,166951.194412,tMdfc1JSXi +238226,273349.488029,CnTIqPS72T,754076,151220.934565,heflz7Jrrv +988795,618816.251708,Nm9e0WapTW,279751,98558.451883,YaWlFrfjiX +872112,29370.411084,XcbJ5hiI9p,647792,455487.480891,1bouxzzon3 +963735,473277.140476,czIwef1Y4D,343706,833900.498690,nuh5ZIk7uN +355484,841210.220512,z3EvqO8Vvs,668355,15682.004029,eTlJFIxSmI +365425,84713.485982,sE2FHgqHOx,844629,382899.013554,sAlVpFHDjI +922062,948466.079629,YXQHpqiYVF,901349,109564.677292,m1CaJmO8hi +341782,107998.809979,NpEKdu9VM5,568276,365097.687424,QNyWyAg1qs +305478,667865.230883,iw1KyYTn8M,441845,488447.782550,FSIRzBUTjH +166206,623717.279198,WGum9CfXk5,214276,911998.182087,yfjltYDFVW +983127,380471.371456,t805u6Tz1j,990238,774089.504471,8RdujDkM4f +100634,110908.797017,vdJ3ocazZt,114951,882327.387987,OhZSoakwCA +360492,139233.508945,pHDMoDfPdi,797658,702598.473132,uzE3NvVwJF +799423,722784.023869,7JKy2Ekdum,862283,400405.668000,VbRgwYRT1Q +398878,238387.865066,wDlFcu1iVT,531644,912060.351849,N42PMa65qX +589891,230048.356755,0JyDPaJCA8,906782,252311.166929,om8ivKy7z0 +377547,761232.337431,ezN6kGWjaq,736465,818221.690659,xz7rr9zADx +760446,953403.339558,bcxKDdZxHm,292511,149740.685697,iRm9LESYaS +768670,957673.081718,c5l4hKEwo9,161635,723565.311079,lmeM825jwJ +679995,111901.341546,UewWsioQoM,227981,375333.138608,fORh44Didn +212351,288111.804291,I99bGRWGiN,490902,568197.982048,K8kU4PLHov +447015,146885.319603,MUZtgwRsw0,935969,627319.444419,Jyk28JeAF8 +823429,708129.490925,0Oc0HMGswy,221797,945412.752140,MXjSEYiu3q +872951,146070.185012,ER5sbPvfsz,265265,433796.148332,wUfixyHkg7 +739701,163683.447656,p4GiNsHL5d,39372,662256.060516,tUO2Q2lN4p +671516,116545.732400,BDYFMAieAC,646597,875101.629164,qtlYwXXmG2 +906439,377875.836448,KaY2KScmDD,57641,980107.640705,3gyfO9hM3j +937776,7764.487063,EchySPib6S,274110,24784.679850,zyW98mIRm7 +769605,982976.436771,9OlVfvtK9j,428356,803872.270540,OM0cFewYtz +719805,486706.083856,zrjXJq1i7a,750904,304295.072965,vpoHEcov1j +906396,201110.042883,Z1VByt9t6f,899232,936703.773329,iVsPtMIfTe +384548,387684.922161,IPPhlcfTYc,609318,171930.669243,VFEC6ILRTC +580976,396598.836653,2hGEtI7Hbx,820570,234288.706536,KRKt2jg7J8 +311015,446492.662254,kyqglGpuNv,705521,574776.931480,iZlegM5X0w +312686,336812.759760,QjxbBxi3mm,325343,568355.700413,kltfaJAg4w +358937,620453.336586,H7E1WrnjmX,87345,33351.729684,gGgEycVuAE +547451,997325.617638,9pTmAq5JI3,492595,96760.986590,oz9aIVENAD +143595,361402.527957,AkvaXY7SLg,907709,410996.743194,OQuaBNnbNZ +858360,67485.754782,QQzQiMFJtt,515928,857711.390318,D5RuTo8ic3 +953393,280306.224995,j3H2N4rTyn,150039,447817.105759,3xovEeGZY6 +358587,653229.295798,DXcZZG51j6,653976,215566.316456,ZeMMbeSjon +415905,678979.918043,VJeAkjCXtR,664239,417410.937137,fcYGCzidtF +799533,147816.567719,1wB3jb7jk4,84706,955752.347406,9Y3WZRykMM +156715,394731.893902,BhfntsNlrT,76498,785719.031356,SXxYHJywqR +420692,184226.189392,mNQohLHa77,647135,409.963457,OO6NMZd3JX +266279,30871.551513,Po40ceqCCU,110741,587690.091350,3a8wnL6VEe +144417,826591.381864,YRyj3dUwmh,868949,677602.182844,xl76hiC9PL +228549,897684.838527,KA5P9ufFgD,244795,745859.744904,5rfd0Jb6AK +383898,813702.168010,70lTYDSUOX,986897,342137.041754,tDhsJJOiOE +999425,605886.032427,w7WAedZTC7,857352,785125.730624,uUSf54Yiou +501117,7697.742683,DwPwC82BT5,464775,314491.128916,whAkuEQdgq +553954,650042.008077,vm4paOZT9Q,531095,254281.714644,1kpWJlLyQ1 +409242,190620.316308,kwRURXdSqN,402125,317900.027214,5A7PKNGzKB +505621,998570.737589,pRa7dqJwwG,6398,58955.179510,Y8UDDRknre +200968,168174.938577,WZoEUnuxHF,986133,725503.640055,FPwsoj6FSY +686173,39340.240878,iRpnT6kHCT,200798,617100.918082,nkbPY8fHGI +2538,489799.085746,9M1p67TQLs,905334,954774.537365,S9ipESVTwG +314377,369411.197068,4P8nIPuKga,761060,496867.602264,KxiJswcxxj +337908,856048.133928,VOqHxFuX5p,693749,861100.405920,Oxq6b6GIb5 +177538,89694.256650,TI3z8eorFB,979842,548340.139177,X3djO4Cw26 +946130,548490.849160,MfQDVmmHso,197990,247726.244748,i6g6n5oRSO +203506,567802.597814,m8p8z9dvaz,361963,165414.958334,cpgpqlRcDd +993509,775515.455991,bmU80Ph67o,918289,989962.306313,154odu7iTC +912513,951495.531591,kGWjContJa,224342,511060.416974,AMTAt7SfpB +642890,199895.500690,on92OLSX8s,868493,370941.695244,C7zp9oA3aR +729009,167187.469953,ddlnFn7coR,960230,8584.440814,2bOPOUUdDS +313091,641162.812499,w0IjGU7EnB,974600,552154.788975,ncdIwhYE6A +561104,804646.777055,oFZcRDdgox,523071,462794.944588,uBDW4v2PFa +358235,213069.925183,nQhv5zHDnA,221299,962933.737923,nm0tzjFZ2b +866739,509080.917214,SJYgArMidS,961999,704323.698340,sj05sA9im7 +911126,400219.668120,n8YRrSHydQ,511413,512827.808783,DAuVUSnPvQ +559226,303849.176947,dP1dLH9Y4R,378538,155139.496394,MzhDzmrI3D +117703,157720.011888,0k6GK7BCA2,607352,880823.039790,XwmSjGtane +209530,932664.466996,S2HhEIeNHJ,376089,10714.408890,bh6HZpx3jg +61109,576880.676086,hB62LberY6,174806,365769.303796,b7Pz0LRD8p +932635,824176.076247,qY4dl2WaTR,779133,795948.320541,zm15u7vLhw +921595,226803.508638,1RRQVClpMG,249145,302348.836199,UGsrFPOmDB +669232,817915.819149,lWUIl81t6X,447601,195805.511391,Q2hLl1w1XY +553551,213508.942527,XvGp7dMYrk,80802,567338.175351,AVdLyL6aea +956267,4808.438251,cBwSHoExtH,403812,916524.046593,nb479WzvnA +62174,662192.899269,uH7RlWw6Dz,488280,926793.917400,5S02kCgX4s +888477,907937.672420,JvQFjIaZ3c,312725,751733.355019,aZnF63jmCw +600379,649605.419837,jBZc3pGcrU,557906,453663.356140,oUUJRjBbGX +559066,69253.412009,pjUcF9r4Z9,344334,163783.423632,2XJD6iiDWv +374162,656477.379581,c8m582L3PH,479447,127208.083626,5AF4k7zkQ4 +132206,134245.062572,t7c55LLuly,156338,462406.968993,Sogwguiq7C +60770,438571.493770,4gfe3VjZ8V,63347,563843.027887,76qDTRkTyX +269133,524224.871823,eTDCGfqj08,115661,781335.977256,qjf6hvKd72 +606607,620346.634129,v94pI6ny2P,101668,700467.734153,KnH4mhxoSP +356599,895931.250947,ML19CnP9nz,965388,929796.419402,bGdpf32mg5 +628914,998449.034943,QShRuqeyZF,57830,418701.331963,B5FtDUm5Fc +240917,604368.184404,pg4dIdPILg,397286,724976.856089,jOnaWMI6SF +548731,185176.141066,ntzACUp91M,803504,846908.463101,b4VBRbXEQB +840789,119759.582178,wBbChF1JgU,105764,355987.132457,hfsBtDjXSi +354244,345442.215474,LD452w1Tti,777881,304109.086904,VwWOgyHxhW +605186,53352.280181,MqmlloJkh9,267609,584445.561207,K8SAofzbfg +768859,534008.980849,aYZj9tQRJn,647334,466164.356988,VOc37AQa2K +60375,728392.255060,9lwh9b9CZ6,547142,537292.297368,T1LFjz9dVs +409306,383441.779534,8EJKBpgfga,150118,294182.906407,sz5wwzv3lW +503234,716704.411950,Y5jI21u4Wd,336855,881165.284614,XYT8UncWDL +481261,68854.902457,uXGfvfL0DJ,765583,552435.610630,wD1StAd8Vf +914667,901491.466688,78pkZgSyvM,600921,754200.487901,P1GaNmZ7Kr +505440,215342.233332,ydykbJSaMc,941953,953327.501468,ZJ3rkWJYCq +955390,459316.288618,cwpT1OE11L,238721,944445.783496,DyfgpXNF6K +896158,824328.007150,XATeWpMyWe,143423,878464.225293,YzB32kRtSA +688107,25349.843910,n4EmvtZYf5,73709,302225.508760,Br1KJTUbNx +523314,334991.154836,VXceXOPhaz,688195,343289.965054,togwnBvS3C +589114,277612.627803,Y2ll6nk9pg,299275,144447.493159,cmcqSpD4ya +492278,774057.309620,ZvMmFpX1t9,52534,980567.728088,ToyXJRdL7w +595097,775527.915302,rCbUdozoOG,318091,625263.894103,T1gtzf5hhW +750239,213172.703120,hMgEkPGYHG,574969,92906.855813,a9Do5n9xwb +871149,424490.051814,6DEWTqEykn,422614,364254.543689,3kEC8Dr3Af +818227,150344.601415,CML4fEWMDj,130092,580467.153409,MIQBJAXjKL +430972,845249.040705,NCmbAJ9PFF,304934,568809.128090,kEti5XuPbK +584664,10840.850577,gI0659yGDJ,669290,483601.271531,1KWsWZ2v1I +75649,273146.352511,EFD9gmgGmG,953647,575199.667110,CHONO1Pd2j +276733,302331.399744,iExKKjv4sg,508398,390151.729624,Cgwd1QtMCs +817264,862374.997403,fUMBfqqSHV,7616,52803.380580,EBbReCnVGq +341899,778578.200263,E8MtrfutHL,372486,567547.987412,Ha6yuVWRcr +592968,722110.761773,FzJerLWNl5,449763,458870.248618,UiyV2BMHk4 +391984,554045.346394,5hm4oV8heW,910913,398315.844352,D7KGAWWIen +482746,856368.808046,q9AAiIqoQG,935672,508826.502322,4OvvTebCSR +197782,127185.339974,SVH2Cz5aQ4,264851,550858.444678,4qYgcwHOVG +869266,864754.404423,tvRL1PPS5Q,188473,724715.425126,ynqTkqrWdO +217095,527209.530510,EbiffIvNp0,251772,231759.165427,AgRpOq3TwB +956443,600137.466840,A6fTEvsqM5,148015,521373.924308,n9QnZaV7i7 +937838,861720.743115,SeJ2dSUYtJ,719740,635237.085696,51AfeYT1NT +98732,848891.689737,ylyNN986hf,562042,784709.888828,ouuKieXYgT +510539,113974.139143,YTbTAayz8E,624528,48370.838324,gN6Xc4lCVV +791554,480749.693088,BLg64FyHMm,430901,845485.943916,NkkfxMfjbV +57220,643991.183316,P0OVnLRkHO,431628,208936.587472,HseQ8zamdw +12509,475407.975511,Uc1T6M4T8s,129622,233999.877161,hPbUGM06tE +784757,705288.277903,fWMXJhMD57,656556,158657.995113,a6RuK8N1FA +776938,96834.732232,r27opIbUMl,415401,787584.437278,BzxZlCcfMt +793659,710462.987357,B2MESlOO2l,657833,294759.419160,uE6rVGAvoy +732223,823468.158597,uKtgn7jT98,796751,102827.078146,rqRcj06vv9 +331500,155893.226528,oGFJN533Wi,456244,444314.208842,MFgl0iEmlX +908740,107383.432769,RYRWij0UBS,468380,124003.312098,vF2p6WqoC5 +556595,40597.925332,wYXK66y7db,340790,224082.920110,C57lMSyyFG +425995,741682.577821,Hx2wbklk6C,478924,436620.884920,NuMHecQp0W +566763,41763.252028,DWU0BxQRzG,642050,70873.710037,lxe8BCGcwM +870470,83935.462328,rQHZE4G0j3,255584,251189.803515,uDZhyol4jA +183817,449865.378881,12YLdEUPGn,313326,708320.554728,ImrGy77AAf +639073,109013.539824,KzGJk23ZOe,332393,819573.290809,4M83lSizDN +198574,743123.041862,ft6aAo6CBF,89750,243997.038264,1BygPUaf9Y +650402,735242.124556,MTMAuYfkxl,790996,763269.004464,vpEa0x1Y9j +74184,5722.220082,SdeSlSJc4h,689998,548784.254479,e0FGKl4MDs +788675,543046.877162,Dk37dhqBKh,393638,394844.058980,LZc6E3t5Gm +959450,875575.890267,EnS7Kx1ePK,34880,458011.161808,G5R3JISxcv +515678,505069.281454,QtRU2qQghU,510352,578696.371612,iDnPfKvpu0 +571578,306182.548163,ZEmUsejLFu,704058,999544.298502,TgUvQu2hme +664641,253522.244757,JBF6CrCXGb,939316,497649.878569,sZlbMUB3H0 +254681,431578.206605,CGDK3GPMVd,900691,462496.232721,bDUFVDssBI +326354,925091.509306,ZYVkDm6e0E,89012,755925.834053,p6mqpbPZQE +773023,535121.067898,xMQwE9ftJM,221312,305125.279943,p9ZaIWNxfk +116730,282869.889532,gpAKQkmEEr,994759,156045.396769,rBBHM78Am6 +914032,65657.569822,6jKeOGH7Ji,564053,932962.760684,lKIbERrn7P +260213,559700.582357,tjZ8TyfYRz,750595,794339.933118,1i2cfpmDQR +98086,386091.848587,tAIoS4jSSl,258307,989967.936169,mt3K2P2F8l +617914,396942.630162,3XHvcN0zME,871419,792762.563539,OyIN3RgkmI +515603,318342.738610,pJbvaM011Y,399227,572880.758703,N6C8Uf897R +145294,830190.258708,LM5ePcAOHN,409447,823501.983951,GokF9vp2pG +17063,781692.945957,FA4SlYRcxh,564251,578143.478127,Fn90UKdJqH +173169,77144.790863,DpSf0UykFw,616839,33726.364766,1tOKCp6oLv +48066,167898.265641,spiXPkxjvR,948337,285190.365405,l5UGmnMYqJ +636466,398928.040356,0e7haOG0Qj,564052,917853.508813,CuUVZ9gPPj +207216,790323.238496,mUtOXetmnb,367465,733788.030344,j8YunUe25Z +897129,327936.031399,SbJwv10AsL,378707,340385.191983,TU2dS7tpQO +486549,753724.224123,xGw3ngFrsV,506767,689455.968613,pFUGVL9XHC +524315,203329.606089,C7bFfzFGJ6,558721,495251.659098,Lrz6F9VlBQ +325783,173798.287897,PrXC4SBbZH,627476,465726.668878,18abztUe8W +4690,890928.754156,NpvSFFDHdp,325201,953061.764224,r0dfdkgncT +718404,963001.439137,ihadrYLRcV,560829,341016.810722,f8Wcjtnfy4 +159612,252036.815998,li7lAIvQIf,393700,468369.323097,NZPSrr6RNO +667905,993968.350499,REQo363mHj,100053,278285.231213,LXei1NAkN7 +298991,912195.971651,txq3Xen6B7,842064,997635.433307,ldMjeYCu1C +477786,918124.409861,lNFvr8IwXH,993132,709935.145547,Vi6xwlG6kF +54072,88524.530502,Za7UeeuHNj,588396,131962.206563,rC1GwtLBZg +844684,560089.568602,Zg1Zqcaify,412480,61103.057010,onCNrzkSaH +315712,146293.572606,H9QMoxSz86,966413,638266.132523,w8dQ4p6HJz +570293,668782.483044,7vFuXnLDTM,145028,709251.393264,1mP4GRHqx9 +348733,195839.286816,hPse2NsTQ7,123171,237140.364465,diCE5lc723 +82490,749102.540296,f9QJZSHlo8,883175,338426.883280,ulTPifqrW9 +402940,486645.001832,mI172QxJTA,317284,977696.955794,7tthK21oSd +303419,187420.527336,RrKqDC3ySo,341384,303018.793115,XlM7VycHm2 +379412,14117.179173,fwsTl9o1xB,2753,518941.017572,Hzxio2GwcA +774743,41096.652316,d9WrSQb3i3,296645,27949.748394,rcg7mLTJOy +348496,287712.248771,C8U5uXg3ak,814387,349761.487288,E6CFgK4CZL +410734,706157.457825,epjEdZOA59,141072,490759.721192,NE3ov3nxrc +874311,626016.772529,8AVP7ryXb9,708624,979452.996799,41uFvvIMTd +1216,912192.523303,ySKA08enRS,520428,869303.404120,Awppb6meQg +359578,563321.329017,IJCKTzMX4W,579393,947448.879831,JqsAKSV540 +164004,166181.266671,vXytjasoXD,563029,6636.808796,KmCmTs8Ews +463357,945125.833708,z5704ZOH6R,977029,692096.949985,x47RXRNdAv +71725,154934.402263,3poPrL0EYq,86196,391257.113353,47GeF5dFAc +363950,313517.780331,zFUMbDtV83,956099,570462.375414,Sk6PpEvIJ3 +146882,546373.407450,g4rYu4UOxk,732881,7387.215366,7YEAP5z72z +231412,709002.349941,FH8NqY0zbf,153896,231956.705798,Tr1peXsTBa +675883,701361.513614,vEg0GJchUn,513206,80780.411899,dnI1bgI0g4 +388386,485611.391095,jazkwP47Rc,61838,922666.203978,ygozhFXRU3 +269162,97107.785319,pQ0LvXvWOn,793417,680890.585573,6cqVOBP5bC +283163,17052.273621,HAt3wcYvwv,700357,541045.849323,Ih4UowQwP3 +508950,608279.422746,6XsoXtgCcS,863240,906396.332356,Zq2ly1OvfK +136091,812917.268992,onu3vPXFlP,761611,834311.238507,uOCMhr85Bp +307017,759579.113659,kIBJ7PEqzW,867105,603344.128031,vr0SbEZFGe +660049,24516.434965,aTVo06AYgD,532975,680759.311304,eMqPCqEMeP +63266,545326.522865,B6LCGA8x58,816444,789853.114392,XMqVYlKxoV +722674,959809.636730,Meer4DZaif,433786,884063.897631,0l8S16Xwj0 +362054,427448.707609,IcOlXzbOG3,443039,61909.830382,8IafUcuLX6 +391751,592096.804289,XaGeceNkYo,398174,598456.178338,ssLjzslQ3V +510930,486659.197094,IiLrTR7epC,221247,531005.426639,FDQG1poF7a +806138,6923.039120,nvijMEpZGx,294819,211164.393753,W2x060Ah0C +945175,260292.930497,QEGmgdMjMf,17148,61814.193148,vbdrekcRy2 +446840,138093.702833,m4CjHnp57e,461613,28336.291430,nOr1zQFHCs +102261,589403.823209,0yoVNLvKE6,17744,797727.311506,0KMCVgTWYk +223825,141661.892554,YGqtk4ZFo8,437169,464779.988933,qzd6kCJkB2 +650832,677439.940799,xiwMOOpL7B,782641,819509.763939,ulG0U6gYV7 +472487,403232.125887,el5uEynLKM,497408,979626.738564,SOYHOXejqr +890549,846985.695333,iTvYtCn965,720818,975240.187997,N7xYtFlcN5 +294011,29896.494697,sNOwnisAvf,314624,176753.452021,CTqIuHxg9n +1402,568236.051974,jJWBkNp7KE,661053,506526.668911,eWVOxAz01N +451408,608330.591990,pZc4emeLet,408590,817095.147250,dPD52Ph407 +229565,61761.722668,6MmkSZxw8v,563202,844592.402763,MpkCnO4tQK +759673,711980.792861,THofb8TJ8D,800470,364100.709822,8fHZ7OEdEq +651425,268628.115746,DKNrF8US78,964007,598142.839153,UKVRHWbrvy +551424,479409.843599,DutYTBCoU9,849776,179587.648814,Z9yRRDOQxi +539595,413917.280071,m0LC9WPX66,134098,889502.073416,wwtOaeegSC +73741,43328.831034,2bRYlo5Fsn,827830,493647.378740,04xQcBF7hU +522684,237590.622713,Tz6rnHhtMs,964931,670209.722293,7s0TYJi0WV +773479,328549.536523,hK8dJmpphD,758963,769228.703993,XLLearsUH9 +802567,760410.391047,fjoB2p5vvj,990268,750359.043823,HTpJeddCbD +845811,450861.996815,9DbpoC4nq1,141059,870098.592338,FPFgXBpI6C +196935,692948.356440,7D4OGUEiQY,761762,783930.906661,BWhu1hcvxU +601081,531089.135098,KEVbJ8PabR,687981,253577.824151,3mZhAHZRPJ +771792,654389.595537,9X0sI25qBt,996581,551132.396268,ZlJTzmHN7e +939975,72873.093915,VIVMKnyNo7,308958,829372.612611,l27XOaAmTo +63739,515110.131860,lI5xQlZYet,51026,989487.271292,jgiXxsAyEy +574840,490788.680566,HoiZ97qI2i,905198,280280.886591,aBU8X90xmR +958469,247126.079153,Wq7sMvEJXW,54994,427298.894482,VDQIhAyyJR +266359,989531.980091,Qbbrl5qpzK,979968,966650.835496,1b97xc2GDh +955810,697841.880958,WEc3tQVGZK,878808,322932.504960,66LB0HCoIL +772704,583067.955900,oHL8cXv5VB,308945,433799.474468,0JkFHqOFKq +564365,575693.404444,7AcjogNb8j,232395,93399.709136,3MzpMW8NRl +209122,802523.068583,7Okf1WPUDG,211418,64426.917247,AmBfvUgijU +580180,94009.570252,LzyjYdV5Eo,364460,801308.038603,rR6jbk2ATQ +43469,342583.885340,eRtMtUkQia,673820,408593.590864,8btJtZtobh +940480,638741.903072,sSFLtvgZLk,635094,549035.676183,DpUxio7y1E +560326,816392.035597,Y6jbfUsqI8,660726,698383.499976,JKHu93RorC +916340,491545.178299,gw6o5Q51Kn,631710,481224.328229,btIiYHFiEy +917016,289086.638284,OPvjUm7EzD,605504,235100.738559,cFoQM9TJjs +877872,667000.881219,VAUErwayj5,600686,825540.005417,Us4iVIgZrT +109652,733291.613344,iJlc3KzE1D,359924,581469.799036,29hePXp0kG +498340,648837.585563,fH8K5UKOGP,887515,221969.491245,fhm071INZe +698048,748828.054888,LNtDflCcTe,752419,307153.803218,zjzjBT0slh +451123,233538.525597,9Xh7MWvM5v,266228,311880.476784,QZXls1TbX7 +189913,163387.269099,PGht2JRaSd,756838,126002.024226,WAxVG6Yupf +222713,904270.442785,hMiU5AtbsR,760441,295409.547141,yrp9S9RvVJ +55418,715663.926384,GgUErK6d5b,730242,235482.063480,2iSTLbsv4v +265411,565252.517338,yI52yWcrKX,295166,37461.548711,DR9I2ov0lN +706991,537407.255884,gsUD0UyBNG,915118,652605.546176,0CcxHl4xfO +747194,215005.502704,GcnbdgSUc2,554244,30956.736319,vGjTg9gShS +560708,390109.948932,HQcbDKhSiT,724880,58312.357213,cjoNe4I4Ay +813534,87052.063725,xvLZSidHOI,967867,303512.130268,88L2Ffhzla +425932,977157.499345,ylhZ00cn2f,255492,367247.288538,fXa0M99xsI +206905,336976.641801,5Gum9R5ZwZ,578110,582858.116102,UvhiVGezrz +136540,466754.484652,vqPTkT8DM8,231775,545861.879778,nJDf9LWhSh +590397,617861.770932,bxhSghszB9,32455,143858.300255,cT6jaugY0G +706109,25880.073354,pMyTLJVP8V,565156,732333.104628,UFui8lTVX0 +394715,740904.193652,Ry4HYrsoZe,152777,861305.693638,0r9kFed5Ic +660587,659784.848566,2pOARp7r46,822618,840292.198364,3fOqPM1lDm +389954,955763.865864,qqMiaBphBy,982854,410860.887356,vbinzgeBiQ +207119,427706.446815,dxsXa0J6fN,492580,405203.489618,kWTfwvWkze +410675,845844.645709,kUFeIF7p9a,105252,796014.442697,8OoJaSr3L5 +586061,39166.054322,5wCacZsOyV,330844,358393.885211,3Du2FHvGrY +687925,232120.283422,e8wxJuOVSw,324181,12509.478176,gdHW3OAIC6 +927237,258440.728496,9kiZpeGklP,863625,234531.976248,2mT09dkxJD +256162,859004.364325,KJkMCw3PwL,867904,507987.062002,VM096O5xIP +936659,144168.173035,BClooMOaTV,442211,853390.414673,DEn7bAbjzB +768702,272196.088186,1UmhMIhysO,934196,446673.729737,Ff5ja5W8WS +145463,545569.236693,2SvBEAIyA4,423848,355406.848748,7ENellePeM +754955,34248.058371,a6mW8M8IK0,626498,383717.369138,NGe8PoERln +60810,932578.671915,3y1JzeAzss,580689,796417.490942,KTUcDtqnox +996119,680035.280207,4dS2djBsK7,740217,145971.850192,3oBvu2XFSF +839313,613630.595314,zof3jbrNLg,483531,382096.441679,maRAKUsvFg +773186,82780.796744,7K7vPhWdKy,844944,612214.974707,Hx6mzwOMa1 +670892,723467.734891,kkQbL9rjtt,276599,16212.623866,FGWSNAoJ9S +246046,723508.203923,fpVEdjZGZS,434568,108308.012432,Gm8B11S1Rw +771246,847562.674061,GJLj6BHS81,922420,994336.903349,NGEJjnn7wM +137728,537218.522894,igrERM3y6Q,23979,405536.201001,q4aiAw7RJp +90502,576022.655913,MvEuAdF3ix,177930,462611.747715,kzCLvBOQF2 +2672,451933.894589,zVcfBCSPz5,363509,733908.598357,pVbIj42SRf +731489,92702.711754,WrMWhqxFHl,458993,913864.939615,ETDxqFo7FT +316134,964614.992786,p5JIBaHQc8,964232,586774.406653,pD95ylTDKZ +284389,862156.686920,JyDB2VTBUm,33036,609659.577121,irpBvXbBFs +915606,927414.836028,t0qlIG1EBB,441071,421353.141609,BTRQVhA7Mi +45558,74771.600314,L2dhPFPKzu,158245,181691.874999,29uVM0ayly +956087,212923.705903,0sn9WUDZZ8,17286,419065.974826,ANJ854p2oF +639227,96146.811205,dbwWTsKj7q,532562,556933.459278,zj6E2H0PSc +122570,331913.077156,yiuzVe1qkV,436582,557617.874104,RVzqbJcAbV +365935,991422.877351,AHltH7KgHR,73002,104047.044309,438WPXpWTi +199922,939997.003743,6EPQNMmb7z,441322,725899.022950,lV4dXrDGMb +342514,81934.129787,DeoWKchgMX,192197,346770.957527,4eZQFWkvUh +815710,675132.653698,KCK4SKWNRI,826638,854659.823288,FrtnsUb7mv +70291,536763.529678,Ff7WQ1GfzW,600767,492343.081833,fzZo0rhg0K +387938,437507.299195,RpmA3lepqD,258719,979386.035769,JLZRsWhEF1 +803690,265700.163437,Cc1ztn0ifY,253619,870612.551510,devRjBfNv5 +156603,290133.903638,vMJmUIBD96,15088,844183.995501,dmaB3GOE97 +461700,398370.569822,kKLfdrYXqU,205484,159912.358174,3Eb2UIKdLr +90214,86509.752153,4PDr98P1nl,22222,112868.673236,MqpSqeuymm +49254,531902.989318,pMfMCc3m8u,585481,222269.513389,Jc17FEyZoh +937803,993705.004463,U22AkYzRqf,37510,270141.356507,ry32siRXs1 +413721,304245.184594,RZtAYsWRFN,926378,107496.912650,17s9f3etAn +488608,977630.726664,yMq7poxWhn,88393,279880.468071,uCVBWV1Xg1 +389390,489399.019087,lXiwTQpurI,591130,312550.375515,LkixUCyi8Z +272937,131600.804056,T1h95aVine,923815,246689.793105,3utUvUHcUC +864474,498673.371700,cXNijHRW2g,885519,97853.589549,0xtH9MGcy7 +198745,136264.289099,QyYanYR9mI,267172,10225.439929,K7eEEWkTsp +457228,721351.193384,37JUOvxOEA,956015,596802.846332,lQQKmjGpuh +367789,717310.962706,w0HyotTQc3,437338,184396.937614,TdbAwPI6fK +541185,285546.286424,2WVzlT3rcB,776242,638794.508170,HpzJYB8su2 +162607,955369.514657,CRanMZIRv7,162462,137323.862210,a50C7bmPMO +645383,282197.683521,OELgjVBuvs,215395,755890.058035,o5eh1FqFKz +197465,444748.224042,zjFVSQsLfW,860557,421314.875293,9fQLVdMEqO +544350,795743.743737,qlqRUzX1Nn,358404,95673.494056,9flDLI8mVj +465494,290422.860013,192sB5Xogx,267318,926308.386452,g3bChiCm4B +74963,822679.397919,S3XweF4Mmi,175171,587906.746380,I8PfmgDq6B +433006,179898.007091,E4MZgRqLTT,859640,923431.556475,Q55YEHhHTe +472474,827769.243116,W1p8b2DcCk,418367,819845.272927,DIaOhhTKaF +258911,169724.815540,37XpDmoxgL,339056,315696.436824,Hqrbn9Fsu9 +588623,157454.953911,VMO5H4Hjn7,451623,586890.096103,223k12dL8p +671383,906133.449008,pYa733Wicj,726307,966996.471137,CdNuhAEkFe +653890,866382.958612,40jiJira87,578684,132380.838952,1E3L6I83zX +242696,609676.235819,5l3GhAijX2,511836,71230.099269,MZFiaBIJLf +973763,384674.567610,1M2aO6Y5rt,497612,128349.065069,bI1ZYdnmaG +943734,593409.549372,A9yH8kSNj7,706892,952209.369697,QPjyZMKk62 +580276,458710.912453,GIK2fvoD8m,850601,2029.465525,3OpWylttwI +591366,7134.223624,iB0jGMgPJ8,41860,909081.389444,msjqSmgVUo +349473,10797.524605,yAYRqz9yqF,577970,433046.111723,0yE1t3sx0r +162416,673966.287663,rvnU2ourbZ,787751,256497.746948,FPSM46mzmq +568850,932369.059375,hhVaYeQF2I,772917,124261.517307,vs7RSISmeB +71952,330100.255052,9uNJAtmYrK,807777,749939.743868,DGzInopIeT +521407,600293.864530,IQBP5rAC3p,500471,336858.805603,dNmQIrSt8l +322424,716451.686351,pMJE4vTuTl,388435,750067.477628,vA6Md5pyEQ +163856,575835.951939,TwDEezK06k,250935,897800.797165,gehTTfIIOY +183195,171895.665167,JC7xQD5Hqd,545132,435389.639662,OMLDNO80F1 +738684,546228.380104,wv3QXrXX9q,539347,219787.171768,fBJIJ3dbkw +982809,364522.202170,U4u89N4wUe,87316,316114.000915,iUCX08RYov +558594,6213.688154,wojFCdJKYe,599811,211642.623639,cPTC6xPtYD +192056,532670.897696,iGp4V2akNx,707382,79906.099642,uOy4NNwCjN +784143,821282.300734,D4IfMe3DsA,187051,307298.813537,mxOjwj0nqI +288655,294430.126246,tRi99x33LQ,658203,455472.250869,VAPe2vxi0U +925282,21657.370120,fnKHuucBjg,968981,499196.229310,kiLuG1v3o8 +426103,908426.581742,k98MgtFJZZ,848682,538886.157368,cb3uR7M1n8 +695818,109445.367428,gO7GvoNfE9,41860,110650.967642,gmv5kK3gga +594917,958094.976719,Vw8GUVuQyO,316564,398133.007551,kO85aQD7rZ +652466,698391.755414,FyJVmM73E8,609366,78740.895650,YA33D3jL6I +834530,623800.795447,T0Yae6cKvc,718137,200014.459620,gvAQ4Tnyzc +917811,581271.261625,86HxAtomP1,122468,562299.577690,ytvb9iYQ7D +538155,509104.391125,CECfFXDY3h,3722,4871.837652,YNvTLDqoWn +620010,169067.296537,fqlDMPtFDM,340,138917.443333,ExF9UmOGT8 +105871,412640.088435,OS5zUscWTl,927233,472571.728519,kgPumV0lN0 +566627,333884.297049,KkUeokceef,127977,692527.731341,xMlBdC7FtP +987425,547176.705700,RF4Fh85gpf,759120,514138.509267,x5iQqemRru +608089,983198.042546,QBqBzAguZi,92082,84715.501496,w2rEO5aGSS +164914,444132.903591,350Im1Jhwl,625979,391617.740760,k7A5nlp2bQ +35547,615526.340219,LZnw7NSTpU,423728,242303.257507,e7ZE2LdqMZ +221562,186905.375099,1cFaSBOsPh,433602,687550.012737,iRFpOwDCKw +927333,179176.698604,vCOTbGeqjn,159624,863319.332755,HzbZvFYK0b +866196,218594.295376,ENqWLS7xRf,847476,791147.850088,Ur9omTkejE +643064,935880.216293,CUvaA9Zaxa,663693,670843.800414,l6PS06UQuq +130360,345496.422435,iQxKX4sCOR,56136,66150.514377,8j4Ih6itlB +983625,538199.945126,KRkv05NAb9,518352,474031.579279,dZvx4cKLSF +453459,979243.141316,1x0ITBqYKT,128145,297817.689497,lI436K1egk +526524,87614.123721,UVf172qS7O,553355,134602.154878,cT8zG3KmY5 +757166,691323.516418,TsXYpVmejj,871768,812462.525130,fzN9aXXswp +58234,21144.383456,b8oKJCzjrQ,117170,228096.047346,V9AO6c9D4H +57102,651242.979550,hPYUxdxXuR,60626,192143.066863,1FtsrXfbxa +137411,378009.768238,bKlsPgyeyp,129263,855227.489498,mvcqQkosNu +712689,727791.894008,stGwYdCQqz,467430,46478.381401,YKFaFaMJcx +85985,194148.558867,O5Y1eXOhwO,876710,953215.458532,1WnQvSWxZI +672035,113934.818872,kISiChpbgn,348749,264144.296289,hL7pGTP1Bq +924667,973930.967289,t9Rylaoz1S,697975,669811.419100,DReL9hGuPS +841882,881424.637903,6kAhZppiKE,666087,512748.410569,zc1RI55niz +623940,401559.390024,qS4z30jeVf,723587,307962.156870,SuVgmNVXAR +878028,707212.690717,7W3mNMLPhO,796983,158991.928021,4cph44JWeO +724617,794345.942098,Uj0B80KXsQ,430620,120661.526718,S49rFEBGF8 +16271,780886.555999,wPTINkOPN8,787491,565174.388743,HdaHuQiFFW +881820,450154.097970,pPNvmjnzw3,323989,772879.959766,94CpqqrehT +788674,532724.053575,70rjuimP5q,902565,445173.512409,x7cBMxx3qs +263397,48847.058876,4pURcCjwKG,14528,886800.327990,05AdPQfz9g +5469,312051.906349,Ro7QNhwb7X,978763,537446.207984,Zz1tbnYZSU +699191,285203.078361,c77a8xFNEY,934926,837547.550683,rfpC15Dmec +982215,124115.920450,Mb8VwPREQw,527082,735003.758077,dPDfEAeAuv +947916,175771.511571,NDgB7lRFmw,831184,213238.396444,GOyQ4EDJz1 +342193,807494.306084,SxFO2sYJD7,696558,830295.398998,s6aZCprK42 +737330,943409.189312,Yrrv6kzOjY,104917,87982.715968,6hLleSZDr8 +38568,859163.199340,Dy7IUB0aiJ,458024,992739.332414,D60UO4WrA0 +757310,367429.762703,IMsH0rjrV8,149278,179365.468087,58QULQVgLq +97507,443014.448429,0NRlj92ol7,705216,352927.034525,W7hoVnPOrr +664836,637044.933700,XoPmtvjWSF,357909,656390.689984,QqyXueZfll +764873,217350.702422,DBWsu5Mj9x,791045,334579.536427,U1L1kV7ONh +766907,655470.523407,7OZCSZgnWv,651257,656564.023057,SpksM7gvEN +893674,610013.525417,GnDL5dQnGT,653259,567043.219339,uN4H2QLtRI +694858,938247.169259,jYFGhtZtnK,115130,440143.621127,WjHpASVUrM +857164,128688.159218,269M3sXsJU,222738,34762.400369,HbAnk15u1V +679157,728913.321359,PDbyOphfe6,888601,149296.063119,8mpTSw6eWR +707223,872136.143996,UF7YeiuvRc,467671,145548.634798,WHBN9qXcVZ +518379,630659.288553,b4fwU9WR59,46286,555810.928832,guruqASJoI +765556,227215.192708,Ly4BK8doBJ,69605,587756.054891,2DZRH9mnfi +988853,760097.854187,ug4rXMZiV0,174626,751321.278695,ZZkcuozPhj +743503,71276.430284,Ka49FBvPO2,376211,219066.605165,PvxbXsoxLq +630290,285845.653244,tgdn2rtqOp,43655,311119.229687,wzxE4aIyiv +230326,8489.362801,2rOyGTX01j,95709,992019.232374,bjqra2i5Zt +717734,874004.131827,QXznWCTX5i,324560,832396.536216,Anbj8kpo1B +979027,137296.287534,3azDsxYoCl,96897,13537.044247,dKaOy693dd +610668,879608.252429,g9WRirmlOv,645074,185168.564021,s4fcdLQ7Cc +908590,491692.652661,Jy63eAIzct,638247,898357.237653,QVtLaUM57F +417839,780498.312381,3UVthS8fN7,79815,945375.461367,WDdBm6eW3d +672870,885835.067771,uVFivsd6DD,478724,242415.209007,SfKSiDvXOk +158508,522365.033412,juqM3D447U,680874,510900.890218,X9b2L7Gfdk +343645,8521.244220,ZEwivF6R7E,884560,994886.733188,kc8wRSlGTz +233655,804121.770874,BWjVsNbEFU,517085,618411.678812,pzpHEGr4GT +72799,482704.574927,YU0wSggojo,723744,856468.111540,b44PSQQVGs +673765,415265.988316,iRRgoPHFCQ,12328,790498.806027,XJw8nchqYi +809721,275872.411432,qpHfAZZHpn,688327,833209.679970,v99fLXq0ir +743237,249680.629442,UDh3xPixPq,322312,147291.839348,swRruzvSaA +910923,408377.737040,RY16OahYO3,675393,302737.197113,oyNKfuamqw +890117,826489.642306,lyVmGzKXd9,530536,584631.261026,sJpnksUgLK +306770,830618.202089,4xJ3QML33A,34391,607636.141150,6SjG1KJQwo +94671,447229.896922,mSqbIgE6Qp,363020,968891.076041,IiH4D9I4VG +963454,223664.817545,jeFI2zHCdm,25649,752682.952341,MsW30nOliH +4659,463433.176738,SNVXlnifk8,94941,53295.720344,J7o3JoUUlB +661467,599802.001260,FYbg4OSF2p,692697,508494.251551,QeG7znyEu9 +19363,988472.302632,Wn5PjVFDlh,718103,173415.921840,j8HeX9epxo +32959,955623.994353,W5ECBef8PR,105979,151826.286723,EaVJ11l3Hh +590791,200050.457950,w0xvZQIPNn,307144,499220.203220,ox9rmhLhtb +561740,376984.428686,Y1Scz3J8A7,230973,258253.683888,H4vnyjS7aT +551321,528062.104333,EFMZZVDHql,294169,511533.639531,Hhnrmg2cIH +476239,637194.586482,xbKrCBBnl6,451906,722659.718740,7qv2AqQNeH +246079,518476.644000,ikslb8GSxV,349535,777063.393179,E09jjY8oXL +869339,324844.978512,NzWjakOC1A,872649,591977.596897,0oyMmiMQtx +676847,598861.333066,NgSuwOfAtA,493022,990020.168906,Whoslz4Tkr +190052,587862.206347,Zh0YfAWtJM,205375,5926.471444,jB8jFgPqoy +993784,695208.343387,TeHBTAzK6n,288264,682608.870488,o8UlfFL1QG +445254,755924.824980,2lnjUsBy6N,44434,108559.589091,4qepDDsZ3X +803440,788942.312232,JQbDbOqBYT,459169,113054.782532,HLdMhrxWIF +233545,748996.331837,NQfwKF1Wc8,146766,194312.832201,2kF6tYSzDq +129619,990784.810170,pyFhzeCcT2,691377,768100.692161,p2y8qMJe8m +937185,784450.449249,lPjDzyhsmo,967255,629357.433103,7Hy30S56L3 +862444,454494.782274,eSF3dHCKCy,794192,708930.550726,w0TUS6vvrk +864175,898032.180977,k5dIRPn7vE,33057,4817.133261,PZIN6g8HMF +84677,685652.817755,ygRLiXbRGr,782558,410904.856338,DtVNoUFEBU +365109,407071.156168,HzMXxnYt2c,542648,702601.136617,UwDDcQpuK1 +128511,191132.846280,m6GFx0UD9k,339007,718822.852033,K2DMJurMGA +200112,475737.114199,QstmFfxoDG,89229,14253.065939,JOstr4b4t8 +876210,832925.783437,SBbBhj5FBo,677743,534756.199307,PkHmSFnSoj +270128,927083.313302,QQpmoHs3Rc,905182,19201.228623,7NZOwUEZXH +873828,888950.456582,wHZpvTWygd,162598,888118.344715,ktswvjWqmW +413767,159067.843980,a279iU5zOr,207441,867855.418953,nryVAytANv +923647,343769.068592,1FVD926h8q,649520,369177.114361,SU6BaY1Q4E +483126,986832.710434,eTJ2dLOZnY,62585,554560.476468,GMJU25R68U +978455,811955.782659,TxsIs8zYRd,988111,402622.645095,07ljTXA5x3 +201026,590048.025856,2bpnGa9GSv,429782,246733.697033,5Q1atfyQnL +385793,520532.143271,U54GoF4kD2,18744,761022.942559,k2lXe7sXz5 +800577,443103.004918,K0fo3OnNVE,821394,170053.806711,tKLyhZuQI8 +634239,116071.778571,uQpEGN3Ifp,468117,615018.020752,qDHhvCChDO +687704,320448.173002,U6xluCqCrF,474361,896502.866936,NDDz58hTkv +414141,535157.323609,PdU6waiP0z,318356,454977.841086,VtbBvG6pnf +801023,509964.797608,qlZIJWCsbm,618459,460600.750447,2438tfNXur +777356,305952.123890,ocb0YHtSpV,519391,625559.143992,QnNZnucpAU +538581,881236.023544,0eUu37iHeu,911298,700742.649426,64uNJ2FWCY +997065,64869.746443,SD4ZEu1zvL,20371,614889.096364,hg6rdySojP +404722,306953.380882,Q10y7LZOVF,139576,8965.192445,sOvRvgg3fF +856049,628581.291428,gKBGzSspNZ,283445,753402.709380,9Q8zczJq7d +368420,568222.724313,A7XQIp3dVA,223858,286267.317093,csXidCAqN3 +574089,698009.660853,HQciC5sczh,239404,114351.326489,UbjqXQDryj +781478,366770.669265,eqbZVmi9tD,467266,818726.923983,xgMbDBOYyE +294091,941066.357513,nDC6R6hjwU,606603,47415.428634,BN33ogPK8C +830721,14847.144135,vOf9IlPVTQ,302571,958135.435565,bj3dJ4OiZ5 +769931,99743.426593,6pQv4aT9Z1,444083,145338.126137,glMyLp2itL +524234,77182.532048,zjxkdReFBt,520872,734028.749395,gKbBU5Kjmc +690654,597030.026062,CACZHKDwAr,24018,704949.724585,PsVjDe1NDn +728265,831498.811160,jxrevTPIvZ,186938,863189.432014,cwXwzshXeQ +105412,649279.276475,vlnIkrC3oH,779933,233269.693839,bcj8mbCbnN +99535,463500.687225,tXEbL0RkV6,684763,792591.982771,zXtbZNeql8 +592129,243863.452849,mYSXEIrUnh,809726,676626.348990,AqeYu7RowG +985015,394463.479243,ymiX5EvTet,895734,395551.916508,0nMfJLMptK +966618,225693.615207,iAhVJlVIAC,28874,908236.167776,IaoA5NNBJg +575378,703000.611257,rtu6inmhLs,917715,127604.629847,syxd7ksKA4 +591764,280325.162653,11ADlBnsbG,894103,12697.346374,lPGAF7EpHJ +488809,266709.138141,pa7uMa0dHL,989442,894364.004201,vcceTE00Yy +755335,525870.678469,R0Nag24Ky4,246266,69731.574942,GQ6OqliNlq +123021,632623.044152,sEVFTgj14i,748467,967121.380922,DnWYIvT4RV +574347,111743.485000,T8yl7yAfzR,676201,441441.303806,DTydW8Yvu2 +934955,976180.578590,jljqj5dEiM,806237,831114.089662,hw8JlCX3ib +262985,581010.200224,5iKw2xbED0,618260,834836.102941,uolbwh4XgX +322228,712418.241909,fXuThAKNzS,175575,956532.761467,jPgIisxa5R +85794,503212.187123,pYRgVGSo5d,281270,662740.700956,YkZmpVNF9T +724021,467436.127686,5Fux6hKHBM,182734,740667.384520,ruCsmVt8xy +78743,234442.035121,B9QGqWfvCK,729632,411767.009758,R2xinyQOK3 +938368,602053.180025,inXylbN7Jc,56065,428513.615924,zjneW5QXEt +706461,859881.058066,mbeMYw1hwq,236065,885657.514426,BQu540QfYe +914058,694248.655134,9vJx1vVMfZ,448559,460289.231195,m09Jq7yw70 +367611,138759.975441,Eeqw6BRYe7,548853,802706.490759,Qhcu99cWuB +526180,849487.328600,oqBJnVPTg5,570855,541771.865707,1n2O9GbySd +442560,513831.723417,9QksjvSSmt,750784,648760.637481,6cyr0XeaBA +30811,488797.354148,xSl0ycNlHj,616699,492181.060822,8mTT6YTLEB +885263,758059.106930,pLrU3LrCdy,605586,185160.015635,EKL5N5ZD23 +412876,189558.140635,JL0BRptgby,139786,64239.665539,sgdQWHFql8 +935373,823164.499049,YNVhRehW3S,135970,643781.334639,JOeCnDsxOw +830759,788650.889145,eu1ZuyU5vu,145534,110269.937976,OJWNUxST0T +703791,703020.055307,NgXWlnU3su,743256,356030.335088,iFWg37YTVM +971695,58058.425808,Ix9nOheds2,163467,124905.935047,qa2teyfPIe +999153,126562.241275,kRBoMV5zTF,768052,386533.547493,yNMBaHIQsK +212151,24460.143547,b4UdGKQ5Hv,517902,142027.824671,5RzI2JLIsI +281552,317959.762696,CVlK59Tigw,916410,162607.684917,CuIngCOK3L +825059,391073.986189,dZxZrMzpkt,992706,903562.637314,DBE9jKqzQA +986721,238494.357948,wEkfA2PcXr,930567,187488.151862,EQmlv17XzL +167693,46123.168587,1rmkcTMk2O,602911,776361.257219,f5Dx5OU5CN +576617,691862.662280,en1AsIlCfd,993893,59025.066562,W2ejfOX6h3 +356944,685825.472498,fYBoVfJYym,582426,846081.286444,5qN6phknO9 +557945,723225.056021,TkAPJ0vU54,150634,452199.339705,YtSQgaaP4D +890175,207448.874709,YONvUQyOTL,329339,476722.308686,sHd9aEiP5t +531906,994331.271306,iYoS0oEOcZ,647293,620460.571373,pu2ABmyxr9 +311928,978500.660719,oTYgWYkufz,901300,121734.518070,Y3nYZ1fD1U +642544,259256.422048,aRI6ZYzApF,203056,367864.640513,MyDqIkolnk +998922,254357.972434,0Lga1FAJnQ,652103,85838.996069,d2yN4qzmRV +447619,39938.346842,8GmMYiS9Ed,794355,546073.643938,v8JHfO5hoz +242070,31207.225045,KSq0KZdehB,816651,967751.977226,7JvllY4rGG +719819,86353.857435,BjVtM02wEh,361579,737147.799041,0ibwj97wB8 +85072,45853.424604,yU5LHhsJKU,481070,233920.642871,UdJXHwfH63 +502894,699638.648688,X3Gxpxm9eD,937829,512539.649788,Mm7r7yLukV +323510,971977.467257,NHno3V3Nji,725849,461645.061417,nbpNNVdmah +284190,60824.686651,csacBEVlp6,806036,780473.338020,kHzr5CiMFA +256746,959218.561413,dW9LPDFxhF,378397,189374.649047,ooH9pdqTKT +942740,228491.011827,c0mes7f0hS,111797,626713.361381,0udeK8QQVJ +533387,486976.628686,7MWA23KCc2,327269,915167.708016,KACE7skWxf +572560,556045.707480,iXrHvqJu5Q,269507,332967.991241,52MeUCd9Bj +411923,678780.512810,koZKEcgkWa,979933,755293.258459,SzsWHPwzIx +543545,385315.179792,he4T6heMWh,813318,224749.810324,GqoADvMH54 +171088,254545.236739,sXuqLOQAh1,260605,678184.694291,GO9hKbSoiX +163769,162808.220073,FeShvdncS7,952263,10312.442849,LQs4HxgO9d +626634,51921.833256,cMKxhZSIIF,310309,278457.587188,lw0g7haiVK +578115,108322.572049,swjoOyULEc,499503,450812.508050,rgEgjO1MkK +86847,455051.750716,pYRyGL5QbB,366686,728815.573534,NaZiBMehxD +658984,126980.240790,7iFGaOEja1,573645,153598.580315,MEBYz3Qowl +711404,853483.423886,ya6TYQvWIg,910331,807194.361501,2ZBLyfcNrX +160311,906957.539848,BhGkULdsrv,957344,778774.098020,a7o5GPLIEt +565655,836456.182687,mBv5sD2o0c,869465,403026.990451,rfia9ZjyUz +876080,869560.603808,S3O8tToT8m,896304,901094.476756,YnOqGp033L +317384,244618.511121,owsycPOxBK,169661,563209.154513,1Zg823X7ht +7053,698028.024241,lnwiR4BZ1e,657380,413077.301833,9D09GirChc +31186,286398.512992,J78TlmleDL,346015,233745.242248,S7engFkSQg +788436,404910.924475,BRH7GadWke,729931,210445.742049,Ksai4CCbGf +471654,161521.116789,GvW2nv5byg,523873,27200.639052,PTtnwPmUSK +711904,386282.238088,vJ0KRTR23V,339077,556999.434569,ZUootfkLpK +508602,539697.104046,pKBDs9DIdx,993376,986129.560667,JFhjfJThPQ +193691,219718.840824,A1tsqBfgle,134649,598909.703387,npLL15OdKy +77858,442873.725439,Y05N1joZQx,760440,759350.302987,9AKfRBk4CF +692689,555228.056196,PGtStiKNdl,61696,532323.192650,aMjuXWbWHL +206343,703440.046678,62lP9hW277,345136,208946.123034,waTh8mv242 +696685,795181.698150,L3hURioWfg,357807,556682.350992,EetfobXjpp +666013,759799.235153,ie9xPpquAf,752512,294006.328945,HcRgNOT3Jo +297601,496007.709495,fyPO30pUOz,257897,912336.349910,7bIlffrk5q +991620,72757.347384,6t5WYoZ0M4,262979,568521.732745,vSjHxvdCQU +857646,248333.465736,zYOeJPUAbN,207059,299326.952852,Yqnw35AOry +508523,148111.910415,P9Ssy5L0z1,164940,99664.223127,23bPYVdw00 +878767,576431.692306,L6eCNeNvSx,880164,85209.614122,Jp3yZvZpJ5 +617297,133663.990534,8hoFWi3Zcc,271009,156406.056032,OfSkGTpE94 +198873,75808.277668,1FpUhjV0QD,784302,738604.608554,1IavMUQwXd +188630,332020.143074,n8fam04kW5,820281,984108.562115,dwlbATXKXL +827321,281047.943788,Gj0jOPYE04,772596,580198.996188,HFd5idmViI +429110,835602.086447,J9AboCP2Ky,490397,891752.099593,5TyUHdGhnr +10153,432221.503464,94jGqrUgwC,364305,296133.697077,mqXCWQMpTJ +408574,432849.030013,91JLB8CGjd,256093,353401.639895,tJid916nLg +748192,595796.564558,FEDz1D96V4,555799,39035.414325,4hc8BVi4FT +486543,357102.805212,9EtenexSQj,541998,870811.612275,H2X1mL1IfE +658717,826780.574039,1RnHDJW4Wj,167655,62580.915768,IpozDR0E5m +204177,247197.159429,CqxcVJ3WbP,111829,936431.718018,M3rqniVsp1 +101578,368683.443900,lvcPwifxbu,371152,821244.784500,1SkMnyHVMl +643931,429889.242634,2ofuDCz8gy,432694,148617.327569,tkcq6qFwTH +299113,148328.113483,blyCmNZG8y,89817,983157.645921,uqI9uUcBe0 +170826,449008.882716,SYZYUHTuqH,943226,794640.476865,NLpWqVi1X7 +834864,735998.782805,jtJtt1U4Uq,388991,611737.749275,VaVKV9AGSA +795739,24734.226424,48LUt7WlA4,721768,123412.540171,s43vXt3OC0 +520317,165213.384029,ITxiAAiLkO,399392,996346.293761,uDZVTAdzoc +389476,357563.644789,gs1e2w7V1M,562968,70368.439486,L10KGxuoIA +36914,209269.608218,vO1wHSAedK,342933,34888.831210,3fcfj7Pfdn +660260,894793.620693,ZO2g9LgpzX,427208,934720.977238,2PiPuugwdz +224429,281890.026894,iJyhvn5vt4,605348,175503.631240,Le8fyb94YK +145281,950219.107121,IkO9fk7yIy,433813,495523.753840,wUcPUrJMLy +247258,840877.288903,6ZvcYdPlSg,740346,569644.520778,vwIp1tnP7p +440985,858118.934729,qiKtLRi0Qs,38966,460125.463166,wzSt0i2MMl +871224,629384.188336,fJU5fzWgKs,300826,672714.217134,BUHLNST2Gr +379488,725631.178029,916bnxV3GZ,438033,59324.816182,6cEg43016I +912254,313908.910736,kld2RGtESZ,194222,122460.789446,2Z0SM1JkLY +700528,535942.890067,jQMldw4KKX,23931,441179.733692,jSErWH09Q2 +959827,392740.526346,1eT1Oks5cp,701243,928156.145521,2vngWUHYpK +947851,772801.423306,sjlBiWs90g,182411,40724.788958,f8ufxx9afW +826474,750472.557134,Oks7dx3aHN,980881,524065.880124,69012JFtiA +619689,401863.976988,H6u48MgMtH,201717,486341.627477,pTflEi2l6g +144212,882803.690986,QrOj7juI0Y,809830,417554.191415,GYGgVbcRkJ +141485,993554.274695,5GX5lYFPew,636573,191600.512081,kjbe0o6ngb +334412,828027.306780,HAHao6SU62,558314,116333.463007,ZWJZ8cfMp7 +78177,652758.616145,qTo36jANRR,752096,282289.301940,hU0vEM8e1h +150551,452847.279441,4JbhTDx6po,299654,718971.098682,w9kdOxKHax +424442,638504.939762,xToUyFaVRm,517294,868953.771161,a5eoFsLueh +943802,586647.178509,crmuu6Bq3N,58385,327906.511130,Q9U6xScYP5 +783577,656388.045391,CVU9L4kVjk,59235,229884.565988,4LoDmHjvc8 +276629,367515.183866,1ogi8xHmoH,694614,206515.814010,ynNcDFrHQM +504004,504417.044233,lB9kAFRvBP,183636,12207.095547,WALgqRFpGm +315835,771948.820429,wVs3e01NSP,506615,998969.554150,fEvMRJW3AK +277271,838830.641309,4HxAZiJAIO,849763,156217.433659,MGu7VFxoX5 +332229,651696.859063,CfELslGCdW,387683,107113.836486,JS0yWrODx8 +999772,466575.041300,D1iLDWNd3n,228925,733119.507404,ZRo833z5xG +348859,532792.019361,RUVeNpzwYK,649141,199450.097626,yZKZr3JPoT +462048,189927.444076,AEiFoAkp1s,975520,831088.795931,3KFEtLuK0D +943047,172066.011981,tuYZi1GpaN,893029,348600.493040,uX3Ko83VBH +810614,648839.437969,kecNiWabXY,702810,567959.524828,aXWlJdGWHk +693045,520605.975898,QWF4CHG87N,971372,646680.593801,UccWjO14op +502151,96341.997640,ZpDj7ov349,207108,577374.194786,fPdWECDywr +490672,388079.410677,dQA817ijkx,223833,208559.531268,26eOSLl4kw +218501,631779.686069,Dc1suVnYE9,658923,969127.984458,VlWLOP957u +7343,518804.132619,JDKdvYE0PN,108667,135413.517323,g77Sgm81yI +789076,71822.137524,PWP0eA9TFa,618040,462007.187264,DgFL2mQV0H +39119,172781.877900,cqOCYtB65O,704895,368308.242274,En1RogVfmZ +353295,785584.653685,F4NZwTZP5r,582291,682127.560610,7EB0YHqKzJ +154034,601475.748200,ymgfu2SKMQ,433340,222187.982820,F32kP8Mfae +164018,942964.504352,nLqnz0BPX4,933874,51534.503169,kXW4NNGQh6 +155774,805669.171215,1aB2P4OMYO,451769,282339.020034,XqodmqfZhz +3761,94294.012490,vQelGbCIhI,304235,249963.542882,YQrDgxoVag +904222,974820.312486,kDnnQzRvpj,627138,690911.699240,EJs9rHpGyp +528895,722267.246877,P3r2kgSKNF,213099,617168.936059,s8PCbnvCjI +985774,545580.352939,40P5DgpfzK,788361,865659.531487,w61beIzHXf +930010,569271.696167,L7eN1CXcfM,200322,608928.979963,qt5wNsv9Te +818461,800370.225434,POa1IBIz41,539150,471456.947772,kVAr0twrbf +888355,236159.042190,8OMVdT7QwU,387847,40311.477126,tM2GdqXr5m +287455,684002.134822,SDcaC6iavB,851970,117342.128143,CT7KHg1H3G +85931,829739.809127,a6RBe4T7wm,337420,397892.675622,GcZXx0Le63 +392561,476404.400604,EjBrB6hN2r,561394,520932.023845,l6Gunz8cRD +455066,959325.926793,OJET6ipv7W,125765,115115.463761,uJocdV4c23 +761717,448192.825973,ndDqQr7gCN,561460,990861.283214,ojj9viVwup +501231,689360.727506,rBEoRSn1TO,949749,956664.932344,TlZVS3KWsR +114094,143303.210939,uI6b6V1gam,269344,452602.645090,EyfAFnLINj +197546,810571.297158,Li8N0TKmy8,647715,140797.260358,NaIjj6NbIM +655243,388988.722610,wUf1mVeWTr,922529,64076.262673,spNpbbS2LM +192831,349489.919640,76iq7E9kde,42888,647817.649550,VSztkNh0z3 +909505,352632.639497,lXMrx12rIn,446921,771316.850927,FBQO5YtLiZ +242457,227304.810832,73v0y81Gwj,881517,438013.321274,47VcoQ01is +304278,176845.381930,5DWJxMiQI4,334870,767244.139594,NBhN4nvMSM +801774,585379.249073,bS5wZh7i5i,153399,389133.232028,n0wmvAiggK +279539,245512.216025,Wnl0GDUgGO,77319,195783.341995,FknPpqn2tv +330752,454118.906819,P1jzHsFFsd,115721,164806.687952,hV1YBkjRM8 +672219,476181.624216,wQ53yZZ8PD,798234,423976.530663,lTFY6WXfnk +866869,276183.273328,oO0UJz0iPb,268799,540217.055265,FCNSL73vB3 +755540,393310.709571,qXh8fLBzhK,259668,166881.614604,Eixwwmziaf +445637,31402.654042,FdTohTnXJV,215257,945490.989837,C1pIdv8OUH +892715,119719.057830,9wAra7ENTY,80858,694199.453905,ccw9m30XdP +29787,123070.667206,cAsC1bATsq,406130,682257.728639,Jll5V8Ecr3 +530035,423542.173850,w2KbnnDQ2r,498174,36053.698707,12AKrqGugE +146107,143618.705666,FxkLQbR9nu,349545,499562.947165,htzQXmNLLK +872926,228199.507850,LikOLSs532,604940,519942.405442,Pnt84eb1kp +281433,287070.110021,aZOAUFpGeC,442056,181789.615135,CmzDfUCVTh +748656,380599.090566,HQz3Irl359,754511,491827.512565,eqQUU6h06q +504475,231406.174207,56ADWC2eo6,783523,595606.899793,T8w5V8xkTV +730847,456300.188138,NZii98yVY5,955036,252810.368177,aS9AgfKm3H +490923,984533.802816,CAce4Ro1z5,775580,227237.297217,rIs6c77IdQ +409192,188489.229027,NpLZ7etEyF,107939,151029.737416,nTtXnUk06Z +560138,973896.802727,6lWDl1pAfU,844154,49259.499603,BN6nRg8I2A +102407,277035.548275,3xQZ0IKWLU,544229,249033.298036,FokjpOZHpe +642171,328961.156240,9TIPZd8Um2,336131,97424.167574,JcUd3njqdK +538349,83184.404803,SurCPqlJgk,33311,215654.758963,UlxsNn2ts0 +916708,315339.483888,BBhfzrrpnl,265413,867463.412035,rYs4oPiq4I +474119,689839.453452,qmK3zni4mP,282493,374287.504508,5IZbfQJ4Mc +960341,152601.958562,rRMIjJ5Qm9,671914,594571.613129,rVLdWJRopK +318106,1090.742876,bti6m7l6mv,567719,644510.796626,RPsb4adQwT +109463,59751.240609,2EhxG6llfO,199355,998403.976729,bPbCdIg7NA +503258,261901.547208,9pYvZCIVdH,798601,2372.150076,wsyUHIyF8J +487789,751998.120125,BNu1WVPYX0,12981,17645.433852,F7uOTm0l5J +155679,277237.491424,5oP0bK0YWD,422163,393796.823153,I0IAfWi9mq +735154,210844.433519,uA7lGTIqw8,956658,825809.892854,9PkqZDjK6q +142445,280660.538381,cyZABXzGZi,522615,177668.845066,rZsgXSe6tO +114608,115092.865521,Pp8DqeslVZ,535670,265309.947062,NZyo7RQVbr +309837,140207.810289,gxHsjpflgM,804308,675214.178359,rQ2Bb7oVJR +637347,148598.352809,jfkdAkWOoQ,195825,769417.874817,5apanIUWJr +948958,757669.103543,dM5DD1gs8A,453539,519221.367995,I1PAueB6lV +111840,179965.607752,VroEj7XPWi,749680,602204.385040,tSURKcjY5E +461705,881676.561901,qsPXesueIA,762159,740859.638159,GMFOu6zWqy +887789,670200.096291,Uq747laTwa,582177,930815.764873,WWKduo1kDf +233914,146923.311937,Lav0LBCQ4J,269013,368858.682721,MN2evCK4EQ +444407,608140.427246,bkyQBv6OyH,290195,474430.546179,dyUeigh7al +290536,980873.699654,qpt1gp7Tmj,890622,217766.217598,6XiCXLCBrA +70003,664232.767097,tp9Rq38PVl,856634,293023.464686,UujnfL2ZXL +307502,935124.956792,Ink9onqoIA,452834,926718.693223,MIx9OirYTA +537823,881434.177999,FPYvDkwWh5,756286,508835.425160,yBM3VACWLo +994779,590369.996940,lGmgzVgXmf,400396,16572.112744,zNH2pYN2vT +374160,685578.306515,cKhHzY20CE,183183,412228.109969,HU3Aviulhr +734485,365798.796516,LnbFSzyED5,746981,920171.582411,4iG7e5hEIS +289877,12507.690775,B6z2xsWGFZ,45180,797000.451810,aGSJ94tyJ5 +396245,560845.725992,ixFkVsqgIP,15496,597740.404810,9OvHfFK5Rc +140269,607134.274778,ci1dYFZDAW,279665,571748.165073,XJqHcNG5CD +179013,13752.455885,wn1hGY70Ko,560124,900629.127833,EjUsABWhlu +285860,522938.608911,rAWVtogyrA,945313,114496.343392,cskCSjdNCj +959621,724858.139953,54ADijSIaM,308744,674835.079271,KUlZZimIG7 +423300,411252.636955,jJONYXKxNC,895312,98842.768884,0ReTRYBb17 +197648,22838.589243,x8ojhIpVpe,65925,431609.543642,QBp0kxmqPR +246246,165049.973236,9INHRrHiyk,862423,759108.688464,ku6XBifg74 +717613,185069.739458,A2PJGJcp3Q,194572,475115.354286,BzAY39PMD7 +207785,118673.186070,hrZD0TzqAT,611456,227656.570738,UZCOB8V4SK +830214,974886.750413,qtC1ZH7g5D,533632,26226.323515,aBH7ay4LiX +434244,208047.272913,RAv204Fsx6,402545,855264.602063,WesivH5Pct +83031,197848.362970,L7UIDn5phY,385798,636548.310109,JRRv2kUDNU +998205,637365.836492,Rb5m0clOQT,939595,731078.361166,pZOF2xayAl +211225,441863.221924,yfA5qkvoiX,148931,296602.440834,WLVzUWYu51 +62722,354951.090960,GJjbBdrAm8,181945,735018.835081,UwurYm504i +290868,20793.882544,9jXSs3wnlW,688576,36552.797367,jCriSVH1nw +408442,409166.623417,yA8LxGgPeM,409202,862748.038267,6yvjqJHMra +628292,399889.551112,zrEKGyF8wH,117143,28608.416149,DqqVIncTTL +162033,508447.750166,D4hluomiu9,459150,147036.315413,mdvytrDNZK +907741,462607.080467,vb0QsvhUXb,325463,365542.987703,NEaNTREF1o +926451,276189.081437,jvmwWHYHmi,871407,879659.002579,1s7zmawQiq +740547,252379.649030,c1RPKwcICF,841599,567168.955264,5zVEu8oIs8 +665182,381931.984625,bh1u2dUqxg,737935,461853.241408,Ous3G5NFfA +172940,132350.034371,aPHyjIYDHZ,975569,226500.145167,MgJG0RmCcg +653128,331325.747880,oaFQNlRLkC,841487,351457.945010,2oTTUrhr0i +775034,443207.677255,AFyJa1y4dv,569350,714231.323149,YmWbafpWdj +159028,925297.299942,LBPzvApL2W,630490,647274.797708,ckpgMildPU +170041,900087.498002,LbUlec1eml,612872,824529.987683,i8HYxDZb65 +769469,689011.021099,MRVyCd77XM,703151,93189.822891,TErEfSnx5H +98807,956420.176884,pckqb6Ekco,944829,458827.796754,yO5eHfm88q +692643,190097.753970,9lsuTNByv0,955501,687754.102310,6GobDIifWU +905627,992208.199190,aOoXEQvhbs,66537,918066.673000,lRAXol8S1F +380602,120348.764997,jDOF45CIxo,653297,943408.443996,oJhBY3VARu +41080,821802.912683,iFg7SddABG,96678,886466.887008,jHOEB5c9mv +928212,615691.067884,xKUsuGkqdR,718461,548434.196816,ctZRUAIqs3 +849339,30331.036120,TqSiaSeCFP,771830,821745.366413,8qZLHDiQWR +632674,201643.346710,b4SNeKfGF1,948283,613126.204055,rCGmOwoEwD +501461,480536.396613,TkWJIauIqa,930496,770264.863396,VEdfJuwirQ +413857,944814.419329,ve44y8b41s,225830,526178.972437,qUpkBpGvxT +333602,104892.915587,WOidrPE2Ob,358694,259441.490319,1gYZt6I5Ci +327717,268801.612574,od9YyDrX3Z,930906,191619.160466,7kXc6hn42J +441557,872231.408291,SJmdpCLJ5r,978731,861889.456797,tsw7Ytouk5 +962667,699872.222977,m8WIUyDRo0,152240,127279.526943,xmemXu5vA6 +156611,964844.670396,HAKFE7d8aZ,625784,907860.999339,qFhdTmq2no +212895,896823.256115,e2o5L3cUwB,758772,241892.322719,NsUg4u98Sg +463699,623578.612162,Ykm4zdkrT4,462604,445120.804386,6zCvfUrfMr +282134,479316.190748,KukKtDul5z,682200,391692.101744,ovhTx2i1zi +730523,13095.351185,VHhVKIH0nn,832954,222463.596662,tfMriRwmtn +311481,761168.880663,Kpe7wR4yPO,753508,238854.172084,CFIGalwqd8 +431791,352027.276966,lOFjZnicgd,866158,371855.523170,bLLdq0nqRV +454920,782631.951595,5YECf1zCOX,201280,353870.256587,wBQufkUxqN +334673,254823.043810,JHGw0NAzZv,126802,569726.874053,eoryFQrakP +832129,491037.526573,IdGQZS13ls,815333,611746.120657,N2usl6hzy6 +240716,740800.287330,quB8XIAHX6,537056,222228.969702,wYLnPEp6qV +128453,359723.038582,oUqeHv9GRA,111127,397285.882953,QRihRcmxZ2 +585881,661496.808397,yIMqd0iszr,711476,37865.991066,UpMSW1vdU1 +680332,192078.750975,yWLXTrG6uo,971307,903975.648868,q9Pt0UWUud +531335,217242.164012,AmK9cO0a9e,181071,72581.201876,C5c7igMEgr +254473,649647.075806,Tb1t5VjRPU,254045,839237.895347,SWhnpq0NRs +572844,312911.549405,bDEw4vS8Jx,220515,592442.580416,geNT2r4LvV +180635,272163.927167,LvXtKhKW4V,259629,788053.122333,LhSkBmxgk5 +591602,755157.497817,2q5LpeIy7T,926741,516037.492907,mYmYCVA1WZ +53435,729679.388944,ANPXGYEIwP,853259,504093.733661,ijJCN403EV +994448,585897.626573,dt3422XWGt,189097,742171.871802,0Gwj0yAdBh +540149,202929.717903,F9QHaLSejF,857731,438145.396783,C2Ln6zXVz9 +18037,802259.066220,EiqYEI8ksH,297679,103373.449420,CXO9t9QivL +539512,789102.557765,ltVE8zfGac,622557,792059.186869,HFdzQ4MDtf +185655,923376.708277,0niFjGV9ve,287792,961819.379245,iDMsR2bwwE +238298,748842.425217,d05cs1soAq,489963,853526.970737,YPlOY7HNi0 +667363,967563.158352,4M03ygP4rJ,225326,634860.121697,u1tiIWshap +516974,207147.616699,POZR9Q2nvF,371473,451189.538791,soaL5mX9Rs +90182,907151.803772,K0hWrnuGqM,156025,152813.965580,QNlcfYSdPv +171263,904090.451235,jegMgsDPNI,420490,236491.431652,AWFhq7a1Cc +54472,623743.369684,3zOsQDRBiu,777087,222322.134256,EpjJq8o832 +278774,969807.319275,PzddOPKRrc,804888,827005.724600,sF0No7VfeD +913893,53244.797259,RHFyHd7Wxz,73778,335083.275474,3trjxm3cDl +409083,680472.865366,P5MuJ0n43L,170273,52862.446369,ShvFn2pXT4 +708726,563020.422994,4eGgYFWM1T,431631,193366.602775,kX8DSFjXLJ +924518,324557.811761,j4Feyt3Oxk,397596,334804.951835,NViCbaeTU7 +212145,724896.825418,UTXCNy2Bze,591405,817579.345642,z7zabygdHQ +361643,415842.234272,zlNh55mot4,144266,620108.727730,dfvI4JkWqF +821683,29297.444312,cDYPgUndyF,443262,610393.824579,S9LhaptxrN +349888,149865.713212,0j0jpC042I,775479,549054.964391,xfIh0AWvo2 +896777,218173.266943,F9sJ0xTv6S,935371,414458.854699,PAzH7DW9Vi +68900,838781.930065,1V5SaScMzp,302462,798259.685347,5MGyZjg7FG +795590,541933.822026,kzNs19Mliy,349474,381875.184358,yZAtO09P8E +106690,79906.786168,vHkKoDNvlq,894388,681385.750907,EYbkh52a6z +127175,881918.543160,RluPXQawWC,777987,912121.892914,qHDELTDdBA +970676,1129.517702,vaCbvXXSAl,193981,806658.325762,aDBCo1rDsT +880219,757302.389028,MrjeG9E2b7,551439,373406.421015,pzy8oNUw6H +410446,99209.004817,DWySCM9BTd,688022,496820.280004,jCp0hc9e3x +482119,638219.396810,Eg2C9xGS3z,986083,886230.186447,Anfs0o1nyR +433893,855040.506504,B1N3bAZtxf,377627,200747.017695,rTaUGR49iP +58166,607224.872651,KKZ5vNIOaJ,241549,854258.292287,gINFQGlj3s +655454,849642.514428,PTjLQczdMi,557074,936123.140119,YWoIxrQOhe +116740,65955.020825,DcoKW5bWwA,94920,108398.589320,w5CbMYm7z0 +956043,202637.002886,EeNCQcyQU3,238149,23315.012435,xTFPD7TY4G +742763,154386.984914,fwjJejIPr9,870688,682174.287788,KjG4Fpmdk0 +221144,774.066527,xJGh3PctRB,343202,811828.227348,dSG5CJq8w1 +42554,303121.042113,2ix8cMJfxN,461941,756204.197255,y3Vq6PeWMv +28457,427306.462027,A8Kw7yKRtv,591992,474986.664638,Bmg5F13Cl1 +33192,629601.342710,Wgvg4AnPSf,761513,45542.660799,bty4kDUU0O +960606,962164.211302,q79VEtssIk,299044,464249.294138,0at6Q0pHfe +122939,195800.230352,UmZgqvjS8A,679662,474769.540713,lO3KeJQ6ZG +568587,375791.453553,D3VsBOmOZd,295134,967042.079284,NnvtXBYki4 +143009,368386.956981,i1FguPF3uZ,196355,666249.219420,UPKQQsqKuB +476640,777181.778657,FB6LLVUysv,915159,769944.175295,tM6aSCNwtQ +514624,860531.671695,ECND0CboZm,535309,977844.852526,hIJFKvBUWd +889675,739907.797257,bJdsRWhxu6,295212,379950.857968,BJTjDNTXqR +564228,148244.362633,TlFgS5fnjB,620151,570251.323035,p2vSHvv1DL +825703,194778.550100,1hnPNNHr4J,708442,766007.223363,QToBItz3EI +458150,273743.730340,ou8xWERoen,465795,404302.232775,kg5k4ggDyU +146283,420540.161880,ArER40WXVh,471636,518404.334326,ZTdaiG44OZ +261148,892674.634774,jg1arZV7JN,986439,118340.865518,HEeP1rjuTK +80968,181112.982368,svPRV2H48s,347481,312182.183031,5syAJQuBB9 +371587,260312.725682,N8e6YXAyTb,954149,786775.078419,yfTeJGXWmB +205276,538989.069923,Bml6kM1I0A,344802,23910.937248,dQPFcP1nmk +941702,730093.799986,9BImuU5vpv,137296,495342.240061,wAe3k5qUBv +998512,6586.048432,UhCvASug3F,660828,196675.105342,BoUrTi2oFj +446766,368403.219140,3vuXWoUM7X,72566,826928.383570,LhlMVaSVTh +615544,901319.628314,wdP2lPp5h1,699325,37939.337342,17359FRqOq +302255,779299.575559,aIPq3EWUuA,139320,405221.558592,PZYTWhM5wZ +504416,400405.054375,6HlTqZosIw,863714,30625.918063,oFp2udJBL3 +297217,894169.951588,C3uSqqwDi7,322629,194968.275599,GlcmUZv47q +641747,846662.414840,BEN4tOJl9i,232437,761713.603521,SwSQd8w0tX +90087,530730.842830,rKgcaXEvYj,577899,590420.343618,Dj2yDa6mMJ +512026,934668.787759,4JZkVabFAJ,357707,908844.668334,grN4L5ep08 +542545,417909.419353,9ScA6NMJru,806232,619456.061514,Tog04dpM0P +726430,453810.915507,VPQOlh5mNH,779916,936636.981622,US05m1eP5y +740440,551448.102145,MERWc9lr2l,126943,478736.572131,0onKGGRadA +71178,288391.809970,uL7MsAg567,80371,453988.198641,d33Zzr9VR6 +112785,406512.468908,j1sYiLd6au,680807,74839.956868,XFpV95l57h +274352,73218.836625,zYPPqSOyf1,727997,47874.793093,kfiMcHqM8f +81890,653372.876948,3sxPHGjMA4,485380,639933.201626,i65kfXul8W +796046,900842.302456,ZtzZxhQDCx,27036,682052.946033,h8Pibqi75A +802919,197579.338294,FwAMlGGX3G,266938,676531.097108,nKzmqi7nXd +671497,449751.324789,6G4o4JLwLE,214943,833532.447575,YwPGG7CK4N +124330,903075.013872,KJkQl1opoz,773789,458614.360606,wQq3Xiz92m +556214,350127.437652,5YKACJXwtI,459956,753790.639379,XxovlrA0Sk +355156,327955.653090,H2I7rOHKAH,909397,396527.942048,e5tiy0adwM +287395,827406.439750,NV8hiX0XY7,703,976915.668045,7fl08LAG3B +879047,411075.390400,1sFDvm6I4Y,4739,626087.186341,1inwaeoweF +267807,565188.657719,Hs81GA6gGc,367751,837415.346545,3bmSeKCNWR +917000,990699.202536,CjgbIvhqsv,67133,648239.415800,Mnv60ERHAg +934441,589592.870243,7dxb33a0YY,880605,996779.315247,aGGLs79Ypo +89791,336398.462561,EvOSHyz5qE,767208,463580.810628,0ajDCgWUSG +566922,266212.030961,9dyX4rpuil,919958,767708.778709,8urC3xv7di +671250,611950.899661,lBm4VTjnBw,938960,334146.069741,GPezWfo7iI +492516,481159.830381,eS1X3ZalPE,263327,188613.799601,ryhanpzZWi +33800,802487.573724,XelnDQ4o4N,744550,419733.437839,T8M4tdWZcS +96786,213922.833056,kVXAHfyg9I,105694,155046.704782,EgthOCpLQq +29521,928967.406017,N6xbRhH2hL,269868,930074.933138,SoaP5ApA54 +323050,624878.857351,i4Jtdpfj26,160259,884321.579646,Glrc7aMtkD +164855,809921.815006,zmF7wPDjNX,734148,839826.798142,pWSfHAcW1S +151647,633628.509699,6lFx5Rrypf,874180,512720.013880,RM7iQnER22 +757189,263416.976244,uTVJzpHeec,338023,339060.681886,LlPud3HHYN +87615,207933.257271,iQIibdHC0R,1386,133114.092839,NMOM1cyoxi +659546,575511.850418,9QuiofdSdH,318357,975514.975952,HrPf72Sjka +218694,629613.419655,JvFwgjTbmK,284623,251890.686687,uigQ8dJexp +416977,831180.567267,ejAJ8XViJJ,31563,361389.192382,a0ZZ0Vuq5c +299681,293264.624594,An8oBaoPfk,256706,687224.387956,UK3mDvERH2 +807981,693052.812844,IBjGVef1Vy,477963,54154.110363,hPhE7yG4Uy +230211,589795.342300,qseisITiiI,419329,986326.038785,LyZ7KSNHDg +459982,704952.200160,JwvDWC3mV3,408973,973313.863964,pl8EoZ2XOu +522983,745143.377943,0MOD4qPYkl,736918,931033.234492,lcagrIBsbE +220517,91702.020678,zg0ekDaIp5,313625,839462.710220,NheOU8QIrK +244279,141021.194545,q7SQ5AnkNC,710001,899437.969238,pU1LOpFDPP +151278,386549.967427,retiSSHIVC,973235,968506.909985,NHaCM84uBO +501727,666484.592719,JA9jnSka82,530763,3982.690385,awizxH2CRt +678278,829658.027358,ok3DUKOzAa,635930,101637.584165,5hqFhqg8ut +827364,298133.324233,MAfL8Q2gTW,552086,694742.820380,fgbU3TC4cD +881337,287048.897579,SSr5lY53ky,558410,943978.955752,ZXS0aT2aJh +208161,886258.877905,DmPteNHyl2,97103,872755.626168,e1zPkiYvv2 +742943,163255.727721,JUcrAqapNG,521093,639034.268783,y0P7dnhen9 +104310,576541.507725,ZYXGSQ2VXY,152525,599555.923101,MYHAhXaePL +174890,252420.394103,IWDXWg3biQ,409697,863406.007531,sdlo8hBuoN +735952,177434.902493,85G3eIz2nZ,145542,247038.247769,LvPmsGyjbC +916682,236811.054399,IJPz1K2xpv,708185,109084.376568,yITocOwR69 +371661,757834.062267,kIOjjHevOb,499554,161942.937842,CTR5lzgEck +282320,349104.141750,ZARBOvxZQw,557906,645964.547537,dNHl3LX7wS +982124,680130.120014,xGoVcvPK7U,638973,54373.533677,Go9eVianuv +31091,297817.030413,GG3Y4xpPxg,389306,692929.249491,gmFWV4TPhr +203588,756432.600957,KI1v1Y1F5j,305075,51203.798023,sXkQExB2Dg +875467,698611.750275,3uPLh7PMhM,639571,691969.802116,41Oxihdkh0 +182409,246907.496143,uRpCN8T18U,104322,939998.124963,oen5eZWOpp +282834,182120.341195,lmAGe0copO,15172,30124.919664,5QqBm0t7Rh +402082,687634.449732,HELJiEC8fZ,587048,214190.917207,49fGM3yt6R +712428,741718.110157,UqRVGIQmsr,518739,179908.441685,CJGkO9YJ6F +606428,119335.921740,VUQdgnNrAf,733538,200935.650068,EKOp0H0ZwZ +291777,72755.283910,iiT0D8dtU8,611465,349914.764106,sjpKX2B5x2 +83030,211078.781277,niQGtfM5Xg,48561,816496.792406,tF4T9E6mzO +951416,281512.319114,MPpE3Qb2QZ,944194,540391.375275,Tu4PGZQXBh +352234,537302.780858,z21A9fIpls,694736,274587.698614,z4xvqowqpV +468723,449319.518488,8fnqyRt4ND,356851,746931.275622,xymp3f2pTv +852666,589642.885502,KNBVEhMUQG,978003,790446.358028,y54mmj0DXh +926816,541115.693813,3Uc8MwlH4Q,276947,992315.481704,NtWP9q8Qaa +990425,317593.247460,mQfiXgzHkx,691273,199359.243411,TL7si4YIiU +406278,467978.178719,sYphI5BPur,55792,780621.336068,R3mu9PXXg0 +556443,152699.023710,j7RJI1Njyt,771101,805925.059200,RbteSZZGQW +444215,392282.598189,h1tVIwtPNw,992233,189468.983091,Is9UWkfm7r +53541,13092.265306,DAHvEzgOdD,395525,857520.091155,tgMM4HScUR +926307,365832.487644,RjsX3vBSDm,588893,588810.389497,pnJACkVdug +24258,795688.545015,6EQbzM1lyY,956644,834588.933037,8NTubzmf02 +530235,700321.762469,i8D62YUdCm,270799,540562.995159,7CkMk9J5QV +102323,300063.605498,9l27mbn9RQ,340542,721056.811938,43vnNBvFq6 +365403,972149.279368,I2Obzqr2Lk,442365,175692.467620,Hbzo55QqvU +27093,994807.231112,S107b0LN26,989508,301830.006407,8i9Ciyf5sf +774501,575007.697864,bctlGTjnRG,543389,162988.396661,QK4wMrg28z +438757,360216.898489,rBrIJz6RCZ,316698,551337.318065,ZVgjlD8YRo +557924,200748.388277,mjuQcOwoxv,435564,135949.657900,F94oA55UUW +148172,57468.858205,9BpQbajiGT,921903,421779.040913,yjBfJrFT71 +764404,76507.733116,tSVHSVOv01,68194,145979.488942,VW1JaevCY1 +411571,949555.103498,GP4LbtI6Xu,183460,152258.926203,kCkhIIzLeP +551740,725042.095796,FH258Sqoeg,444488,258145.890162,li0X4opjfp +204681,920358.279815,Q5DpMjcXT6,919238,919569.260511,Bnqraq7WMN +389661,484087.981535,FO67eMmyTX,792321,634478.476197,CMKbZWoLBz +321701,249597.282258,9IcayQO3Pp,172829,38312.930003,v69ZsFPrfz +603367,861074.061706,dHw6ygFthn,71890,6327.951236,jnu1Y4w5kd +27398,583594.084436,2MsqJHbEv3,342415,456079.689069,BC1IuDCU2T +939379,298148.909341,IzbfCOlXrW,188348,374321.232321,6pjbXCyRY7 +699179,691971.136459,nPx8HZhGsP,183943,687267.329077,a4zNkOxAtC +880284,340369.552998,W38LK2HPou,914131,868663.744455,HdraZ70bF2 +354533,103905.421532,eX8yQyOXy3,687425,8288.249766,thhTMrEVRA +395157,443931.167529,HEUzdjKNaA,623685,188644.467640,Fa14Vh3IFP +806272,506288.437610,YxTOR3NGkZ,252282,435650.939180,YflNKpj6ky +98999,365488.572681,936byQZcKm,860943,231809.916925,vhCKrsnz2E +131059,197625.456296,sScwKKOpJC,247135,638416.689622,5ZRxtTbMPa +216618,799833.641856,A25XdMPzu9,555930,852350.499321,clsG5AFMgw +628407,127869.637776,aenBfezWXN,442057,20000.123556,du6oSPFAff +532972,316769.537503,z0Ysm5P0mF,836486,300572.989952,5VyyAIC3Ca +918893,516973.181659,UqrmQTGRXy,313094,987800.280854,MtJlw89xiN +4237,302192.293038,CmYvydt0tk,541746,649152.671702,TBeLpNnni7 +43420,311586.926268,V9HDJ4iLrJ,872554,450608.380148,8YPq3YA6v9 +693479,666170.056289,Dblrumg8Yn,426399,892697.304160,7Xgx8tX2JJ +978760,120801.221024,jbOzZUWm1q,716555,173684.592096,Fc3e6ndD97 +385310,559963.359008,q1meTFeltc,736385,948272.803834,jE0DD25PiG +354399,177096.909793,kKqSIQUFiq,745786,317427.174514,ogaBLynsCL +719624,106516.072854,YskyC2HFq3,211256,456375.741121,dGFihhvww3 +681093,534461.380806,KshcQWFGIA,350469,785293.900553,aKd7bTRJpC +307162,876773.273325,EsPdbIbjz6,968828,312067.144021,OSAPkfnbzf +168432,935980.758181,ItviSEXFU7,501782,537470.742276,Phx9UV7GQp +423308,660767.519027,l5pI0uD0fY,671038,203217.512483,13eefFkSXn +260429,660991.630080,MsC5k074e6,155931,30572.826673,R7V5ZbNsKo +224597,858250.006223,MIAQwGwVtm,884571,171017.869383,UEzj3HZ0Fe +270835,722654.080024,taCKV4uDU3,698970,985080.664156,nXlRzx8wdF +514558,74102.008977,NwmS15ncjf,163374,90022.495863,FLkyNGADWx +836022,69302.694372,q6venuSa7D,489054,882782.118398,YlJa2I9IJ5 +195912,560084.171674,kwaSXbxRJ7,680449,84404.584259,cZMuOK8q9l +677640,984796.006193,rDBih4boN2,792169,194498.569090,Id5HIf8PRB +634853,622687.264501,1Ig5seRxzK,885860,838011.407258,FpJNwWb2PY +218177,106674.277279,djLXro6t32,171139,807948.613108,8V0X2y0o1P +240248,390604.380374,s9vBzeQuwY,43559,536855.197708,UP0YK8u2j4 +410239,593274.985996,Ob65ftInyP,160558,511942.633043,lVacHifYy2 +30299,55914.340235,iB8mM7tgMx,864492,3512.536939,h3tkbAxojP +174446,583321.852118,luO1dYlDNn,696521,524273.706573,rgOCMU10EX +588183,708366.398225,XcLGou7AbX,997573,721915.754275,b9A0GHMimS +21108,458560.428127,cmzmQ2TFDg,431095,346888.084013,jU448ruF04 +562532,707524.793764,bGeY85Vncf,486614,134435.225278,px4hXL1pB6 +440411,422766.763936,ldk7WQvWwm,792434,996694.836059,9BHdi34v1F +253468,489529.866451,NRrMoFuOKe,972533,31285.690315,pYOhnxDJ8h +332211,117605.700783,LCePsYHhDe,265328,997699.640453,L8bzBr1iaR +940058,746506.241362,gfMCpwFSYw,670434,588049.659874,3Zr481WcmN +129260,304804.093057,yY2UmOVzaQ,980677,220001.502673,tI6XcS2xkz +741672,571561.686361,QudRIf2RCH,904478,826299.397828,vLUehxSYd8 +514677,50327.031990,rk3p5AbWCV,5168,318243.856135,h67jlCoJ6A +540179,941123.101185,NUoN7anMYy,1534,770464.592954,naou9EEvzi +687488,319431.679690,jXz8bifvmZ,565430,28337.118374,uuOIAbh0rk +38941,930011.101650,9uxIsDv7t0,108345,339845.811473,VwusdrY3QD +745675,696268.312040,vM1HAlSfff,596987,948698.970545,REYglnVxQU +951571,467772.856010,a9tLrHska5,837689,316404.012131,HLArebFzO9 +797335,171490.015574,wHIZWoGSZ4,196937,199395.930566,dzGkRaXLOX +472507,72170.073693,hQNqvQ4uZp,308826,931217.430701,OFYdIPdtFw +960058,918634.009489,QSIsKTEoV2,413213,194400.590166,1MZs6xosVN +275586,950477.531625,jwWgZ7gkZ5,106437,432924.237365,LxCiOAXI20 +764985,85379.015755,xlmWi8hJZQ,891642,670443.593463,hlxxPclUiY +816620,199599.681334,gKJevve0ea,295769,367908.636302,ONxRDphOCN +688741,760975.382979,vYOolJxEwq,975967,145064.706373,6pP2jy9N0e +435393,750175.543619,dPaaxzaAqG,311326,364355.445523,SbRrfNV0vC +250596,890907.425849,ennsDJCvCk,667451,750791.112984,TsugiWBnfh +930676,854066.955178,ReObkvUnqv,320105,617529.818594,Xw3PjxP1No +533578,530911.557721,c61M699IAf,440102,587741.542784,6ymaMOimzg +526579,696263.284855,7FYtWOjaZw,451366,158337.078263,NZKFpzRZxJ +984081,976252.360025,c3MpVCWilj,896444,389316.326761,Czy62XDleD +332502,259064.788570,tVN8IkFksj,507289,920763.365977,wHAQC4EZrZ +821690,604116.173172,eMABkyKXSN,945597,678608.126608,sE0G1Mxzsn +73018,215080.256547,GKRgjAlDop,22613,549088.332026,vq8Dmmfcqa +157878,228843.332669,Z8o37P6bkk,866047,491155.727166,ss8V3bUiXY +334177,560099.989128,aAhlZeW5dK,768160,140459.684828,XhqxnO2yRk +564002,822043.154464,V2dgShqf6m,256724,753672.519837,5110jSusBA +806885,506227.334493,yoOsDo87V4,371447,85260.555213,hnHoTkw2M5 +414604,347668.933860,iYZL8Xrvbe,279736,730984.794663,vl1BiPcFPO +406802,622957.795437,VxmXZyNFiE,580222,230168.240624,1UIJXYeVvl +51328,58789.256996,qHwbe6udrY,323758,601289.650300,0RG5y4RiCM +718457,846634.538311,Jdq7SneAhu,831674,637610.089873,qCE15suyjh +877156,345763.994546,FXSc7rO8RW,485516,810618.355041,nrdmwmj2vl +242611,742119.182270,owSYM35qem,833662,376354.968120,VSImOnLVbY +996548,586810.062518,DMdzBAu1kK,825016,878455.083035,b8mCTZPfb8 +856001,637046.044090,hDn9TVo8Y9,446573,13723.024873,MmiB3Zl9LP +704180,548029.286881,BgyCekB6eb,503316,767554.690725,Xe6PPv457E +654914,777575.832459,FoQfETRBNa,559055,74480.905577,F3YpjW5kEm +730683,841841.782279,Rs5yYXhOVc,472465,535522.421156,GTA1lJEKZC +22723,502151.919751,rDYokt0sDY,49089,596225.807782,JP368Ygnys +428229,293334.959788,X6uhNklZ8n,843936,671134.297881,MM6aDZoBNm +526216,701685.937140,snp3aiJ6nM,379044,735644.322054,2ZfQyzqYUC +649244,847567.980267,NNkTMwFJbh,938610,426433.821656,KfdmJGIMyr +772465,970928.826880,sF1rizZbDf,591547,941949.677996,vEpjgKHR8a +905659,785010.121211,WI8IiSrL9w,490010,850775.991546,3W0OpmKg6c +42659,42458.430093,Y1zaSjMqZG,576523,331619.528685,cUiQL7qU7p +925847,806702.725473,Vn978KaKCS,430353,625542.364966,w33XcNwTOO +444169,757869.729192,zRSKdRtd1s,237272,127313.059732,s7gxasRsyT +674067,725769.526107,2LB7p7QVBb,388534,102160.816287,lvM3krrbYn +602300,977074.312785,rM00xCkx1B,53228,750636.475681,DFLU9Gu82l +38245,248770.764961,4pbZz4wTCF,19058,622257.787650,qp3Bxsbynu +574442,834186.672243,n5Ojome2d6,886189,522341.495530,yY5yaMrR35 +833029,263648.719730,edq58Fc2D7,360396,346811.366547,veSiR7ZsU0 +348981,975763.851255,ASIxuUbEgZ,49887,810729.172889,rfefanG5aP +966693,317779.315229,u6UzF6Uzqy,896011,834257.925158,hD6iOl7eb8 +269751,791319.007137,8lp6rpTy3c,867364,139995.195135,6WgJByk0AE +411358,118191.107057,prQiHwnRIb,592809,643954.007053,7Kpw9k2mOM +144377,333257.223840,EHmBAAvicm,677297,162323.262816,Xic0uNhpfk +908751,902983.814938,DX7ggfBrCE,100970,681390.779364,6AdHhqIGVH +437828,760716.748281,qhJTeGeAAo,64583,258079.278912,b84ZqZrfl0 +354229,872498.042586,MefGPz0HZE,587902,836805.881711,icYzlqKcax +952267,944177.417371,JRM3w6vChv,749725,911986.571593,qcGKR8KdWM +668079,557677.885336,Ptt4LerL46,661906,556386.484525,0zjsj4sDbE +263938,99953.404565,w1VVOIHycW,206196,823990.185355,bhDmItyUlS +614319,14228.713226,oXLflVo9Dc,870207,88667.725207,vqOpmQZvUR +528375,47167.096657,jLbc9J1gXh,502907,719789.447476,zf19yQA47G +219184,225428.573579,1ByBnI060o,478855,931946.927751,wMrAlgIr9A +636446,478486.915046,Pj4taLSp6A,632827,619584.325540,9Tp8ANHq9g +968763,527359.994315,PXzX70k1Rz,130858,149764.386486,RmANmCnSeg +307468,873229.057029,cmaqWyvhUc,835,604755.145840,212Ke5LVN2 +915144,677217.498179,j3fcQKLSJ3,283377,728794.879962,j0XzNkAJmA +49432,554652.334917,imvCqsI6DS,40386,913297.881574,8lIXb0Naaw +236528,198451.071702,lbcC0l6QXW,87962,396487.581208,mc1kXongty +636565,64515.698209,KgsTvHZZdO,409136,489262.379225,xSkDQwV8C8 +193419,570337.953188,92IBeLocVv,523948,862385.930354,nkZhk5Fk6f +650484,774112.768131,WA6vhisp0u,821634,108199.032882,aa8L7LkPgf +931800,223638.378932,COCrLJX4ZM,898594,453202.751481,6P0LnJ0eaM +132999,73601.414434,tVupXroqSF,146793,376546.233407,wCVPZwHAW0 +480649,119295.928194,C0DCcoHPre,150003,779267.292531,8L6dw8o9J4 +859396,867723.325417,VzY8hsJeZN,276409,78483.143391,A4CLX5qFtC +7469,570379.759919,q5YimTsZGD,329744,614309.971856,wv4FJe9sbY +775120,913279.649663,klPbemXLnA,707578,299887.421537,n57NgOVpJY +596320,520798.298600,GVFDPPZzym,858974,359616.566906,15kMwRwDNO +784474,340621.678903,0Nn5vfdjzs,702101,201677.473421,nGTS0fAUlh +353200,894387.405935,J1xXNfuThW,831735,935053.343063,lPoJE4jQxy +459126,174796.507285,cTtEpZpAMo,187640,298745.560128,etLIPfztRo +653154,480607.106409,jewGpJxyE8,568171,972744.926236,8nvluhUImi +427234,138564.579965,vgTAkvFiJZ,614877,775604.415154,YfS8DLb5mN +969174,20153.187337,9cXgag7F0I,369140,824216.797144,4s1I5Hv3kE +854554,903027.901244,im073ztDJi,752641,269710.901463,ympGlW9XzO +129150,94425.038881,5Z6I6vaL0z,187602,288282.129006,2nVxCMrSrq +552732,709407.788144,i95AY957JE,243466,425766.432768,Lz7QOTEryb +489200,676140.989544,TqGHGhrG4Z,625967,401811.195301,6EwfyZTa4J +202778,906230.388810,8DlLYOaJR1,70530,42545.364852,FkgWR7T22q +753580,537228.988858,2SvsubM8Nd,971087,76274.814094,0wwsrd3mhH +584497,413654.346472,hpFX2C3cNj,384374,143877.852141,zsg0dzAEFJ +672424,13698.518312,okdkU2nJrL,29357,188016.652830,AHtDnRxqm7 +732392,101577.528946,E87IuatU4O,131517,492806.513068,0iXtt1EzLV +126139,28438.869788,L5YDkWmDRS,309539,479241.968120,LwxUW5IDR0 +324466,455839.471683,NFqqcPEJsm,341036,270174.925081,PaUuiViBjW +194507,873212.276913,oZ2MSqcmQV,205320,564155.107696,R3VxIV2xFk +598503,968070.864108,Rft9ZJxpsG,444933,503821.618700,IzI8rfIcAu +544107,404176.023478,Tma4RC6ee7,913153,289145.005552,zQGtnOyBhH +805129,613521.592981,tGXxMnQaF6,178950,370232.234051,IP8K0UeIKq +186427,715749.091349,Tlt8fAyWvo,311378,769940.407798,GNIYT1DbMG +636701,992265.457505,NkNAYmyoAd,196892,343371.357554,fCZGb1gVgO +813176,126299.797578,FfaDmtJprm,568833,58311.147123,0TkMUVnFZJ +674157,231165.063760,yCyn2b4h4A,689300,237091.918583,EtnaKmqrGn +364647,536260.118555,0oFzdJkNyn,519553,292511.260998,1sluljTFp6 +391710,863330.860452,E7Ucuvye89,947756,121498.406270,pb7cc9stBx +863540,567803.666500,CbAQcHF0TU,902578,552656.843939,M4UUsIRLUO +885828,804402.160595,Um1046cAiU,923834,237563.512435,tOK6UZH3Qw +534605,723217.536689,rf2nOzUtHF,791890,261255.954657,v3A0eXC6rv +663636,406931.268044,CZqwjoH8Fo,931072,577819.880328,UAO5jM0dK9 +656001,394886.076166,rW3bF42xWB,801610,442540.970400,CCrsr6Eq4K +662789,959410.770316,fatYUC8n3t,225600,623476.698105,iFbC6z1mvP +484524,615115.545964,9vqV9MgZE5,187021,569026.152854,Ni396rXbuV +89798,212726.642424,cJWPmmo4s7,686216,381091.449053,vkSiGd6vfG +924973,231530.543141,LFLxee6l8c,379332,96212.399654,KDpLE70omm +962203,461827.327873,1FZSw91wZW,598277,738872.840498,kE1OR8Q9sX +963149,824039.326484,PrwLUpMsxV,774134,198501.240529,x5bLksnYH9 +997486,746251.840940,O991SiXr58,662329,438461.656473,arJAHwp46p +507674,396388.257247,YaS4aeGxJF,631253,552138.850267,UsFiWw4h7R +593803,864947.217934,ktjj5W8wSu,646040,486105.441326,K3pJzHZrLh +214985,601059.573912,ljzJydqUt2,481360,270592.624770,m2t9lawvdG +988226,913530.571213,JXPex2jA5k,730092,357307.951718,rTpS5jefr0 +296935,419896.915901,hDx6kvZXLu,485196,537746.349342,4LKt6C2hTC +732390,565454.471758,dQYrmwu55L,839129,624367.699949,v5zWsLsBvE +427138,815535.285275,zJhwzk5m0d,523337,659842.495663,b1YwTP1Ukm +592256,448000.640224,VtzcS76JBn,668486,455439.564924,tXYIlJBAoq +58606,654625.664826,ma8ra9JaWP,470478,464804.874365,uYwPoBYEIH +669237,696168.410835,r3oQbgDKE1,834167,568298.639796,r7eFkHTXK6 +829116,387987.678695,Dx39YOiDNJ,770552,109181.466141,fhCnONvxaX +576535,153803.008795,DgTDmDX632,987521,657014.541650,4VxAWTPO6l +194270,927887.761801,m0YF8qBfLM,26875,765204.343914,TFonLFCJKD +930833,514325.715190,l7cRVGAS9f,572798,107888.399681,oD7UYXpCRX +301105,341446.237506,7QxoOvnxFA,617062,174819.627108,wzEdw4fCOI +577310,267959.669158,W22Jepg1jI,3392,479994.790287,6fHhOImR3K +528070,358924.299982,XWW1r0RlTn,157848,762479.963089,2i6zJvVmZ5 +591901,350774.427923,Jf7P5fSgow,165658,393822.894632,58JfM1B8UZ +881003,659508.676621,K2SVDmcvvj,872525,847098.059719,HcNIM7TuM8 +908406,328209.435411,z2jVDPvm2N,96090,23929.186470,cGfqzOIuhT +580790,737805.447692,mxWBNmN4J1,721250,639947.309339,BhAbg9hr2Y +632491,907803.269377,NxvMQ604Q6,238273,971558.483328,wDdRLWfNjm +646725,319338.357595,xBCAhxrH1t,125105,813172.934504,asRgq5I7Ud +901541,299063.553085,YR0crfSWvu,311684,926342.333696,XO2gNp0Pb6 +817767,759558.484477,1aMa81nYLV,926405,80497.251743,CSV53NX611 +695670,179750.445116,UdTOpi7Ez8,887664,193428.472587,3CVoNbG2lt +908591,915175.013614,suJuudJJv5,260414,971779.588912,Hz0MikfayA +544486,141552.396228,4d2ofPNmNB,525460,42925.355065,uulxLROAwk +771303,367265.923863,j7RYQsKYEI,525971,368274.977180,abUT8XCBIa +724900,700659.656373,8vJIvHzp9E,222941,553444.846859,ZA6v0vy8xK +655525,963219.026563,ZpRsrNxcAw,446807,244304.331514,gwgzRTuThW +577822,792190.569428,qZpgbJuFbh,597927,285862.311069,oli1ZKpXQr +563010,821067.630324,Fm826GetMr,318585,627754.655140,foI2rxfjXl +368949,982369.843738,Tx1Nok89em,111481,339258.505717,nhOle5WHgY +729564,222970.749514,z0DcQAb1ih,307969,949440.825303,tZEZpjQXqa +831468,966208.196562,ZPbZB9SHfX,996112,531457.854274,Z5qs6unprv +715007,324205.686217,EkAOXTkbFx,982529,71756.163242,tR5bBnA9WX +443672,50050.674421,2xkoYuEcsX,492624,126698.509685,rrj33AWEgV +189004,964930.730286,QyL2bwId4H,834558,878228.283255,DdbPUdj3NY +40485,639155.395867,zexZB06spC,777910,50426.068393,IIk5MtziVf +236666,401435.569706,4MKXULuBvt,547902,664161.427622,DDf4VQWYT0 +467848,314188.631654,97siaONAq2,79522,712231.992943,CBUsi2gbzu +367530,575434.792357,5J6lQ7AwDr,134217,349987.725246,zCI8HTkuBF +116805,532248.132221,We0CDTOGmC,486533,714961.894408,ztkCWoh4Rc +40898,178608.731166,by3s7jJNeV,219062,505.784344,N8ibYGXJX3 +161091,527412.043299,YYCL6qO4MO,697353,555123.535728,jnog9OmowQ +643181,421435.651376,yJnIUOKm9q,454967,124608.219383,FxwsP5W8R2 +594929,819413.043124,XHUALqXP3t,148815,71433.687289,bZQTOEIPb5 +26680,611637.835963,ZN1xDCWJ27,984953,670248.318522,czwER4ZGkH +169160,264545.715611,y786sVlYBr,754125,345295.075052,f9wyBMYYvx +531592,984226.547306,ASVzL0AJzN,320944,953388.707874,aAZeoVieJ8 +657498,236693.520242,LcWCzASmED,958773,244524.959534,NrIO8sJp8F +525072,988172.558411,SE2c8tWZM7,3345,886308.052465,Cil8gJBYs5 +718410,780107.479382,1HSktfZ0XS,267678,311641.652095,tZDIWfiUUR +156557,575121.526355,Yj5E15GyBr,984799,406049.618504,T7fOZTbi0Q +567873,178414.617668,DoVxNT5vKu,705027,583004.209824,YzU4YuDTEd +7720,50327.714092,KixHba783L,775293,462124.432842,3NORxJtSXu +71320,847949.659576,EuwEd9ADhy,659355,962359.348443,g0MdTDNiw2 +915827,401794.088982,ugoruYosga,323534,622554.920616,iREm8yyUsR +835004,215818.214715,KKR0ZY883S,214294,296616.745607,bik0XRII2a +61142,658801.881793,t1zYFV7lpw,739125,565067.539823,3JUYnlVLWM +12333,774115.872618,WoGrFwHlEE,838451,678206.283530,p1NGsCLFqK +936257,723765.538841,MrCmHkT4cJ,761277,119874.904123,PJBgAuGhaZ +392313,641097.489270,HYJCRrIw7g,436490,671531.619037,8yftXGDB23 +409654,734503.717214,n4Vg3p6U06,583001,976836.637694,c7dL1mhnB2 +105258,727024.223369,ZBFrvjYyAn,822503,11860.641602,eAsgoihhtM +460843,441216.928418,6SBC0HoIvr,468259,502661.259629,cNA8CWkcTx +227737,126053.488028,qGlYbmlI1B,880026,281484.200563,JgiPWlxHN6 +539136,254026.902684,i9hdFGThl4,578268,401717.949805,LRsE82CM6b +200393,69124.211793,L1z5CuvSTQ,680187,696514.785530,MthS99gCCv +39168,517735.765662,uL7ZJFN9Wl,657718,146757.991882,lmxeo9fCjs +625513,262982.168027,3Y1rxMCVs9,689483,820371.353846,Ia5Klxsnyv +204194,951331.779902,GgBVUfjZRu,69570,532068.462440,ZG052mSOz4 +480457,947720.473466,6vt93fa0B5,683624,825041.341677,yqa1LcvcO3 +194692,961385.832183,4kUXIDMU74,95952,197435.728922,e7nZDGAM9U +250950,268487.826137,vf4ybpS32q,576923,373330.467184,kRzuLSb35H +466566,338187.392431,S3MrlK2AuV,388704,360427.863784,PFh0mNemsQ +4298,875385.297156,id3KKEavCV,119389,368170.462304,8dag7CwUa1 +875241,694285.387470,knWkEzTeIA,271164,850351.816434,q3v4M8upEF +5882,954875.905174,I8f1uu5bT1,369440,839447.828002,j9r2rdQjbs +860251,326983.922697,F1YMtrINVJ,402367,351711.795227,094DZ7zvRj +239881,697836.066253,kQI7y11XKx,999322,214234.739628,rM4qoQr3nx +771328,90784.258721,qWf8hPu3Ou,803618,165421.916559,r9EWR5ngsJ +678126,471006.658468,eKGpiqCKum,665678,289198.922083,gpYvDDkJKr +208544,76669.225877,wks7i5gfBY,545754,48055.072082,nTyavNza5Z +480207,520040.303966,oYosTq8Z4a,224310,840170.823700,c6srhUkezm +363467,97487.539075,BcbM9y55mH,998245,701492.746066,hMNykG7Mi6 +990793,994281.502520,V16VMkYH1o,343183,620097.054052,aikDUyFh92 +566407,380314.614270,HTFL9lT5SG,774249,210127.041787,wEgudWaSyX +53054,998155.177634,ZZxjB2TEbk,832446,615252.671969,slZwYYNJNQ +614892,949756.459545,dgctSlulhz,639479,849572.444971,xwdHbBc5PH +685712,998546.848453,ouVvHCsYTK,18927,758743.472653,S2zcIuEBeY +155475,439608.368983,ERHyWK6XgQ,332601,632234.668434,BB0pjurv9s +761672,13475.293752,IDVpwUK2dJ,949762,393369.561105,ViN0jq3qQN +600117,758036.483937,6mpJfvJMtG,814333,685434.484011,48772dk4Ax +907672,122910.740150,b6SMoUwhb7,790896,411636.920658,QBtYd6bh5z +70512,932372.392033,AcWs5p7s2P,311566,603168.593466,BomlUJ896q +382502,756937.447827,4w7z1x1jdk,873884,343503.334534,ReiSqJpCV5 +702250,472283.189620,ZUn4uN3XSK,579170,888874.584882,SN0vQ5ewKP +31331,77921.870023,tYvx7eT2BE,676193,182781.100037,rx9WMs9mUD +217259,452858.517389,ZpDB9jnwgD,372988,90568.267144,Ssjsman98U +520448,132710.920716,ycnwOn7UYH,254092,396320.153417,Egcv7EVZjq +462489,255688.009845,2IC2LY8wCv,231696,812248.882894,Hxb4OavMuU +676871,888049.795236,zcCRPIzGz0,594841,181909.106450,zpNZJDLQhV +599497,363195.060934,s4I1BkatId,507880,952192.905373,4ITUdTyzAr +680826,933457.517406,ceCcx9V1b0,234365,569811.453743,jGhWJCd48S +682983,425640.454867,rJnkMrrCTS,739033,481344.422636,SN4lktQiAE +996782,383110.820376,8elPueDDom,91133,229069.685481,rXn9Km93aW +392643,910976.455192,gjztDHzro6,280588,399363.487822,wcbMtxCQ0A +175458,855652.807491,An5RA9OiAy,728051,609853.446895,YL051eMvjE +155997,812971.507625,QE9xghEnLG,187198,37824.014237,IaRIneXFOb +783113,914691.520427,1Gybjhax6e,78724,635625.249699,LWffPcvHcq +125054,125555.104511,jtVUiZH8xT,323657,325632.138595,5NJEtVpj35 +174478,865866.489073,JqTR3GUEvD,50310,387748.899489,dBeN1DZ9Pj +343758,796786.486347,F8ehyeHDjd,83124,617930.508295,5mBdAMfqIU +924163,69569.738946,cJZSsOtnnh,549650,463271.572557,c0LUwDgKCl +419223,238138.231418,wlVGxMaFon,522393,566837.557825,wZVYOi9O67 +760293,816429.758624,PoFistVC0m,261691,798901.471022,FOWIw1tvwy +812780,573633.634684,nRn6LmCjpH,857473,670325.516781,A6AM8JBYls +869605,101083.246319,AA9hb6I7AV,309352,314829.216562,Bo4me2eLVD +446976,406814.643995,st9Uq9FkcX,719193,920506.314185,zuolR4ez2B +919522,714748.001553,7ODGbn7Gyr,618274,92395.721491,juh9nl0Rlo +104129,571454.673019,FijHq9YIQP,184702,575958.546523,v9fsrlk9SK +630043,98970.749841,MjPbXPC6jP,803121,20107.338124,volOLA8LkZ +454093,517731.919565,ARUIE9QLsc,323952,838066.205647,w2JGULVSif +57287,67871.242453,cVJaMK2wva,172480,953572.341305,vdVatBBo8p +739482,923134.599984,FJQG17ib02,490490,299201.450733,EFq6lkdKpI +491173,864192.058223,RU26KOYsqC,353766,903987.731541,FZNATgevwp +842858,988608.694349,7mS41WxWqH,481836,773828.956537,KwyIGDxeKk +417579,743938.574254,RcI2zF3dhA,804767,179295.087424,xYYwIA1T8H +451104,102774.717212,bzJNohMlol,848156,563097.978321,3Tc1Rl9s3c +162488,125423.560836,BHUPGEgcaX,423664,133454.076514,EEtTrEJx4J +100897,350661.193929,YoyNiAOQVg,861777,661066.248551,2wduXeOh9g +614783,226704.522908,drhK0wOWKs,200201,448679.569106,cXyWiKsaCF +572151,366226.309872,eUZCms9W93,771642,562554.302074,sWBO0eSzPa +232821,390572.430612,sxSTzaiHcq,184833,402041.830592,SnYFf6CDsS +171541,600337.030504,0aofCYwQ9q,156108,587493.181682,2rEp2gRmkZ +923614,970708.480556,HTgyHH42hG,826460,930635.965527,MLtxqfkkob +996851,980196.832849,iy7kJU9Ocp,198928,675618.266392,D24gj36KfE +782290,421324.387261,a1dsz3h5UI,449217,458004.907940,LelQchZDtC +484261,677740.041313,crj4sgY0QV,653961,365428.777606,dnXlNKdsFz +254283,93499.479660,Hvglj8Nk83,971486,215110.882824,I9VWuTB8IJ +631140,852627.133720,AhJeChR4eo,762570,651455.335181,ZwQChncgAk +173066,27927.729551,eEGKOXUYwH,540671,147124.383677,l6rfNEDRHJ +366193,234676.447708,OahFE6jYFC,501499,25475.836720,LjniHKvN41 +630768,122703.503844,aY6pxqUK3h,489643,109874.547253,IVVjTv7v8v +9388,170361.964596,nxkZfDgCqp,70342,329057.259351,lLkipI9lrk +640572,264874.907080,AJpnh9bIgU,502370,123571.814833,G8H7iNK4vl +736150,652823.260906,ptG4glPeg4,319397,621924.279749,SnXokzyqFd +962573,805258.628812,CTYFPKHTUN,720295,615773.650954,IdpfWIpvfH +289272,338146.314128,yLajQAyUVQ,933645,673414.934454,LjRkIZhx4r +405309,548962.502134,g9Aw431dKx,859141,489030.339637,1rAgaN6jfZ +903073,365587.104081,Sc1OjkQJLg,775264,931642.995284,345UgrkY1z +3613,18939.447037,uTghEiNYVs,761768,830509.886900,rMUMpncgRB +800868,651399.745570,GqN2DTwnsF,736561,775913.624351,39o0SZAE0U +480126,982544.303934,KQXoMe8XVG,591785,421378.597659,In9qqnU0Y6 +834668,520010.387338,lFPwF7jJXt,668493,368597.291593,eANOvME6CB +59616,80783.864790,tCmsE6qajh,176717,284671.784591,x2UkJeYQHU +968178,196321.631302,VuwdqyiVZp,957854,243819.931535,FRH5TH0UBn +788140,515115.989834,qZv9oCQpnN,166417,32845.591275,454Kb895bF +916852,312231.562521,CZ38SuJ31A,415448,279829.888033,vjxZ6emVU4 +749925,341305.043612,cEsvPs6RH2,336336,651173.115285,ufQQRTBhxU +912035,109366.666380,BOq4JLTqb1,652929,171788.955434,o6iTYwJcvl +535269,14376.355378,A9Gv3RBykM,528208,871046.036057,AVVYB8vaso +164619,9877.052794,8OdFOdQxTx,394822,255402.300748,Lu7WzaKAdV +836575,891917.710193,gxMLD0MWKx,358743,118507.088445,1KJem9yD5E +101311,955616.717933,S4Hi2b8O3V,197508,925365.406718,OmePCFft20 +508152,868272.360323,CcR5odhv56,429536,719311.367657,Hw8MHT7gjB +396044,576473.720372,qCQjpuEwjy,252741,69805.217217,IlP1nT8fyd +108859,680234.384012,ZYFg8hU0y2,956130,280407.620248,dcW7iBgWr6 +117552,272330.485533,ojMqithnaj,259727,415713.324607,1b5UtrJJTB +575544,281959.802694,rcf4yrOTEd,571071,315383.169089,SuCohcYnFX +11799,392006.212381,wLoXjIGj1x,477696,833503.049152,pheZKHyAdw +169744,935035.437592,CmYzB7bsNI,45499,686760.619667,9sC6kZNYEu +510993,853271.693002,BjusEVPTxd,316258,824069.041243,IsJJxuoG9D +94147,7000.495764,52ZKeZkH8o,968183,675423.216791,Kdhn1EgMcg +978738,453169.916141,RDk4jiaFG5,327175,323748.347505,K32DI0OjJf +769380,378106.254274,n2zQzMNm4L,877338,564367.056202,VGUvUsrSwi +148419,953963.486316,vQmuIPc9iO,327127,536757.661431,iBHM0GU0ci +20603,541861.716741,wHRRt4Gj2O,753123,553632.791724,5KDImS6M7D +401477,305660.720860,1pYiIWsaHI,239394,675049.947884,SsZHTvr5cs +276816,522217.941633,D8AhPiXSQo,533921,656856.720396,4pR0zT4ZBY +14331,477433.605446,rDpRMwOFRt,17526,862063.794245,9FmqY9FCvt +197804,833521.620641,ekTbIU6NZI,636437,804556.493116,qDaJZgByv3 +203968,214068.764771,rJFFN4HBYS,154953,871903.472408,MFvCn8jQnB +502955,950356.153529,8nvA2vYye3,592336,288204.924398,FtPKBjHJ7v +982536,732271.363928,GyN82qVA88,521168,641517.987217,kEDKO7Sy35 +416794,748103.585587,fBdxYoD0Hq,450237,585579.645395,96N9fmwqri +131693,465401.257309,93E7WaFFZP,357197,487446.980236,lJuHmSlh0J +615561,360967.900972,uB8Mce5HnZ,188564,797099.213657,FyHjvVXu5B +939074,442746.250176,VwoA4E5WNX,80344,277828.460008,GgpCmt0fnz +268191,700068.355004,tWJN0rnzIH,60436,950393.839092,goP9njsuBF +605485,882236.678077,kTwgHdm4HE,308050,756304.772722,f1jbEisjlD +95463,104005.914223,JuO5wyL8t9,53807,174428.443327,tjis3s6q7G +517136,345163.957551,cOAk392EQE,43405,883354.928565,yA8biEdgEs +926162,582758.195837,nU0jTH3f02,395471,819641.406430,cD42Mey8C3 +151985,212129.302445,l5cplEDBZm,383093,981385.855897,nHXfJyFb0N +544260,944953.723450,1A052PAbr8,474199,74445.612856,yuPZ0LTY5e +618884,118055.666571,PWMuUwvS7u,474356,929032.590901,PTYxq3Mo6H +617856,404859.458517,U88JvWTiUv,601043,176189.631322,h1UGkM6hqD +254434,344908.117457,vWX4HElNGc,341348,705439.717637,UaYDDWR85m +255898,189766.054658,JT5MwnuMyw,635097,900165.157264,yyrHk731mU +347293,867119.049555,CdDiVbWTbJ,534002,654969.207447,vggHb9Bpfe +165978,982648.358206,CwLRVbWURR,447744,888440.216146,Bs10c1YAly +145520,68092.494075,F4mBtDl7Dy,59808,940180.530446,igv2pzyWML +901249,676227.811646,Q2kQDz6veN,474353,903177.336697,K0sgP6pPRM +70632,750453.775621,J51mv4ZBCV,634083,943463.617151,ExJaNbh9m2 +843866,403976.780138,iLIVcQMHhN,671167,863136.670524,4rZ3KaoTd8 +387950,470194.634342,yfuLO7OxS5,760271,490521.770303,FGHpsmb5kF +860945,311897.014284,xnI7OgUBoe,70195,861416.147427,Rjpm8AoEJw +722196,79970.456986,qjGHr4KpPX,578688,103360.692972,wIKHIU7glP +325573,212637.755466,rIacqBWJkC,999045,980665.759029,Ihfc06KeoK +572917,993047.230411,klRvPKSaae,129444,400074.807346,s0ZobCC9HP +209163,42039.389959,PsKSSrKv1k,602906,559264.494434,U4YXrA5PnR +487131,254247.710596,17cnZyhmtt,468754,402501.253385,1LBexB0cRP +194724,605395.753378,H1G3cQvpyU,464553,35689.052801,I2boTPko2d +222665,285057.544532,Erdln1s8NK,342265,384137.614692,wnHL47RLW8 +607292,124483.615483,kYDnQel4pC,485059,661944.171041,Zp4rpzpHAL +817896,529115.408878,9Y2MYeDfTe,607300,354681.112846,EceZUGfKDf +251022,455498.981049,T5aFG9Iz7G,721516,927048.066376,9qdN8iknY3 +353284,203494.235133,UjKeKseX3r,127116,738629.917751,hsrXmq0AtD +996693,678408.154144,ZwQGZkO37V,936664,133263.290109,fOY2d8jA9R +981449,391423.319302,Jl146t3NQt,748199,662804.207310,dhiE1m5W8y +501279,179774.237410,02G6qfv6Qq,101398,18591.807070,YbDGLXyaFX +255058,156612.676425,Zz8kjlUpab,321823,15818.967740,V19Pb6noUW +387931,481401.806703,NUEsvHRZMG,30978,748546.645912,6tF6B8h3IB +652758,717888.507280,Zr6UnPalN8,705725,353368.335121,XkDQ2aTIwi +205440,243837.503143,hpPEXYBeoh,682801,47618.888473,NTrC5OF0Il +837336,463733.735023,gVj19ms5KV,939190,629441.926438,VfDlQvyGoK +754721,141463.141597,wuNS7quavc,204328,712877.495040,69ABMFADVX +696680,324829.393319,fxBaNIN3Dx,606646,746870.332269,PPw39jUDh3 +28725,465188.170252,SU9QS5DAff,280593,338858.142341,5w08kwKvs8 +340371,756169.727269,11J18NxJPC,753444,227670.662142,yvC8z3NS0Y +744057,31599.484133,P0zKy022W8,590963,949835.048721,1M0hHoCBEZ +173472,715864.596614,RuXJ7taY2B,164290,484505.949868,exHlUZJnra +652146,496171.580590,ddNmtEVO8V,655275,904806.941118,TpZZbq7hbI +664508,261376.645680,AlviEmCeYN,446384,306767.096671,SYDXEfH1A8 +676512,951398.994595,Z3jjVy61Z8,572198,814575.747847,Y1Uns80ExH +82589,516956.208027,74FP0LSZAQ,412094,280583.621668,OlPcVA1ScQ +160477,577190.779250,AtbQPrXhrr,357382,544556.397512,LPml92NBd2 +9615,915067.291765,GrBpMQrsVs,920240,740921.627070,TFM5XNUjFo +267143,333058.856954,RnW228nsfK,862967,29014.178376,4EpKQxc4zc +743509,607471.700392,Zmso4bzjTV,285315,453953.418084,YDYAsIJTWv +47078,602657.212032,rABuQOIjGK,386373,8839.400853,snT1Bb14Vb +940729,105487.495546,DuOqjJYnnE,164008,904529.807457,Teg7Ajn3L5 +863575,794781.341950,8obbr8QzXi,514486,196207.954877,jNyRKqVfmL +746180,475300.268380,W7loSFOABx,479652,859709.790300,udYIx67Pnz +303224,10068.119093,k17zCjnrrS,235399,755598.951486,YxbkW7ALyP +963840,90343.965580,Nn5dhO55EG,656145,227562.340509,Ovfs8Ndfnt +467826,369520.510907,2F1Par4878,239143,258478.847299,mVpP9Edds4 +951250,560547.757609,1ItEYmhCRI,197589,839333.006900,5yM2prCSB3 +888405,792728.048984,ZRgCRbAuFp,233951,48709.743656,Hqp4OqEmny +596323,595594.707876,V5gBcJV2oY,184397,509849.297332,bq1vgPBit0 +976278,705065.416158,sQrSdlQNaV,963386,827604.783920,CQQTQuQlGn +490215,549293.020561,6YoBPQU8tH,810991,377850.788094,7GD7Bze7Q7 +415624,279679.805956,rGQuRWkgXO,404491,739093.190683,KuvnADWrA4 +318116,281083.011503,fKfAJwMGbf,532993,996962.082034,OEdAwO3xew +911122,97409.881144,3I3klMETEl,735464,467364.532193,wFHw3iyXdU +942224,2219.545529,nJoxmliR6f,214336,712219.675820,qQ0U7JuFTV +829873,544393.587440,G9KIHFFuht,721559,164410.782699,6VLgRYVEw0 +988009,108739.104242,hmNRAOQq9L,119491,169877.658524,6gBG1yXRMI +218082,501884.682059,RAD0pAB2Zu,98168,841868.850587,IpjPbLatVa +710725,565416.406003,YHga5t86w9,920341,578483.583253,3SMZecshfp +106816,761505.434868,mq0dCff1Hj,676924,990245.928500,nEHYatT9wO +846288,442546.897628,r00PnT09aB,810073,555624.064232,kNuNlTgpJg +54168,158862.420592,zFabad8kml,895123,634311.791130,uF7JRMF1dv +946445,344822.978338,gsWiP6XeXj,613040,622730.916985,xJXsGs6mQK +625492,911631.053635,yKXgauee06,708686,415588.357421,rbkatjGpVC +700889,470535.168264,4dhwsvrlk5,780863,347543.641506,wDQ6JqYHuF +75326,11666.573356,y5cpfJXyGi,435678,191543.654386,fTwTxxF6hq +802898,188550.875826,ciIAEx9IQY,569960,84580.435017,W5ybLEdIHG +340504,846267.979012,SHzXlZKpBR,774142,920195.599030,IUJvOpetuJ +921531,853086.447498,NqswaZEGhB,960498,981672.430305,f1H1omNLh2 +936153,140653.009409,yWr7kzbu7M,137489,227691.868409,clXWIBe39X +852577,711577.275084,v0hJ935ixf,626594,300175.940829,El5fzlE40U +330445,611766.967603,7o4BRA0JNZ,107815,252696.849157,UPnScsznh8 +579907,496311.823744,qXZoGt6O72,182257,990402.305619,bujkjvZtha +119770,804584.512305,irWKHLXtrF,278118,345972.244735,SUjr3Radsq +647076,445178.562400,fCQtPYYDlw,78015,913566.694858,wx5XCoG8JR +786868,119657.523048,dqGD93rej1,417960,403485.051727,aLu1MRXEaP +719170,348790.145621,o9u5pvugHv,508705,395997.042609,abCzGskIEi +410977,547418.298811,tEzgt3dePX,716300,381213.189206,AvvutotESz +653709,54633.385917,4emvTbROA5,798690,307458.085350,TaRySC5Fmh +916399,826279.351242,Swmwyabo6l,10280,91103.195293,SEM76yNwmL +969659,85699.106428,vsaTtLIuZR,497841,458575.588214,mBzbco1fSh +777090,330113.742844,0Jxy7J437k,555989,517730.225023,Z9WllmLOdb +421758,101388.347595,AuMp2x4dsv,360567,935518.952167,BxjgP1gMHN +909404,280783.720105,aL9PWpiLrh,569504,775139.495489,dLV5QvOwfA +660068,163512.025308,P3LRCVFM7m,980123,735963.296852,IZH7sdHGgO +761394,33677.554291,e5nzdzn1LZ,916679,655102.001991,wbxpkMKxrO +232456,59969.300849,xDQc7Kf4Oz,669090,407206.522093,1oSI5ooQCu +758078,701026.080787,w0lQEXw0vp,64143,788877.521503,5A4bSVCD5f +316949,631560.561781,lRYf5FrgBh,118191,282107.627676,wTpU0Fuoou +694121,729490.558810,7f45QA0d4m,309104,861875.253506,Y3oIsWHOz4 +497735,107756.909741,AVgRJ6oILQ,426499,872700.244812,ZwW57UQFlO +704132,298015.347272,kPwCVWFYOs,552838,288543.779142,kNMCnZ0Frm +198406,999265.068078,ilNCgGi5Fa,244837,601164.542649,bSBHefQRqj +55105,606668.772489,Y2rq4pauMM,721078,693021.732169,nDE8FTjYXa +443088,511653.249825,4wso3YwsOm,323278,730254.112549,oeslQjCVKK +373467,778689.111873,WRqXXkMERG,162406,754017.235088,BPd4XAX3or +121428,220545.107127,cXaicUUnxF,810981,667115.856442,OKvQLeu8q7 +623949,471634.681326,2nuN08bRIj,107455,157587.944882,7VWQTo9ExO +895895,502587.419986,W6BXrEoQoW,83283,441998.103996,zHFQOPQKCz +82524,945818.184957,1D6pSMwo7B,324759,667269.020506,0fY9xUUoGI +953655,653368.626051,W5wkWEyhCH,943199,766394.934132,7S0EKy86fJ +681057,564882.624787,VAUayMjHml,936582,864682.054296,uroxKzsqSU +930780,498443.707475,A8tduBfrnR,849366,771330.386683,3zwJWV9YMR +482731,206878.901266,yReY03zYwo,276035,823306.483339,71g72tbetV +193417,784446.239711,LDe5PlDB7z,303648,942777.669075,stSr1nwuAc +30950,712971.281415,tdgnX5OyXN,572905,106216.475066,29emqiVSdj +589075,871671.674553,PQoj1rnKy5,247125,402546.343031,ihESBARU0g +58544,449394.155529,FmPkptsm9v,385239,206044.085702,oGuEOhBzhG +383760,66820.732427,JzGB3yEWhV,812357,954705.454618,6RTUqVgopz +123544,983600.259241,Vxq3WrJk00,491273,349373.994000,EsPRgkdo2j +408540,191950.114733,WIzpsiwvgh,924651,235079.149543,dsDscQ7kI2 +304751,270934.143081,4rVzKaZL9G,261096,904362.398050,ATD0nzFyVK +168736,932601.249841,GytV661NyA,705114,57026.524643,lN7z8mSFjX +3987,578500.322893,ZKOpotmS1i,889961,976536.835026,hLKKSMjryc +305755,87500.297441,TcPQVbttkf,472799,711569.484643,pvnQhJK2j5 +771107,791489.881019,VNAsGrmdjd,551515,898702.916068,pLP2NnsKli +268198,247524.153468,CHLuXAiCjs,569325,520742.028001,Dg8yX7pVAz +553207,906452.175190,IpmMxJYoZp,529267,598206.657017,YPCm33WkTb +907716,886054.782141,exaajFoK3l,819696,993078.185583,UWJgUepHhR +603628,716045.045312,pEAjwcXdIx,278698,73016.177414,8ljplSlhgW +102134,69586.217988,fArrCcMkWy,270066,290698.095636,LZSTPSPU25 +844311,195510.304604,hBt9Mq7ndF,930976,560175.135042,UARzrBeIA2 +364137,539957.285273,DlAI6oe3G5,668739,390478.375504,venhcs2hmK +203104,579310.329180,KbNQVfv2zq,491707,513576.177529,oxmzm5hlSA +839692,478593.159366,jjANJl3kb5,883552,764967.588555,IJkJNc7AXz +201951,843294.141123,o4Wkd9Ql0z,616100,420833.059542,u4hNoUjys1 +122111,98391.165036,QueYgVCPcW,966636,579759.200011,NiEoPNAYNB +280006,368515.778558,nrzcmy6mel,590427,690441.528685,GF5pIAz1h0 +434289,352972.989678,8KcwtLLNuG,826421,966297.786322,MeJOywmpUs +293409,747338.367465,QR1plGAmxf,291386,796589.029585,jemqYrTALf +789074,702100.601022,PStF7pxPG4,4920,777104.009995,XlPcDH4hVg +940589,459180.192483,7lNCsEGLIF,400304,236359.883421,QNiJcRl7RU +577259,22484.656569,AIqiMriYZY,849068,969401.499098,UFPswCT4rW +298613,831716.185261,XO0KLjNCId,181641,987192.507606,awovveKTPR +703345,877158.375084,x1H339oBiM,30393,570182.471993,gVzK5v615K +511434,288106.043103,dEmzrknjyV,700335,557187.136358,zKM6SDaxvI +626944,435244.860772,gexkR7R8ZW,262558,386139.608507,TGMzw9ApNi +726529,964571.394419,xzXplSLFHW,259112,241138.036638,GvG1ThSiwe +681021,501105.614021,5N6EDJvyKe,102138,969536.930024,Im5Xio39oX +48889,57158.254236,57laXy3E2u,70946,385135.002323,CCsO4ZmSNe +458007,42185.018409,PjIm545M1r,17881,861947.562193,xHkSuYnUK6 +147367,903581.006393,4arG0ZWDqW,378613,355302.586451,m1V2U6Ggpq +462966,43218.388594,aBi71hAWMC,541338,196296.449572,0QKoF6s322 +909691,679504.008068,1CeryvTmYD,912092,664084.410942,y8xj4CqTnD +507842,590249.266075,7oKBtKDssp,307584,111896.439438,RBfxP8mbB5 +892156,534394.391518,jcmzUybyGt,393201,533928.264557,NYrhDm569O +978883,143994.572108,mIjUp9bVe2,669518,2833.929531,jJqX7NIsYd +588023,541648.167843,T8JZMH9o4a,606067,764794.904491,rsmnksaH8k +73896,644392.151251,6aYLTZ5D0P,474249,492612.017172,vCgOxJf9no +967092,911489.617782,9zRvSJSvot,938433,357467.323441,wNb3Cl7hNu +601735,593939.015245,QvrXkMExOr,117901,483993.920648,spntyKp0eB +681785,653846.296895,uJndNgVX5v,611320,265533.490530,OKmAnxNPiL +550638,440807.048415,ZBBRk5mXtT,540114,380627.632769,G2IW92BLtA +874197,684027.617358,3f5SYlDCMk,341079,605590.744877,GgsMZx7Asy +155369,984791.955724,9U9Rpwe3AH,825501,552158.840102,wrgmNLidq5 +823801,7269.212524,2co8umWDnz,271288,548062.141614,SqxW0xOqIN +74420,723531.278399,UMQuWytshf,718241,15376.028437,iALdxsFhXS +285924,513742.085024,HFoa7su92z,186348,743302.073647,IIpAAZjyXG +13350,49148.552267,vzDJjkn2jr,720784,214348.160121,ysEmtW7g7O +996205,364028.209113,IIn5S56eBl,838647,214403.448930,smuZz8kQVH +440075,667387.554235,vMNHrAtyxv,875302,960328.864845,W8QVEQy12b +839055,475837.697585,QtHFZD021i,737728,539573.818998,6Dj20UL7KY +402172,162266.483825,cPNbDo8LMI,799415,452332.715672,7KBpjC28iF +486923,250372.526450,adAE9veUOM,136444,424072.554872,ZYAKn98DAH +370932,92694.830339,2k4KZOGKca,232159,73707.290618,xGdZ725AFN +35425,899621.567177,GYcFj3aTvl,488182,286701.408487,5O1QemfP16 +118739,879362.668451,OSW2w9qo1J,261513,57623.986674,iLt1ibv6Dr +183863,867413.430837,WKBKQZNCGC,502605,346765.980166,Sr5hxdvAi1 +774373,222074.667493,L7HLLn6SLJ,161585,316501.630143,CbHFaXdpJF +437029,963483.464838,BCafa5QUhn,872857,569063.308815,d7RK6qD7Ik +973296,438274.160697,IwJJL9EG57,815780,27791.129045,EIGQ58nuzZ +742116,111947.325403,MLLPsWItHs,574692,483572.735482,bkF6BP85rD +886213,558441.096725,DhZQIMPkQV,727198,489733.839992,9j6TSOXG8S +686823,907497.960081,PUPgD4rNNy,488352,836293.420539,KDzxO2tHti +325702,148080.623924,0ZuOk0BUzW,50985,52954.694098,5y9ex54ipp +7781,180937.929447,ig2C6MzgCX,2446,279140.554840,Qmzaiu35Uz +546114,880510.677553,Y0VDiNE8bq,721790,850130.381731,z3VvckC7Kd +184263,649906.513104,MTlFuAhuA4,197995,540411.750079,DXYTTUbzu6 +734901,934920.379760,aMR0BdK3Ey,760011,763359.936497,gcXUKbGiLr +60780,133420.601129,RZyDZbtWWG,977457,619836.832395,pqWUCaJSw3 +880225,59513.756241,mLZ0gEkFIZ,44276,33619.584614,ktxkkTGo27 +866282,633906.088211,JAu1oHM85Q,705536,285835.380722,3amQqVDiVy +304856,490332.999894,1qTFOdfLQz,379701,366191.529741,yPO3Put0gf +269503,676980.434915,fQcuR7E1HV,616566,88865.171793,Wksivp024C +836228,617382.777875,KVCXwrSijO,83354,9923.000760,3uCodBqaAc +562619,80738.824292,rG38mZoFxz,415965,335970.260145,48CWLEnEhw +60039,941124.167814,kMZuzAAy2Y,371828,592473.613619,TA1WT2UiEK +941951,485275.522494,L6Rt0NZX8f,99182,385875.081002,nMd9ja9jl9 +238,959834.784659,mG8ohnKEKX,393020,581556.882297,lx0BCHf10i +907072,58289.926338,1FyE2xPThP,836182,934326.329766,eZSDGKLZkK +18538,266650.467211,74UAODHGOo,415214,64613.293527,SNAZ9AFOfD +384121,156266.690803,JJ67YBZTSc,218059,547392.541089,0sVVOzMSbV +488175,828753.530852,ep72huYRxm,973085,663220.847864,54J3dFF9Yl +970042,742398.475039,hKlGmJeKKd,790840,867561.819328,uuoxttDR28 +194605,511582.827723,TLjgrjWDVF,576168,402596.560747,s4f6nDk5eo +745325,344044.863600,YV1EyIUd05,473661,221179.712421,93PvktIP15 +291771,464044.841549,peqqVbo6Po,256046,750299.098618,OHBNH0ppa8 +223995,833685.448516,DcuCrHAxjQ,259275,918385.149846,ADQyrCdF4b +274797,714318.967108,vTiQMWqccV,762022,552926.322531,yxfZLoYIsI +590494,892739.903926,eyNQjh8WIT,495337,120475.063218,ItLCsbd7km +575141,581003.130823,4LMB4MXRnq,769589,609499.897344,9jwblxikqB +707245,978371.762663,iE0ggSk0R9,770394,718326.929488,xzXq6f8JkL +50114,240979.283715,w6OOUtNbCe,238897,345493.132709,ztFtlSDdUQ +663504,953747.478038,MUHrBVGwNV,443324,312268.498167,DK4vdYR4re +342416,167029.900586,LpMzyqrrTD,646246,956561.709891,kgxyNaj3iL +196909,359972.876855,CK86OeEqfZ,796052,466987.854856,dFlO0yILE9 +344665,50204.135723,SN0Y8ipJdG,18661,522168.718579,g0bLH2ihgN +482836,891832.542537,AIHpBGzgLM,46240,462252.260986,8jS4yRhNOh +515538,177233.600880,yVZP4pGld5,88992,305502.797604,nDqkwtigWH +273432,369180.192461,9En3Siz0bv,177164,1752.844404,D2sFQpQLTI +470392,671322.571944,iE7bAlgHQ0,270865,156520.448515,Y5cYcIF8K2 +742580,629949.188607,Q8Au7ppba3,963546,339638.027906,jzXvbG07Hy +663571,702979.407709,1WptCsSgB7,444924,441214.414129,KXlHmfasMV +678310,367575.359277,ti1yLreRi8,555244,168514.289591,iV3YvqIuSI +501438,315071.813760,bZzNOgmMkM,516609,834440.876457,Nir07DjtKt +95725,917264.825091,L9DnYJ3bdk,417595,76871.730974,g6giGHhFTX +770935,155982.081279,n1zR4519R1,372926,192436.382294,oRqL5X2bhX +107657,945368.326417,zWkg86LMGs,632180,59752.652232,Pr7PTRUtMB +565777,596523.465327,x2XjSySFNN,667346,685966.458535,ARkWORC0Z0 +253326,607009.818973,17ELlTEqOf,611694,887544.154120,afbZSGtpTm +389784,490077.578476,xKEFmWXx4a,854937,71694.730707,KoUf48qXjp +191531,783334.341899,YwQti9dypr,554447,108919.126055,MtWqPzimWz +382855,742703.333092,uG1fjl1EuL,669925,87311.185757,a5BhwRFZcM +330390,914269.938559,FLeYBjycQb,658770,565557.274860,mNzU1ObuSH +946907,494171.217233,tNoCEf5dyt,806427,564487.267079,T7cMkc1nCD +390828,218203.628934,yZ8IWhENG2,108551,244784.941216,cDuPXQd1JG +799350,452478.004419,k4acW1htwF,802201,539946.089915,0cVE4GwWOj +546105,777539.781539,9Xi7OzlZyb,4192,321646.653042,4BCkZiQIsI +467164,460428.524760,3jp7aB8dkg,340154,655210.037397,kOtEXobdj3 +717478,566361.730829,L6tYvrArmG,224311,60119.189266,VAPYekzrzp +741584,454733.025694,SY7p5JOlXs,125511,719114.463556,lQINftC4qc +573927,230580.880651,QDugZ2Lo93,445122,416247.502400,A64SKQFyTI +823088,343232.491569,pPRkhgDuBI,689822,277807.155885,4piHmSLGyX +273089,104009.531470,8WCdAH30HQ,408445,958537.431836,iyZrF5W8tL +666837,539152.417110,OnqWH6tYCW,238991,800834.550866,e5IbnNYnSO +879290,465658.014802,wOqk8PV580,481949,973749.035799,nAIngUUHTC +130991,502021.050249,UP2ee42aSw,172804,354140.514552,2TtMLKT3rH +146191,2871.624115,JC0ZS57T1k,449991,862840.686159,Ys8kV9pLxB +221378,849196.935888,KHRBWxgAqL,890592,956031.762127,Uc2NFLhoJs +565842,323894.722968,ob1U8Wt8kr,783002,729519.493321,43QsTngv0N +384942,432297.421876,CUtcCs8MP5,446392,741269.627273,ewl3pNeGN3 +974414,579461.597568,1sZ9NsoeJu,54553,289501.759631,DtY5Dq9AXd +531749,568003.542476,qLTaMInFxm,252299,950737.651523,wjbSjLpZMA +69602,966681.636348,JmpyEyDw5o,186194,372191.823118,7S7WQHW7qn +433037,325680.213824,iSkhHdmbjG,302305,119942.572516,2o9jp9GLcs +454424,911221.689534,kFvf2SSgsa,882587,913808.963588,gd5p9iUXUc +353302,789733.272562,7ndkuizBbV,66481,831261.119468,kG6m0TYYeU +326435,74019.145794,j3wtP8jqM7,171719,189525.026976,ACqQ3LaFUY +641705,673295.526101,5bjooGiAmU,395163,457207.535672,EC00cC6BBH +597640,189198.222112,Qy8sFKQ2w2,773726,718328.576088,WDIG6lWnEG +692534,29893.788758,gNrdqVCHhV,574193,803727.459701,f1qqGHmRuv +170786,8626.741401,CSBsBHY8Ow,758809,56276.059943,d03DxdLwxF +981417,435681.067196,dyy4wxsEU9,306678,875160.001118,UHNNK3ZCwh +144355,943480.952705,30Cfrgab6G,155332,579868.007421,nPMgNJZc6V +282872,539157.917506,zmpmXHfNic,736459,271404.035905,EGWQLn7sxa +234045,715005.111650,delUJozq49,953395,695067.916567,bGCUTzslut +519568,588468.250881,pLnM7taoF1,57688,946600.912171,WmezsTd262 +84098,175224.809403,SRqIrMHBEx,959872,665863.127399,zbzt5TP4fq +579119,640621.034704,oxWyGpkO2N,150688,240458.739508,089DIDNlzg +121311,30552.959975,IgyYy7Svhv,196908,11440.619812,6jt34Qrto4 +805879,332053.370286,GhxCFRL80O,84934,965087.220408,pDnvj8wD3b +765718,614175.362737,k1xeb4xrGW,289739,14182.836302,d6qfdfcnRR +131108,918869.347264,VjVgVitcCC,180864,194149.547639,AU6RkbNOiY +418637,968411.986527,gotmCHUZ6a,892526,568224.569933,oy0sHBo4Qe +873144,176949.326055,5kMJNviWEq,880700,456402.301921,t1kwmHyS2h +987952,54492.440687,8V5QCrsBBL,507271,717245.287876,fSpyGAo2LP +625772,37619.334073,c6M3R9JpID,484104,650791.856609,ioNLhM8Z8r +492214,810940.983010,Ps7h7xMnll,882323,312372.070489,1efKKE3iQc +965895,818217.114953,hgYFEbY84r,719295,807231.080314,yKGGxc9QpI +689917,652583.676667,CkUaTrJzJa,16936,527903.090402,kZtyDVQWvj +221365,776498.404002,2XxvTbsnHp,245033,821581.373562,pkBkkimlMK +673250,168994.876537,Hl6LBh4RLS,863231,155798.872610,oENTpWLjVD +205677,161295.881168,Dj8qAhKiRF,124150,594005.880082,1uzOP879NK +540938,492942.200937,w7OvsNGbqH,203698,951185.199651,Bf3EyPuw4V +353430,567615.878734,3GkyawdvhK,110200,663118.809940,KUqZAP9c8q +426906,367330.790399,LcCidPR91O,758754,748063.065436,hF1jX8xI1D +72156,892385.966018,P6tWoa2btH,271572,776922.679736,PwFUyfQzTd +10669,345700.435171,UXj4MI3iPG,99045,113384.714161,0SJH6D4a5P +917605,264383.172466,ggYI6errr2,140426,98734.735586,kRADHMSp95 +156600,361106.926132,lr13jNTdD6,552280,588567.510999,bwrf64cSuG +854418,241166.571076,M7dExeWcrc,793045,225469.612521,VQQnan5ldR +316043,848818.798082,9uBYNhkMnQ,597477,908889.542053,6oEizFXkGs +760793,88149.615386,sRXgB795Cb,116637,436066.908761,2eikwpxUYz +82086,94839.684978,MFyvJdAMSe,691284,615049.795590,1HeTcntsZx +441363,653400.879552,XAvCSsl65I,642129,3533.064825,d5YDgR1Kvf +142408,637206.385939,lbxSH8U6ne,353300,897968.790008,0Xmyp15JUq +199094,883164.753276,k2ABwEyK90,468667,177706.674097,qMpjqCtWaA +18010,235985.891249,GQuTNF0rrc,841855,100386.153165,rilQDoH17Z +70292,511067.512329,0xKQlRM3pV,914819,440376.669985,CwZN9lRtCJ +3700,290166.878843,ptD4u7fV0M,962725,113994.433635,ul7YO5DPBv +370030,917013.243773,yFmgTCfSAF,250046,784001.820997,jDJD4qj8HU +905368,796082.240259,4Q2dyPhRD6,269394,761271.738531,EkcJJ0Y1If +2783,387536.896331,9DppMBLKCj,582338,426705.395134,npVDnb6z0W +672354,677569.960012,geU1Lyd76K,913161,189117.803668,VAI8XORnDR +71709,324219.514376,N40bYaqkGD,950483,592066.584582,LXaXuHN5QU +572431,895264.156911,myEpa0s2XS,869140,279993.444768,BT5kBMRYID +142417,919913.666904,gs5iXYJIo7,737165,376243.953884,XAfZkfl5Dq +737647,311356.445535,nYKmWaq3qJ,374766,968018.994354,MPEN16yaq3 +758263,979410.057866,EgkNo0eWxO,209981,132613.490882,Em2VSnjFfA +739260,390640.587598,gduUsPuFhs,246865,821793.770253,m3EQubDwSJ +886774,318387.436897,o4VOYQjj2e,384602,15718.325547,4mQMRjJDXl +740693,822848.829191,qdlEOS0iDL,697099,387704.345908,OE5tGW1k3R +469016,859971.873621,SRPZjEuN5P,33387,29220.573681,Erl1tIKaGA +893285,745641.374321,0MJ0SSbVJI,953269,23109.939353,uee37kGQdB +509530,295770.481363,xq3MwbbVp0,431196,124365.084361,RurB5Bk3kS +748579,777809.414858,guvnuUfUUR,263675,820835.032945,BN2LC8h30A +74240,80140.731557,oPmD1m91C1,705151,234052.723262,1YrZPidNsc +154655,115045.126711,Til1VGu9gl,200418,998869.367752,aqHBRzIVNd +387196,987226.122955,vztPIXB6oe,712321,115903.093309,rFQJr1eVwL +116499,749290.663606,BovwICkPVw,907589,299867.846414,tTxZQyif6l +677072,471537.161920,o5BpGRiJvE,356530,940290.269962,QWpnshEqk5 +917303,153740.329371,U3juj54r65,160272,422793.318800,1600zKPNEB +38521,855008.202903,6ESinr8ynq,768735,398143.868782,VoQeDmBXej +288294,529110.923078,daQWiMp7x4,403077,565518.714570,Z4DvOdJnM6 +673722,430564.978410,eci7Rq4dgn,16874,166501.236826,0UbVadJaW9 +420454,345369.434996,1sqEA1eemJ,709147,241911.468914,4B0UyqGH45 +747601,436613.037984,4caPzh2eny,297120,371105.662578,2dKIy1N3sg +365001,541602.408282,ajSCYPBQQg,739453,643722.214276,X1lF8sLbg6 +284050,856091.000160,wXnvG0ILz3,488876,450098.839195,uQ8F50HNIU +807740,109194.523668,ECSYGM0lUh,826683,776338.313577,gTzci0mg3b +785287,985828.139675,o4LeHlE5Q3,479911,955320.030586,iv6JRKu9hH +83524,766417.328784,uX13du2WIC,107303,304319.101406,XfCmqiOouR +704562,703549.205162,pqrjLfmBiW,922607,696199.869458,Wzko0TRo7D +390466,124452.543315,JkIHDi9RPA,279138,9463.907380,pfJQGIdZLA +40989,799350.950299,Nv4yEG1lSK,373349,423699.695438,M0OL3gUZqU +190658,835983.985722,lhEJbE2qb6,411424,977376.624571,p8C62SAJmG +542640,52189.332203,QLPAxHV1U3,989562,942864.979563,bieKmy3kru +325689,599565.105769,3TzR4jZk4S,962253,605882.373303,mqJPQwImWH +609784,873744.200007,0VLy1S0NgD,647763,430889.389068,VNOlMgF1th +775589,791574.300772,7L2NQl1B0n,191509,82813.158229,pp6QHKY6rS +25087,352794.531918,nMEgnuwiXO,642513,327458.359381,wHLaDS3wlX +280304,528874.761167,ba7pfKSPhn,994114,997834.885952,kAoC5Hz4jW +801792,248019.594826,1A5MfkKiON,633641,796460.133301,nPORCAilMg +225219,685006.245574,mRA98CuS6u,81650,624372.064433,uwfjUXdGb3 +134548,289742.191382,cEkWWYnW0X,829011,984213.609831,DiYCIsk21p +512207,124903.682444,NRQmXsqfgW,100353,959211.765091,L7ew1zoqfi +55863,65433.582173,kNJztXbixd,721906,307545.566389,z0rnc6jUKA +525845,669020.348196,bVGsSWA9HS,27703,24373.726835,aSfXyKJmqf +429589,203386.669081,D8YhY5wbHD,21167,576818.643468,oCwqPj3zo9 +914690,944391.560883,25lOgbdDSl,684616,410243.825867,ulGVaFLkRe +365721,642823.642440,nlgiBMXEst,412510,464668.231041,JYiNvS93IB +701236,948563.879948,W4BbNi9IqC,955549,821789.257768,bKSx1Qdgvd +935589,783242.733787,8J2Ob7cfkH,113067,287803.354674,6d9Z9d6xrc +101137,239131.091826,1zRjsCbW9W,62517,572049.875861,fVIJSPNidz +625065,870596.241197,w85BUR1zq8,452704,619955.098853,dalrqLRtoW +639476,589097.298636,6quWejuSZb,460283,787605.325124,NZd475uNSB +976928,847232.892058,TXTMqTjOKe,32602,981730.888005,S4dls6PXSN +406137,156719.187883,VFvx5UYO1a,209435,874155.191076,V8kSreVJAn +968094,762164.887738,WXlcxRplrU,234557,857793.328113,JoS70NdI8J +682954,413574.921901,h56UW88JkB,466667,697213.496312,LGi3jgH2CL +779403,677485.390026,NCssfIIAPN,96365,177812.643425,PsveiipxOv +307331,752115.445840,8PTzrH0vJn,382362,397667.979521,G59sRy4uw8 +40427,852135.627507,QkZNa3w3bb,724910,513576.320552,9meekw4lq3 +471954,427211.063193,L0m8pmiqVK,671863,890613.364554,i2MADniEid +788930,176674.901326,Z2an4CugH2,878576,913752.551976,fyuy8kR9Zs +512701,587152.148177,4GnCs9j000,45616,198383.171617,faBplcSqEn +187314,193158.798111,763lzv16JV,521002,975035.477482,CAwtCUULaF +720687,713429.986988,mszTYT3Uc2,50568,716762.801858,21sWDeS0M3 +468768,351889.406003,wnNztbd0Lx,247522,165185.932831,EYpgAz9KXa +673986,596482.664883,nOWpNgO3r2,115598,763868.569546,0wbH0omAPQ +173413,703480.577847,ylodziEA9K,507638,863134.201820,jkkXVzYrhV +671081,105124.626609,fpiJ8laSCs,722999,646993.216066,2obRospKKf +114841,610413.742842,6nReNrFyk1,234217,834198.832217,ZcKzRKZv1N +508687,782946.388164,7UTnza53vo,76436,692233.162147,PslUGLVI9G +455242,840530.573039,cQHzqpDYNm,334730,184357.210612,z96A7cvOOj +952968,81022.049258,hzKQ6fzeh5,859421,803239.362977,CIQgDRD77A +229448,580831.464919,1BOPXke9HK,937457,537669.240199,iDa0tRjNSd +245663,655054.097787,kOSYLFg38z,233713,870450.765954,891kpUYuli +482540,147707.844649,DpLs3MVXbd,636855,411866.269070,sRPPOXgZmm +459221,817656.263332,XaNNCmD9OE,533971,859733.732103,s7SVJYPdJn +929257,572385.924529,hBiUog9e9J,363186,241287.934681,xXvG5dFnID +934636,222794.509957,aYAasgPjR0,543882,20984.125844,bMFzx6cN8f +918890,900715.263540,NmzRkAT4cs,547020,660312.430273,uzKMrFWRwn +639570,81850.443660,ONAJ8COX1m,529314,334673.275184,vEQ36NQHx8 +907427,429379.568434,qenSmq4MLw,249224,451159.857465,GOFzAl10vB +339297,447856.882870,6VV7M87EBt,255301,623723.582448,3IuzdBO7mP +496114,184697.627092,wwzj9db1AB,237540,703385.274638,4Ve85XLsSP +232756,991035.939171,XXxI5GR8dm,404485,667941.997933,wX7xLfEtIf +898419,422662.766105,JhYVgNptl2,836341,549180.680730,m2ykVR3D28 +981057,960529.893430,iA6vSWM6hV,84241,166925.788006,EXK4hLrh5e +527639,168197.187178,H5rAQtFoE7,369774,533844.032054,Zj3hTo1ZvK +626362,651718.500594,huMPWhblii,818407,797389.887200,2aCMhmFONl +447576,76263.618439,Hhv1QxNuWg,130246,365894.767669,IiJzodqu7Z +519808,612071.558363,VjHxpeVZ3P,633825,678799.715800,3hSjwRR8IH +653781,617839.968783,KE6uLYVOIC,125600,381912.789723,JZqt8jzFh9 +823644,626422.619529,BwzRdeGXRj,96658,834067.907176,aATUEwC8pv +985136,971727.252346,l7i4ccxwkN,198246,458120.554078,AcAkCvPwG6 +713854,899735.902879,t7cJnBN3Zt,606624,786531.067579,pUkCPSYtkm +972924,166988.663890,A692wx5kCx,42652,449711.560961,uDQDKKwyGf +462361,810833.765321,s2ki6lVJGr,439971,893812.145540,jdhI4Apwee +239638,447109.117591,NS4Z02XTYH,908257,779853.988770,4wxfg9vPzk +593652,801601.005797,AtlIslno7J,116905,624718.812871,B9ryELMEfz +111645,740382.636033,iqAiXFZOuW,31105,841978.038869,FCLtj332Xm +830148,997280.670411,cIziuU8VeE,642513,797584.243446,kkHGVQ9b1k +269335,290381.896423,jl5L9aAhGs,188001,543084.419149,gu5Roh919h +166103,380163.566710,B5HXNkjTgY,574937,759748.070568,bbgLW9UJ5r +196184,559654.064528,fyLdqrECUA,265205,376700.368275,6BX9p5xUFR +919316,150792.020372,FLHk6CmyHP,813847,584210.019112,cCRRZzrv9f +665669,593746.840218,45K8NXyr45,306021,736814.749007,N8pxz3baJv +317225,295478.153814,uPytq49qsF,832010,310614.255894,w8eFMlhhs9 +388949,10128.211110,UEehoCgsFD,937339,311666.560186,byb4MycbUf +348418,532754.246086,Ldni8iXhX5,535747,135318.973282,VPKet0VvXg +168696,983514.961031,FzojCtSNVJ,743288,915451.100883,itI0ur4osf +409200,741746.630640,aTeXTOYsTl,447322,84208.856550,xqKRcbgmT5 +205057,575882.051624,GWjAtU3dmR,55673,389635.576341,i9vtAR8N4W +709500,736176.607036,tGk3b6ESq1,287091,95331.616786,FcXnEKLejG +27056,792721.020749,tghJmZbjHV,32405,648742.957249,Pwoixb83Hj +836504,758453.990340,MLPraRx4Pr,441207,199511.221228,3lvjgBCiav +28417,895706.506307,GrflPp0KDu,486401,573539.117341,E5BRBYssw6 +919689,186950.553871,atalfpOD8F,481229,18232.888631,HOr4Pt0h1k +142438,570244.758101,1jMxn2xxg0,81490,99055.360557,kj0ppdW9k7 +370362,611520.366208,oMUPdpwQgj,768052,805148.404103,f6lDPYMmwt +862969,959314.111981,VfDyiQjMJc,241160,245618.762200,bnFS8EL50O +843763,646533.609917,OidmsHtMjK,283241,930163.026195,sp6Xuws2pz +933143,800040.014422,fHZVOKT5df,120583,986557.028381,nD0nsQdDbS +986578,729632.200608,t3Baj5E7g2,680083,225254.871630,F8UlJkS9Li +322260,988246.356918,FkQM5nlSGO,782038,914321.084063,21OUfgRhKn +988097,555972.550051,snKIhkfUk5,279841,619636.861736,Z6dLWfaHI9 +377835,769713.190546,tcDqbJas7W,171205,56485.412707,0arzo5VZPU +772485,499346.397793,Z9oi3H8hSZ,836165,470228.065004,cJUKy8eBv7 +922642,49332.020038,QyV6U9trhe,686446,753870.772636,tmVuF7NNZb +794507,161033.702878,OoqqK29Pei,97394,346573.321753,gB1T7bZbsH +63311,823813.219466,WvF3RDpNlb,258655,564999.746047,IriqaBnkEb +923883,422130.314402,EQZW9gGtad,998053,784068.664874,wI69clZWJ7 +850356,995050.682719,euQ3yfQ0kr,171092,382329.970564,jABUUTY20U +17336,354945.509780,4cq4IM4DdB,825840,590489.770536,9LVqTrvujq +462275,696151.459512,KIlJBtwsoM,578395,944474.275097,Li6sQIHm4B +43010,90338.482707,aH12WGOgLU,355462,488256.728146,M3X2d8g2ZF +622570,361144.068206,756TBCFXtY,826137,332417.279770,d9LK2p7WBd +135153,329517.635741,IrEOrxbK9W,52527,543314.531097,hUn6wzEi23 +618994,755115.688127,NWSlAUxCSb,498778,969937.299969,CpXp9KAD7V +105109,304901.385133,lx2B6qViCQ,540971,52059.152345,ZWRDYw6iYm +869020,725231.728248,esEIa0ZzYl,694170,531569.860522,pUo5rNkIlF +922947,661308.288576,KaVMGJKiMK,909783,113665.772674,kx5nhfLpgF +887863,814430.901772,q67M8CV9WS,900444,517746.276671,4rt19pGTy8 +460485,293274.722060,tWm5oY6hrR,875575,294715.182518,LY0NEUPYve +923394,531768.586078,SzohBkW4X1,402750,981803.712930,CR4kNzOKeR +715150,608749.434316,XZUYthFcdZ,283148,458102.645742,MGzMwlq6TW +193832,279696.051023,r2q2XS38m9,734324,317097.044825,GqsM8HvBJF +305672,965091.369242,y9pssaKDew,722698,775972.282051,MqY2PVeb60 +742834,999078.173602,bpvyFL0Pqg,528805,756220.355488,X8doRsa7Oy +536476,89249.522932,fpV7I9qSoP,534969,783239.675685,AH7Gl3Ipr6 +759705,824300.716795,T1OICvvqTO,478407,441514.596978,outI8LDPzw +497819,796155.730001,81k70Yf6yg,776122,107747.980623,xlYztk46w5 +994416,83142.248220,ZieWdcNMtH,613403,441801.453388,0stol2zG0f +658263,424269.203282,0yYHu45NmA,437168,703616.763376,etCaKKepNi +998936,675674.620317,jfEnpNSu9d,182834,784704.200522,seTDHvXnjc +857147,643278.058142,dSgPzl54cq,404110,717047.707982,Pc0whKWs3P +147088,393621.916549,m24f5NoYB2,743252,69062.305595,oI7uzE3OXz +374853,173086.977508,uhnaDxUGhh,221408,680019.374461,sEDjrQ86Cg +92062,345407.458885,BZlnBAQ49t,930511,626636.757929,8HlOS9Zc3X +535376,567675.310825,5lvkK3jpfd,963053,854588.175689,LrY3dLi95H +823988,143691.055102,7m7zaUQQ4o,498412,422539.437408,fWy4Wh9MuO +398240,466099.034248,KBPAclALpg,350580,164529.717885,oReABx7H0j +696478,769867.919054,QP2p0CoPlJ,871978,181460.956135,btIKr1aCUI +229366,792615.471228,zCYXaxPuEE,791316,113044.478205,S0E1kNWOQa +366234,564796.037232,5XozF8KQzH,303621,291856.791420,PKYfR4HvvF +425702,538743.645440,Tu3bGNQhHt,934696,915029.873681,w1kzwF8zi3 +219786,653585.284711,svoCZM5Eh4,171753,282435.088729,Z7aX1IErQU +281994,633243.944418,nwB44GrugW,425187,356008.597548,5qSQA5uekZ +154877,683870.909270,JmvuZu8XBz,243004,632055.503731,c9gS1301qa +704943,201547.588323,IVLz06oesu,908238,245273.780995,L9AuKQOCoX +872771,853434.520860,6s8G1dG1x8,121512,88251.956463,2K2fl87ruQ +16951,799432.374984,9cn1hXW7U5,442581,746011.086527,X9I9FGrBZC +218558,267605.286817,ax2NfHbUIF,10369,619823.254126,eGw0toAAxM +598012,49560.245516,7bmFm1m3EI,773009,452873.634182,0sp3m8Mcfj +960778,310854.608080,WnU0rwc9qo,452838,604146.059907,FPuP6C4hSj +583826,999470.152278,LkTwVkONgw,809393,892861.009798,J4UElG5ZCy +603882,407544.543078,XUh1Ol4g7G,925260,275159.975739,VzPPC8K8I3 +192616,735118.604350,1wRg9RaaTk,615664,179326.033094,lGuMySH75C +341187,690732.687358,YooZWIHIKm,936388,134085.877260,vIWTzUcmRr +978242,554540.397476,8uRAxATrop,202003,72076.371755,RxlMzwfVHb +378849,132450.896760,alXYdQiBfs,7011,261573.089012,pwl3VqRZWV +46750,554821.904412,Sh1RbsSLkc,199565,57269.473981,4pYJjjLrtS +729533,565192.218175,3MQSFzteik,196092,432403.043616,DTJi0aTaGm +468563,909159.053610,ix9EWG8CFJ,563335,194178.539862,WxYKmtPem0 +420536,791533.284572,YqDtgofkjl,894466,235216.550660,MiIWTvielU +970526,583942.827370,iOqIAvoLZ0,381901,499699.299246,jN46cvEGx1 +536935,640475.308671,KcRHx9sppn,628918,823967.812399,seddmCyJZZ +586440,224745.410942,Z9bj8tOUyF,859807,535377.889674,B0T7E9qVKh +939571,177211.137610,2anJ64yfiR,918031,76272.169423,pTD9jsFIld +202834,236726.159614,QwfzgLfynO,474185,987672.476185,gtwQlVFsb0 +857335,189905.889360,J4yWkZzvot,177772,109023.427980,FvJ5HqcG5N +249032,961340.473039,VLVG8V49NZ,452964,1769.568574,QVJsBZMBEf +893708,490113.966658,SCbIOz64LI,886627,132407.099667,qquE9oYmHH +173746,815935.556661,nDKnq7513o,327560,805693.385022,hMW6PqETYO +410010,674571.191214,R0xKMvwW48,540874,828862.275924,7aUTiaugIH +456027,846086.522579,QRuDfS4eYU,305230,602419.319937,b6Jpd9eeRN +67899,766806.195093,wp9qZnR1FU,22233,78030.227666,7XlvcJEvmz +34816,743850.094605,AVmfaHARB3,32411,154330.122088,A4Xc7Ymuvc +860276,344900.760966,7kWsxhIjzU,81518,298469.471882,MVoFJkbwCr +429334,640172.846185,mguDUkm7fa,553642,769830.816438,qHdxoRNGga +426190,740882.859989,SUgqd8zSfh,507752,585227.782738,9z5salvsH8 +154761,137517.097916,QEfYl65n6x,961282,396739.301830,lLsDuzChYR +388768,834676.377965,UlUbXQU1or,650559,878856.163181,VKLvAgkbfg +386344,560219.192360,svC2XpD7my,183325,634676.226491,5NnLFpcO8l +157573,68854.525135,0O2c7utO6E,843454,418776.976076,ymkIlkAxHn +562154,856523.303442,e8bMSVawEO,627050,96468.294642,mzAEjE322I +293320,786703.725728,kXHDuLauok,683902,273814.112219,RQ3Oed95fw +881566,52053.148559,hcx6qThzWU,975977,595615.377727,Owe56O46Un +712365,7168.028104,f0Mf2fyoYa,964562,242048.717399,71fIvtVnXY +111057,356296.577153,LfapuEgpuW,527126,86658.438749,bDftDb6KxT +918703,926922.870934,aPmgpYFzL3,700822,274377.133156,fQjJbaI00r +654595,905129.072290,GIkIe7lSRv,412224,478651.936903,OkpvbgwUnT +954533,803156.580630,mu85JjG0vN,707946,274643.946875,IrItWSoS4f +878075,912060.248027,KMIUAB5bB0,505343,923909.333213,QYQzQFEc6T +220487,770398.744965,ZGWfcdlfao,937907,980892.426913,Pi6byNiYLp +817549,900948.792270,ijY96UPBks,742310,736420.983390,ZR6p6wqL4d +803234,457816.772337,2TN3WouJ56,693546,642977.113044,TsepMTEnAK +875473,507412.633484,oDu2zENuXc,569704,484330.559571,IMGMnMh882 +570925,661673.903243,0TbDr1gwzu,749765,689016.707831,tw0eDIiqEY +179688,572268.271897,jj3kkOSovG,154009,561718.838056,T35O5vg91s +559712,889174.498810,njet0cBh3V,81400,461884.584138,sWOW0lFhCd +686195,400450.787385,RZ8OTK4Cei,138923,107211.054801,6YiezTaoG6 +370225,579355.535763,cDMevlC7X7,927573,528149.695397,UYjuDzIpnX +159727,992963.346741,eQwuE7qlOq,693879,695962.726594,29AIqIeb4l +429981,310646.951048,zg35Ibu0qy,892690,686408.809246,zqpO97TUmc +914795,744288.731023,dHzWlgUrRX,194053,379668.581468,l47hdwINvy +752247,398571.151783,BUeuF4IN3i,654022,229383.971613,ZbnkvUjqcT +199635,296852.650013,IlM7ct61vE,222448,941214.152595,Q6xDTMIdnw +209217,916476.361161,ybOXZZKYHB,407934,910361.822758,gK0RnJKdGN +555735,624196.674366,lx6pdTQq4O,533229,644602.010106,jslC74Upxh +122303,583451.826742,MW5fNGBgEc,238248,872896.769954,Ns5TUJr7GG +980747,507364.529047,ioRhgctpDu,455027,556711.204136,mjlKjENJlV +212244,605226.413693,jXz0fGnIBV,782892,258682.355660,wAezyDGKr6 +141749,588204.858674,0XPIIm03L0,143324,815239.337465,Fg0JIo9QDe +114372,600928.980069,eajy9Vj7WK,697166,45894.184860,hndQx448rp +417004,654624.387296,LL3Nj6jOaD,850021,721744.211087,EKucnuyYCa +308254,821729.524571,6zsvSlFqP4,450431,668832.967104,LPOijvvR82 +80790,746360.725997,VcHK5tAmJH,454796,829006.132050,vspUYCGzur +715778,739689.548125,Zlt1Ip2Rn4,348298,958729.645010,SOgjLSxqw9 +155887,47699.463723,GkQAqr42x0,139880,733768.249460,gdzdCEjmaC +266395,812633.656643,DvJBvppW6H,680482,75839.801729,xicyNfexqs +245738,660901.987975,nRsyjtUJrL,298855,509906.824002,hRz5zW7ux0 +822916,551116.863143,uGkWBT8cWx,659586,662736.139520,IjpjvyworN +65194,931237.247928,lhU1P78J2D,706394,700862.535738,00ZPjrnjYF +527737,322151.745148,sDvnv1LBRZ,839122,914441.647032,A6jey5vbei +763925,22472.659773,Ko2tI7sKoY,263140,401325.190565,YVNdJTCaI1 +305675,654186.596811,bGdxio7Ah6,960658,298490.330938,Ul0n3yAx9u +753978,263488.081342,yje9w02F8S,94937,901422.055253,l5q3a0n7Qn +949027,926505.837825,lgjOWDM7Mq,620672,87575.523921,aPiIuEnJmJ +800845,735075.175870,2fbZOKqoAG,254556,386081.509317,oEuKEosd9M +417240,723193.951300,2FNY54iueM,673939,283374.954610,S26drTgl9r +6569,895347.796007,2le2pJY86b,436474,5870.647974,mFLCrRNfKq +538355,172897.897006,psVUmwn4LL,619080,142165.883698,11M0QkCbnt +84151,573971.730925,gjlAX3axsr,997122,96546.636976,6jTGHx1unh +26979,258271.026177,OL3tM2Daj3,958620,90999.263833,zL7VTXcfvA +105262,67474.666700,b8DrJspELX,412090,864073.825680,wF6xRzVoTs +731041,752874.096265,uDPZU1tsAP,401489,480978.087649,pgMRl2gibQ +47733,50458.909228,SgZOAxNAEF,389871,59979.936175,hS570xzXZj +182303,760814.274221,Qf1qnIVm4G,787331,33344.317877,c8jL7WQagU +180511,137126.987943,cvDCjtDEHo,950902,778641.132778,82mecbXduN +776351,844813.992155,U9qwfeZGWv,902293,390360.167272,DZsrzJ5Lms +755991,484008.511902,2nxksVu9ql,623529,434310.697229,vm3ZPzZyLB +733782,669360.406952,ueYadSsWuh,267650,546922.013234,cGNV4nGZ0C +381736,610842.255515,5sjirFxiFt,291037,265517.407597,x5lix6iXyh +399115,413417.726911,4mQy9rkoyX,68324,419060.633598,KOXF3tIGeO +156167,111215.599875,TD8ucEjiLi,423943,961734.070530,c3o5ZOyQdN +811851,464715.367045,xxqH1A8heV,703114,223551.588564,sWwlub5Snt +288789,140180.705839,kZh9nhsSju,697377,396689.778033,izUHgHW14n +182294,938284.926289,LWaIvNr0Mf,654690,324286.206415,yamCEAfZ0l +673036,20533.463051,g0CCcLsCGK,429470,744213.418392,okvooB2DlI +817621,373541.355244,97W0cLpzUH,137341,966192.456194,LKcYGQWvR0 +391084,741782.973281,F8taSOWqbH,351816,478424.684061,hKB8WrTMIC +76396,713651.835651,lWpA20Trau,718724,108146.551914,uikEoqwr6g +60288,105931.242732,jGmOy236Un,219347,156529.088136,Ik8JDoU0zk +384276,287760.077043,R0dnQ7sUip,612209,798968.537253,WKcepEEHam +175783,269241.335793,PKHANuWx3p,315889,731491.617462,OBH3JMQ0sR +513893,226921.144275,s0ytXBvpuq,389007,911690.995793,lEqf0YAR6G +588969,187715.382631,vG6MLPTqBm,748083,105236.691705,xAHXXpXg71 +12731,333198.954545,SWbwnYxKKv,396493,193906.792393,cMS5RWO8p9 +223628,678637.109046,FhBmGwenyg,52593,496309.783585,PI8mrObQCo +975057,21196.629006,bzsao0UZQ1,681200,751829.298880,0YO8gTgf4k +887590,654670.861665,CuWzIQ3WkB,446369,569166.326445,gh0DWGm7L1 +313812,519758.640809,2EFKtu9F7c,225238,743930.619793,wAHd4cq171 +248968,278243.840502,ZD0HTkSmTA,104748,578660.026721,4uGHUra1sY +772945,420161.186410,KsWAvBPDXk,450791,226478.504868,t0RvmvRzCs +179894,494760.073767,Tt7VKtLPaL,10241,467651.624657,73t3eCyrW1 +839846,383352.868583,P3oLXS5bNt,703503,659723.025471,XsccDF9aZS +516591,325152.652769,wTK0vtA7xX,352249,599901.691931,B0g4N7rRjs +100061,983388.713488,kGy91QH7lW,489369,508627.976718,0TqScAdTri +624074,344917.842738,6LtKnbw9JH,230347,861276.811553,WVxT3o5P1B +156494,825496.891785,cEXfldfqpo,545636,53826.241970,cxMGdra18e +255118,797359.300050,IlnWPQV8Qs,975619,948782.952147,Y8g056A1ds +469748,31164.261286,7woZolQC4T,699347,478919.165530,WRxa9y4fCR +306709,980841.206931,gtMIgWZkQe,985266,101721.899683,w0KVGtob6x +468342,802465.669473,XZmSbCcKKj,305350,925512.443179,BHYFaTLM4O +525868,860867.210104,nFxiPaPtHR,182810,900351.674868,S05CcT1Zi1 +153445,603387.898580,t8pv0nHfeT,16130,729801.000057,M2IePIdDed +865000,718279.140653,D8xNeMHALm,204581,478653.388925,3zNmR5Gz4W +338314,515254.819103,XCWPXSq6pc,617255,908057.945974,gcb9ZrjA8B +537330,224181.215275,XycNSTa6Dz,771030,742121.213107,n7ihSnrncK +728676,281285.308967,779XI9kBfA,74641,463894.634749,eA9wrYXVwq +522864,238434.904510,ancxySGxuw,926640,212846.472483,yTToz5LIr7 +332717,945888.773747,Pef6KFrGlz,870477,247437.259787,H05WngfL8Z +925516,436511.638531,H0elgyY4o8,92169,934960.825504,ReWYnk74SH +452565,135910.800995,AzT49qQmUb,706068,699457.036394,AWDmRbuZpa +163322,53122.545304,csZ91CE7Wg,897906,367057.015413,2Y7XbPrpkp +515364,110261.456105,dtju8ZNtRk,608473,996292.509972,ndHG8sLnSG +411424,626268.986872,szr5CIvIBh,503648,592711.140257,THm8FbOb5P +524274,690370.206371,GriD6fxRwZ,787479,464096.347845,kGFXkaOUkb +741235,697874.506431,q8jzl1s1lj,904944,680331.860521,0DELvpphBs +639640,701187.163783,gHav80UylB,894368,678310.438148,2TAs4GuWLQ +47055,287925.035219,kajcWZQAyR,426131,76741.637649,nxE5B6JeiR +830505,562794.096527,6RncBX72UW,739433,273166.452515,ZS5x67jBGd +921045,934255.253935,SmhJTVWL5i,749055,244157.245653,x5vRDPZbiE +680311,725764.709801,e8KxiSaoNC,495762,160018.657420,W184JHJuFo +130336,727629.957853,k6XlLiVv1j,281153,245829.828121,YefBm5WErm +824208,782930.435578,qnWc7ndw2H,665645,214192.038300,zZR3iGzZoN +150205,36999.074134,IWjwFlXW5F,957164,880365.889293,30xHKEVGhO +912054,938494.902144,lvjermj0Wy,298223,653107.977120,qLK2m49GtH +798757,633630.139218,rzPlRtmZ7u,843811,143440.298594,EbWDWC3k8p +971844,485469.709394,CmNkBI6WXf,293844,389609.283350,Vy9lCjXgkY +30498,287446.106183,7sujzSH7vr,16543,775153.272020,OaWlRGmIRl +738835,694861.568633,IsJpRuvFRV,4768,397491.931310,2XnQyTHfqX +271713,826433.458996,CUepJ7GepV,902498,96058.964861,Up2nm1ed2K +626816,855199.535763,YEpJdvLEZ6,116444,823542.342684,k4dZVtOQei +35381,806225.466603,X6CJrcwY5t,804482,642832.870541,NzlvDHJor4 +93115,643031.338681,pAubzpi51h,168474,8241.750881,sTfuwqS99f +732364,68335.966445,Hw1QdfS1ry,887591,980709.487469,a2H0Qv4f8v +136527,511003.795418,2vsyqPlta1,851833,488123.440499,n1BmDPSLeQ +670765,299618.471097,T3CjpKyoYU,384298,912630.401616,kat6A2P5Ie +298307,331127.152915,j0PgDWflhZ,949891,720027.971551,Jj3SYwI7wR +251057,57855.339119,B4C6CJjEAS,790458,40790.638773,IpkyamkBNP +278015,966048.322373,MhtyJ72vf8,656308,637899.184540,PMCcuXetBd +947470,243830.992250,59m2uD1NHG,116040,362837.171115,sYm0Fm176K +960084,193909.500412,9qoffZ2kSR,350783,770832.040349,KxpzMNgyOs +694770,506732.601959,NX9xiHJIsc,29736,635619.748132,VWPRT9GwCE +301548,666084.537000,WUHRTU48uE,603616,883889.990015,xbcRMrFePm +377697,566435.557085,crwyTWnwSI,302634,345138.769581,pWfciIrJWJ +348078,551344.117801,ljNf8RlxgC,197151,800520.945719,rVmk6Mxi6Y +451472,670392.904187,dq7DNfxTRC,74660,626737.162377,KSQnSaXbw4 +107159,85258.099094,Cnbjrau1wh,171876,395376.895844,OG19dDdG7b +158472,904670.179592,eWyxmdgoZp,710039,722129.985861,Y50EsDoVPu +485728,799470.549759,JXHfJgIZLW,77488,557331.955476,PkeK5m4xY8 +60341,337199.224397,QhfOWPRhpt,92593,785444.394913,mSQHyshitS +321100,602990.325401,WrVYtLTi8i,614641,116699.227023,WP1vYoBtvg +307710,207143.849608,AX2SbfqRXJ,553591,221078.551267,v8IyYMVRYj +497501,873510.711634,qImn9Dhx9Y,81451,741143.530753,FJsFAHq3yS +169677,47852.688690,B9WiU6Qne7,715039,771321.659101,M6QnKWLFe9 +787242,988657.664531,BZNasJyWCG,696705,562166.424657,YnUiAMNlYP +936260,843324.239609,jdC88Ldhru,818674,192770.534236,OR6V72wNpB +75723,929241.148579,8rWcFLJDPF,368963,769857.606297,VJ4a3ebJN9 +460805,217093.737151,ysD0rWqwSG,400105,511733.297673,BxRITGdYkv +242275,254377.199961,Yx2A9M3DUe,494256,357711.998676,hmdoqsoXqr +74142,880614.577158,rGhZg16gkG,839536,776009.008824,X2ex0GJHt1 +347440,734869.180261,Y8MBzIDxiP,277130,964437.892327,SYDDM0XeJH +378407,602245.633910,VLQ8ET1rQe,571482,765650.344171,D83XqB0ZzK +426713,83259.636147,qXsdNThbG1,846584,590952.304367,cpPaBU2vlN +116327,782866.702041,Td5lv1Spyn,403431,410549.071899,ObRsK0DCIZ +694186,939274.749196,wbvcty0EV3,522299,94834.310433,G7Ln9rrED9 +947835,564666.086548,7WcePftzjr,650124,697625.242641,59o9IGARlp +329961,388515.684923,QH0t2bTCRR,123037,581551.872090,IOYMiFIOO2 +702975,205157.005656,sfEIdadKUP,356829,289892.249655,180CMzgTZk +516253,826234.993206,RMFZQOWK3J,148312,401559.676361,tBNka76Fag +170163,448609.340281,jrlboqfqZJ,160226,853848.197862,B0Lonbzrp5 +113729,235251.569585,g9PPBDUQwq,962822,90227.231858,BQaHSy7Qki +504331,453836.081797,pZoXzobbAO,92323,948363.664858,Cx2UeScpbV +509722,705947.104860,aVXotZkjw8,325107,378806.377462,Zo4egaAyEJ +908511,885466.030919,Rq6f0qwIbD,782149,683492.078236,KdKx64QzxR +145918,542153.047085,wMCdhw0IoB,466053,276045.914222,DOIbxIkegj +924454,953635.809067,oJyk1fZ71C,99761,752220.703060,9U4V2u0okJ +666199,969891.562453,627aFgoQj7,135340,372402.216170,ov7PcLpyHV +5127,958735.185809,Ito7a6FRYi,129939,98629.730562,joWiiFzSX2 +835449,260389.092280,0OH5Z2w5nQ,945315,286503.498980,A7w6iSxfPg +659055,196279.248827,FPoWIspM3w,213137,639509.474803,sTSnPPeRqH +380379,763788.983629,fo7FOW7oLq,777804,553885.559503,ExG2aC5hBe +738372,36961.072243,JlRaSkeeHR,445484,78034.003388,8m9fajFmKo +725061,738405.207712,GCH3ok6KbD,920308,980811.545008,LRJNbs4SgE +941665,364371.215204,nrEcJz7CUh,59024,708525.473389,RfHUBm1Okp +531145,489207.192600,uPGdPVpFip,736612,693016.238474,OfrQuqMk5E +415819,605152.198589,WmhssIjjtI,498538,238348.134347,reIwUvNfSK +323068,608536.350044,3nzk78WyEo,359572,98529.942157,Tcnx4t1PuN +407706,9885.924807,BT2yPmY0iD,630747,144084.393209,jeqfR0gs0N +914886,32005.002957,F7qYDbMXaC,180915,614395.271216,VBiEIFl7sD +11960,241251.504912,pnkmiViOwk,854925,218680.593021,j03Ve5A1lb +727190,369213.485441,SJBNcSa3Ix,191470,303480.096133,V845ZTEckj +989608,695194.021949,aCpS2tS5gQ,333907,203727.498104,4mZOpCMLvN +181174,849616.114283,wd04l0Wy0i,244227,750395.445869,1nwTqnWjhG +333503,912794.147741,VAbMxB7pbI,670482,227871.558490,NfuJsEum3L +759829,568938.503044,gzgHJ91oT9,859610,913410.331145,iB7uTLGZYh +776789,934926.928036,IRkFGQSSKl,4465,553136.431057,7RvRssc9PM +764260,96947.427677,F6YsTfkW5W,115836,808169.826985,JIEnj4ZhIK +155067,476962.572890,NquGjBf5lg,820,435821.981082,BwppAkKXlG +787346,741050.851156,7v2ZM9wPBa,890041,783992.838220,LhnmFT0clF +275352,187000.245810,1MAFzweMN1,649714,908014.711124,x1aIRt9QM3 +691299,573138.114979,qP4eIHhUao,27028,593576.556401,xnsMPoVxd9 +600852,114123.018670,unu7QW8nXH,773802,88690.607281,ZqyMM8HJo8 +21460,489775.154667,0DuHIZNVwp,901371,200977.395212,qcoVFsiSyx +664815,406891.728098,dvMeKMHEF5,857412,919228.931120,gvFcvFRsvH +956928,847247.476504,5zkVjuj4ea,541930,191770.934139,TBxGIpBCst +254639,945827.087716,h1Siruafjt,662839,817228.796989,9kHdxShDwN +836309,766499.854936,8wtAPivdrs,624964,567806.195269,0EFmSDuQPz +588330,649120.146184,YplmZnU1Vn,964064,850130.498659,0a1BZRBUhA +403062,151190.523041,ykByluUqnv,284082,873497.561579,V4o4YmbG13 +357665,648348.538603,Ual2AtrkVa,417141,326888.720715,FAW6hFvyYS +856474,570683.471811,bsjftEKG9l,259431,169540.582217,KGRdWnZPhw +945565,182465.463078,FX7jEru5fP,503157,462619.809963,m10Xt5qOvT +177679,735886.488218,kkVIhdk85M,782112,836275.365153,UuzIyN9AAG +41800,563451.837119,nITdXEqXLL,674080,876974.383381,TBxv464fYN +757042,172408.628420,2P62yMyH7e,229662,408626.984177,y4wXrx1zQ6 +138268,950339.184992,I9sxxHZlCu,469290,415428.505557,HTzyN7piAc +757190,972315.755980,1HW0Ca1VDL,121322,994216.049813,9UqDNQR5j4 +837426,577601.260849,9XAh6JudLr,515253,552937.696235,p12ub7g0OC +904167,686686.926047,Hhz1pYdmJt,826208,628346.444534,nsCl9nYTfq +112087,890961.895324,YohzBuQhiC,392075,498443.218463,CWP4ExGWgu +776761,282132.950201,sEvMCe8hoE,310353,741589.435950,TnZpMrPnPs +558444,990706.053775,h8s2LGzJ4E,882680,337548.433278,SvTvefrQsN +468327,187122.419213,M4JCIgxv9b,797746,563474.768528,y31qWg5v76 +954676,525020.283386,PvvHInmC32,907765,168085.251533,5a7NGOSeaM +491590,251596.588198,6XDdlChBlj,794843,361144.294416,UDgsagXjiV +925509,517663.049797,yfgYAAdU48,716573,954231.025014,tnIDqOEuJA +181189,934861.719872,NngP3GbZR0,672638,871952.799940,Fr4EErMnvy +919576,619510.286801,3jY3AVc9Kb,649000,914728.378803,agNFGixWvM +309910,803884.357557,zoIfcSmPz6,759370,389415.222963,9u3OuhLOU7 +3660,861702.312140,jiFXkUwuQs,600171,371894.987226,nG53uZHCnK +99682,392237.865012,XxqdZkuPwX,546179,909976.279434,GJivxG1orH +18766,436374.371337,mNR9kBpTcG,203848,323279.611788,JoTNpDkfeU +412249,748243.538848,GEeuJCGPf3,706158,744677.168093,7YbXgPKn2A +576481,73529.930399,zJrrDd0Zwc,747348,76706.198936,ZegSutGugF +663981,283947.530798,1sNje1IW2U,618126,902993.733806,fcVA07ky6N +889980,702318.737283,LlhA7572x6,396056,221467.216109,D5q1i3Qd8P +284614,513524.122342,vm8At3fLhA,692386,438037.103099,4qhXZ5yKyH +462978,927615.452791,vzXGFdvgRZ,490934,153303.984561,aU3bjK2T0m +873181,157026.001386,0OBc6yxNWo,978789,211236.401665,UHEPZKv7JN +923660,543933.444097,maF8qcstYS,54225,840248.979490,UJfdyWZC75 +318438,506553.772627,HlzumaZVHi,9372,234877.923626,TjBUoOU1OJ +958011,466741.718017,7wcI2LqzB7,300220,554622.687534,01pUiHpsqm +794578,149023.741799,yCjHJbpkcb,948453,951872.281801,M5b2bGChsB +537025,49558.338649,eoAzpAisOu,450125,923665.485126,ATjCA7qMzp +863623,547235.452902,icr0WI0DMr,172748,207926.733436,zFjQFxPOKw +605822,237578.618169,XG9HsKw4WR,183431,18028.299353,786XR4XxQP +712300,449669.795637,xbbPfpXE2J,20199,436515.909859,wYicDy7Lr4 +598847,377676.713732,frDEgUjKIM,736010,237617.140546,ndBBoBwy4C +943852,143953.444208,yduxipTGRG,898592,944846.463403,bdbcWvhRGi +965561,995825.441721,ZZFLECORo8,315623,290798.310936,gWqQRck0i4 +349206,675933.724924,CEp8sGPez0,81590,575735.353281,g3Ir0j05Xg +315682,707594.531741,nplAv7k8AJ,307453,254411.943788,2vzVGrJnSZ +552821,1825.271637,AMpZQbRhdr,985613,342785.455307,wxgCNisP9I +62806,12883.120441,UBrKmIghVZ,292016,49648.563316,cfTSHayNtn +158435,993360.790509,HgfIdFJeRc,141638,63690.912340,UqtywvxNmi +149141,188501.135419,PzPz3JYw76,850695,444242.908311,aeDhBX2q4M +396152,728262.698569,gZfpTe6HO5,690892,556438.822438,6SDO6BfRsS +65545,524443.202067,G0aXQVTuEs,359861,385155.028265,wGLx9yOUuI +39946,386218.656619,8MCPec0Ynq,621769,139758.971711,Ff04SAXX3U +715682,496593.215176,43InrWofIZ,399360,258702.067735,U0ztOuCjwp +237849,888165.493219,16GZqX2i4e,802548,747170.722043,TIE1O8sqC2 +191789,704590.315903,q4uzR5LnU9,800671,385146.789821,02ZPcrsePy +593937,308207.027046,DcusbhbYoD,703954,647980.096283,d7G4PBOrFt +597474,160925.888062,qAQ3xteG9Q,974588,684897.186376,uI7ExwO3rX +932274,357395.662061,C3EbIZ8daf,547608,265673.378124,oFE6SvLVmg +339668,376371.610433,WaJgJMu1ko,700927,424214.947930,mmtyjA05uH +421403,824408.424781,VgHFh6Uk00,37546,727004.111965,wYf6jnnso8 +247168,571852.384715,1YbV1dcqby,136577,927150.082586,eyPYKkO2T6 +224167,649477.709965,8FLnmh26eg,721002,501071.205220,HDxvDrLtlV +852002,744139.782527,uVvJe5DFsh,912503,771426.564335,zOTq0qZPaB +848739,149717.984666,E466WOmi8M,680198,414443.096740,AafNmeB5lt +127176,787601.612327,ipTDQFXvtj,739828,919248.913976,Dtt0lEnAkQ +552557,241373.827808,Rkos4iphbu,372073,620082.359574,xjMTc7TEzA +123338,423054.400810,vsaTgh6hsr,997177,206016.391421,RJCxp7XscT +673464,312685.403609,UnpPGkvyBT,798861,402625.127161,pHDcUmYtfN +336644,439931.357719,pPmAY6hOa4,867818,576507.709638,bUew8DUioI +28244,758837.503267,gDaqBK4ITr,816576,450803.728437,H3Y0UDgqHi +176478,190021.091861,1rL7Fs4MdP,341952,9510.727741,dqj42C2WJV +409037,793465.202742,86BQk2zx8X,844774,887345.837335,zqgY8c6VMj +585055,209784.451532,j2qF9xdf9F,486340,26200.437437,qtMdNMJU1s +233451,215588.957036,AyUxSYowdu,363825,614103.088816,b3iJG1y9Si +651082,767465.561577,VbYFKehd4A,507194,980096.685770,aWpdmYnQLY +518970,568409.067753,3PGxrpyNKl,77602,896041.362634,EkpFk9Ug2u +743038,252670.473496,FvecLTXrOl,204067,657893.250121,wW6IYPBWcl +650446,751220.987067,nIY0As0FEc,557534,713526.625407,JEu2UCRMyy +730535,775621.868864,n9PpIHptd2,153998,393733.077842,IiuRiVLK5g +672792,539480.519184,Fbq6L9XWFt,502094,704181.163810,VQPqsjEuIj +752040,855310.947843,IMMZEzohXf,194021,348121.309756,rmPEnJlayJ +992132,147556.300447,rOM722wkW7,910224,993283.858101,IlIgGnpmPC +684984,363761.453966,iEsZBU6gsS,299826,968335.275024,2RROlJNhZW +446446,318462.756342,lVR8CtiHDY,862852,91295.239745,FH3dz4JaLd +135141,231417.365477,Ilczpz2Pnm,302823,852732.260389,sbr29Nk9ru +533495,512407.890130,XaCE0zCkJZ,351965,169809.705930,QEzA1vBJfS +364166,230604.078488,WPWpWVVJ3j,449251,802956.863474,dOxUZLrhe6 +857668,537672.723065,a2Zd1jjLAn,188995,929800.155813,MfJMa5hL0e +80113,588975.082818,sTSJYh0WPn,550777,505990.018335,jCduyV2aZn +528422,36830.506518,cb41z5EMcr,239569,162029.346375,X2T73avusn +423446,614742.097234,R41JGFX2YX,887602,75060.873174,AWcGSIPaqq +348221,489567.415502,1swNwq6Lan,779122,998829.768320,Jtp7C14Ado +734645,977242.967437,l1VUlB9kN3,589179,177137.027123,hfxDNDRAGT +307841,106269.296844,buwaUd7yNV,231261,421862.604689,fnNjE6iEdt +44351,959441.426718,6c1UpzNbW3,532708,955821.644055,cMKHwqC29t +624113,459431.801832,6LokDMmQLt,838555,444494.740734,25JLtsuFSp +345841,965818.123053,rpW0ydBpoB,764289,282248.869023,SHgyNRzjXz +607826,562188.383266,sUs06bfqth,264334,587387.608458,q61YTv032Q +69187,451696.942129,QGWM28bY4k,802607,512772.245877,LlPixZKBiQ +949473,866100.446184,ZxCI48MUSI,849483,453062.174609,WahdVqZwJ7 +858030,37986.416612,89VrlqQhYB,496540,26742.271318,ojoDqGiKHz +672262,779403.844240,srZQA4VjhN,407027,823935.757042,RUikFmablc +664060,627800.324776,mEejdvFT5O,665806,949545.570160,vAhMrcJuDX +587920,884742.448539,dVgZtsHd8E,325346,850401.676208,TO3KU8Cm5c +7692,448808.640572,JzLZygDwp0,103333,79472.745948,Gb5USfKnKk +415840,158429.219698,caDBcDtFwY,197356,561059.612989,Dv0O90JFdo +977648,783020.319207,UkjEOOu9bD,289180,310433.005246,TarJqwNNV8 +841503,823368.270289,HoBh346Wt2,233032,17996.530374,34uI30Aayq +54186,233515.112727,UKkwOXVF29,143276,428077.958739,0QIbOqPk16 +400020,655924.544270,8Qc9aoVNA7,960317,174694.535744,7WPp1hmfHu +511962,296499.692134,u9KpeJvNeb,309230,997543.346789,8Q6EPEKw2b +458560,528583.266426,Zj7U6Ge4Le,995426,346239.845478,RdgghEHQxj +270281,513170.277801,vBCkAyQpK3,250316,645083.374188,d8K3Kb5UbW +836340,719488.495782,7UR3mAVWbo,891528,164162.697392,KcYfGqOF3N +266747,20327.535163,VnZ2xKK8P2,17588,532549.812538,ArdDVir1jm +238959,869885.658605,G2CFfYAdtn,404715,900472.729845,Y8mJQup6oR +590240,738539.156331,A55hnxJQej,964836,979532.880668,q3eVXsJrnA +842920,405388.589518,LAL1f1BgeK,546751,677411.478275,smhmSZMHJQ +18197,47969.410403,sppBtRQm3o,695054,243219.242763,PzXkiKmQAi +821652,298359.053625,JEzyqLk3aO,260887,95941.526298,25ok5PEvsi +59725,817076.903704,pxLtyLh4Rd,876617,737924.580381,ekHWta6jqX +266412,962720.488172,rFHCoK8sU3,21992,1250.733244,buMlvXupPT +579269,501462.163492,DSOrvUXTrq,419524,536546.990586,TW6otix9uS +217576,530696.817794,6OXU2XtqhP,851911,512834.924786,qcyCALpe25 +505772,413162.426278,WDVp62piwu,910261,823255.659599,swbL1NslyK +21609,84200.436737,8XgVx9gTMi,335106,69513.052337,8nz8o7tOCX +913981,740070.410957,ZJgzWHioJL,217016,21830.577708,Nf508KhEYq +577529,777074.000049,WQ4hPtvSnW,819056,689501.190871,jpNuHyEDty +778520,337970.179145,1hpnr3mz8U,359987,617077.238659,VtsTJUIPRO +690035,425500.506024,SIqC7yOitc,910581,849281.919052,legyZeOjxC +337032,586931.638817,fMFUYyNmY2,201208,604619.087180,Wbgr3OblSa +82998,197174.372569,snn3eALg2Y,319285,777803.737097,u6Hf1JrCTP +315550,149012.291495,ZDR3gQta7v,195891,98439.936611,gbjr0Tg7x5 +892155,935257.433847,e2vk4Cb398,636936,831786.526415,p5w9MFZBc5 +894043,741714.988601,42Bzk1I5Ut,598713,557900.378991,N1bNhlUzxQ +648442,148914.950523,80UUgGkMWH,484688,939757.367370,RQlmNXQnfo +865332,763526.200881,IhkkBzMn3y,759253,502858.274682,iFL7zAlbIq +834334,830411.281092,PLbct0sKgb,99602,982443.161697,4nrdPt0Ylv +263548,730680.758001,HE2Fx9xeuP,767273,578833.571714,jAoGYdBmdm +441044,153577.304406,D1Gny522g4,299262,703743.746409,vFM9twbgAW +416312,620639.382359,FKN9CHUB1q,62951,171312.939526,i2IE28IOeq +798288,252970.767330,HZYdBkatxx,401692,766767.453095,EIkkXomFbl +853198,541070.626457,Qge156V6aF,565490,177407.730606,OZax2nOGdM +657167,843500.408422,ePBbKCQ3VU,227253,542683.852956,IycYNSHyLe +888588,611093.132658,veh3lZrZXr,955105,78942.893116,sExyVgIv5M +641270,852577.679981,i0VCqXajv5,338143,598440.220376,jA6xMh0hcM +841674,247484.380778,gKmqiYmaXl,857553,373047.751713,G8Yr4enVxp +613988,3714.515444,CSdiA4uhH5,511539,439271.955782,rjVlIh9TXU +313340,499871.622863,TZLy5zkME2,764639,384343.938515,OLPwA9NsJ6 +697378,299296.922839,1RYPoRIoEL,521935,527888.471474,ORxKySDOuY +576457,521160.762878,hILnRyt2mm,17960,680522.943401,9ia9SDuu8I +572840,984659.795713,b0AxiFoSxC,334676,715841.782482,yD8tv6gWp0 +581184,402353.359495,5JJjH8Zmzn,212079,227548.427772,jAFsN0XW1T +409433,869257.616419,G0kFEWf7lC,914140,448255.883259,aJfi6aBeiR +383511,522262.710950,uHYLOoKlxz,111361,724165.650377,VpKXoevxND +205638,461899.839756,UA34VYpUz4,8488,131595.940503,opdf5FNN1l +56377,211207.830503,14xcO2GcLB,689291,146046.930659,vff0t6pvmB +422469,136755.487338,D5RrgBRLIg,346547,327458.663767,JBHP5FuNQ1 +588160,717209.580236,UecosB15jy,685197,173219.615332,1cQkTXbCCC +729130,952203.975905,DFG4beMb2H,310617,501941.100433,kTwG0XD3i2 +781326,853135.365035,mJIBc9diXC,225707,811700.124238,0A8CW0eu5x +880135,288340.643084,dLK1WoazQq,524139,531534.717080,RrSlZO3vgM +275528,841805.910975,cr3vfBWzPF,468891,710450.677959,KzuFrxZ32H +247692,538767.494363,fDRIdioFOJ,911490,422201.748088,GOEUUKiTAy +722118,632747.570113,5f0mJ1ImwS,255459,948182.887765,MJcSfK7o6d +726871,228069.527158,YEs6JoCkjW,545977,779975.925377,cEDklhXioy +522177,621704.701075,vCIjmAlg7l,337841,570044.162449,NehX3acujS +455515,340314.414877,4dkBot7ytW,732140,967762.787417,HCwMsh3oQc +397207,816416.590542,3wNddZPPqA,908688,7014.342551,WX9LNF4xwK +67852,571633.213710,jD2r0WONbM,725384,132902.786023,wvQvfwYbka +220572,103725.069579,2c3RrHzjV6,560882,494307.950896,iANCyodanH +47122,352027.752083,J04f7r08jf,188953,910461.985805,Og2dnnsiQO +361887,958484.048578,6csO1JFJVG,454775,769312.327626,9l7SH1xHdN +621412,399175.659677,2BEmVY5wh9,308052,237973.879143,HPjRkyE5L2 +546507,559983.841603,09hPdWgtLx,10272,153693.465243,K02LggAXkN +467774,165277.370518,0e6ftyBjxw,639271,512189.141837,q4bcVv3kU4 +22647,999645.307817,x5Ef4eIftD,681486,828807.951849,jFYMTji8Io +351109,591608.433017,LBL1ngUTjn,226457,552924.742769,5QcYaxCvM9 +208858,858042.877431,KLFCgAcO9G,870614,351328.565844,eVhdsk9p6v +495364,547202.037695,gmGr07WU7a,157444,134041.748103,EkJIPqizgg +518107,878921.899690,vP0ZTnwocZ,911794,379476.467382,AQiaKC45PX +452683,540570.795215,O7vHoqZjec,767013,2206.293006,CUsmNcxc1t +255943,421352.705093,VOQYADPOFy,562120,213462.089342,LPjWMVjHbL +613515,248133.380082,jKcZqXkFdk,479658,453813.403114,atzD70dlBh +903187,532182.816653,71tzmpzokE,521711,956938.794332,ejsjhgAZWF +817732,285793.350783,Ss54nJ9pIX,545499,569208.059058,hCVXWSOVZA +408925,599837.249614,9HCH8EwxTS,497187,413208.923289,MuDJPeFivP +567379,435774.056227,XZO81dyBM9,960198,425946.238642,Xj0WzRvynx +591030,694757.321427,FQqB8YlLSd,895387,438796.248163,ss1eMopJ2B +78171,222974.309611,K8NpdWYMmM,369377,182359.605428,io69xyJqAi +220534,46931.098382,vAHo3e8rUw,694204,919591.411134,qqVk9QlTtC +750542,722739.979997,Rt2clGQrDM,673750,794382.523026,9ug2kcPD6N +561684,298771.823451,3MKMVIZBSy,124449,693076.804359,x07n2sflPX +582516,418199.830993,6mlkWnCRbT,506851,76857.167104,u0U9wMr3av +454538,565391.012990,CHi7hyOd27,80111,708943.737896,fQWlclie8z +273779,292907.506250,SivF32DhA1,902971,895404.463749,i4IKVfbJ51 +768364,465277.473866,k3sP2DTKlU,771848,318004.662760,c8VAJdNh6K +382566,452229.228520,gPyBa0f5yD,513233,115878.649831,NHYal36Ftq +689436,469065.297730,kzXqgBUavd,259969,552045.393962,9c4GzXxbdf +2163,369395.683961,ENMMETkGNM,90673,652530.757682,SVw7gBgp0H +557100,461339.228662,Lw389j6H82,956401,671993.766535,qi6hBxGj2w +152170,681127.476950,ZnvAjOY3hz,260684,130170.275935,qtzE3Bcjo9 +851331,615143.222768,GQScNwAMHI,666978,31632.140978,qvYOWr1UIB +514923,783980.079821,CkjUDZ3w6W,594999,859704.389050,F9tkI6YP2a +645657,242712.834440,jnMAaKID7x,586934,622083.714036,nm5f35dzE0 +795544,536053.945290,bizeaS31Kq,803571,387125.570604,TDCLAPtQgs +579964,199160.855678,AAoIkZ6z84,751048,95041.998897,YcxsF627Yu +896884,758602.448607,h9j46UMdXq,351778,81489.817312,kwnQqrgne7 +203770,307867.691522,urE9QvDAYP,516436,967566.243758,HyoL0KvxiB +36926,263334.734271,1DW8N46AVU,51944,549595.599055,x3WxLbQGoF +469735,140589.664970,NmCMxQkNvY,411670,481647.090506,7nnxFnrfl6 +22001,788950.929789,Lfm1kP7hdi,843552,312133.651144,GKOBCnRSVj +201606,573676.593008,QD4MLOQSwX,163995,899222.930310,cH40x8EOs5 +824353,970779.336483,tuRkaHCVMO,788140,322364.071143,T3R4nHMBLr +182538,556951.025639,UHiWilKUVz,594604,935636.647891,7HOaTkqFwf +117434,201617.610648,YHJtx0QMi9,968020,581372.591737,e15QIiijiQ +682893,282361.188877,6D5RngBMoR,707428,549241.703576,mrCVH6lPoT +358935,574908.581914,w74u4J5sd7,161933,18918.690057,S6Y2bdGZ6S +508673,419338.296063,E6dm78VsqV,634286,564218.025582,yBkqDrCcF6 +952710,144474.286052,LP2PEKggnI,915039,515361.731086,EHwDiqYrdS +460767,415201.430770,ISPDpGUuvN,969968,584220.210588,JZUYPhMt5p +262412,712960.041806,40piF0ic6g,841482,22486.105760,qKtyd5oBy3 +210892,790790.284844,jDEZ47uMPB,152612,844066.578431,kbfw9ODoC3 +281528,635926.892473,NX0zxvgcNT,645539,212058.421381,5wSDkBbV1H +765867,483795.831084,2KOaS2JIFV,393233,958917.272002,osZPeuO1vU +707475,238377.929298,76QwkWMq5B,592673,558164.263542,X2vgEfqJSg +535878,564825.437352,mRUvC5Ngcm,148578,536972.403923,uEOQ90uqpJ +835986,412429.402774,GEsKnUtWrt,590958,461490.779573,fuiLdxjZis +644311,134869.331420,Kf4ZspclY8,324647,51999.858091,TawRSQm0jQ +152963,68311.934111,X3XSGNRk4w,610544,335392.689044,SJcqZ87bgE +83550,66629.337535,7VqKiv5Lel,725538,317521.979250,wVUMRC8lfX +106471,960472.071797,mqVOW5wluw,657545,745306.606665,yG06QRS8xQ +392745,483379.053309,JZkMKJ524o,559322,767478.650768,5JVNQHjDtd +774947,550196.043412,Et7vqPcmbZ,212781,549162.999894,oNvdomCRMd +196774,146136.130672,twWfiONCoq,634505,664434.794518,3Y8ScyX6hN +790528,602399.670429,VzPIrFY1uH,450164,31065.104692,NHGNSX5Wtu +658256,240224.934036,yJuhzRX8S6,700966,440847.947757,YN3XhADwGt +875870,434064.159871,QmzB8kdpto,399613,648401.744780,HTYIITFEBL +183882,761946.923140,gYUzhR1dNo,299525,490792.864073,97691ml1v2 +414807,334643.230673,Wk69glqR2U,547071,934761.929329,goIwz5nuS3 +863156,299974.982696,9n9TpmPURK,41803,62027.269012,g3XyWue9jd +925610,202295.201441,XV1UDjmZQY,344719,838001.541199,Ue0XRJYys3 +920014,422392.069812,Pmb9hFvEBl,501034,985211.703534,CdqsBw5Y8t +567850,118012.282182,w1K7ANPEF1,971952,194462.470485,TkCSc6iXou +792324,978271.158216,Fb4xFZ1qg6,436144,616162.333694,ViUYB9OdyC +101742,95331.065499,VJqIzUq1gy,205323,167258.891301,3tkXZT7gcL +781808,742455.082408,lPGnYkPdqY,453106,924467.787207,NKT65OW05w +186920,668836.571542,EOgDOzczXH,507144,585627.424736,BpC4PVrQuc +380491,15879.649402,ai6irdVJtk,512003,911005.463709,fwDuuo6Bde +456169,182250.357732,2O0o2ZEyah,881545,929581.122168,Gg61MOwViu +602803,642008.419430,3QX87B6i6M,115530,204182.082118,WrWL9kFkYx +882463,529864.039671,paLi9GkLIX,345481,847033.467652,BTw3ME54vi +519084,93613.692213,WLnfsiEYU3,160395,883899.141283,ITV4uSxNPt +804268,825034.456776,aWis7FlL5a,963781,476763.254087,dLi1TANXwi +281757,241219.521790,Ek1HWPX4AB,554570,947225.092111,UIMzSiIlfs +738109,21193.007946,MhpBV0aZ5a,75673,79757.851596,kAkI8TOVQi +63555,890199.532606,hAd87wdKWT,749973,91466.761754,7Zf9gQk8mU +272461,338198.248048,1wgEq8vRVQ,608753,320301.193425,q8sQY4Iupi +6008,546115.749121,m6Sr7U8z5A,284963,8658.880686,K1eUGmsMrO +531550,783565.953083,MEdLrISMQm,23084,731487.476855,RU5naA9kFb +598502,817401.145717,T7xOlTL6o7,387035,177278.428709,GHLgF6ZXRU +799590,606722.995561,rVdnSS99SK,929149,82272.718738,Ohu1ZWedJ7 +172779,110735.427171,yjPPfUv9mv,446907,148821.092451,ppJybe2tYP +367242,396689.134736,bVrI3ZW83j,292494,18359.258126,i7Msib9RC7 +249875,899039.072014,c7PF8vzgjN,713731,920194.786153,03pRyhk1S9 +175698,656365.438990,bAvSY68qBr,819473,259465.243372,YCjN0RUslI +197006,145176.966774,B2QP3rcQ0W,205383,298471.753953,Pc9UZuMPgl +144298,950039.230461,HdNOEZNkg0,405247,553444.659303,GggQLmDoEu +598698,611454.353013,Pb1aZvBlJW,430416,648466.917410,r7VEgGTYYK +164501,840849.946262,A2fCoGnnGB,219775,617857.577736,22lciEhNPk +248763,570612.901017,ZB2Huasp9c,430102,628960.895342,yiF5c93YRX +725447,167941.783236,2aLtj4mX80,473619,996137.231846,F7nZeuqV1a +342168,207308.272463,7s7g9JOCVH,887533,508215.843013,Q6R5Wd8j9a +999639,371671.887397,HJiv49Xij5,186805,115351.686065,KcxBln3Bqe +878006,842515.173277,lBIoY7Qjy7,458135,923527.284384,TGiNo3tJ4S +332616,312594.963813,mlf271Ovar,296565,210641.375188,6CZoAzBQwm +130244,10241.134048,tZiXcZuQ0O,190184,111594.202773,pvJgzk8URS +312129,303245.959829,mOHYzl63LF,372994,373621.272769,vw6fsGgzij +344963,219039.857159,4fU8vFi7Bg,920603,427222.514484,cQgVCq6LCO +989762,937024.312320,UrYhU6khqY,824761,752689.757699,GjEtZlVaZz +887071,615716.241187,1j4dRs07OB,563772,635452.365129,HwXjjnYU8O +270406,72068.258393,yZcn2OI7T6,479179,835779.537556,z8iGTdX1pG +803232,500795.590943,dsrsveSFY4,268979,322325.604664,lFDV5GgSP5 +100479,667334.925198,2y6E12GPmY,94942,925234.309642,iEa09Afris +395402,641210.535677,PTgICgNHeU,41479,315638.510084,TPUAJc6V5S +40767,901711.169848,yLZh9aseMH,654512,992986.719458,RqNk3EwfQG +212802,237103.403017,OKRw9XX4RV,356815,301183.400693,noVbXh4GBa +552574,147203.187641,zVrzz1fbyT,672883,616771.226605,Gcpl6EOwPn +400342,682279.084420,2JjhjAVu8z,239902,474606.595736,bhJ2117Wvy +820140,616798.679117,Os9rM6NJyV,420265,441163.919644,9jXKPMp7IQ +804426,921746.921921,C1L4APQoXd,920232,917617.890451,DFpfebbYOI +774386,840501.075014,apGfaMLF1G,588782,260383.457423,5sNC4FFdSk +510003,605994.941393,Vtklemcwhu,208577,435693.797030,EqaSWwEciu +994234,230784.853044,WouUm8L44s,193014,540501.420303,RpEFcF6j1b +517908,655041.276172,e4kNIdUoVa,393043,281840.549634,YuekJofAR0 +152259,910673.910441,4qSJTVhkC6,963144,715575.531117,U1VIF3bMg9 +405238,556070.797842,fEC7uezvDH,573115,940636.450076,aWsbieehMy +494012,172394.007355,hAjZ50JmxK,165843,346682.897050,4owroVJO3k +739043,110544.218816,WbnAatE7YL,448102,990650.519912,dmggEJhMIk +512571,351244.435449,V1iNZeydce,609273,381375.666862,7d4FqCAz9U +87219,262711.819959,0CUJUUqp3Q,18960,161959.662066,hwkOuqr7Sa +277199,218063.895740,oAMEeVMpNb,375208,309749.840733,K97cmAEzmC +524713,590815.975746,1kCqwfpFlL,807138,478948.089171,memzUuitzE +296179,554107.426726,82bKruL07L,22959,951111.612058,GbUiWQl1hg +94627,115883.275379,4Wm0jBAaqj,343226,253669.053842,HGMohFKVMX +550657,269655.739219,dC5ULy9FvB,38618,612461.699872,dVAQbkOAQl +369201,381352.996802,z0UPHTicA6,726681,190618.826818,llR5GZ4BWK +950090,482161.941520,VRZHb3ksZD,415034,365587.597772,W0uEMCWzpS +534173,954434.812309,NDSrjoJFvr,916284,424386.216631,sEgHdGtVND +932681,795094.349552,pz6lLqy9fS,738024,832776.476507,wL2BuaXaf2 +495598,115250.332640,XlvMw7gMef,586920,937472.866623,OuzUzVQfz9 +147703,879552.853804,NhYVnhr1rv,857074,808465.204663,K0sLQmyrcn +742998,768573.411408,2nsSKClafx,37443,80795.307097,20lMDbuTXM +260806,534496.415891,IknZk7o0ux,731613,602781.309247,mhNr9j9rKU +947016,201026.390512,T8VGVMac5b,39128,221607.337122,F9L1iLoaCB +490974,151717.413280,QMXtl4MFVo,539369,353201.638109,FaUzfzu24R +886384,253133.929232,NqPWQ4njxg,558859,396827.286082,CGgRW7EILi +24294,112481.725814,dQNyJwv0mh,841661,297023.065939,E9uEIeIonA +939775,717728.435504,efuS1zk0nL,682590,816333.475051,rS8ocpRwwK +769322,69980.988608,J26FnFVeKs,450759,11264.854102,OJkeYbCmwe +627459,202519.832519,MLnsrgGRbE,903221,15968.548580,ix4KvPxYeK +961321,337784.248884,DtzCJNpiw8,313165,355850.206616,ZmxtFqG7Oz +976518,780873.551995,prmCI3rZ65,350083,548381.218867,ks4wrmOwX5 +682989,234509.233656,dHiqVPM3t9,970796,150294.869089,vuQHP9Tr8j +329765,861791.658934,eDgccVbgrv,366808,724181.874186,Osw8pFWLfJ +717286,241286.145303,V1wTewumbl,503780,306696.134467,PbCKuf5be4 +238927,32348.944555,FGUt4nEYCg,52357,138380.045681,PvS5gr1zgm +639606,928344.308757,SKCwpooUpb,17949,386134.475721,BPdKhvqxeI +271028,929706.226482,1WKvji2aPB,113263,841570.197846,pijNOqaNIM +603451,509729.669017,XKk7zhN4Hc,375433,81452.084285,6gCQYwWXw9 +775776,847695.402926,kIMEu41lRP,101081,568667.373322,BFPBNgOwHj +303653,440000.953589,btbCtI12d6,97639,749390.715057,Dil4tarwOb +490094,572861.551319,fet08K1ZOx,294843,831093.478332,Y04thH5WRj +39625,207786.621115,QFIsnn5zRa,876448,760261.970928,U4qkIUHO3K +904588,458486.211813,hqku42sGeO,160893,485318.753297,ygIy3MJRuB +139476,879747.792905,0yKPCm25kv,5302,294559.814722,kYXcLpzvrP +632968,404457.481659,57RGthzcHS,66554,789814.263843,ZxY0DPoMgO +553952,862965.682706,0uSyoMmmPJ,904780,55955.241656,rBNNvBUOmA +644737,542153.344464,XBiS4kCsfx,878640,203613.638190,Hql3N4TE14 +90729,871514.428111,eic9Vdy5EH,889901,502169.185629,UUrMRc7s49 +620201,112848.493656,l9PkZDQAKh,943233,683319.899999,iGZKIoyopz +700072,405592.445100,iydFHJxLNI,112422,832626.570945,N72KhnKmL9 +486067,524862.543128,QT1OfgxLIp,806198,282967.608990,zf3fUFMfrh +354979,462541.126239,RumNzMe9FU,479680,791846.563717,l8RQWxeBdY +489450,822250.511803,UqfWqFxk4g,916981,562534.155091,O7i1KEBExx +148015,962523.671922,uO2hRgFmeT,50004,415805.848846,ErUjXFTYzn +73868,235881.857248,9crJhWSAcI,147984,355156.041487,CmyoCWqr2w +740754,542576.707205,dmLGkYMvkm,263050,601611.205506,aoGfhjIorC +170615,356609.467070,7KqtVkEP4Y,429455,380742.633724,jSkMSJ8xMq +413951,465965.149160,BJX0ksF40I,234080,199271.852966,ykzHxtSo0r +152842,897983.830572,DAEK6mI1Ay,81088,17603.244989,Gj7svO5lNY +706114,129211.414534,Y1ZqcxSy5M,918262,815254.150125,iS6bhZSkOF +209231,138552.766380,GBuSpF9O84,759741,301884.953355,Se4h0HlFPA +705192,486248.783931,Z0jiHoSX45,752281,323575.259207,LCPnQeYWYn +845117,627927.670682,VzIMS0sVJ9,455214,195905.620580,IKC5kF8EFn +47916,669466.445321,Gz5HhPEc4X,878281,335992.143667,fNTGkP7YIR +666494,465080.362222,XeQRhEVjcR,313586,350435.541148,toWmzmM88e +21773,348194.640827,198cxEUtMA,150874,246642.749694,67LjTpDVIE +306375,952454.665720,OkPtamhkGp,749379,274180.352990,WwKKaJEm17 +885320,301281.950267,CjxebDwXsR,36151,936620.258130,F2xe8tFBla +771721,809740.448278,BUTu79Tf1X,163233,829084.968803,2kfiLGKgVT +660053,685334.511712,6InB7mAUYV,903750,806017.361470,apcQghVOe9 +901997,187326.394099,ekvPDwwpYg,637646,481171.238467,JOZD6xsPsp +519223,430639.005662,ZoIyX33pME,5464,865491.368187,G1TtKfYpBr +582448,651314.849860,t3o8DEJbkc,379321,346708.589254,RWsRDDfp56 +743162,887411.802427,jseuNNRGeV,425008,944189.327505,XFqJWgVPIe +716814,332677.452855,qBKGemEZQ3,377713,359934.696749,LrrhfdjxMX +29395,695230.164121,fTmgXJEgdQ,662080,373256.972995,nEPNrXhPeC +500539,583165.077279,IQ7Sdiy1WT,341341,285621.342260,HGN19TR9Ad +857214,563816.652528,UoDFMAYWQx,259758,878177.752622,Ope1x31os9 +638860,669017.849662,3WY6TVP1IV,496163,385103.897214,SkjT3dz5Gt +177619,122167.782109,UnthIP85Y6,806785,287963.586278,yjGH9qM8Tw +838963,964273.354058,s3evZUpaPK,282368,610425.647943,5rrYzxNsaO +553834,589694.440568,kKbCstu54W,23357,558655.967491,DF8PGjiR0g +980967,842582.332664,zfH93D6Yi6,738861,694378.339122,XMEQKSF6Jb +818592,608934.758324,dxlnXJ1Hzk,83886,306742.858129,OA3ZzuQGll +964563,62195.228571,Ky0pBkjNPq,260896,30733.306409,600wOLNg2m +8780,375597.977413,2mj873AWJU,798678,547801.656120,v89K2DaeSH +489040,343603.894759,DpFY67oYC4,680661,913810.783867,0HVqlXP1Na +604355,523525.590576,uCCjjloG6Q,863886,366688.970259,gj4Vu8GCMI +703127,602757.278636,9V2LEO34ho,199704,199004.213250,opKkv8ouFg +647498,976266.193337,2wmoyP5hoH,909177,181576.017814,EGYG8T4nJ9 +806736,881733.692293,cxN8Td3ZuY,345896,607741.828722,m6kAahgzWP +277582,966732.637111,ynUZD3EECi,275640,274077.394457,snOrEeNoa4 +805431,600504.946951,QC6zu7AktS,105422,408127.364792,7z1fFdz1XI +936282,371313.466744,KZSZO7sB7g,319872,914205.406829,O0hsoahWsz +574255,749599.152599,4AH4d012Rg,665265,304514.594628,bGjXHYEgyM +713587,338240.278015,zqHrSoPmW9,653072,202785.770185,5FFUYfTTzX +985840,759496.090625,E5viyV7uSp,956657,218147.752274,Ex2zk0IxoX +489639,34808.205324,DpgHXLQnkv,368616,104260.284459,N9UGH3ltOz +987081,595899.421839,yog6VvZKAE,667971,414835.447287,pZ7Ncf7AKY +387257,999178.070272,5BgzfgPEjr,289798,103174.357902,E5qJsmedHF +468102,414154.953929,luerR4rJvz,181732,467377.088765,MhXY7RgIxe +141492,436545.406451,wnbKA45OQo,852707,83520.646506,0k25EugYMA +663728,78745.207308,4Vom5OfE9k,253172,667744.024831,pDlU4NF5nK +617450,950672.159841,5Zqi1djPil,41139,942246.519927,oierx2kbKg +897165,792918.915605,qikic6pg9C,902119,22299.006109,QKXqXuhyDk +940164,436183.920984,WlBrRgUvIw,413239,494709.916801,TvKyHqwlFm +631790,772117.988377,h5OOfsu1Cj,4927,145235.794137,I8YIPbUQd4 +854923,298202.150526,UTlKEZ4ikJ,295952,324404.438524,UYj3o5twRD +933406,793748.835331,mf5T4S4hB7,610771,377369.310515,r0vwdr7SrX +379276,439500.917170,3pgWIqY2gy,348620,635536.244177,lQQi4kOT4N +931792,432078.880465,XhRkUULGcV,880930,926078.533232,RsgJ7fwmCA +41668,945798.983411,UbBEdq1zeV,748365,146296.376481,YPRB4sKLQh +249820,763752.472342,WHgRoSpry0,796316,232359.564585,EMikrnZ54Y +955194,350836.221149,KbXAkDJVZ0,277333,889203.321444,L9YuiO31jX +703278,301162.064458,KumAjfzi5c,346067,118947.468457,eszMcSh5FZ +798493,315004.426935,ii4ZSmz37V,852717,21073.452423,QlDhOF2tGg +923113,485164.167857,KyZYeA8UZP,646733,774470.132970,r8BmuWWd09 +886516,646151.596676,PoyzLqxRi0,107010,259974.843515,VJshSJFzkS +566519,116298.471579,E81HuW2lRM,52965,306742.124259,MT0FF2JY8q +884053,321892.161464,8lHmfbxmme,330313,229251.997342,F9E9TRFBhA +569974,4413.806731,3F5njNx4YO,132943,105794.026739,UmXgejrST4 +358393,283384.492298,JIJNMXIbbE,387103,91366.952437,QRNz5mWkTO +968763,568085.165130,CaP8pMekxw,921939,754164.830715,0jtsGv0yTJ +342715,815367.787530,h0N5y0cWcc,417732,35610.865096,mkiG8veEQc +239801,883014.577171,LCtEr44IPY,7968,388158.809402,gCrXo16WBk +327878,934985.489402,biR6uwHMIB,573999,77807.673035,P18J232o11 +408220,173977.405269,ORRVGVOzot,861181,526777.762019,OL7t5WjKAW +859238,939187.901628,OA71wOSpl7,942001,47152.980557,QrG7tsvsI6 +496155,751913.541823,FSeWmW3gYS,291718,805545.774792,ClYlm24CWd +785006,275352.406715,J8wSMfh7T0,337362,482464.302309,zXQ9ew0ihN +667873,176740.474615,dNFuSqiZxV,736730,320229.529943,TaglF3BHEi +827781,782423.880003,0VXtGQOIHC,828789,722302.411635,1LiqadyC1r +483165,574826.515296,FH25YwrV38,621170,199564.547427,jbgQ9KmMpn +522151,438482.209874,vVcbe9EIty,687084,959472.719921,InxuYuC8Pb +49692,175695.737190,2VxmJk6vEm,876695,9079.099921,tGZPE0NTge +370942,682771.026706,SKEW29uYwY,773597,446358.172001,n6f7Ms7CL2 +481066,583947.686600,pvaYQyaYZE,318751,245101.301432,bzELOIvMfs +389456,871256.793415,LXr8tB3gAL,102977,758869.184545,TNgVrwllyu +407677,709495.512074,SctwQLtlSb,239878,421846.729361,B3HbPmW8MD +713297,39029.384522,IJVC2AgRlo,745470,549003.087862,1pBLLtlrZK +57758,691208.845671,ecjTMmSW1E,777575,961056.401140,quSchO05VK +304990,255740.318441,1BvkjZZdFs,158200,700106.115647,XbKwRap0oG +822594,756189.816986,SlEA735f82,131534,522982.201222,kqC1vnoPV2 +830742,296871.270087,91nDeaG7xv,247379,138406.189429,n1abvFuxjq +462576,612403.645939,3yG60BjtZm,661525,729357.334267,m0OtnAucJe +847749,709986.487121,okgakiDMm0,939719,809702.578874,OQK2E0BWm2 +732498,139463.092100,3otA87EPhH,776827,661925.131423,O2nPPwTkeE +488036,831531.256351,0VCJnl978C,592919,409172.893949,HDNEP0IamE +367369,306893.331193,1o3ZcVbbdQ,811658,620851.938194,GOtnq7OpcK +920185,249424.661516,LNVm1DVnrW,136794,208327.495879,GhLJSVNztN +935796,436342.051403,Gmh43SRcdR,102093,204631.245180,MVMNXlsrzq +663718,798344.836217,73sgfK5Lwc,67682,533335.274661,z6HGocEyp2 +623768,520102.648035,9BuWg3SsKi,883028,730504.501527,WiEH3zYAgS +467724,304500.310062,JKRK6IJIPS,395381,280411.121349,OwFynGLaJD +264042,279362.056654,XQmJYfZ9Kd,436370,226169.362354,JjMUiA8v6P +887661,167635.364847,1UIv8doU4z,672536,370392.679272,LE9l6dupqo +530592,467480.552135,XF5tJiHwbj,226598,879164.851542,tfCkktqy2T +182062,30265.191140,XuhrimFfvM,793734,860275.066927,SgFG8BmLyW +67996,435884.137637,juQZrh5RI9,832086,922371.183702,bZZHfaARS4 +540897,413939.439281,OGKjchO4ZF,304660,366331.689517,2juNe9aJJn +756300,850058.236746,5oyfeQMxIc,850282,161052.668587,HPacCCLjyD +56523,369221.940653,YT9MhHh7kN,544334,804343.101871,y34Y63nZBd +725934,60978.062500,mQ67uVRNLI,837438,220681.242102,z7ipseHSaT +68367,978520.877495,W3C3gCRX8B,935108,777266.569240,aZBcTG3SGX +303254,926849.328283,Tik7fgphP7,875267,788838.648517,TMdVgbjM9T +604727,910449.223614,rZYhiXXHTE,680820,373115.500124,NaRmrFmvLY +478182,514000.374636,UqcupqFtpX,584934,372372.739867,OrNYsFVqE0 +245,189598.275626,YdXKrGxsuV,273721,129284.800843,JYZriLbxxR +651649,70430.128477,HrzXSy4trf,501744,924999.671259,4QgblYoWua +992498,19747.546135,gjBGofZK5k,316910,951796.327572,wszscvD2AI +643402,747906.070469,o2UetyiECe,262590,939731.137981,o2mYJu7uyf +4074,615133.738858,sC4rmhp139,94856,138035.346065,nnp8UWOneu +294793,492402.518073,kyNmlis6Lg,82612,59013.919965,llkYUCuKof +522752,66362.140049,sfvFimCNuW,813317,37187.461097,rhKBubimlN +32170,893087.034565,Ufcli4eGeT,847192,735989.983400,pYzaeqWU6j +904529,974482.296572,Papiv5cQM5,890087,624490.714475,5yM09FeHWa +179249,888271.758616,HNjGmznhOq,823030,664148.463939,86n5xlw7LV +125058,97819.287921,BgHy9B2ZK8,179585,635032.939704,dQcAMndKo8 +104415,294368.434620,7mh2ZJrR5R,350638,489646.083087,NbXiUyWE9V +520054,310257.397924,fojRg5s2IG,663010,540135.027521,MHWsridVJG +593893,380546.753706,myNNGyKBYz,306462,484158.177676,skAurggoxv +253425,169831.817539,88167brXXW,727472,204078.727971,Tux7jhP8pH +588576,568797.450823,XQm5jC7iyO,529306,59999.523115,jhNzETJVwO +474802,576950.702330,ZdPdTF2J2r,597908,127649.869980,jarMl6IOWV +242250,551335.392575,bYjkbTzBJk,950910,853434.529402,YVfgHcd0qq +352109,705840.163186,SiOXMUNvlX,73768,200899.030239,b7n7I3KAkt +144671,156998.171362,TQc4KP0yw6,788223,260566.253487,j50J7vai1a +514441,632187.732579,WYsuwA8Axw,717014,905276.221500,gdGVLcEwCd +881595,268479.133808,zi5laHeOxj,890455,200086.654172,0Sgk712SzZ +30999,167163.102470,rNMnikfFP4,619619,103060.155977,jOllRhyHJy +756249,857993.158324,9vQyW5QiuS,449978,522593.441060,oI0dMqMmMP +277657,851005.602527,WQC7L65vSw,621493,112982.951651,3JImtWcoo1 +980059,358899.097246,pEsEurSA07,431026,484669.817903,BtdoDezkU7 +565193,166716.581092,64xNyrDBTD,630579,745041.727882,IaDRPBT8Bp +81104,161533.957747,lqMFbWJGxO,423443,819077.796110,5nCdG1as0S +353552,721282.271047,8EPuTfHVRd,900366,288297.864044,hmCQTD7qhh +93364,628934.614791,0QjFhFkZox,697099,198914.179189,W06LFBOHiu +221665,855963.228326,jI9WuYP3UU,232350,425750.678069,vjAAvdMWZa +699109,680226.709298,HtczFH52oC,285234,481782.049251,52fSGSmEsQ +375403,528512.222490,d0ZNppTWGw,373764,508679.338124,5gUOifBYzl +648412,469308.918960,BFCbq98oUU,967023,280746.645245,rSO28gfA20 +962524,914352.395911,ghcaZNKgg9,738724,168101.726859,jriyuxA4S5 +639291,781560.157922,p22aIz3Cfi,774337,745110.423067,I94Xhhvdxk +752739,462166.606771,e1LVghwaRc,16490,546008.984884,XhYbctuRLv +581864,797905.623193,ITT6kVrcxD,716411,274163.391762,1Mv6DXyQu1 +379892,869848.002306,oIqH29hnRQ,632250,432030.548611,0NNrfScfnC +953074,906010.781199,b5rema2U8L,735371,98362.532231,2Ss8d4VMvE +555801,80399.931066,rOxkm9tMab,697976,934348.063978,dxexUWzjNJ +967996,185552.455695,97SNkfwJEq,775824,377348.544456,CLgEuXjBfJ +649512,823980.974269,ZaklAwVWIp,196221,980521.309147,xyAFSpjMlH +773921,214497.073621,yfgUesAD30,52922,241004.740748,xYBNNos2tF +687332,816714.508957,dD5FRw3LLE,882578,792233.629969,6MLvdr6I3n +982962,866475.165042,Ujw0SXSVPQ,890608,78354.613478,ykU0tE86Nd +635032,788380.032962,bUKeXWWIff,173543,607802.711734,TuVqibqAvk +376153,758353.103680,0GkUE8Doal,914793,811603.079679,rBVn9jjajr +67161,283596.268218,RKCc7KvgL2,369445,357106.031929,Bgqz8POjcu +270048,797475.179386,yUxMj4GbI4,759918,451107.959181,IN8MpirjG9 +239248,248229.468057,y5Pz1uErLD,837537,581094.841136,OY7LDU89j5 +207870,893665.688878,2Xx7LAXQ2s,948419,345612.845005,S9DFvVVnnV +998109,275162.555341,Wolo89ZqJ6,908891,970566.296043,Eq2fJP7UK8 +421432,582816.299717,czeYZ79VVE,949380,769364.842470,kxIDWwbgX0 +748459,849323.519999,f0M0IQD9N0,411434,326206.875474,zxn261Aw7F +172756,667384.615197,5XW5NC1Qio,792459,881802.827747,QajoRN8TC3 +599322,778327.626973,nHKphnAyFv,47546,822455.224142,WasH8edflm +826983,92720.962924,70jq6vufSU,740528,687388.324871,Bw8COOVoEC +33622,467590.822249,zDLKYo06A0,848719,508008.963277,ym0RqkZjbe +705917,3235.735606,SNQnbNcwa1,508315,799938.226435,dDmMjHHfbW +131507,420048.931855,t1bmX2S68B,515995,437673.750280,bIpWshGJy9 +469990,333004.857670,How2vd65Qw,898394,980036.706288,wL7CMSOQ2g +326288,717175.241483,a7QRB3AjYV,970710,642034.202492,jgHNtS0496 +287994,786755.542778,in2DzZMTLi,415035,951546.940063,eqqnX8w0ok +812099,542852.444669,FAU6hbDsfU,216380,114174.707907,dkf030utAy +368537,129052.436916,9rVYBbiSOo,931427,463233.203397,hApqvxchwb +462236,151349.068962,e0OBamSJTq,186142,230170.807556,YLIEEQu7ou +601609,293618.596936,gj12bW2tZw,404608,463918.194601,KHXnqofn96 +987962,223091.810648,n4nwexO1Mv,988750,439500.416705,EnR84BsKZY +321751,668183.958648,7JlVNQQUw4,985849,479932.798484,DaIsRGBxm2 +772904,614010.783520,8apcjNJw5p,873280,233751.238046,cTFMZgeNyr +513276,110468.231338,sAvbL8Ujr7,835434,458217.304715,1Q6zOfFemn +915623,204276.861912,92q4QIpC8Z,686531,951166.705509,qf0aBgp35k +173163,128303.742986,hIeEqWku57,707387,738754.991122,ZPmQ7IiijL +242796,743999.829443,b4BhGx3Bxa,567158,35689.775238,kkqETn0fib +148718,27989.527917,qSa725uUeU,790403,750286.027183,9aJUGBVsDD +48860,845745.653472,5sN5WsHvsJ,223972,365549.181585,vVBWy5sMws +814959,422618.007078,EnkkpvA0BS,840071,484906.391329,WmuYFRkiI1 +9974,670186.646400,q3xedaRhA4,378670,587685.208499,CujNdJ6x5C +322747,899779.389069,vYFUbz92EO,25705,581659.913838,pHc3WT1AI7 +420897,195064.990916,XmwSJ1MLiE,321676,189481.963771,TyFwW9H34H +128781,83836.704691,vm0jOgyz9p,59883,235105.892607,wZETqDzqQ4 +215484,595226.647517,4lv50VWZoJ,193715,907472.444364,MhXfVB7nSV +610322,435964.064390,SBGN59Qo28,961495,262725.495396,mDMNF0aQZo +543867,738520.846585,Vws1P93czx,804065,661766.196557,VZtha6iMvh +10478,474837.807857,DLXCtGubXw,26083,773522.040423,cYm42A64Py +150482,355848.487256,X7qqh0gE6i,633503,651843.936216,dFgzCE7xI3 +419554,573391.095513,aAWmh6bVUY,71601,634651.505974,lV4TB7oGtz +353865,910199.812576,5JEst4CaVP,944949,852773.448658,xiDkns7aTq +982363,260171.997027,nXIsDppvFD,953981,114029.854102,FwYcgbv3Gg +157375,606639.645529,mg6pX5eS2J,172877,994969.070383,Za3CDxo5qq +93062,76391.003995,FrdYtTFxQo,319670,896494.009148,Y8z2fUXuMh +555989,271291.705712,ZfSmRkNhkP,965680,409290.622334,mFMuzTOTnO +402799,84863.279280,AdfijdXu35,417826,638436.900890,HrsFC6VQIJ +803747,963659.785078,Id8dJTYumJ,916901,900091.606558,80BX8DY15J +932795,250371.148866,ouelBqG6g3,438973,148679.843462,Zade3W4b1E +581819,820250.530959,ZqYPRIS5FT,890563,546627.193960,qwOJLIEKoE +426281,320506.676170,peJoR72MTk,2522,978791.603044,M6qEM9AceY +927986,617186.634145,urAANt1ot5,346400,502906.504096,8TlDHbLw3r +581579,929981.193344,sxAUZkSfP5,344971,464303.021569,zJNbdj6tfk +237323,823909.442016,HNj5o3SZSy,115744,738009.932139,AlOC4Z80wz +267114,630757.789665,AlLOZ0BvkE,831539,962474.748942,TgS5ZZbgVt +394587,978600.847870,o7ZT0g1kt4,626858,66543.483953,qOLrrSHRbI +952050,375671.918027,XqSKlAKPyN,134871,82576.013339,eal5J1jS4i +364256,94998.936123,lHtdp2whxo,170368,395198.115856,0K1LEURZgV +248976,240382.993893,KquYECgiiu,80161,835350.005150,jsUQt0IVBC +275493,255461.410211,p0vlC5SY4E,150384,861042.700928,xd9htWVBec +23292,590017.112481,Shco4RzKOt,560242,594596.883259,yZuQ02khRe +364274,105617.488024,B9VsRc1aEL,777944,120153.911440,Vci89sZH1A +254290,924754.233885,kKcXvKSIA0,829470,141804.057565,tSIHkhXcWK +977947,717761.528137,ezGWGgRRAA,416501,153109.779883,lfvVhQXngy +816147,815845.514158,d10iXvOOcj,371385,81764.486786,HmzycwRUls +497884,970423.620743,50wTk7zPDY,582149,696381.153709,KYUyB84iNn +529357,941151.360801,heJtnz7g3I,236260,914533.519702,rurx0p0ww6 +675526,479630.535332,qq3R6GguhP,648943,405074.366678,htTlEMeStJ +20376,854530.485824,YKDrk4hwUa,466049,222344.478921,C0nKXir0ie +875621,178890.498710,F6o2pv7PO2,978771,560572.502130,RkttZxkn4K +172564,313670.503087,ednPC9qzyf,209603,344460.821075,HHqaigTSz1 +499741,611240.495091,2P3WtfkQ4M,188438,847627.637838,i39PZfpvPh +645943,708226.372142,9JLh11YWj9,48575,448687.738763,WJdU2WuVEe +946516,959080.837293,xSY7atMktp,187611,621765.587749,Hnq99qb52P +202461,865624.635457,aJVQB4rRea,847742,535977.730126,V958eFxkRm +519150,76273.716557,qWGX7DKAgM,735209,436071.422572,89o4oWkPmN +363971,903797.284538,sI5m6lSEtN,724772,648744.110247,MGS3oYpbS1 +241460,548060.849033,9GCiCjBHLN,906972,657381.393792,k1vFJbcYP9 +560380,467868.397043,EdfLvwI7GC,410458,982748.353313,3ZD2jX3o4Q +952872,654816.683947,hYFuEg0FaQ,853865,738355.119686,LJ2CEmNetZ +655049,708911.742256,73fTZnArqD,722030,443118.025221,UYfPJcU1sE +84463,509349.311484,ife7LW2wQF,698815,542927.440870,gSK8icBqj6 +673728,760096.166271,XcPi7rwLk5,795111,74902.729025,gzZya76Hrw +905631,236375.138388,8VOuTiGgiB,626628,609611.610856,YF9ClblmFS +478817,935948.117928,wXUlrp7OH4,36709,239550.488201,imUB4sCe7S +914716,542314.785324,sPbFTqigP4,668677,772074.785838,SeLT4AkNK2 +846479,6155.437877,JK6sJt2FKw,469781,888943.389356,hP8XcgoRQu +242422,472364.681129,l7oFs4JeAH,776697,799282.920095,whirB6y74V +911948,569704.548952,6XGIAFr6yJ,749231,791925.154607,pU2aDP1cAz +113507,484327.264044,nNSaOSWyqA,850499,634590.748199,f9IBrT7X8w +808431,528356.482267,aiSlz0C1gF,522648,717884.552594,cBBtFR6u8b +992393,715144.490838,g91MxqUCGe,820540,429201.293602,5A6kUDL7ha +597452,4137.291331,bMomivIo32,219810,213940.364471,JzBpyIa1yh +511078,865075.491814,ZeDHnVpwue,946039,793708.115537,4oQXq5NHfI +647320,388477.843763,uN7xlj1vrb,295743,544267.826311,C5AsjOYiYR +152601,913909.978003,mxOZgbNTej,213532,195896.909147,TBkohuLGLm +83872,492716.104452,vpN2KGb7np,741243,295235.192850,FHxuclzffA +970554,931180.142298,GLhzCvf5aT,419170,537111.936552,05KjQfi6Fw +822575,50202.879747,85njPna0Zo,298129,373534.087406,t6H1h7FJKM +359979,515105.480153,dPc8u8MxKn,911351,185846.592128,7TslV98bVP +394351,573628.531790,SGt8InKEeZ,103615,91176.858279,Awe5N2VbrS +952918,756514.263698,BOecYqnVOD,435299,523868.402555,qKFFY5B58c +372722,422516.667831,PC0h6f1229,926745,396328.713219,eU183lnKQo +635408,999119.918312,BqU8v4ayPm,832176,557366.808476,gRziIRyZVz +774230,257963.336483,fymz6BI6ch,861048,715929.499841,al3vygRA6D +614142,894750.879535,ghrnwVCiFq,840719,907285.455990,BjfGoLTxd9 +468303,177325.386556,d2L1iuiV3I,396210,679602.709043,RRNTY6NR8D +418102,985019.004050,fWkMFKdsam,990836,352265.011018,VaMmTjm5b0 +596770,388812.967651,dCu3vei2DN,659495,946021.950114,RvuFDNyIlT +990471,52359.963227,9egCp1z6Je,308153,437775.693288,S2V2NIDzSq +785606,366873.472894,uacijDuPqP,273316,301860.172204,Zj77MDUKdz +999353,469647.602141,fUSnbFFSw6,987664,741918.864707,qhU3bqdhr0 +69181,939557.036488,G5N9NBHcWQ,500936,303263.061135,YZBR64qwUV +292973,994335.039279,sOU9DzXSDY,749743,966767.574420,izoN3gt15Y +258333,713784.008617,indq52v1sy,34088,657299.788471,VFlPRDLlbD +275066,3220.802997,yS58SJIKT3,991404,398127.597148,Avl8khxKN4 +683348,830186.155155,gJGZi4BaCl,533357,605328.674681,3BVo8rIVcT +187127,569018.560958,bVN1Mkz9OB,20708,638273.095298,JWMOKkQp8q +532451,598898.558990,9vyBIGNEQX,738542,816442.549855,brLhZM4tz4 +224975,861028.574272,iUIDMSzwKD,698177,291171.325616,JwhbT3Jfr8 +2132,519887.428988,14c1glIzNk,101252,452177.046097,NEATrlURON +251231,377647.690447,NAojIQNcyN,830758,435285.962063,CRr1ga9OaQ +221387,824155.243839,ORIGckasGl,128345,47723.651638,E8hciOP3h0 +971499,293315.406090,TTjuoUhnop,628799,771471.271137,HPnE79jwkA +401887,919640.610734,UsMfFmsE6W,356719,380806.893394,CYGG4n2FHw +23450,700759.944752,zBqMAw6OIh,170273,657510.475620,RVhQVcedyR +355438,294489.604396,SqKSTp2glt,163025,651769.172783,k65ltASPoR +435667,228760.071008,2RK17eC1cs,175761,980475.731218,bPwyxedqYD +734336,526131.793617,7PfrO7zm7L,872435,49900.083487,oEhrKjEaaa +683945,264101.006743,Mw8kic3rzb,74037,535909.298981,cXElbsPpHx +23068,766336.483501,iJEkSC6mzj,677239,603870.438067,pj0QCbAsxg +69008,686341.994184,3If91gZsLb,335716,75644.629366,ChJavT49US +73315,771608.160556,8keWfaHCIH,171882,204801.101504,2nQ8uCFYXH +431804,398921.887979,pmeXh7AE6h,675988,768624.348370,toSXKgsygB +273094,590173.905107,oT97MA0vLG,3812,18436.558158,JdLQ2DpBN9 +801853,205764.356456,xVFjw7Vj4b,374797,35388.788551,podqld9hmg +14048,874622.479141,hMfm5Tu5RB,381868,793853.847445,kaJlTknHqr +751213,455385.970598,k3a7DfcZZN,462943,623992.060574,erjZp8BoJ3 +727577,636814.325368,mbezZAUIF3,988550,797732.954558,LyFPyUuN2H +476809,177587.077877,MH2TGTkZKm,752647,551257.019889,DsCb4MM056 +318583,760684.413361,dI3xvCkMwm,528667,810323.893112,U1Cg3Jf1lg +475259,849203.335251,tACJ94XZAr,23516,65201.026606,HkjoaSOdyR +238881,420241.393717,3P4v3XQz2H,118656,405434.807641,7gu9muNy8E +690694,158315.397032,AJe18H1dCs,311122,47756.712804,7HpuFDLa6Y +466530,285030.203101,wTa7yI0VDR,328370,169861.785948,NxqXSZ4Zr1 +313131,228012.127909,PyqbqakqQ5,414038,305010.072118,5FFzsfEqUl +557444,467733.786609,Vi8lmkVBB8,593112,94745.907982,ioKvcpupIA +383425,271403.608877,CMDaGNyMTy,683595,883451.582727,1fAuLcS6EK +238935,83866.106139,wjk3D3oDKl,705396,68252.536343,flO6xm7sn7 +474353,968617.714052,8wax0fv0VJ,687365,301845.281962,laHtlJBpTA +750119,776466.897014,zuaeRiUOGo,764665,444417.057829,CUXdTJzI3s +42292,548577.711902,b7a2zXMa3I,15977,636262.550176,RCAsW0Qp19 +928600,867867.712114,EBBpeLXwGk,335354,921439.314619,zB8KwRq7Xr +163719,980351.810319,8ElbglYKqE,977908,150495.292060,ThW3yNYUKy +758776,387826.250813,EnzkG1mHVd,204525,566172.683106,SojbVfadLi +791348,41744.580189,cxFKPFT0rV,967080,405304.149934,PLcsDNYBFP +37712,591686.008074,5WQlroBXuy,899149,613205.415560,8UNMnx4TIE +846911,739166.367426,SVuVKvhZAi,144035,846661.190625,LE5SITiKDQ +630630,970887.881135,4wDP04Mw9O,840984,809271.396847,0iULryQKIe +777495,903475.384457,vGQ2yYNJEh,166007,291444.642229,ALlum61vFy +335087,185451.191526,EraDAt5I2E,980440,578302.841602,9iJzU5nktE +571722,327873.791059,jIwl5owdMJ,757307,61151.436001,pZj5OAvIKf +689807,775406.575043,fWCiLGWYnj,668462,411241.198117,8sd6nNcMz2 +266240,435013.902117,erw3WnQl43,587898,542383.826890,EvDsXPanR7 +666789,100139.155922,qNq2ArKzHI,29679,226281.299865,2xCDanQEKa +970862,848817.900410,tw3JiaMWH5,298439,701470.336856,xqBCUVraP4 +348895,222027.110424,AVIV910hlM,248964,734120.841889,rxBfFfYwhr +909776,596673.456796,BYcezpNn7U,370099,846906.741231,5C44hNZ51d +371495,727883.639440,J7ud4RN9Nz,152159,520316.147526,1io1B58xFe +137520,152148.286099,dg1XpgoGTu,831054,524096.566273,xsOi5clGWT +479615,172022.016957,dOyCjDOtrh,267658,971871.153721,HWrywd1BQG +173181,225474.624902,fd7dKDr4ir,181553,376807.153374,MoBprI0KQM +813371,392868.079710,Hn3cKnb8Dy,253151,352630.781681,2H7BI1HagD +857445,623630.501925,UV29mjSBsg,517109,526291.288854,zbzOsYkStO +610542,745550.641843,PwtAuCMHTE,612743,600684.676123,3cOxtHl3vr +893294,394638.576656,cQyzTwgOdc,215342,652356.188423,jixRXZ6ckd +60775,431728.908886,xuzOSfFzbj,510645,900688.918738,weJnsGknyy +699627,839331.985742,BbVLO5Wsec,792626,252845.187043,8IjMtCbAmu +500744,835723.902366,YFxoJs3ujo,600898,892682.285347,habfT4MqCQ +283090,232967.962976,qiJoPZlpJb,305521,957800.088727,Gh1N8wwhSQ +943475,835338.332326,bLbjEJLXGM,839411,873880.346055,wxsSlMG4q4 +436572,982453.363643,P77HT8HvR8,948327,827878.471656,ef1ylseFu4 +39961,457758.312179,7rs5OksDrw,290953,858446.308218,VNEkXD0p5p +621258,915382.347918,ucuIXMF6XI,429509,381088.822519,yZyPDg9WZQ +773094,183500.294539,jjVGgjoWCD,564050,257984.045880,GhiXOLS2BJ +923159,876230.689724,JtnXVmbDsj,381652,873639.999607,xLZwZBZAbe +884759,732298.272375,rYi9rb06NA,147809,82265.916312,4eG9pm9NbJ +289245,163977.019240,12GSFWyzT5,369636,517601.345030,mbhRftyHAu +256917,131476.696868,Upp7zn5MCS,851772,52383.946783,I3KOfRPOFm +195548,224667.759630,qHgpBhENaX,385768,425994.692060,22LnUJsQUk +316369,197645.103600,KOFujZBfQS,595550,972602.726080,XPqXLwpE2n +864212,265403.566770,IgtVwo2Buq,729050,911756.787741,nOS1Af2QFk +747936,101315.664264,cyzI4sTRig,926703,445311.099507,lugFsOvC9A +967743,504503.531985,BoaBJwtKls,740853,217635.364456,WsmNpWuRZ3 +271037,730556.396670,b1qrw3gE9D,246262,82025.930434,YSiLkcX5ML +391960,185147.940164,3BfVijzIdy,955176,412599.635893,mFyK8VwFvW +574256,105522.642749,GaCtbAtDzH,474660,778009.422737,XMmD1bzRDh +33481,438276.900581,kq1IfoIUFx,77066,971204.241442,mGHZI2jG1f +235889,239014.895023,RgI5dV1vnM,466165,105664.967521,gyqsurDjlX +544987,690373.036317,jLBzcq5K1E,691974,749858.256880,jDuy9ysnUG +603860,331288.757062,nEtt9Fb4qV,166246,913623.706866,4LJD2qmPwQ +147373,595576.129490,nFL5PGzaku,312129,7547.908031,hl84ribe9Z +894530,391805.679782,BMLZdkF14m,527052,112860.604743,EnntvT8fVE +889419,969492.653252,ZRQ5lp5tux,560728,969136.264828,8e0940x84F +156231,151536.444999,RbGhkz3Z3F,935562,210424.189293,2arkFqbLWv +447121,237321.701467,DFgW7eJ2hO,439789,622216.565530,uf8LPSlk2b +667176,786132.035241,TCrnoGadWi,629064,420983.818931,V3ySqxQTGA +948072,747244.442362,DbKNnRDgK5,352714,802003.318504,Izlo4AqCbh +52641,199772.600913,4lhuCesj2s,425430,632318.469581,9DxOxX8IWc +121303,678025.534912,r6FcEQQiym,565782,752492.676214,n2ybUJ8dr6 +960014,813854.685982,11t30splyJ,403596,718498.633512,cKyfDhvG2c +527576,46458.310774,40dfeqVCyK,34637,336871.431016,tXijiBlZwJ +967321,724799.810395,K7CF4a4MqJ,332069,161476.800556,cMDmlmwMQd +397630,344643.535256,clt6RVm4d7,359635,175006.492381,ppYIX3W6BD +740233,514772.385143,fIIlIMJa4B,315017,686368.266994,2bfSrpuSv4 +922111,178123.600603,tIi1buW1OJ,924735,26136.011506,5QWA5luyYi +522498,65993.505091,bKngjvE7b9,950286,491437.584517,arpbw3d52y +230164,195611.278314,PvN2YZK8dT,764180,567487.294304,6Bu16sRQVv +751537,480015.172395,yEVMOcyQjF,101051,33682.055570,4p1WyqOftD +627699,813129.723978,AAXYxV7jeC,777484,692491.672213,jwHs4mBQvS +845715,650696.381907,QTC8yM7qos,856884,202202.829994,QdFSWm0hlI +967062,210162.463679,D8ESuEKhEC,438751,23476.539663,bpdCPd9PjT +595160,900442.179418,qBQTUFCekL,998397,461997.828819,FYGzPe5YoE +208738,559249.675464,2ewg9Th2pT,58904,634157.812438,4eC83qIv1G +471646,478206.922211,tzlZgUhZyq,612542,841947.311238,4CaKdioTcu +942305,188907.363225,JAosyJhBNw,229705,57016.034285,dPD7Q44Rcb +133346,700758.827018,zGiHp9syIN,632947,239824.181908,LEZ8Zf3jUA +274773,856643.889274,6nQdOK6hsF,205541,831533.796988,vt6yf3NgHc +894456,562042.771149,GJhXvrEQcZ,290371,391600.172089,9i2ogC0mrL +392233,76538.493554,9jTXvXUpE3,758461,322433.950672,oKTTmhlHZG +938946,482606.057013,k0MPTQG97n,926518,709856.017186,Cw0xgmmAAy +540791,192386.523237,syb0Re5FMJ,160764,475929.748064,YkMtVl0H1r +517110,936277.939522,3q0OFNZgl5,128122,239067.974294,fOCyV4DEr0 +687070,109932.469079,nTgCi3tGaR,937119,648564.291646,sgLP5jwX00 +309337,753266.288713,bqG7msYpZC,178497,656065.557439,VKilQj07eQ +286563,595962.598272,Ec6egpfOnd,895133,189113.172403,wwJo23QHjC +11810,20356.955955,wKXn9bGRMd,563779,809043.439181,iU5YmYFwPi +749910,817644.956801,SHzo3pM1kd,496998,120499.983934,4c14kbaG19 +559649,857000.420103,OhJbEGfE2R,483965,744321.826521,FvQwVtnhPJ +303280,105732.336642,KT98GSs8X7,171900,834531.480943,UutrjPJa7d +375041,60702.627387,XDvJqnBIMJ,868182,131060.891053,ldq5Fi4wsd +438503,527427.269167,0ft6OOnnE4,235331,460679.294996,1fGyhRLFJI +95110,233572.225969,Bye3O28mFV,238619,617399.362489,3yxg3EFuzJ +442793,140301.040558,JKU1P3xw9M,425469,410494.493305,fTEZw1dDRu +75036,37960.424196,XTVioBOPE4,961614,566405.406017,v2KDOks3xD +133922,888054.328836,QBeLPjcCNz,964734,931662.763888,9BlN3teoYw +738177,615044.691080,nVEzxJstMg,48350,51210.653830,PKeX7b5Ewq +201176,880378.660089,UCj6CMoG21,134410,16215.650165,EPmwNMBZyK +649990,40210.459814,dCd65MbdYw,606780,340725.456285,dKjrgmBgBT +383506,88572.579018,9qkASh6JdQ,357723,278883.599416,rYSWyNs8HQ +368203,378795.632438,xcj6O5KbaU,495730,52755.286744,lymVj7RfKY +867889,517744.637100,REtfNFQOJP,660140,741053.581074,QMvqKF4JXh +974323,961336.949598,FbI9QWMTld,823362,848174.230469,JGMbzq1nnU +738909,457862.167191,Q4mazFVtXb,190603,291193.060001,4fa5cYl4IG +780663,62040.684537,OO51Qp9LMs,396385,94222.471646,SBmPVQkOmm +349844,206574.648443,5ANQ46ZLM5,813844,901535.397774,tzJRMg4o1C +456749,876496.445939,8utxy62iTl,219839,363944.739345,cyta62eysi +652181,541249.646437,YpNScvRKN8,523442,290417.377622,02rh2iQfsL +458860,897001.494910,1Ey9XOX9cW,903288,371377.954683,eFsWRRbadw +117803,606465.994427,l3rG9yEHF1,200328,280473.875058,7I18dlaP66 +424548,283880.324631,T9e3L1EM5B,871728,353498.260982,TqG2vYuzlc +319065,417289.310464,mcftNIhqg4,453515,653325.508408,oZ4QeImF2e +428419,291678.007068,pEsjwGI42j,82655,959029.652119,pt5KhAToJX +721878,547864.890637,oQmH9zzPlR,462816,757547.414229,tsiSZnLowV +279254,277793.993980,NCBb1Kcns5,659594,511093.981826,S8POsd1kz7 +871194,618667.708742,Xdq2J7ZhDI,221296,616286.475659,nn4BcCFbGo +678271,34138.943249,Yei5eEW6Pc,417043,487228.124968,zzFter4b6z +828060,943435.332321,ijCS5avybP,170949,982038.561139,6ByVid8S3x +883613,409213.791485,kC56J3ymBl,440067,158366.285276,I6rS8WQ9Tf +879577,593645.893874,nGj2KwIYuk,741452,727962.617757,Ys5v91eyph +651939,918508.380856,U9w3F7EnFR,123449,599867.534066,hHI3LAVE6o +676423,616558.895919,yKA6mUtsjA,704830,705301.829766,uwTQEo6COn +14468,630118.863828,VIgf97QD7w,785098,705601.729297,c9tDrYx6DX +618701,5530.990182,nUWBttNaa4,946859,521118.705607,afuQKpWYZH +808144,340371.463877,baly2dNY0M,968291,512044.291297,mSADgdzbXb +807428,784863.138660,P3cJHZqu2U,167784,374982.110579,noPJSEijQ1 +156868,48089.759999,WTw6Lu1AFL,491715,747968.353911,bV7zg3j3mw +638545,496166.517455,eourk0G0x6,765474,614896.535672,6guThk2L3W +687266,543956.700200,UJpAR779ns,37099,514160.333326,hhuHnU3kso +565102,743091.400437,ZdStDv3myX,243715,702482.130420,yL5qHi2KMT +820237,3516.716960,MIETjsm7uV,248620,59933.416494,IkOuhtHYTD +805168,519979.258743,UMLuXPKs1o,190713,215019.748443,M3vE2M7idy +430630,944350.379158,QuqqDEuaWs,190174,307779.981781,7XiPUBeBFp +777302,677715.422286,wD2FYxqCMH,753238,195163.391842,StKcUmHJGp +21460,993683.871774,HTwrC9ZNc5,635797,428604.334153,SYVKAB2kSX +445160,880946.331612,SxyRcWa6kR,168156,413715.187691,jxeENGvBpE +846069,993716.878797,5zeoXMGMUl,791238,875934.087584,YF1Gpm3xvu +10601,991500.258070,slA47zkb7h,34962,225006.104486,JIU8NikSaz +833209,791777.465115,i7VRolfvry,562152,736496.527480,pDKUjJ17UR +155540,275746.370527,2iSxHRDynB,572366,835221.334705,lNohKCovQa +663163,946867.324437,EXWmCKMqFO,315060,25333.578074,r6fh9WPMa1 +344971,721310.360716,VfiAEyU1f6,633890,950065.167136,tR24pLcjHX +700283,601578.572761,rfWTlL7ou1,110721,373036.794756,hZF7cLI1Yq +664882,46373.017409,cLLV1YQsyb,546791,518072.998293,2PnYlJqdnb +890806,370495.592809,UrLZFknY6d,838194,21369.375912,MPiTMTZp4Z +55531,987206.386411,bfCnrAmuIt,742904,89933.449145,Ktk2O7w59V +363439,918097.533743,upUINr5L5x,346945,856136.465521,u0YubVuBZN +903777,366797.704965,RwRXwDoKgt,456010,813094.816189,7qPcW0OhQI +389994,20445.831677,FMreolXYU2,824773,100966.944964,7zidR2kZ5G +8600,882747.134082,JabtTvTgaq,231408,83116.366481,p4xuo1rMxz +506754,536688.224989,ovcmDP1nm7,936777,929347.649114,xog75H7xsy +643540,900892.493068,ht9gzw14Z3,656667,137859.972632,QTKCVloMWm +435391,622382.056055,8GhX6XcUkv,887148,330437.309745,SMdrsjsgiW +330399,908620.258229,75jwK8ipL0,617315,603586.102194,o8zcIWiMFZ +435217,834953.256437,7Y3r6sD8zN,252081,232821.582465,wxEruT9Czo +145358,370373.256873,ZlIjztK7Aj,445800,540430.405254,XBrnEPu8hT +991711,925303.145839,S783pGjylw,180819,510154.767872,oTYPg8kpZA +35714,141034.644249,7QGoDZO7bl,184206,978885.031003,1uC6AHXumv +614860,182411.644068,ejIHVqqUYZ,809529,512205.615706,IbTjLLb8lV +579658,579165.859420,RY0mrtT7Sf,810036,173450.708366,mkLqH8pRSI +492343,663099.272335,Tlv7Dg0emk,635776,973852.812439,J0qLFOUf4E +797791,445354.318872,qyUhoDucxc,157830,69017.663842,oJthMF6ClQ +75841,987337.721942,81h9bMBJn2,138834,656351.835844,U7OwhtiyUz +563205,206424.593526,TOwgVlpbgi,491583,455080.583890,cUMGuBoJuM +303167,907818.465247,u8hTfeuNaS,504944,787830.559124,fmeC7KkDjR +485350,782947.745468,ZM7twsE0Fu,687151,118516.576119,tM51OBwy1S +802618,490998.048241,vNFlH7TuJq,599618,1601.875149,GeJbUjFHAJ +144673,423356.288327,7x5QLVfJCp,379229,724093.556715,ZOYlWwmPIc +862014,681589.949723,ySA29TRDYR,447969,143068.348891,FIXoBzEmtg +800800,700843.432179,VecNL05ItN,962934,620468.522791,VpLNDEpz1M +381207,671037.876790,ZOA8ZLbMgE,33283,819480.038927,6xYOwAKgcx +385464,3106.822398,mEd7KPnMBY,29679,724801.156690,tX0bY7jZbK +465511,135479.632304,vL1WyWcNze,958507,238250.819239,NtHThlDizE +430955,582119.914544,TO5qetStAG,239517,981697.687043,uyWCGqMYUN +156099,417080.536678,d78XJEHGxU,149337,172769.584051,ESEziv74CE +103743,287114.135991,itSu8VWh5d,909372,835106.719750,GDtjhABiDR +664198,763939.036040,CmcgyPn8eK,65333,501981.624752,5fMbEVRJv7 +987297,815208.616830,LLCtZ4ssyj,402594,557420.181920,thl7tnlKRW +457383,139490.820381,Uj6WcL3J5J,754357,759596.456881,RYI3AHM3r0 +277236,478414.040825,uXvyz6rEMs,780090,320566.394636,D7ktW3Km8h +813737,108042.566276,ZPM2ulsGuS,12345,154563.918532,wJKlplwfik +75873,440070.768322,QlVAX5Ea0F,82019,947564.730785,IFhvnZ1l0N +632959,903524.491126,ZpSyep7tHf,724987,667944.490946,RXlL3nDq4p +262020,394429.900412,kifupeLlTS,267474,439111.484405,AsbzIJVBjp +38349,617078.584400,lqjWWAG5Ze,218085,993789.110286,JU6mtexgPR +853353,798222.058949,3p6aSU0Tm4,271595,204686.612976,N0kNvOTbnK +209258,926580.887497,6El4R2AdcO,880710,18211.412010,478MN208I6 +720855,831098.223181,c2wIa8xxKp,662018,372187.912197,7j9oph4FM6 +138186,659737.467272,Ai4sRNlGnk,591704,764291.323524,YYDPZglt4Z +182061,306271.344683,5qZFklQKPx,45462,392168.427483,6rzeWvwxql +219781,721251.584957,IJPIubgIMX,298693,824519.492630,ByDgAvG8G5 +999030,602891.497733,yx5Y3OrNQU,497882,660633.095506,6c5RwJyi1R +846726,788486.182414,E8JoDKLNgv,336673,276381.955760,lZCd7blWya +328567,600840.294601,zxfgihdyt3,837660,276599.423288,ZUeZfkuJt5 +622151,283370.188059,FfPwSZtHny,200575,543276.798948,FQuhPUSNBb +369220,208891.391457,E2yKXUYjGZ,68401,118266.584436,MNr3mtPloY +485804,554102.170841,PwDFyRgmPl,753006,359530.926447,bgAzx3Bbsu +562525,225123.100526,jCbdDOOH45,568417,804274.918463,EYydl4bqt2 +643456,135187.848821,OxAe8nzTfj,90117,188119.128780,YhMYgXvfOa +850452,724711.499605,ZjyLdQKUGM,241662,307355.699448,j1p9Y3oRHo +471892,771585.686840,c6SSrqTDTU,107539,689914.922933,R3wMxR7AWU +34320,831453.934332,miIJO9jBj1,848673,797307.523848,Rb1EyKQkt5 +52214,269732.391715,nbPGMED5PR,600065,942476.342303,sLq0CfNm4n +917427,894188.760244,mDa5uekiPE,539364,393632.766601,jzBXihKn9h +545422,875532.119751,m4YRsw0987,798149,600255.964698,7Ae04KBxvS +627919,674805.071278,T591P71Bin,889651,444827.732208,VYwbbDqCSN +783954,379967.288445,mLCIiCg9Iv,781655,886799.182776,FZKbg4xb5E +394126,677571.420781,1Fz9ZWyaEs,5424,121888.886048,1w8p4C3WRq +979329,468230.959165,JAEK84kewk,590534,73162.680035,mBeHfGDvty +127685,506109.963132,LUleQcAZOV,276147,301006.435789,GGm17ANA3B +193213,94205.725923,6BgXjY5Zi2,302772,32785.605338,Abobi9guQp +999948,299684.526464,Svobj1x81N,229870,988283.223055,A7OgSB3WOD +514344,888489.792862,scxbmOzzNO,302214,379795.022427,5OYekpReiP +507636,58871.929489,enJjaPbgS1,421882,133474.318896,yLQuEKnkQA +347463,658601.041732,r1EysNTZwV,630417,838901.207676,KgY30ABmc1 +334323,576806.453160,kYwBIyKXGZ,968934,806563.523421,Z19qG4i2cB +447932,14833.543328,Ft6fYekWlR,524505,954849.219880,yq30mRILeU +973768,524104.910783,UVYByqkwnU,594914,62902.325583,xGyGTnm9Rt +858199,941249.525284,Jhb4CKMmeM,169537,692640.645622,W4o3H1l134 +813833,648143.486423,nsrVKXACUX,641536,439600.962490,Hou0cP6CvO +743262,47114.870509,9cUm3DjAQM,861020,718887.800779,BtjCnpdOJF +673488,958916.013313,5gKqw5XbpU,483148,76446.572016,xmow3Cv3hw +511265,955816.530063,CIxNDZd3ys,21410,791221.875957,MOlHOGvcaz +521952,380369.462264,D8L7fRkVWh,338872,869646.268476,2uxh2UK8Xo +6127,786828.728057,4VYUJ6kxV5,361329,362797.730223,yynj2z0VIR +849694,994734.617583,EMV1cJDQCB,386815,829567.933060,HIgg6UbsMR +230916,778692.021357,eQjSTymLuA,260219,479307.440492,EpVdUFVKb2 +997234,440721.021569,KBppCc4s1w,111943,989448.128836,wOWXp61pGy +879599,157476.968900,moH9ElYMa8,997763,817046.383327,Z4UJTIChpi +199474,605197.540430,1W4E4ixZSG,439404,546212.211096,0Rc3x1CMse +609895,241612.555958,WE1muwKoTj,379677,832710.516622,5RorEomvFy +711072,723363.235147,kLzybe617D,340028,713051.663298,sndMoB6tVK +65611,80081.279112,OKjxf9h1Zj,191038,427130.027219,kkuRza3lp9 +721132,819670.407275,UvlDYL0nxi,236681,752262.272184,uu7tw41ID1 +990780,268543.397429,PCzCXpMN2V,130601,333739.622491,xkYipUsYDl +296584,702000.198738,6U40UghJZn,998615,958515.284153,CzWbbCeqPa +971645,646601.103912,QjLQSyWIAv,413194,185586.131495,6ScXaSY6uv +204886,495886.503085,2hUzDoK8gd,429053,485954.698640,DP7qxFyA9p +933734,82380.148848,kFo3T5CXcp,810236,338791.305617,ucDX8mAGGw +526466,220167.190285,cyvkcqeuhf,649715,568550.830806,3HySnXHZxU +748274,434667.486390,cqKfqtOQ8C,974360,399829.809436,MY6XB0EHC0 +669602,945659.221323,C6qY4ynOuh,667386,691663.486246,OMHWiFAWQh +638464,637738.698744,VwuBDvhWoI,732578,131281.289407,f0aAmFjIhV +507387,756560.616446,cJilIEX37i,248002,511796.478699,w3C48jstbV +639293,937334.888769,D4QlMEPzHV,184696,345238.153044,PaGQkz68fT +786360,349069.984926,0aTV7WXiwT,818001,86225.012942,5yFBL3nQiP +803223,346693.048928,HOcMflYMSj,928885,737978.535287,mcvDZuPVRe +160561,565324.346841,RDjjRhl5qZ,850393,500485.392691,yPO38VZJSy +994442,432336.681360,fQeuPHsy3Z,581505,93434.976189,dkMfD9T3mp +692590,828909.252257,MEIKl99lgt,591019,62220.246642,vFv938Ay9T +115663,824252.357545,IG4JWPOQml,519620,54015.284508,JULQh66oSO +161328,947719.154599,bCh6APLxno,596190,375483.345531,crHBVhHoux +981219,332961.932256,JgAhrPV0J0,761255,261269.926430,ZHiprEGydJ +543245,104754.242104,slV3l4qhGk,124908,422472.049942,3RmCJEwRkC +18683,643315.425053,zHQnsz6498,847829,674344.785995,rehb9LXmIa +117531,87291.236863,CWgMTgsahC,571155,538506.148949,cLyUCkGvQV +228224,1337.633220,SrYB4AxzQ2,39861,133109.116220,2Bt4o65Etz +660230,142700.234377,of3PZcrVtc,996713,909389.133179,dOMVrMejoS +56038,21052.520365,msnkHrLcTv,238245,884958.598037,a0nzN7JSWI +912651,402944.505805,JehbabzIlQ,644880,781270.030410,DtuFHci1nn +679166,949284.461228,iXyrDd044F,41742,331023.748043,sLQkDS9i8L +688906,759141.132822,JncOpPp6GW,281696,942120.312214,fDizbAcVzp +166464,710097.131145,I4MIgdvaer,278248,428100.826427,JEXV9Pfi4D +79754,447376.541776,XfGtcw5ip4,837488,889632.177944,I9lwjLIQpO +783557,91606.760774,pZS4fWiDh2,532962,156414.308502,8kikyWvUVP +803666,459095.425411,MBp8IOWzjr,268680,350006.524767,9ZLDSobTPd +658360,937175.458254,8eFOl0cvPZ,770546,67764.461929,rIjIvRb6LA +928630,683439.048848,EuIR8YRtHi,568134,837574.773668,mnYUKjo28R +243599,519578.958109,NZ2RG6BWeA,596979,397702.686343,BB4ejIVgfI +218762,762439.835931,Kh2MfKacH3,264481,551749.521931,YpECFQa9Zg +880311,365829.300103,cHQQPsRCqZ,663885,295415.620022,7Xlghbkhrl +637491,953040.500861,TAETaozLss,865404,216494.923935,FFj8OU6wm4 +38231,241769.278229,phesrfF7Gh,655880,826238.664013,nHEO2h0NQt +902358,850052.067507,fei8bKeMew,594577,790361.001997,OIFJ9LLrcT +192896,307875.254636,8SAOUcpj81,590409,88902.751320,mSbzLlwUuo +718035,533147.483365,TOnS1PnCd6,315407,59380.224719,kJNgd14sz7 +768672,72815.863703,Olbv6g6csO,118736,134787.975961,AFXOAqbqE7 +828719,628600.681154,f7lCAMaT25,203768,765456.770346,LU4toMXDOM +546349,489510.716768,Im1JS4DHeq,475519,474834.776889,sa1M2qqtRe +911195,491826.407937,4WEd32l9mK,279679,85980.194517,x5kLlqGl75 +261791,725049.666888,WaFeKBZnwh,254209,419856.605540,qpASN3y1pK +364580,450527.015255,RdKq3zk9iF,965821,440872.554429,944tgFz2BF +592119,786995.681496,RHu2gJlsYL,645694,236578.777682,o3iqQaczfz +425083,27067.728719,CT1xZzw5b8,36909,666563.306429,jh1HDFxdc4 +549053,489072.386711,F2FurLkvdx,587758,121583.458910,NFpXFiQogg +329538,323814.639805,BeGW7LgbfS,116419,199332.391680,W35MUQDMq6 +561640,719379.636905,ERGZoPPyO0,567865,506002.101810,C2CaLQCdZN +20700,877653.486930,C8qp9fynmd,296536,529581.617411,JKcokOYqNn +788987,789764.003939,uEHDk5NGhE,592881,405084.654311,Ygz4T2f6rs +262869,921836.867541,iJZCZKnISi,159633,614893.693123,fN9juPEWq2 +273554,338825.414047,gHNg45bzSO,640381,650395.936022,COv7073Ysy +753465,652.404551,zHkMqSoAxU,376068,804012.995791,IELQXVcGWL +389960,150513.428300,fsr7QuwxYN,273527,825419.493763,8Kxc9Tq3yQ +323215,768198.494907,6AOe9hflVL,811115,115019.558421,uKU1T81DyR +486549,937597.610015,6Y7QeNUvyl,984134,967663.618664,YFwexmt3H6 +726694,286352.610906,aKpyYKvEB6,872582,539938.239307,kK2EMBWpYp +719562,717830.192005,uyXBD0VU3U,348167,261331.378606,kyphPCiVWs +791958,979503.003490,epQN1waHaC,476193,939549.382927,TS1cdMCEkk +170059,293687.532851,CI5PGK3mtO,639749,118674.855800,ujSYY2APdc +352371,56981.792656,a26XdmWker,631691,817810.074936,QhOmsO0al5 +830582,901805.295214,PGEWVynlkx,972034,695371.795051,5IJLqf0aks +384653,62816.780869,uvelkFmIQp,125785,598773.944879,uY16f4me1O +207381,261400.381134,NHrtOFjFfO,598096,78805.728643,fckibUL0Kn +870275,818195.553007,vQ1nzWV7tw,585114,890972.088899,SzuHHdHU0Y +737330,718766.754594,WP79MgFaJq,713692,689180.418738,4J9CDEeHTF +552477,19795.290813,ks5qqYx128,928848,895168.515746,btOqKR3TjH +896592,195992.888443,hDRAaRsK9W,614165,393366.243670,SfcHWhVlgP +674854,855327.966443,XfBneFBSSZ,700032,392694.783260,98ixZXQFuC +18482,715833.371548,6xUGjkV0bD,27932,653196.956249,EFvkNi7ZLh +44945,110993.727419,juJptxpOgB,697096,429543.084253,RLL209sf87 +863847,350921.078024,mjDHW2MZh4,193557,252973.506559,Tw0BogJpS5 +472314,734657.994285,umqZvUYwee,848449,60557.691724,Fojp8fmRBq +493230,670104.524756,E1cAvwphmg,978763,636911.609006,mFyPTztQT1 +464732,75341.232069,VbKpSTBrIA,878343,168067.880431,RJNq9YrBvY +453928,180417.231153,aRniZapps0,653039,294692.011704,j0AIPfTHlF +117709,627022.082959,DsIugQ7ZvM,395152,367456.608810,4xgY0TgytR +213301,309829.374297,tSeKjZ4ZWI,301083,190409.884186,vffYQMFUG5 +671837,115601.077141,4tq99k5Icz,321543,371696.214743,gyco8542uQ +305860,519175.854089,DSCwZCQLk4,385688,656090.121286,e0lrjsEO4T +975779,718277.992449,OMF1xGesui,519346,589091.092739,zQt0sZ0FdT +75862,274497.655071,udq6Xwr9GQ,907608,826250.621436,jZUzNH05g8 +68795,326333.781575,CaQ7wkYMq4,422847,834413.899857,16qe2aqlT2 +839627,661034.610837,RdtaXb0Mgj,318946,538043.256155,Lbu6Jt5jkb +422681,916982.928116,Sgzrm3yjmC,749925,498676.657227,gjSnieNUPl +444355,575953.815244,zVZ6cEcLba,179646,104635.474185,RxXt5Ig7E4 +148116,261315.533091,2Trlo70Hdn,667127,516213.964821,1ISV4wMHeW +392853,832965.602404,yXhTnoeTXM,533306,532747.644551,Y8CS76rcAB +468384,921884.838679,WPOBXODrpS,157802,250001.957944,ELnBUBUt4G +635763,222359.448285,vgAdCqukzj,629799,293253.661181,NGz54FJ0fT +841827,290335.925567,X33QecYVMW,65113,552141.963898,goagPSoJMj +356874,102410.249633,XqRA2ZQCZ7,717478,601813.887030,FzphNX0kFJ +907608,480249.061511,t6m1yW1os6,362305,634417.094894,bXKQN53C9I +783655,522338.457585,ubM8qGTMzt,26457,827903.754081,wjMu2i4E9q +289803,626361.524124,8ZGPhLKBub,430498,94811.615913,tf11HEYl1T +313746,196358.951099,URmJPfeDsz,260276,15168.720031,34H0OdEtLm +249134,393555.341377,u2JDU1nHAF,716854,968054.170204,y7lnk6AZWP +963070,637985.895042,i9cFQDAqfY,303540,522508.711871,0KeaJb71s0 +248230,999842.619075,BTKftHH1tv,727763,568370.354106,yfXKR2HY3I +981329,39739.815567,2pdVgCSRh0,419389,928978.521294,UfmhPKiVdV +444312,171416.929168,s6id9hg2Yv,95810,927486.848343,Z8crGORD0H +753251,31176.206601,7mkuUgmsdX,793949,557605.215393,lSkduTY2aw +833848,542808.536459,NPpDf5V9ed,645438,867985.979763,HLxWaQe65L +680600,341684.185357,MDBbdOkVxR,259454,574543.815378,adNSkK1FZH +965661,491894.015060,F4K7MbCO10,465448,327335.881937,ihUuODdcX7 +143723,157030.629922,4XWe2U4Rf4,363001,987290.200811,MQAzMud0yy +228763,668928.557920,ucs1kwwY8P,412468,968392.428336,6eiM85X3mp +902760,479163.095833,2Qr84SzYzd,893929,541529.566683,CBWhigziuf +348315,67802.179930,XjqhGDFgIG,46399,524119.595927,cRvk6b3FJO +311981,979432.891498,nVOmoXyGy7,318865,635295.747482,eD8bGYtY1l +504592,43581.423954,MTUU5tiL2a,18443,855448.235289,9JfvHXemeH +166789,522833.121947,k6L2irGHkw,45921,800645.599399,63tfqYJizN +297951,842305.755887,93hvb2DQXY,16708,931331.647975,hrAZsTEgUR +439323,940448.262167,Hm8fcWqfk7,406260,228147.865106,behZm1x1Nm +660798,727262.896076,fPRPFRtZaa,348116,204007.651814,hIOIfRVxjz +638024,808634.837610,0ZjGDqCokj,297620,682211.905055,oQn23uwPnk +390886,972918.691617,ID49OBU7HS,312182,697026.384630,u4UWEjaREX +526295,125703.526328,6xjJ17Iutt,184263,86392.272222,Apr44ltA30 +343831,861973.567507,LbyK0lpNeB,866176,671323.409516,FvdtLhElP6 +410591,809163.451919,Ou2gM3Eo5H,304001,849428.661844,XKT1sE9jkZ +756014,804805.232539,BKlPhD5MCG,419813,609998.087255,KYTqDfvXWD +133566,892285.234113,ta7Qw4DIiX,567892,599634.209789,FeGCypBPBj +918592,121615.003059,1ru1nZxx1e,727677,340856.688415,UZ2PbK8C2x +936507,286728.709487,P1Xw09qOXd,647163,438924.870270,iNKC2g8fZe +894262,720314.251137,y3JPndffNm,666394,512730.556943,p3iVKQTEF1 +738255,769275.554362,8iY2T31gmo,80731,867532.341859,kc2ERfypgn +231754,896935.731517,SwvjpJvHOS,910859,922220.679290,7dIvZJYEax +143921,584670.711540,Q3Ko8gN7Tu,62053,85829.325250,A5IOrc1HwL +298515,582825.088791,IjCl5gTpZR,333967,968185.183276,7aPTlafRo5 +918785,725026.916449,f6tpJMqi0W,929275,786433.879587,tXkwJGhA2g +976026,581275.492764,T7i1Q9HpZ1,779038,34687.756819,DtW7wIQTe0 +45720,205932.585467,XGqw36kMTQ,671959,786590.675607,qHjXXv5fin +143571,281939.742015,L7KXgCklMS,910316,790212.747350,2MmDMgBpjw +851485,176177.217447,1kW8nY34X2,712662,714804.628795,7syfw65qJ3 +227340,736666.429779,3bXamAIjqW,640592,874350.888588,xP5bS0TaLH +557798,515567.707541,SeWHw2K3I6,187455,916478.398587,PXsGk2ihIj +684189,405292.305940,kxys4cgBVe,306630,670004.133449,j7pTlM12ri +255373,207406.592476,4BWWqdTrgU,835862,969912.410425,HWJcy7E6lm +145733,90023.012135,zeCInjX6Oq,450538,304152.769194,JJ2C2ysJi6 +197983,367919.332028,p7R7pnHIkF,26528,691108.819404,srgl6EAPnH +351410,303538.249457,zPr8SynGYX,480557,931138.267442,NGwTyxcIH5 +294575,431076.507361,EjqIncsnxZ,206524,828005.321331,FGvd9N88a0 +411441,739888.141602,lvkK8PvPUY,884780,999000.633749,7po8iOxVMu +530361,955821.790520,kVUxGQLbQl,68117,48567.704016,TEbdyzGrUR +231205,823630.824296,9YfxJcPGsw,892187,705660.696290,ptfMwZFcgd +543265,500385.772009,76UZ30Xdsj,527657,696236.749308,ZHbrfC7Y0C +11870,852267.243463,fuCI0WsvQL,952190,62591.745142,jnGpjuT41b +585475,312278.772020,AfHPKSYyYK,34017,7059.261778,QD8u8udAPP +275624,851042.668384,Qgwzu4r5Ms,331953,166469.873060,L4XXsA74Ee +283786,51450.932831,vz4vbMUtla,704302,572469.488110,oklaeiCZJi +434721,86277.177767,1taTTgFcVx,529143,199367.087692,Fnsjl25QcQ +499905,568888.585421,IwklNxaLxS,185167,265316.466642,WSA7oJeZS4 +787073,216600.928139,tHnwdVVvo5,738343,641473.980414,OfTbSuGpqO +105252,207536.480408,ZD64X770q1,201231,424848.229195,rRARKaUQZl +881054,635697.313769,4weK9szkRr,867026,475609.885188,YTBNahXlRB +145651,783864.133658,6UGkHHH6MF,812146,71289.427151,8ndG6HKUNs +688997,780122.780072,zNvtrvNV9i,50323,942490.716272,CQRcCSPNkj +640060,224617.454061,1BWyPcKqmi,657320,84948.513004,wImaOAjYT8 +803488,300602.344358,0JoHmxdu1M,264793,931525.977492,YZxD88PaXZ +125910,56775.575739,Q6uTRDtqer,733973,571644.501219,pEFRdn5KDo +4514,101046.494993,pX3i4nKTfU,682710,713235.880619,dnpdktS6c0 +17380,549861.113823,oF6dfep26M,237401,360903.816472,IgeJlSCRnE +864754,337090.488536,rsYTvP13sj,655990,391774.864910,kvATT2irCS +104274,910140.288476,aREgswbJR1,660410,280160.269618,vBOZQNjKlE +964950,611816.451641,1Pc9Rud4Fo,405009,308108.207451,nniVM3Aykx +696209,489429.412398,hMUSXeEicC,899800,417050.908340,OsOiu2Zby6 +646364,870938.464801,CyMYPNdyFV,735888,809844.526461,uVbhRPh4Tn +349488,990160.163806,4S6vq2C3t2,303309,676032.610357,0HvBvavQL7 +306581,739027.203358,8HBx7tzsCb,611119,971917.485187,hyz6cWMJ4k +279188,11225.272553,rHbv3t8z9X,129833,147170.787724,qBDlk5qrYR +969452,946797.676003,SQngGQw7jX,6829,805142.837425,IyhSejAXWl +543255,515399.685992,8Yhika6WHS,964936,277186.293227,2ecR00Eot8 +279879,68917.288607,x5oprxKF1q,182210,676592.542468,RbTDrCbGD5 +527731,151813.125448,RuZhK5B9Qp,785801,756761.248821,72XGyHnl0P +605092,745039.956119,WZdpB5uHux,672378,126471.941497,NSCcKdk2r4 +617694,480285.070036,tcRSVhnWsY,434465,157322.513092,8ZSBZnUt6z +682875,24867.903676,f7zhoFFo92,943729,59679.677442,JU4UpMpZ0f +916642,611382.154123,Yxk3sPB1qV,709183,527878.946058,M1gekeTk4a +308164,815855.740226,M6UDjqahEw,749174,177779.386385,ZlBLPqN0tP +696726,634015.860462,QFV86LI8eO,564519,557510.652607,zb0d3bPX0F +43505,310219.254409,mWAzyRhmYy,78668,29732.788708,UXHcSXlHPd +570973,690007.012286,DF3fMs4PXn,595345,921997.996544,OBNqlQWwFn +773734,532248.109497,MrXASK6vwN,790916,428727.139197,gonWGNPA3J +325840,999700.372030,PCYFmHSYox,695248,934511.003037,foYqxnCnh9 +718816,696074.586841,TZip1hGgfm,121966,624654.757594,9YqoCsKqsv +952926,914173.034148,ymXrSlsw93,537725,100619.716047,zrvvOaFDJ4 +639485,508711.950179,4zgpHPxJV5,707244,573751.244290,aP3cQBnmhe +366846,41875.930556,Fcpnwg9JXz,961429,816319.843152,NBQOuh29Cv +345334,836823.192957,S503bMNVQK,91931,692766.395086,ZoYyXqgLlx +996667,189086.515283,j4lVXjYElV,450637,529468.398442,5XtUAc9fbZ +821554,843891.918330,JGw3Acw0Ri,309683,935007.748331,rE2hZtRhoe +416500,333893.269804,cJfTjwkfQA,682080,536934.297530,tRm7uuoiQX +101802,991796.517139,Jyiol7cPTD,372715,529380.034788,oAhwvewvKj +161505,970736.932906,sXYiPSQTF2,321045,54534.105347,diiPeBUuZU +139706,537344.701027,AjYin8hcrW,60641,679123.865729,wySmqSKiCR +381337,427785.010191,FVdg8f0TdJ,424295,843574.105736,ZoRRgQyICd +719346,662768.561913,8ikMX3sy84,368224,289053.316955,8UfVmo27Cv +993353,784718.754072,TeP4weH8PG,761041,954608.421902,xLceanpFqE +952929,166801.993435,3urEuapkiA,439322,151847.730367,H7aXorNuhA +972631,125875.690496,5U4k5OSxuN,208802,147792.869527,OnyCVP7kbO +176854,329490.497150,zM87daVM1P,244833,449586.330299,d24hmClGGN +310579,166604.241059,f79x39oIuq,138493,306824.816389,snCrLjVjGK +45760,805044.889661,7KTxe2EnSE,600240,532807.203781,fpOGhTB7bQ +952534,460721.205153,VYqWCVpzVW,421701,885654.982907,GCM9LlCHJE +841421,468989.925397,jnVlJXu4eQ,24624,994934.722116,ENdHPN4Dlr +959458,69971.769004,BePKdJwfiR,147689,292051.996895,Zz3QJLeXIF +746813,20239.573140,IRE0DGaSAq,467507,503746.603490,F6dHv5uXq1 +247888,959193.460489,quhbpg3H8c,74676,256780.187536,4DTteNm02D +171358,143667.022949,NPK6zd5bYU,606000,953635.764348,JKbRvLetu9 +196627,984300.444087,ctkFXufglE,885073,29164.863744,OU6mG1OnRg +140628,645860.413944,uLWiAAIDok,384138,226835.792772,9FGUrNBFlk +712514,558546.350553,YMbMiAUmgq,741775,511630.808782,3nZXjbKDRQ +710791,623772.315751,tdqccNKiGE,220898,666648.091506,H2fPziWwMA +768447,516388.156306,Br4FDkQxV7,242036,774649.158045,p5xPxFXDZ0 +504894,914656.473301,e8VhdKYoNP,849885,266781.166050,v8QLOrTGPl +286855,856795.166320,FMoXnYTp33,17730,516683.847452,q2sFAPlXpW +662122,496317.933539,nklrgrqjh4,353139,329439.417320,rXiy8dm0SB +320132,124974.866958,wzBDWCQEsx,437044,708447.606452,oztVf2uYaH +776576,758335.651236,1E7ASa6sQP,624193,890170.747007,llxgFDwKmQ +803901,434734.092932,NeOP6XpkU5,558648,5490.745865,vg1oKMN9sI +667254,763300.181436,U2TynO0nMN,964486,299558.767965,fD4jDKekux +687799,782346.084708,R4WI4ua08J,96223,527668.878907,5NUGT6zG9S +488689,525839.105612,5bQy32NXvM,507314,321431.349326,YHO1IQaLdM +152884,419921.435223,QItmhszwIz,84748,519506.494536,tQXRihFO2W +307006,887839.123752,unbST2HHUx,340327,450909.584191,hHZpkhIabd +991185,287327.083851,Dn9JZju6z1,615600,914766.720896,ozxoTkkiV6 +571588,644367.596785,mW0nxDH5P3,283574,471012.452431,J9SZtH5iR3 +223014,381575.638442,k6KUR7KRrd,28185,501856.114273,VVAN2HNBvQ +659410,521118.807188,PrLp5JinYT,634468,238863.777602,kxc34oPC43 +372235,422464.057155,1WPbvlfhYZ,748767,372982.916628,50QSrsGhOj +465369,978374.279645,KR2nG0geO2,777174,856111.903997,tH90JfdOwq +532835,952150.526240,k69qvckYCI,876788,271894.526994,MjWu74KYid +699485,585552.866235,G1ObrT0Ksb,567003,433191.267619,KHFeRab54g +297719,860687.980846,pANRfn4Cxv,387733,812160.224948,Bek7vTiq7C +362910,414677.694543,j4GqOR4aCp,870422,170218.361362,j5vPD8Z0Ku +690110,777826.496769,MpDh9m59lW,72302,544386.972252,szXynTzR2H +851879,321460.922781,hjNBxp7TzV,987886,432242.719371,3V9MLUnxIJ +505970,180538.414927,RqHlP2VFk7,657607,472036.038863,3cbeBo3Y24 +682458,606505.333903,9rb5OiggRC,249706,387780.783767,a2hzKe5Ar3 +699952,781318.550380,4wgezYmorI,222771,619310.774555,cy4Mjnon4a +729879,822764.419513,KeXDQVPQLW,118107,470245.989936,C9lk9zt0mM +450014,372099.244184,suXZ7jmATd,562667,879459.823277,DM6fFPqEXF +691551,865059.511860,Ms2hZcTyAy,886422,68064.959301,LtHz3WYbwU +326692,216648.592095,fwY1ULuhqg,456953,453811.760402,UshjIEvNob +125921,414859.012145,hkuqjezgFZ,693757,448136.145047,EOKQhMX5sD +191889,142046.751390,WCfuTLTNne,564010,940667.614880,pBMGO7m05x +503054,318827.632801,f8cBjoMrtl,376149,785537.887393,ygDfWLStyE +274152,849407.328293,qNUOPrvKYQ,300003,986319.710057,KkiRQb8Q71 +466745,400469.291639,0B6wxUjBC3,357132,61654.008587,6nL678wos4 +494620,587314.376880,31US8MrL34,531237,270664.295083,iou7WINzmD +180691,183849.014348,FXCFkw7GDA,600313,185774.222223,OOxQpwNjFm +113621,454882.911727,0h0DMHZDy0,693719,984759.209626,MkCYhd4eip +761523,346117.802982,wd35SlRXIi,614945,685694.740449,0K9nqmSG2w +558025,369115.972597,Xsg85wmFbN,261984,736892.813637,7jX38re0vD +296066,600457.659530,WyLlNVWauf,607374,830465.390916,GgcUkBszyD +925193,752544.904546,zQk0gTejsJ,834905,925165.670617,P3ORDrpC3f +194932,179532.828642,laI595il2X,739893,558888.886520,ytDx11VRRU +469577,269830.285196,UYsQtqURip,836808,582435.557556,A5Ll02AFs3 +781669,476049.448422,4HrECOqORx,754440,365684.834023,h7VJso5TSC +921217,510297.871972,qIqXH4BL9G,516908,199223.732776,sPwHNWDqit +455822,962014.188326,pl2a1RsUPJ,729369,207946.966409,eIW7ux8qzh +595401,513900.876139,GIcd4ZMX1p,285320,508242.213173,Zs5IdeqTU5 +193810,73432.830119,bmPzp5AlX3,642750,668063.326715,fz3zyuccim +791601,686778.662561,5VGVXw8RHR,768840,735501.250081,RzQ0mmMa4K +776956,210113.678684,gUC9XQibpt,334803,245892.531788,3cLgPp1n74 +482526,423275.405795,Vwwj2AAYpX,196901,361921.415383,Jwt5NfAgpz +815040,647356.201009,LjEAGN5c6i,481742,253195.169644,6cpzLsT3lI +554654,202117.225188,t8LVzxUeqH,326803,653869.564424,P2On507UvZ +670398,639311.447775,FExUvrGBxA,92495,390155.242543,AHJ7Jw4U6G +947926,805392.347970,eNsUbkr6pH,615445,568316.915965,HNOTTnRGsn +412455,938744.225322,dRExCiqqwI,260588,306145.940038,FeM2WbRj9O +571,734038.744746,u8gZ56MtmG,782309,953515.575435,edazkPE2Fv +27310,995185.705459,Mf0FjmvS9e,735856,336411.415812,3lXCNwpObW +860883,85196.354191,7i37UbxbxP,963779,2716.102683,4tf2lp3bhL +172550,225526.660953,v425Ccx5OZ,484069,913519.755447,JMKMstytkg +680071,735642.208112,FbiXbNZ0O6,721783,704689.079642,QC17TQV5Xo +867644,362567.779804,u2Joh87bkR,764169,693738.286244,364xjdeZMw +157730,48745.721922,K12utCEVaS,131450,117376.013324,CelS9bDjjU +601177,807773.155389,oW4TDndvO1,540819,974712.138035,QPvdMY2l1I +912686,751326.446908,JpYjS3jsdZ,640152,489043.458379,APl44gKVKr +640865,327096.147429,23KgjOqlmd,687151,855906.730229,q4d0Hncvcx +624773,436781.937875,yPgrrjCoZq,759783,323882.247913,3wDNxergiL +546760,757322.003803,zEB7mscMQV,965666,388607.279000,acWE8STeoU +748003,812481.011641,95oI9ZS3TK,466555,758085.080356,k9OGPahUNQ +129051,719884.609145,Mvmyo6FoML,118056,725617.326701,Uq9HINIMoG +506105,992667.819070,uBRxq02yKt,196964,712756.079653,7lFcZdN5bb +609159,427346.928706,PVyC7xI6II,408490,696367.950882,gmhQMNbF5D +588063,404388.514709,fGcvhS6H2E,715379,394426.273716,NTJCVQDUYF +71747,700678.783471,vuXjQdFYaA,109717,238627.606175,AoupPbfQJU +815441,167644.120171,bjtKL5IWI4,627915,77162.243160,8iXX05zrE2 +493076,442354.318578,9TekjX0wgU,687411,373639.312881,6zkbYFGzwh +847462,595029.351208,1BauNzyqs9,127,742705.055993,ovi3AC4cGN +849619,102984.187027,tZb1V1jeAN,750311,481737.064089,IwnSR4taRi +129000,419926.718380,ekM99PjZop,41793,316363.354310,t6wEhhBfXs +893316,388384.715596,zKqoqf8hEC,231161,835619.681337,aQaFsFlasl +22277,499652.436233,Eewvx2IYuN,725353,696629.353314,lFHtWzgiXq +472983,735318.275532,CQHFUsYb6D,442877,258640.072229,7OE1uVfJxP +223289,464857.881483,X1Whiy5l7A,668817,275634.486834,UyRZUyf8lW +949215,59665.690267,xycIeal2Dp,396201,580956.588745,R9KtGGGwxS +803406,279332.674979,JDhlMytS9B,137256,302399.093768,u6CT7DuRjP +398646,300004.420684,FPq1IK4MCE,388443,29550.356240,oLQDZvTpZ8 +919244,554492.393169,MnoR6La73d,970205,534413.250176,3prjvvdHYc +6404,42993.097007,Gt6cldPGOV,438386,390253.802358,BMrqmXSlFu +749490,812245.717101,f84WMhbHi4,729686,562964.922709,S5aU9HT82D +814534,52450.997064,LoTrGVH9oP,433674,704669.912618,0ChX724v81 +650991,275382.667006,6hZdQkNl3G,279895,383086.106177,EXhcJwjtqO +965060,243529.413389,QzGaLQNrzq,656818,559729.103034,IEw4ypvHJO +262686,721227.929616,RFfXzOt3Xw,743082,521621.597230,0eLocyn8M6 +244698,705274.270311,RYJx0Rzfp3,625999,488298.469625,VWnTZWMK5M +265795,243769.825249,HJplPyB3it,206284,980750.967616,BWUpY0z7Ju +70714,956083.328836,0wbXCa4gWI,536403,220371.056088,cByA29bjV3 +653153,400355.323930,aDqmLEOol2,359727,746581.575080,kfRNWcsXSL +855382,913595.825827,QmBnlGWjfF,152605,641620.488121,YiU4X0XG2p +164624,87676.581137,pYtS6FQTCD,715748,260091.488612,JxRAktSmlS +376507,657633.057898,AL5w88dJZ2,181011,242038.537555,OVhVEFljcA +102733,275537.959235,Vce1w8xnTR,972680,562537.166636,dSFQT7z9v1 +789651,842256.900545,l0Zs7cl6iq,717465,524338.704556,QWmhAGElWt +366681,147569.676679,NLEGZvLFSJ,262345,581506.652689,nLS2CK28Z6 +838803,475145.804313,vk2kXiz37o,225438,324832.539185,M3OMNIR32Y +493498,563138.942103,I3cL6k52pS,876975,935512.280891,fEYLimSlMe +901825,127772.049835,UbNPn35QMU,133263,894178.745656,v1n6B49bgl +740262,570688.632098,eGtd9ZwduZ,496617,159393.461458,IvYiN9Y40r +491646,156505.497063,TeD28c3jSd,356101,412032.024345,ZfEXFEeAws +942928,592017.101920,LyBJBrkSuG,761457,559737.137787,GRFbJXEMSK +427494,875561.044010,olMmyF2Iwl,920133,664063.157752,LpAckRpWrH +731469,759304.321327,2c1ninMEmh,850063,215278.123376,Ntmkfeh5Xb +463268,69155.206642,MvATbxOnMZ,371204,471703.332127,UcBzPFMsVW +491547,950254.126692,HqlrjcALhd,283799,355540.639940,g3hi50bIlC +987006,849472.631070,gYih3F7vjN,726960,379212.071674,eSlgU8J9cJ +481117,406077.912426,fXbOor7xbr,691958,994970.939055,b31V198BDi +320017,756559.243215,XSU2QoC5Oh,716176,108175.288544,ICCq4tVhCv +267189,830490.122627,HEhWX6Qy34,675451,936790.876527,gvI2DvBpna +171394,980888.407506,WUa1m3Wxjb,377834,191561.234325,n2Xr6ocCYz +764271,43121.169030,qw3iaABkek,570442,935018.467047,l9T6yHXiPz +884018,361267.511456,qBzY0Kj03U,128735,257229.891871,FfQRwXDYEj +831843,486442.153833,UvdFqer9Vi,221590,980082.743876,ibvgTzfCY7 +317632,165826.258041,3OSGXt4jqm,791301,476915.893196,YKPGHE7brE +587177,915886.580657,6Y4HU3slpD,807022,455406.750023,922ejCQsa1 +490195,373826.782588,BevVyVxZzo,134131,946673.702181,MZglgmqpHR +883664,612679.842757,4oPeaApd9B,276190,688790.013151,7CI86gf5Er +836010,790117.921895,TsvfyB3wU8,723153,422577.652118,KcmV45BwvA +424132,354818.776849,BFRhAGzZ47,568734,947255.815751,CsbE2lObPA +145535,689458.006846,lPVSjTQlg7,927349,697279.384883,TEGSp0qzJh +454497,335976.114351,VkN8NQcSWb,526291,448090.980635,MiEyvODX7L +260326,676710.132251,I1YS2wx6A9,548751,735649.616944,Mk0kcGa3sG +361048,687225.194606,6ZkBUXYwLw,741430,784705.089786,2VkN1Bm9oo +666790,952694.268122,Olrf4y7A1P,431172,990656.442415,eHlzhtgI9E +903607,698911.003364,Fu74crRVQB,207337,68292.804260,7Qqt1QFFXU +333007,852696.378949,xTJEflY9sK,294230,446005.579062,rAuybnDXwv +764913,224609.882605,0IG7YtC1yW,876385,19168.601420,da34MLFBJe +597432,71399.723421,H8SSI0lmZn,935691,676293.566005,uK8UG3Cjpo +136817,625201.403967,9o41OpEhAs,631980,867365.574949,o2dBIk31UO +910961,96820.614897,gRXGjaWwvb,670581,522891.483704,RqDwPBGKwm +52534,782526.293408,g7NvXZgHFI,203190,391210.250382,m6kPcQf1Pq +826036,715663.915219,ww1Q8Ptg34,564559,741779.799732,rnnPHoq10w +6078,826102.181299,miFBupBCn9,369274,131413.333180,hRUP1m0Q5Y +99688,226019.542444,qi1t4AxeBI,53798,243822.253645,qhlrfAEkpM +728150,258149.256192,svwsjojYtT,75913,525184.647970,kIfbwEraLx +584438,125683.065557,eNqY2KGQK7,480320,636192.952008,Lzfxud3kzP +471717,526974.071437,egoiKIG9oi,356233,55008.517387,KG9d5D3OVd +573498,783551.968873,Dzo6qqRRIb,316284,477483.353858,xppLd6I81o +281827,834296.019727,z4317estAs,698631,189726.915512,Jxxtrd8spP +138791,607783.859536,J5xh7wubON,640372,393061.757107,3nr2OhrOF0 +47597,675360.092813,nTIuonBKbX,790543,862351.625897,EXr41iYLfq +249526,559733.950133,8SzWiF3VSl,185897,984256.487627,ptAkCWqzQD +682619,597933.648045,71Dcn6ih9w,929061,463627.124671,0lbh32z80m +507265,235325.850084,TeNf2gJy4l,52365,580895.994536,TPSRbNuNQp +833987,667967.775793,Medwyq66Wv,909719,26195.670452,auzaxsxgYM +283338,342119.125221,tgXlF4Vz1f,912437,929289.413462,6gn1Vr2v2j +397437,91519.765353,DBK80Z8I88,752398,103333.786792,lkRLdunsai +755396,527625.982438,Q6vyQIYa6F,690151,355325.675265,tPOmzdRe1Z +273950,182475.743170,r8sx7u8mbr,316801,25178.206398,gBS4gBmXFZ +913892,92727.871600,sXZ9nSBZUh,441988,547759.589326,qsT7w8ZqqI +354740,581771.850551,0vPt2xRYqH,756548,898846.782875,4VjOVOg5wX +621572,772580.777300,Rg1N4UGnqn,98059,186017.931629,WJcZRZB2V1 +853581,251936.588581,T30mQxcbvb,378241,672357.074205,bkn5g0m45w +337003,126277.071585,p8GQotQuzE,518180,632322.697835,Q1UrxySiGY +213273,48887.772800,tL2tQqrjBB,515587,365519.388037,zCdfqM1n6P +966406,797655.952593,UOEW6WQcc6,834804,347803.667355,AMShn28KXj +2837,613325.324179,anA8DSOylJ,677333,441350.833763,6fr25RYtbv +747100,576481.076284,BDk06P12JU,138697,262895.577669,bqTwjjEY1Y +557803,810614.180469,3dRZt8Jt2A,295047,282930.735699,THa7smgcqV +822512,961407.090447,W6syy8agya,276269,405116.356982,J5jyu8ENsn +328668,321994.682671,7WtPr5HQFc,735218,559866.052555,QGFoYOMs2T +343424,844670.835573,3U8DPkSucP,387431,815075.939404,xPnyxH6CBW +902532,610818.980909,EcWehv38Nl,608176,748530.236892,Vd0ojurg35 +225668,931109.670616,CdjJIv4QRX,272302,751322.628718,ONNswokETh +502969,9394.145897,2wNUnws3us,665394,751368.170711,OXmrhotTTZ +630139,913316.674773,coKDoaa3Us,134151,295369.361899,TmtFQw21WP +363214,57506.271721,XGq6UR6GPK,78153,262700.879837,38aZiAAHZs +460675,994204.904128,sE9JwQDtSj,49523,576381.054291,QVzamLfwlJ +933433,468995.294274,NJUXBzits2,860156,768740.373427,KYc4jP9SMU +427932,337074.058900,gcckdute4E,904765,209124.048476,H0phaYp8Vo +191629,529871.675546,hh9yiPxu7o,78685,42271.230802,zLz87r5gZ9 +139898,945055.369812,beFQ6NCmsm,231847,654180.376469,edSPpJ3aFQ +201073,933005.507867,gQ0hB28fXH,455544,859168.309475,MnmGIlinxQ +838602,720377.618015,OPtzmnygnN,635188,744527.773311,5EVu40qoZf +151124,273978.811853,w5NlEMQNKB,573981,694347.471341,fDCvJNfnqN +890079,547885.658595,EuJ9AwzWSx,916357,616694.337036,dijlQ80FRY +321262,886817.309934,HQIxhGgwhk,423640,142173.966136,52DjwKRHL8 +635231,751182.748344,DYOaq4a0TG,334132,752519.714253,yFT6a4tJPf +781234,173777.340890,bFoLp4DHcB,583505,177051.586538,502tG5YSxX +367442,704685.888111,1E9rGd4w2r,706380,613329.381935,TF20kuPf2I +521078,271563.385094,SwDVzghHA4,450078,619376.954157,OwaP8q47ES +95368,300507.856963,zeSwT8w5C5,807251,58919.616842,voTo81HSu8 +955295,286397.038433,6XnzLkO8SO,206651,377486.993092,qVaNMKof7g +891700,182109.878102,c5BtFYE5ID,717661,564977.873736,zhPInV9CoD +19254,529488.684874,s41nUzoGQ4,873040,366518.829479,7zmtAwJDcy +38116,274978.868221,nZohWCX3kY,304043,299709.500453,WgV5J2HFvC +435675,760358.832095,Wg8ffTTKIP,226316,722581.635599,JHOZ0GX03m +856909,663703.848297,bz3X0hiTMr,261176,978578.612250,p2NUqEtLrs +678923,129660.619376,KHNM49xM46,767036,214288.553699,oHFwk8YMUF +999872,121123.417057,wqBCRksmh7,515225,567237.888441,2loi5KeGQb +739841,431616.139402,eMJAm2ecON,985211,771546.313412,3fcTT0dcAi +749739,404331.054734,JGAnce1lKS,347940,307800.669992,XyQeXnsKh0 +145202,108255.514755,eErX2g9f5W,945914,881100.001128,S6HLQGtzQ2 +517348,98679.631088,ViGm3IQE2w,976452,811654.743811,W6yBgr1xvD +524701,5495.128730,enaoYf85b6,209887,587673.353184,JOtzxPFEus +1338,436852.972128,791o2DbNzH,394525,112445.393964,iRRA99lKFU +634006,777962.912750,PJpMtWUGTr,616418,5566.526422,nuWXQJoUEY +503891,835504.276005,ZK3Wq7U94j,959679,736198.922343,cMaqitJ17T +236673,95957.094048,x1rQ6THxGa,576565,401138.364769,J9q645WjcM +49764,584611.020053,T9YxtmmJFU,457640,952065.083192,fCQk1RaY6u +920459,22547.041046,uzXf3AVS1k,598780,587570.655143,fAnOA3OdWZ +844682,508330.521879,SQGp6dNs7P,583880,340205.351336,SJ2sIOKwhF +206506,195838.710206,CE4eB5ecYS,423094,458651.971426,yT0n8V60oL +104336,650584.547991,pSkxAUyF7k,691857,47806.312329,dwFN58KsL7 +945437,118971.547146,7nsKxWFMtG,426058,968641.605525,F1oJyf7zRr +215722,97042.467202,PB7QqDDf28,65603,193144.437127,i4fW3XGmjs +112404,441076.414344,669hEuNUGa,487936,318203.976027,94CuoH3cNS +735279,362088.796001,nTVlBqaq1h,812337,437827.342064,ExmJfEs2d4 +859977,904683.910053,S6s1oADjBH,260898,841044.952356,prycZeu52v +470917,352412.889431,G2nmtdEyI2,361818,790447.983082,59xd1SbfJ1 +309425,938257.572945,Ni6F5Su7Xj,390557,718418.875288,BzJePOxRqi +779499,282955.083572,Gzw56478fv,42435,504304.246411,UOJsA1qkGS +476668,345570.859730,6L6tp56MRv,689688,91230.387659,FFuzCqCmhY +221375,846077.967447,gs9jODlnPE,162677,612805.414615,mbkvfgEDoJ +792216,110688.798003,1uA8cuGMPt,388418,616771.072357,ff1p81HoKa +70025,494648.411797,oaWICHW15k,114391,726279.851497,NalhD1WUis +195486,163221.794702,1Jg9NzvDoS,560898,831679.905876,9EswEshQOm +463647,51481.560191,35QZBmwKWZ,100934,53410.021566,VnSAKbGHXZ +472667,145748.354458,BE6YatMcAC,289823,229070.896752,nJKzF5nZe2 +304854,727658.880841,u1q67grmRT,75418,889097.658097,R7Tq4JCX7o +595120,754375.049030,P1VD9qb1Yg,976209,294181.339568,yIMhCrW4FP +58521,866191.860020,fOVGGliDCh,110918,608960.748738,geU7Rgpc5k +929584,819031.637648,ZMce78oA1S,50469,713558.597553,2Af3NQsZX2 +212817,768404.599173,0PbrGuYoXi,77165,345151.899327,vlua0NvPM5 +247511,749238.873978,7qSGl8WZa7,196529,493092.988517,2AYVW9paZM +28423,751946.668910,gegRWhvBDH,374560,832366.454476,ZxObAhFwNS +182320,159569.660818,tKZ2Ot54tx,342477,230697.344462,FpJFkBi5kP +388129,125594.255723,QvGyl91ebR,835082,552340.770236,JWCVeGLgBP +410247,249168.934553,N6AkxnoxkG,788512,42385.753584,x1vUoiz9Hy +441461,835012.601796,Zwm6JLPkYZ,812844,607600.800608,xtQRov2hxy +591521,594410.435828,uaV4E29wQG,454191,270130.238005,r8tXfUcZCJ +348567,135063.510367,sknugIiO1m,687285,658860.228113,NB7Z9LvfIk +557082,490065.567541,oNDVydcTnA,379475,833841.557538,QWEANs6RcX +482386,470162.528788,HwgivHshuC,988642,363111.756251,0lv2osWqq8 +615774,70203.197134,M0puo32Pwj,531682,767982.602644,9MzieMws3r +31731,822500.293783,R4TmCkCUsP,161276,9416.667627,WuQ2K7qLzR +421035,922272.526824,nCOU3rekML,668899,30988.641969,RzDx8qsOID +778520,75132.124134,6pSZspdKZ6,920345,906610.458422,YisOYBIDC2 +629512,157570.528735,627VvEmbaV,576783,230848.283033,EXiV43EsEQ +63220,424593.855774,cD6xTv4dxS,237617,554683.632070,MaiGjlTDRc +836811,681510.423149,7k8U9kjef9,655040,39404.786035,8WyGDWjXwh +957842,624775.689189,UFWTIGOZv5,176477,816752.258359,eTBasYRVfj +99787,762985.372385,dNfz4mmNXn,50924,252442.524965,PjKrrlEOll +786718,822673.524153,k4vT9iLLDm,25684,781993.664705,VtvLiLd6bg +761257,397578.887347,zwaWMLF78q,966764,235579.240543,j16KCGHP5B +90857,998399.473219,vaAuKfK76b,338244,338652.339286,zwn7zFodki +650947,86066.845556,v9kiXUpjNQ,689040,97027.463723,nAweTKakyV +360566,840753.512760,1eDa0PFZzm,367700,544170.356685,UXNQYwhreT +923294,499991.885152,YAWDeVEMKJ,224614,206955.216769,uThlg2s6uO +86128,986039.245201,8CpNeA9OaZ,387362,600830.373325,y6NSbyX8Vx +126242,55335.822587,sniGt7zxmo,914624,769208.397591,UVQFLiNhX3 +924616,747241.697919,qeuuPtkpFi,848681,153937.497957,HWCoJXum2l +842847,783444.362933,YmpRfjyRWJ,400059,470514.501827,VUKmEePhyI +440981,465733.273940,KYbeBtOt84,456896,885729.445880,pfSBQ4rraO +443740,807069.108195,F6f2VcjKFP,856285,458634.108548,HV04jwUzrF +839369,390123.752520,Evd828uHbb,78856,118209.318924,k8c30q5vxE +165755,214958.305447,NJzxTbswYY,74884,385308.615339,GZFF4OgkVw +747178,239009.330379,UNN1Lwqm0Y,201471,368433.974781,D2ol7abjKq +197574,99474.080970,TqrDDJNymi,538657,789780.895026,giXOy4dAIk +827361,473641.004305,YxGAPJHEAW,402686,713893.641085,9BzL61MfhS +347249,632182.526078,vkdZbdUVJt,227774,508269.212966,2rZdeTkVp5 +291291,633704.047218,CIbg9AWBW6,927692,209410.848255,RKvu1PGLKj +664121,15461.819540,rCSnDMUnuX,904361,495239.688534,xfQVTvVAaW +283181,513118.995184,cJ0SAk4HKr,234698,513628.314184,adkgSt4ew0 +248927,667144.080589,CWEU04dngp,453914,580965.208338,WEnSdqJxio +949650,209377.274074,4F5h0LmXoE,687795,381550.862572,mJvQgO5u9r +425429,877981.697550,zoIrcTexTs,687981,700683.165136,6jmau7PPQY +832016,538679.658180,1a1Y6k0frH,301475,405832.740465,olCJlNIsfx +697229,312949.043895,9Hpl3BvxeM,268341,366355.013373,BZk7LbTVCt +208026,231066.955447,hXJtdyJQUT,860627,918249.385642,t1WGL8mssy +228694,346708.689855,veyfcqtV27,223986,651400.736551,CEgoRyRa83 +187823,211844.507847,KaR3jtJNvZ,59498,715581.390507,bhM1hRFUIB +355492,277542.186284,R3QXh8liey,224006,209299.132304,HuRQuwbEc1 +936066,584839.643443,E3IBTcIVUM,575870,679580.526418,pntnfic3XB +440346,871580.258319,KQcgfjCFBM,653598,610636.355417,VVIFKSQMYu +835689,444636.293561,bXd0LaZFZb,747321,470200.628610,wnRWtblyxL +380767,869601.298104,4RoNICyWjO,687947,136126.749459,ZX6UmVplUc +595921,630891.199810,T79d2tskrF,950431,907844.503303,1d2BcFrVn9 +63853,998875.015685,rRbt1p7s9r,643981,291467.275278,7QMeXSjpIU +583118,264166.120216,simYodzJh6,902915,100903.641531,BIB2F6tAc6 +135636,427454.545392,KZbYHmB51F,812661,850726.858012,oHfl9GSe9r +23827,841198.806776,YwVbf3svTg,809220,285965.930823,OSkpFp3OKy +31594,885890.173007,RIL9pdohnq,764555,863373.208672,9oZ31BfdJQ +889094,757011.997336,1WfLTouMiA,124461,491479.926477,c70VQ2VVaR +510436,883464.639739,A6fLzCUB0z,292655,753343.935032,kBRpGZfLeS +199936,479112.180656,TfbsYmcHdl,456085,920126.978621,JetCpHd3Qb +294440,495296.362953,zuNVX90NKb,401487,135161.968287,oZkRcJMS54 +733535,447434.677936,jm3t5lQ34D,241577,126030.544089,1v76KEbzbH +840877,441326.888392,Rkmzt1RIn9,780889,719041.092391,pYZTWCObwn +283962,772334.559362,4lG0EKj5vt,591715,34972.547894,Vr1V917ssO +489609,489295.582219,TX5sJsAP4j,881312,472433.033615,IZvwt8c8n3 +800041,203866.005801,bmACau7YFs,426616,542941.213935,CSina2Wdgn +295747,683393.981286,AAXfzNBRW6,505237,841937.748621,RJRqxVzteQ +454051,682188.750910,RN438IbyAc,642671,10434.870209,hwbiMxg00I +578149,680588.987562,qTnK9bVx80,726043,495151.366524,mN5sSnEPOR +88093,247527.613380,5Ovjelayhm,781192,876963.060450,LmD5rflMmN +473981,855491.763838,PiosP7dOfW,106826,270276.052888,RmSTQyDwld +228512,806420.344826,o0aGfn3CgS,16031,770894.486960,SIdaN1la7C +473791,122973.264469,sN0Zn6x1Ce,75108,757875.126962,GbhvXAlDYQ +959432,827804.477004,v3XVnklzmK,86018,490747.507362,BD0plSaI9w +179805,334420.454144,g3RivbaIG9,121560,140889.133454,qrr854n1Jr +281129,95886.238534,fUWplA9A9a,960699,52716.334155,Ka4zkBT8Cp +700332,40620.049431,4lgkCMlZG4,861157,818334.072416,zvWStbJ5pn +960663,652127.223661,keesBGML1M,713685,646768.458716,nVS0iL1z4M +842990,636081.175708,aEoBdjC8SJ,502738,100805.199676,CwI1LhLMGt +675167,445162.507345,PTXIgDuabV,201900,763126.004699,ThOZLx9BzI +216730,715110.450160,noyYwjB3dJ,48352,123723.748608,MVTgca2rJZ +203496,293873.043956,tdbURA2LrU,89838,941860.978508,tY0u3sI90x +971786,425092.980031,64bhUAuXWk,612855,335371.387020,h77UYTcxWk +656249,594756.147701,mjSZngT47y,70000,958619.134375,pKJYPzxQBB +942957,796699.031624,1WGqNo8Sq8,424233,811899.716071,FFSuevfYX3 +662518,745826.704815,Tx908kfRzG,826681,240806.130998,4yUJyMgzFt +782583,674060.107126,2UTwb9i7FG,528117,841910.975935,ArKtBVT9oH +835350,164964.907526,LPStj3nqSg,208156,364069.829308,OOaesrf91Z +450399,653767.198770,W5vVazI8tx,125969,883479.872067,o6Ka7G6kSn +572786,385031.457989,SxX8KjcGKV,468749,355478.018706,FkLcVtRZ2M +248748,645971.825719,dRMeEaprWu,743856,595222.704175,Z8YDRd4eJu +989216,443170.628996,EGLVHIiRiX,132279,462127.416962,MBmPiEpFiL +828127,228289.503472,iNJ0b3ECQW,268182,207203.515666,oSn6VMe7EZ +971013,920221.151568,QuTZ2A2EJv,799844,456840.971554,prC7n41GKY +668858,837429.736115,orJ1KM49nc,399132,50198.574494,RjF4rHORsT +25565,759830.760565,XiCWTfbpqH,186054,208958.162944,B3INDryok8 +22546,639833.938669,mTNGZe2fJI,234682,572240.134545,9CucTFF7v9 +158756,244191.721079,LIM04emz5b,610002,44503.648047,2hqkwXQhDi +127906,341668.322524,U295IJkU9n,459783,712249.617397,ifvJllVleJ +341073,856001.480941,z9nXxe0NUE,315651,802654.572304,pRDzpZTSLE +565961,9749.320632,TukWMpSukQ,85183,892381.050292,gnBWIh520X +854618,139386.008200,tCEJcM92CV,519841,829380.961128,8EuvN0UQVk +569372,704904.051420,g4liPRGbE7,750488,556448.374900,0Ei2dkqvU1 +70008,586904.776490,IDoCU8t5QV,908816,82197.452960,0VN38rHKB4 +986709,817880.567552,GdX7OaVhH2,714068,918077.842881,ySLVJSKqEo +975233,898373.613060,aUQZSYsp6F,737252,322765.275638,nBnSn7K2Nl +846304,130270.512231,E2vtC6vMsl,250139,266705.459083,aNxSCpoLBL +214525,496272.111849,USUElirVX1,890506,15797.740659,aRjrxHEdZz +277259,530569.460837,lg4AfqpxHg,794173,713611.803552,I4N1NcLsm8 +221743,290685.180668,7vCMqbbVXj,762132,127841.151384,IFyMuLCoBD +533479,516088.488323,9mXPKBmfZq,908253,196861.284545,Crb2pGtjM1 +162882,57528.132696,eIVdcWlCo6,378103,912822.091736,B2DEHWiWJb +495671,627058.378354,IinTwnaS5c,489465,145028.714938,Y6YQbzAEAI +548034,59820.374672,xnTMk6yoCA,920706,661538.490804,L9M2BUgVEg +991578,848651.853533,kMyOoIAJHJ,538282,899391.296241,WZLMXLlG9q +201948,585880.373817,I2iT9r1tDN,572645,424235.625887,iXN3U2JE5K +222727,287442.820000,uy1aqAJJCR,205047,860555.941753,iZU6fk9zHk +337824,490504.244897,jMezwajRDi,312801,953337.573438,fED2FtNPwC +8738,498790.867574,zOn5PcsPAx,864280,522990.159515,YSFy5ZolrT +155110,737679.419837,cbykwdZ8Cz,389199,859407.031738,LqRfx4qhJQ +592322,214976.991453,E4T3nIoTk6,957336,751910.308791,YFkvkOexqq +94422,240822.620872,ji0R3YvgRr,95135,903989.284810,CMBZTUryD0 +320442,183179.737269,9zYMqrQn9m,935718,967774.238924,9dbYKn5kWX +924881,97851.299219,MK4Jd8Ezp8,880692,593188.017405,xG7tKz7TGy +409427,786847.680696,0JByotPqjL,8223,193710.336038,31cJXtNBY2 +424257,244423.949104,hOvOCB3I7Z,515355,125814.389375,MEqGDcwf9D +677127,135603.632213,R6dFpJgK3K,539607,742783.443203,i5RD4dpIrG +381945,554543.347061,ImqeG5a4zS,922542,426988.377166,1PX8JMhXdT +505880,233531.384339,ihzCliBMy7,117380,337707.993467,t11LB0U3vs +683350,87284.176552,SKad6cSlqY,464882,844248.904768,hjl0ROt73z +756814,95197.525238,uqe8FyBNP5,679434,498263.967750,v46zOjuaEE +273826,829337.755007,GwWAgkxsmH,885017,45413.141128,x7tKv2Hz7H +604835,508362.316408,io9lVI4Ga1,246530,559808.999570,aDDHTZBfI2 +339944,497678.444944,pbu1IhMhuy,100376,857326.860597,LXXXFnGEjc +107597,440647.600638,jZSyjml6ew,959484,323688.813907,f3eEwn7Cos +509996,272503.876622,TK9f9eErXy,413288,632434.151055,BRNvpbEpjr +529884,347962.591630,GYQslW9Z5H,963925,157795.755503,UNAgCCw3q2 +13198,176907.124941,sIgzm2jaYe,612161,818972.062670,GKlcVU18HY +191527,870521.047556,7j9WTCDk50,718375,205126.565544,8NyMERZQdr +586731,826756.154014,UpEoOun2e4,82346,125601.353231,lrXXD32Pta +93899,761414.559803,ZF8T5KwVdS,219175,922779.889399,eIiC8pWr09 +590281,729488.966158,4KzDxrL6nr,831572,801758.914099,z2svHB9WHg +402049,143176.299501,uYJtaC9BWU,918495,345026.768785,ZLlTf4lccm +689046,257222.802866,QMJPiXw66k,918562,98938.103357,RDcc2WXynB +861658,546929.923629,99oo9zwSPi,57507,687338.288390,xg946nmtGG +963685,532118.901264,MNLvObnB5e,676431,707784.284566,urrcUvcvc2 +385796,668135.905677,LI4U66DqP2,260623,910430.901566,byK6hf7963 +140812,877605.235881,gVWg0tTuTw,40182,83297.885564,u8QkYw4g9m +502628,745965.059983,xBevl1J2ri,476285,65940.922476,bkuhNNs4B1 +888176,870118.261755,U2ZGEyMk8X,167353,760431.754483,WsN37dztc1 +74848,88736.289367,tbgVkTmTRz,583352,184304.413068,VhDSM7lmNQ +822082,114503.290223,Mpy1knmyix,831287,198790.897640,kOpFzZZ7ws +783625,68566.057515,IURjgoCbD8,591835,471601.259578,1H4ZRQArEr +315358,40924.830301,tHWZVw2CJa,405952,214920.780431,F6Kipy9VEn +559272,335503.611414,yNDjYBFX8n,865684,240969.440870,3dP9XMPP8e +40221,825760.529239,R6g9rNsEFP,611484,171245.343674,d0oXNxDLHy +931528,603105.324016,p7qxXorWyE,983495,764130.812060,hapULmAr7S +106252,413206.249830,tl60wQ0M2y,180576,241256.220782,VDOkzGJnMi +631510,438170.740362,4fh9eoUZyO,586987,815739.880490,FFRca3pbkg +500075,773902.291360,eSuBqHO55t,650123,691794.560296,S0Nu3BksJ4 +775595,855883.796240,Uhq0U40KD5,282517,407405.040300,19Y1gwNLBn +923427,83119.800540,AjBRDpKKIg,700920,945766.997690,T2WepxpSvj +364324,492924.823997,6miyZqYwsm,740146,663392.840967,MN5yYqb0db +731404,728392.410660,sQuhWHpMeZ,751127,271559.233969,cPi1ji60Sv +464522,659713.078295,kbyXJ1nERE,71951,353229.796496,jybQ6mYibV +754447,106492.898484,Y1BszlTd31,515627,303234.891936,ub2cUgrmIR +949936,391283.558794,QtdjWVIBgE,617743,613677.448151,Xz31cRCqkE +213047,862429.316528,HQkfLYx9ij,254083,767224.394637,MGw8s6jNOH +23057,708925.997548,uK9dfCpncJ,310492,824660.300528,hqPLbYJibe +868779,908040.925983,mDkKhU9eVL,181946,786423.075726,CVmXfw1Bqe +507847,475234.356680,sRbpsaJwgN,538548,710499.866401,o2G2sEoJO9 +460100,444252.088102,QeBDvllBzs,652512,189308.951991,R4iturhbZg +722103,751073.332839,5zP1fV36Ag,100462,723943.851735,2QpH5947jv +239248,457311.345486,YAokOjHUSk,855318,472113.440891,TEBGtcAwqY +860676,310914.429892,06tvjnzQIw,244691,324140.560051,qmEEDwWACi +105979,703729.684576,JEGjgwhinn,201031,244951.875891,HydPvlk0iM +933072,14433.994537,IyD5d2KbAN,589175,393619.203817,KO4zRr7OnO +429512,227343.376558,oYWIHYwlol,147608,474659.210797,e2aOiJqNx5 +551380,210165.344303,fEytGYeLqM,153509,397473.048044,9Bga1fXwMp +222718,440606.093151,GUThRqlbW2,703474,160822.224121,CmqUQj1CDM +798044,589933.480280,WBsIt9amYf,914848,384842.014303,uyoUfXiy05 +476311,790440.997654,HpxMIUSE6u,825929,918681.198475,ZHrinAYE4h +443074,459022.425206,uQQOVzfOGm,716314,253098.383889,1tac5d8zfh +817836,962099.608027,cwnG4EMKa3,392495,986120.294824,E2PrRE8KUm +146359,346199.396353,cyc0zdMU9b,927806,890919.524622,ouEguuGjtI +275364,422600.169878,UkQPOLJMUZ,257955,338116.925331,GnEKccwTxq +419767,355050.703680,ka1y1zq4aW,165739,771786.596844,vm7TWL7VQg +649092,606102.612491,ynzRDQlaQn,326484,350197.141140,kkRAjSCNP9 +694651,421063.200841,lKtPwb44fl,614232,300501.532739,yPWmHVNSiI +63958,144271.577116,ZipWjlJc2Q,523309,363881.621274,H86tvPSnqy +662771,575661.694204,UMjqvcIDOa,925906,263723.347719,6Eda0PjKA3 +108795,581565.722626,HegXnkLSFQ,914366,795193.992068,nvdkvivjcT +740110,482330.100857,FtBj50sy8z,326697,474680.172851,4TyCNU4TQz +635108,618436.745368,ZwD7BrIC01,663904,171106.334219,qAJLGeUuYy +819732,444534.034922,W4mRGYTcDB,178470,29856.106967,l5XLKTg83j +935209,574682.472943,7t4Hg8EeuS,536132,153896.386072,Dd4ccsnWYm +535892,708318.751299,h6ILAkPZyj,274327,993061.969769,Lm8mXuH6Qb +267283,313119.618057,QULWWPoxYX,507821,879662.106833,MJc61gCSK6 +208554,339532.207590,clFJ8Cwz20,851882,193479.548585,7bgPZ9rkBO +464628,691886.599074,nSg7DxXTgx,295353,461271.539237,8QWBCa3MmU +981612,664034.790891,lSy5826AL6,46062,893326.539086,YnFcUJpXRA +713880,827817.380320,5tZfcaNkf8,385372,219182.404057,tw9YNx2GXX +106325,582151.101232,keExPZqp1k,909739,842463.666171,7ku4s8Wsxr +307017,716649.174215,Fo9RTKviOw,396350,755278.859568,tzRwmzUnO9 +521821,450638.173503,N58VGiZ2nm,611881,446816.467989,IPSISkMkEC +843025,40926.887780,h6ViZpq9SV,726890,402230.600225,vaO4izXwCI +819634,293999.757509,fm51vd7Ivh,660488,286098.075508,rhMCSJySpG +785104,110891.292212,hXzJlwliwZ,813635,850259.842723,FMJGDwX3if +362923,242982.681177,tzEFXPGNTH,941696,422454.123498,7uJTkAe6S9 +162746,458731.662050,CIEzE2E1Tb,215304,276312.498581,kHjIy09OPC +42519,929181.854767,zjLdrrIS3h,341681,248817.952546,4sxGillZ77 +564127,41341.819285,zszR8tlio6,686415,592333.159756,LI83Z4A2fz +835462,688525.418875,KY6hlTqT67,23721,555163.953514,qbi6wD086X +314944,270719.180108,Vzc3f1H2YY,244783,277821.062201,PRgXi9HtVI +623124,156979.055239,BXYoXdfJRx,233926,668048.328324,iSbEnkBbxW +327280,958090.970349,INPGc1bmoQ,448782,999990.316715,IbYBT8Erb3 +847149,175738.383249,FIwhVhkQo9,740525,93205.419193,zh8npFdeMN +551595,42907.828069,rd2OzHc8hJ,270369,289860.084958,FYWjs114Cc +311194,696346.263289,qiNNtB5hAq,95366,112271.449483,2tDvqzgGwv +775824,7005.500362,Aej8mXXsI9,344551,721651.958045,jxiMBu1w19 +769114,67351.343989,7eFFUB4t4Y,614528,823513.544703,nu25z7ynbT +47502,799795.478856,9cZQONRgCX,253879,274058.527872,0kqJWOLHU2 +180075,251488.323414,s77KsbHo2Q,979496,101788.731783,oEkelMJgwJ +658913,276859.257758,m3Y9nX1JMh,3868,933398.367138,N9A2tHcl0n +512987,458729.159481,auScZqHXsm,652828,910667.493950,PEj0krP8HT +139643,899503.666795,OgKjjUMnfH,175296,281504.312419,6KT2RHbohV +439270,428400.657358,juWUkrIDVq,276889,110527.002352,anwPyLH8mK +39085,829840.070024,MJNj65xJ2T,577479,196329.771078,rzMGq4Kt5i +591688,313668.067089,t9yYIrJkkA,521512,227519.396333,v0lu0cD4Eb +240864,937797.968331,26E3TIiL5c,812085,874565.612657,4Lsy6zmZZ2 +194396,630638.059814,AUIajOsGqY,218353,800867.286876,nhp41ffBRP +876558,676961.466127,wbDoP3ZHJe,57160,802558.812178,VyKYg1eAT4 +244493,788424.993472,oYj9KuMKiE,256277,865319.732417,MagEREf5Iw +797099,287578.809788,19AT6PWYCH,294761,532694.329508,DNtg46lg0R +837164,288746.326399,e8vbgv7NZl,432462,17268.772330,dmipAWO31I +870762,612429.457472,x1VMauNdhM,900201,390072.594592,AuZ6zCLcrI +955089,572438.142270,OsCzBMh2Sm,179935,185873.032070,S2POYAbkLr +175664,88687.971219,KSkUxeC5aJ,329551,780750.614605,KGkjknAzRn +947817,21960.760027,YgIAGg3DDS,31950,492222.186822,1piPYvYydp +310581,292759.389266,p3ZmlTDGqw,874034,51225.986595,sQIZ0xVxob +705988,600384.370975,CL9xFCUONU,781429,987573.265546,ivOF0l6wkK +51850,368581.377491,OP0DTC43uX,806418,26344.013819,ZkAPwxKLGv +937441,395822.971322,b31WQ1K5BQ,549280,698783.217014,SR4PmsEa4p +787474,549113.989613,AbY3J1suNE,123152,707173.513383,tbjIrWxn1R +191438,70991.036385,TQRXeea6mC,131518,485910.210450,hiIU0qdbXH +173294,744404.188810,6OQFgwV0bI,530530,856421.862195,kcJeENCjMf +51989,51577.773772,AXpRl0qbD4,187818,748560.454086,j8cxwp0FkR +653405,618810.253490,5Bh4CdC9wO,200866,264301.007767,sJWV2n6O8s +11546,780314.529077,6zr3GheiFM,557345,859671.670192,mBuaErACHz +447054,26818.923601,SOXyYMkENa,213392,635504.110729,zCWQEFsH6R +304591,544441.799006,5XabeH9YlT,292769,72698.464296,Qvcik4UVtq +614790,44240.369351,YzdCuH1Mal,452008,481136.074500,XOxT9VGWf7 +525855,389889.357694,f6frBaAKjh,608424,802197.884714,WnhDjlxUcB +300376,270441.814740,U7dhJNZh9d,732515,115100.960248,Oak4VSeN5z +377393,599962.358121,EibOs1poZg,713579,596997.754868,GgmG0gRzR4 +371973,992142.508469,By30zc9xMu,546112,63358.193118,CYvc1H8rTb +359083,147325.462226,wmQlMhN1tt,888691,140210.646736,nqYomWyXa4 +300175,522008.960117,uEN6B8e0Vv,369985,896482.051578,mqsHsq8Sfc +628666,846636.277166,1wrRAWXWZX,649186,324690.762130,vtw8pV0in2 +328913,302940.372584,E9JLQvNtyC,895289,452059.109539,naq0izD0P5 +113244,274138.294876,qXg4VpUFSt,193780,234919.441726,bzvLBr7fNs +543228,4492.552735,VoQ3wjnkAs,981043,427505.368228,wPvNpx1Nnq +367863,106035.625410,PlcAuY96r3,989941,695856.260974,IeY8E1VXDI +294539,951075.511847,x1vwsyz2PB,690656,937647.550179,gMBYrYtI2T +657410,453862.895243,yCcZVrr3hC,967715,207301.849938,kayI3zWKUh +644896,531188.537821,H9JOaoSoPu,174401,57329.502817,ketngZ98F6 +75592,356456.935774,jQCZ0Bdpu8,845953,156208.144797,pvj82HVc4q +177695,448941.804182,r3WAHaBfLD,93926,798260.178985,G1hS0sySaI +184646,818415.927859,YlZ1Kn7ycH,116279,955254.466329,N81vbrtANi +142160,214205.794322,0OirAUbUrr,230048,622233.633501,PEp0gKGNt8 +946710,973615.895399,O1dYWItNMW,541774,541396.861530,lBkELVPQSV +28887,742544.518315,R0RfEBVA84,211691,493931.966516,Hk7x0yXL1G +996088,422933.417776,dbrEFph37S,779451,903512.164902,iZbGBKegIp +137162,181592.301996,ffXk33I4Hu,282586,902237.436912,yW7O1ZjQ3j +987315,497931.232092,0dsPh0tI37,88750,346671.330339,LmTqyEXd7a +5894,400972.372690,lKVfxUZGEV,132375,910007.685635,i0lOjHBOAD +709907,441380.126157,lLwQyIt4am,896179,420997.344643,evICf7eD5L +441110,870075.787313,14GSrEtyo2,156203,106197.199380,bzg2HbzSX7 +853912,913732.864916,5ecMCFLTdt,408277,842745.623888,Xgspub0Yg5 +878272,655819.837395,88SR6NE9Jv,606228,252158.147032,XInDfEEPg1 +472970,530531.419165,y1mJ2C7gRP,198722,501082.302191,lPbrifWIUD +180992,248367.000299,B3AJVKCXHF,871752,355075.888815,FGehhMoZ4D +26514,352811.465684,6OVENn19XP,430433,743160.330806,Bzl5n2wX8h +509451,960426.407030,O1UevmQ2Xn,603811,523087.329490,YdWJFNLWVe +537798,747081.519697,gizqMEB7w7,590809,783435.449160,y7YnBOvkWX +42847,736045.869936,YmriygKOQd,452534,667462.648494,2itIIdKlGc +909110,655158.079882,nXlXbjrMzp,697325,13703.511895,nvNv5cI2Id +592800,396662.827640,Yoh5fZoCDq,50587,402476.679449,76wKOXrMCz +355172,187013.576942,rmRqqWcbPh,528589,486397.841857,16FNnoykot +99701,818203.322901,YQ3ivSmjl0,550507,273329.649582,1Zx0uBQhlM +198580,257710.318041,Zag5VPpZgo,504020,804797.576827,MfpfWCXPNe +247759,425532.447249,59gTwdYBTw,94865,825521.674491,gQEXuvROF2 +202662,206278.327793,9SVQD44OzG,537029,501111.921536,MWvT3UyjdJ +580305,450277.615783,GnhW7cAuK9,700104,200187.261305,e7MujyjOdx +550744,925880.287897,KXf7Ru3Sn6,169202,992489.918403,JU47EukX70 +48434,357018.865771,MruZRYfzut,711935,929246.402705,6dNaGkrQUV +27481,313409.488129,WQ0wN1ftl5,105250,445524.340124,16J2UBuLhe +928132,45436.999646,Uv4ZGenrAV,767492,223789.980280,mGzGHG2Gsy +498845,328882.793221,CrncjLXKE4,417508,98478.004668,j1zPKTpmBj +475264,587438.800851,ZQAsqk6YkO,731918,502503.776500,L0uvAg8b2x +841458,541485.836396,FBuGRnPtuq,805713,32065.643986,e8vd9xOkXD +242477,59625.544193,w8WIIQLcik,317432,897751.572905,EOavZ7G8K1 +188215,700347.751832,lqAqzOIFFr,219380,551845.914379,ajGKum9gUQ +842693,860089.960179,G5faoQO6hb,373617,888320.526293,aBcO8DFI6Y +729171,210379.592092,vbn4S7ons8,789328,802288.038453,lLZnq3IKOs +402606,602905.295265,ZGDFUI8BlZ,589695,655001.461767,2zImPAgjBY +234991,707193.659098,hoNkYejE3j,609184,474333.191671,UfOWZRHsBy +995856,693222.164303,0qvzyleXty,985163,65176.904537,2RsXmHNsu8 +836558,65389.232896,ZWI3cAH9JI,169388,92567.744208,8oRU4TNqn1 +258199,42874.179457,BZdmnALbIX,685451,944805.919312,E2Ejyc9MW0 +857759,868648.909976,4b2t9hOO4K,221055,792054.417769,nYV4jWHOPU +616479,296256.479918,TUPlEXnPvX,41885,121827.594797,FDQC6GvSv2 +692479,297440.452782,Idqg5DmNbS,815756,457136.685207,rsJgl3N7eS +984792,809528.917577,yaLQIVpHBX,230109,305232.764955,C1e7UL5Win +61302,157583.839504,xN8NnvjYVi,916641,385240.508874,GXYfE0aj1Q +294065,219526.015033,OeVxlIXwmx,633786,543682.023854,6Tqr6pPtuR +520399,174577.263705,ZQKDx7ft1D,767081,378005.386127,kZFVsyiN8u +807983,465837.594752,esHqSBegLk,327642,446907.948263,UPCaPFbxqC +143329,15867.464882,5AjgsLPiqQ,57783,247951.835350,It8ySGK6tx +753930,835535.463929,hshV19xnjB,22337,754137.331939,IwtB0RpwGR +553160,566562.219586,YKAJz0ma2U,198510,353740.453575,kUiC9A0lCe +743307,385869.733745,k0msdQ4P6R,187119,535695.230290,vm5cducL2r +358111,473522.778817,RrgVA5zaRb,483918,645576.521207,euekEc7Oyb +595030,824074.655588,T9NOLgjzdO,746472,290329.449610,4pBfwJpTtw +394082,172785.449622,v3mh6i3AIn,997670,830641.199396,FYINlylPz8 +89848,471216.060435,eosRkpl2T5,518805,475678.589524,6j9kzT7sIW +457420,795313.536124,czJ5RjiIqk,109767,32538.926078,Z2SQBZurIC +835713,249858.170761,i53A3bGi8w,352177,942895.236217,g3g6Joa0rH +419679,480801.424886,fLE7od1AZy,517311,417001.353581,6Jhv1T3aXx +312276,205151.804730,Gg0mbXIqxV,973244,144324.607442,pl296T7wpJ +524607,859299.695784,ZrCVGEjuMJ,719567,312819.746018,cBSFVo0G9Y +125144,336223.542302,jAS6jg5lh1,484106,643381.963756,KZ70H5NYb4 +967772,894955.742500,a6OMPgQxgN,953718,418905.561840,gdr8F9Iaxw +232284,302383.407303,4aRdzbZgLS,972219,319754.891258,IhbW4nAwbQ +92384,184173.737009,DCWwIeGnsn,106218,170993.028007,8B738IrCPu +543126,2554.253178,W6hSATPp40,423659,269482.303220,gHnCtv50Wm +278969,240313.201981,av5EW8T50j,884864,814824.026500,ZPRJSJwFcf +896015,661888.740803,0Z7eV8U4hW,319587,495282.982710,EXRaVZxbcb +159348,574588.630481,gJ9sJPpocE,807078,681232.468429,sKvZJSyEie +934463,862076.510193,6aPC5Nq000,462875,260954.783996,p1sEQF6Z1h +761496,80071.514763,tQJfCqmtK0,221418,395701.292686,g2jXP5ePzh +106449,324401.530624,rbL6pioMbL,163216,547889.425730,hYkFvrBz95 +798630,609075.794682,9zVYTKzJWj,849920,366872.569242,5Xo6y6ixU0 +93609,295437.414272,Y3eAuaanM0,739608,671715.612326,qtitC4NjTH +794564,270589.460919,DmPLASU3Kk,848473,831272.485544,KcLMbNBxaU +531640,836102.012133,V6CAO5kNfb,715030,14976.617362,FtEK8Z4Dm6 +100855,740168.117663,RJINGi3BzS,787401,315441.886854,CvFNHwMkj8 +69637,908706.133733,EZ5yCprO5j,685432,788392.179126,ylt5NIasNr +459141,428916.507177,aFETCpobi5,952190,26349.271991,mtTKe1TUlV +315719,412913.063091,G66pOUOh16,549289,825837.409370,MPP7j4BQrT +636367,518364.735043,3PoSdCpQLh,321156,3989.020541,0W4dfhcQTH +279864,953832.171535,twqRPjTygX,690588,29503.514612,E9CVFRo6SO +262910,858098.895839,rKrTV0VdNl,514520,446755.433838,4TDrx5jEC3 +20929,151077.304875,qTD4WVehiz,697058,677546.981217,USIXJWgPcr +586223,584330.559459,6tNoWP71eY,80138,868225.856937,8S4SfUxBxm +905454,752967.736429,gwS6PBj9Ny,589766,109840.013909,cUqKnbnrlQ +459501,450821.387837,IgV2zvjiHQ,499230,337994.996513,zt1b5AI90d +422761,408317.521362,008P4b4wFr,195711,783376.387816,Rm7y4xuxjQ +875510,368375.635685,k1ea4F1Ajj,530636,768113.804157,kuSkoX8sVg +132594,946066.743668,BSQaphPVf8,691292,9517.818797,8wcOUtvOd7 +437515,158456.024747,YDDjZv8yE0,482411,353716.390224,yXomzpHbhn +220576,605429.282506,UY9zkF41u9,291798,235607.859642,4YM5iQ1jcC +808505,44955.488338,inoxbqk1eT,794236,646920.613651,mDWBcMGYwX +423310,165485.512699,NjmPHIHdj1,192104,624208.116411,8CsWZqdFR5 +393637,476704.866033,YYIB92sp5G,585703,39039.432836,FnBoGJmtk7 +628855,208875.502359,OgaOItMvyj,134002,421701.550202,mzj4WsITIA +408855,327217.549765,3e86LJVSWc,452410,820931.084314,FTrvKVFkap +122549,492746.093902,88Dg1ywUJw,234432,143604.014098,2PQBwFT8yz +693038,390488.022600,G3DLCPJ2yx,215803,491977.549993,jfGGYpxAz9 +603181,973817.398179,BM0HmOlBVJ,102893,557549.530576,gJTzCIVM5p +262890,195661.163752,Keafl1oCAd,228060,906701.358067,ADXWkAFNAD +845794,308413.330803,LD7qCqCeFe,440561,9087.878117,nhcXsSPIx0 +78897,99891.193100,zDqzrFGZ5o,961249,566254.213205,MTI09MubQ8 +642198,796301.510460,x6B519VMu1,594903,925541.267571,S1jkiWuvWT +390411,558800.719357,rKBFcnv4DP,77504,996079.976574,5j33RXQPzh +362552,1043.955061,iJGEeaDKmV,711692,95906.120746,3iORVhBeDv +6920,518948.874172,vupw2mro7z,748458,397478.045939,4FBY6Sw9cc +575724,488416.745700,sHDDqrmQJ3,323818,513993.119589,VbD2PGcT15 +734965,258744.363401,RnnuE1fKil,58782,78385.839259,gr4AmOIPij +964612,866981.269130,QhRvgT3xsM,188341,584954.927497,kcMnjXu5WD +556167,884903.324901,LaIlAT4kQe,533723,662367.020933,VNlmyaMJJ6 +410254,884620.152736,wytStXBv5I,535990,931443.116046,KFf8MAo6ec +946241,378279.548508,SI5tQq5OZc,623874,11241.119831,WYOfMTJJT4 +156661,802020.642084,yE9z8qYTSx,700285,713061.842102,TvxGYiT36e +525675,563888.155157,ZbazwFlhEu,405480,606250.087791,ffeq7aXWvV +945545,404013.685982,PmcdWL9Zer,841877,789625.918137,jWFD58zLKR +934196,295971.496960,qhutEv6vmD,505643,722623.542054,TFMNWisYfg +526180,699947.343862,miPRu9x0Cw,380157,185627.993164,0SaLXmXyZi +52480,797302.542365,u5X7rzpBz8,632587,187200.510545,ib0DXeXA8n +764173,364827.756541,l9XxtFpweH,255122,524928.475752,pC5qSja43z +325425,741434.556833,SebhiTY0Xo,360793,63051.977558,mv0pOex74S +773714,602295.827044,iHsKR6I5Ua,418249,614075.395016,gXEAxbT6vr +47458,975422.008441,Idmij0js6E,367367,35312.650920,kWB0MPO7Ah +138572,367565.706119,x7lu6JAY2a,62352,418598.897277,9DdGV5fGVS +924446,636947.527509,rWqG0jRPcU,827211,519917.270650,qZ3T0UZ4kj +390244,497641.123154,3nFEZrXOTD,790988,578208.130324,VqL9JUOr6U +177916,318905.943972,x6ygoVryUL,598396,145551.295651,x7dHjEfEm2 +190549,752092.895221,tYIRHlftoH,377606,588539.292308,4XMuPRIuOj +852128,417161.153879,HGs2kvRDPa,464835,993198.560921,bnvVfIs7xm +952246,446789.135809,OGtVxNzNH3,526549,742286.297726,U2uOM3QShF +331930,565504.413903,FohoeJso7R,65542,674568.180189,3gBOKXDHK0 +307763,786544.996030,hxIwZwMSBP,80896,351018.623475,NugGiwIWYP +466249,969832.598808,jpPhlHqqnG,620620,819299.558600,of237iqSDV +118705,872253.354046,S8dzp3sR8U,25160,911563.578392,Vx4UFWwscb +7717,540863.963412,PV5EhKVU6y,758337,794939.188825,GJDIxYzftS +550463,181429.137598,8QmHGesYyH,538060,172532.847212,PRHW6B6cST +993665,934196.348449,3ZCt3eAu6f,700956,750886.039037,lMEKnlmjzO +382962,865234.549881,tAZistYZz2,221813,479522.937961,RP9WAOc12p +990044,819795.083342,POh9TX3Cxu,897256,945984.234170,HMB5G4Ub20 +188732,56890.932371,HWlb8A90k3,691412,74688.434822,B4drlPSDQX +586247,512752.272704,QID7OETdC2,660953,343697.415794,nkkT92wxV5 +89898,975851.180836,dqbZuCvWWl,12387,310631.730749,vn1wJb57pi +400675,639581.389932,hz7cZrJtUT,402592,460187.002606,LfohBR4X1i +972038,435282.385843,5NNPuU75jK,796008,585780.310383,sHD0QioqbF +689107,313732.965444,IdcIaUOW6V,907379,368390.327570,1CRdIk1cAI +701598,745318.341825,XWIPg9YvVO,66124,177538.141908,DtsUST44mn +142144,511068.445888,wyMnqzdGgc,921996,857567.824675,USnBfZLEXk +721050,520994.254868,eHBUyZVLE9,667703,58823.262737,ppAwsK4Kp7 +990682,304458.578924,qfVPLusdeP,512028,126256.253166,WLhhnBISVO +327495,84370.026159,m153VRbXCU,199586,236034.133084,KZy8oAihwW +961973,297404.251265,nJUKbhfMnh,171985,817.636626,12ilvAENyv +915672,594713.120291,IQPKQeFymf,515053,575016.151205,bmN8Yeefsc +100755,690012.688563,GodKZcweNF,46620,44599.424258,lhBndY3nnZ +61403,194047.638363,JXArvgspXp,55215,378705.917803,FSpgu7jn2r +487659,256952.381774,brJhEvACZT,996916,276158.117682,QIIOsEv9oB +632741,281656.281949,b5pmc98RsD,209534,331025.483225,aJpM5XnMLq +696436,440465.678943,rqQs9RRREl,980027,925738.232011,1oKqz67OVK +240434,123290.019842,1bImdrYSKS,323620,913477.582217,yQoyqUWNew +58073,683616.732570,D1lW0f77H8,287646,261300.367672,xzXaJCkpnV +140198,65970.360220,1v7kZycAcG,205675,165535.813781,dV4hPx3Kwh +261309,430533.625014,fijhzy69lD,656833,379655.949616,zIAocB3FMN +729348,232933.930002,dPc86GSlxF,223782,170033.445762,MCFdW8bbtt +84140,889122.844915,78vM3h39oJ,380779,967529.119955,PYf0v8bFc1 +981641,52807.128704,c8V2aOA8uM,382931,320470.550345,qnb2fnCCea +850871,320675.729724,Yi1i8yHOgZ,132684,343080.229788,UIol7sf1tR +257912,748408.992433,tVrRJ8AuAS,523494,834636.335517,wDKFaY3hnH +296153,550566.116691,HGDNjapOvA,785788,598441.969731,hJos9kZnrm +648275,630951.885743,PlzAyuJJZw,93816,59087.041080,b6SqN3d2Pk +201626,165623.444764,gS9zAB7F2c,195067,347109.651970,OgTGg7NfOl +856544,372122.845276,qNqJ0qxl57,102932,207683.836739,lvjo09YDCv +500402,290021.893157,53wkgBL4eb,357083,2967.386523,XfE34qofzo +476176,239503.969332,uerV9ZvJdC,511789,750744.687043,u9YVuU5m9A +926131,135535.758438,ecox4wkKsI,953991,956869.344300,S1lWsJlCar +364003,778796.308887,9sxgMhfIXF,733069,372664.648841,dwhoqzqCSl +933657,487212.739402,ael5FlDnmL,292353,833049.497409,DrM9zOzWBo +126309,872504.792916,n5H9A1FLz1,206700,68843.841275,nDxugZ2fcD +53640,104779.555578,WLyvVcoIqZ,59388,516981.530331,aux3vXxEi5 +950956,839194.315799,VqZo750Wuh,359579,377616.968322,rCw79DdNUa +382907,617605.930788,o5diNtCeio,663841,335194.810701,IS92CaucdU +477551,828324.400565,iuhRWlKTUK,110720,503417.050078,HLTBuXwi0l +201856,918417.940063,vQuXSQnR7q,37998,467083.723518,T5nP42Ojn2 +757289,357598.593758,8bzWTe8c64,273462,202736.099148,wA5O2cykw2 +852403,201197.743518,x5WWH0m7Mq,392292,434783.143910,wMyKWzR7lj +262897,427821.385689,w5jnIVdgbG,86189,80854.926360,Z33uo5gVCl +434834,64996.198614,VjPLzkL5xW,114145,358845.988235,n7KPz9zOJb +628343,375814.650483,rOWje8BPA3,380404,498849.529445,77Cp7VZcrS +198123,4961.134668,PXuLLxGpox,730283,348704.507620,e5GlHI5BKN +121695,551131.750952,Qp8RkPVSj0,70011,768597.742031,9zk2KFkg1Z +571339,52294.473873,BLrF8aIxnu,642467,619885.600597,J2dDdFUoN0 +333873,309183.490235,UNnrjFtXAB,478210,196248.480005,NPp69ct3Mq +58437,311852.544408,susOMDBBbA,314489,430748.020034,zcI63IFnvC +126724,633710.834992,cYsUtUNNqs,112980,127365.761200,5WmCVQJk3y +957131,592331.544306,oWWtGzfv1t,37955,584929.309472,4S2X7NwEX2 +459985,938675.868629,MiYPyGK31H,780263,969017.594158,AyrWQPb1aM +324562,116056.277261,PtYst2lV4J,483917,339272.698006,uCboF9qeHy +856966,647231.653757,waMmTnAwIM,45976,533924.371445,PRvjzqcymV +841173,881859.730419,TPt9SMrT2U,1752,242519.323225,XTqFkWzmyS +897766,571717.968139,fV6DRYnmAt,422163,947277.170868,sC01of6Cl7 +388316,628769.249133,o74Henr5v5,884330,880090.768788,K61Qf3z0hL +69346,87090.452791,9KxWWqg5d1,796659,36623.097694,ueTnV77Bsr +650186,265697.608771,8gsDrVBCCb,34782,296805.575839,iTcJTpN1MK +350406,40759.844277,uc9QwMNCMC,374838,115674.254307,eQeIOx4oqG +474055,900999.405288,qenkXbi6bB,932098,564917.711174,YBAMmSkqtg +777663,234982.670657,WIo6U3cyVJ,455423,135132.151767,lJ5z8tslTL +525450,134397.498039,oqrQ79slzw,744068,58716.144079,dOnVvmDjBu +860224,440452.568925,CE8SIiuAAd,484738,844991.652918,bLzu3rrj4p +587779,318194.807294,s364wdrLM7,113693,859930.421589,gSLVuToHJg +514933,172285.319441,B93KwQlNwA,136944,665176.960479,OdJKwBqsOS +599910,305015.994206,2j2vUI6dkx,52781,377402.505056,kTMeftS2O6 +648283,802733.489785,8QrB6toPFA,964927,736524.471358,kkmdBXMbjl +808205,717015.071787,bMX4Y13ITg,106667,197262.100503,KDn200g3rR +686540,321944.800404,Yj74X0S9it,992044,164475.235696,LNejGtrcRt +119645,852187.586075,t7N252uSer,362416,741652.515623,VSsKh0WABv +732695,500926.276565,UsxyPSKSBB,448521,787288.110071,PakNehO3ww +75963,646660.171198,4QEQ28blYE,401452,956821.502917,Qw4fx1svWQ +112603,846757.428260,5m4aCRYZMe,60007,699900.417853,sKORjM3NvC +299913,558187.285483,MiOzPai1yY,661886,468309.424255,Gwm6e7GNO8 +645112,292051.212694,lcKHtuxdfy,369645,51631.224649,5fqIwGc8m1 +519201,250557.340492,TIulbGX8vX,333548,850263.129826,YKMHajwKnP +146908,638051.084058,CwH621k9ow,937668,710886.452569,w4ACYPttfq +376509,619925.895145,BMecMLtvY0,909910,605657.060059,aYtnxXx1HY +879208,890751.664096,KQ1Pekj0z1,427118,686050.960167,yZy45LnrXq +12352,473860.013962,dwWta4cSBJ,169685,478716.094133,7Nph9S2pDM +682489,739595.589695,ZmC6oj7qE4,745600,329895.764394,vwZKjOQmzd +664289,7303.748669,oMe4puvdIT,158328,978454.149801,2QMNFVAM7v +13270,369287.793128,oU4O9eEQk7,344092,505476.700130,DZD6wVRnGb +693274,606177.640554,ArvBvrwK5C,792644,348892.310410,q0mgVBf35G +180188,506790.645686,TUbVxvTjjc,846430,942018.143638,Q5krNmGEqf +175333,242404.531809,FtghpevaMK,252313,124663.723117,bkVozz7DUA +386753,509224.903946,saul43yU3a,445799,683931.874105,ho3nzpazsq +13128,593218.648398,0onmeEcuuw,515822,160470.996978,zqyVXjooGA +116515,397369.012685,Hlkt8vXW7Y,964792,33398.944073,OpX4RgkzDx +564499,798171.997541,bExIUUrbDF,925588,401847.635047,4WMdGtbW5u +834757,810729.230906,0ZQ58x3WvB,119855,461637.282717,tOW79P7yAd +786249,767499.343073,sCXls2t3Z3,61128,301410.341053,0K8EIC2VLM +133877,978017.224945,gQbIOlAcrg,654218,270564.622410,A1I72kHm1g +309309,868936.261074,qkrzWxdgGk,303842,121733.709481,knomm6twL4 +622758,817179.696212,2ZpTAYYcmA,497785,523071.530224,uQZtt8aXOv +864545,482779.345577,OYoVuCIrPf,417864,828730.530117,kLfUFaliUq +237883,586699.559692,wQfnPh0tdE,451147,927289.207838,lvSBOSlYpV +640431,544578.267047,jbVjAZUSx2,557586,71012.596310,O5Vjl4iVRC +163277,270780.066882,kOlb7TlBwe,124817,838471.854853,QHodGTqw8m +588668,37063.086391,uCjFvuvcOh,160243,10388.527192,A5e37q2oPg +729055,29595.395031,depLkdmEth,837648,877018.697173,H3t8m1dqWN +989212,788123.105648,BNPwA3gygj,960250,863827.937361,PXyMfKPs2r +618720,850568.833323,FEuZVrd2y4,60882,773426.982344,UPbVIU8Qfa +923732,588139.350036,eMLSpSovwL,400535,614974.345322,K0Kg0SyVgu +66359,638406.240349,C6bRP02RZh,557280,73488.458564,3l3tydl0DQ +935704,409547.726101,z4h7RsiXdX,248926,666828.772402,MH1eeXT0sW +335573,459264.991627,mnleTbSUYO,655576,33104.567311,6U3KFsJaLR +307762,876629.639596,TP2bAzncKZ,445405,538910.459132,6f23pVgke5 +146329,386388.897548,8cLo2EB6Fg,926492,977318.185601,YqXNfe9qdc +987233,72512.745656,z8tZ6PeBMl,210768,743990.845549,H615nPjPXP +115363,165673.478202,ZCnhMGShLS,632046,462939.559121,GAFzERnOHl +374671,245814.649494,Vid77kTNH0,325742,340007.264486,6qxuKflgzM +171738,46704.081914,vgCJnUFS8I,411760,654148.405804,Br520wqRiR +251441,78271.656471,kcbrmLiF3V,980300,957422.539562,HufM5wpaRa +296342,362987.758514,FX4fVZytmD,894713,340425.900073,BLWDRwEf4t +954014,780018.456553,DbqC1v4B2G,934574,774674.876764,Mjo8MdbRO8 +4071,702486.464460,KFMKPh9fFl,620199,474707.735323,qk3N8x6Qdi +183400,483570.814443,Oe4MCOfTMM,475097,24193.667291,LsocAMms57 +789527,624153.297450,tTNQy8iGtA,623256,887586.107170,0845oCvD2t +364854,787857.679281,rhDeOyvthS,450583,715266.374102,5McmAi96AC +805902,873181.547785,R6nGuvretG,813752,366987.263830,C0EgARiEWZ +268038,164296.584035,ROyeH9kFKQ,944435,359105.186352,RjHhFSJ8o0 +449899,727683.578418,xTbGgzotbV,377408,644565.188428,7EFLVP3YtJ +390937,988974.473948,Uzeo3aG0JF,730823,141139.856237,ds66rTlThj +250642,892285.532954,t5sQRTGZmX,112700,894286.308975,BfIQhw4yIi +392406,38469.944784,xQXVBR7e9z,444328,644121.868366,YlGyyDQoRR +33283,887598.638673,lHuCsmNnTU,73160,111481.607662,hKbyR4q1aN +133245,50297.192407,gEqDEY4wYb,805835,127426.177853,rgT9ZVxXi8 +32520,223.186325,wYLBZnf1BZ,481225,399315.018615,u0HDNAs0fL +964245,390014.409488,JtkfimdQlx,733014,461837.397161,G3DvLUqOcX +552603,875864.318397,xUDJHF3BP1,216313,222505.474992,HJh3gKUs9u +130568,325198.078924,uCdZz6kIF1,692838,852175.812045,R8aRQPzvAu +606024,675247.598129,SsAc1QzN7C,956844,821969.479656,IeocLu0aAs +445262,954831.206971,IQeRDaxy7x,354075,269836.242228,hP73xQ2dJP +547839,351322.784086,oQflJ0Ojct,886623,432265.935666,ll0MdkjhwB +240804,465827.676118,8uXvD7IUUD,157419,251312.670645,Xte6ladeCk +578830,346833.476099,ipXWNQU6VN,90314,549380.562951,rF1WeluOdW +499837,526621.391926,LTPIZMxib1,142834,966198.305853,HBLD998Xxy +171487,425273.147468,jkZ8kHMfn9,636649,909131.279369,5vMpFbf5O0 +515727,235012.622974,zgBvZRCByP,161792,58884.343572,KGBuLVQi2K +641690,546649.690639,o0rY3tYTvq,86689,682880.760310,59igh6u5XY +759778,467248.193167,4LODiX0Bpd,280139,516705.590183,mE4o742Bq8 +485115,784728.811249,0vh1LiuL0K,89153,146399.938795,4sYTuEkuT9 +529724,379863.104151,qLPyWXTZs1,469795,445880.580836,mj4SJI87Zo +149816,892541.538548,fwudAbFw5k,304485,278307.873789,w0von8MCe8 +472927,858244.637424,QtN4XQJbD1,733579,982313.899476,l5iHGBKkcG +487438,741244.210117,YNS7g4Nrph,309187,104978.631617,VFljwst0A4 +870304,298320.931658,PNLCj0fOkN,161685,777958.433031,fL5FDGqOOr +350121,246962.111953,HXDLbpgkpj,736820,783615.569195,n4MGF6kLQT +718227,857811.775220,vLRi7Ahh4B,602023,349477.529960,lbDohQieDw +903834,367075.462681,oxNiC9a4bP,682708,352629.668447,zL98cpS3D0 +46754,150671.629114,N4A8mo9Aqn,20900,361737.239080,4H3Ezcaruk +382307,672911.705312,FIVlKKFVzE,13849,730377.582293,RezPtbpjmE +266578,644331.911469,NIcsmTZkeB,153197,430764.300651,OrO6Zmfr76 +863856,979696.393912,HGO2Pii4N4,871214,168863.695251,pDSSCrfMzm +715836,168683.900306,1UCfYrGtzc,725395,366055.904717,buyDl2r175 +221704,258705.011326,FQFrwxRCAg,916698,116530.994170,6WCYQtfICS +947958,714230.960523,0jn9a0Dc8g,754051,708205.587303,1dxFp2INPV +493105,324216.643674,yXGl23iKbK,653902,667037.303989,h9zOfatj78 +474070,645303.867116,EFkgHvz6vS,154021,342255.433069,iuCiDktSiJ +174071,173768.529288,Ayr9Y9s1sD,945524,399341.486326,3kE3s6RhnJ +208772,978023.819425,N7Q6fRnDXX,751469,65144.660765,rGcaqPkJpA +973373,32340.090747,qlSQOwU3B3,976396,140515.676888,orHXnndYIu +754278,266927.284173,nLNEcSxAN1,961225,448010.011582,tjCZT1Dgth +499030,868908.072309,CDNhaaShyj,207886,176745.161764,IkljKj32CE +158961,864591.274295,CVb9jNCqwi,319394,958479.985582,IqR7cIn8lj +6285,548594.581557,v9C0SaYeSz,817564,602667.888809,TqHyuk7pTK +496713,197249.518254,LIao1vG8KI,812108,376182.881487,5KG0KZ8YiA +980653,27736.887637,ZGaBmhjKpM,641994,916804.328791,0EoI0iK1hD +654856,689656.591381,JoQcima3ua,321080,234129.149537,j6galJG6yD +923079,70932.621853,LWZobBvqiW,587217,175808.133528,sa3QtZP1KC +118041,177635.424159,j2F7WZFI4X,368347,167664.007623,gAJoFCHIXW +758302,810892.381444,Ac29ra02dS,680139,32110.065932,jtSGkYtXPV +886912,900054.139849,1WvrTJ7L3b,731649,212036.759517,WNqWCcl6Y0 +710515,838203.379775,6vHJg2Wi96,905360,920914.620743,jfyetTOLm1 +462341,377730.437528,AfxixP6aoa,191516,512209.021962,A9nAFkYAGX +502236,671456.627295,wWgwVSekMo,839588,440996.243757,0jJcTS61JR +666392,959832.021447,Ekm0TgwoVG,756562,332264.796368,NnueV38BKE +276220,244254.626811,IGmBmL1MZ9,152299,611587.112953,b5xNkWkZwL +600919,72608.397862,pmZKjGRH7J,78229,709041.514338,cEWQokK4Rn +460446,817884.681977,Gc8L8a8b5V,111844,244190.758279,gvcMfKEUrp +412662,126699.753544,RoAC4WXu7M,517289,929303.910598,NBIjvcAymC +666992,395402.263127,vKxx5KCrJt,840382,525021.932857,PqkImHr14F +891580,832920.812573,rajDDR64l6,767050,802982.881863,Ryy2cHILyx +281796,18222.748545,HTgrf6E2ZW,327307,448078.172270,4BqiF6N9G3 +38408,137314.699440,Bjbio3G0N0,687388,295442.156109,Ktpjn2LIwK +431349,959748.251100,PT7cIEPd6B,15708,697395.043759,LBAuWnOAVc +192118,450183.997763,QGa5aG3RsF,335876,601946.805544,XNWghzO6M1 +81989,335051.811090,LZ1dGkAOWS,150969,669653.624762,fiZx7bPrce +463633,499243.203651,bywyFJ7xVn,465435,868386.608070,TW8z8IQwB6 +199693,24992.538750,YTMRDWlO53,843569,436197.070860,MXi2VFxG6F +925962,600240.061089,Mrbv75INhH,851794,641639.459415,38TtoUjRF3 +697327,479603.603100,rPQnlR2XwN,677520,465654.907201,dmzHYNkSmQ +36260,883126.867780,T3T0hodD1e,862054,840770.647538,Pkd8acuHAA +84983,483474.671367,aP5R6soXat,556942,604352.362623,HNBRLaGR4x +39179,910084.309448,EtESz0nwum,283949,174220.135477,U0kFHDawnp +823765,417934.759111,oLlqtzCjqh,894460,40211.270186,a6yKOXSmUX +552213,313128.310541,Mtj5aRMJEI,550676,917602.870425,MvaAl4yABh +404613,426898.141662,efNQ1oiRNF,838468,522757.761862,DlYDW6LPmw +466994,368228.951224,yw2fpA5cnT,318652,238601.550848,zZXvE7ugy4 +547431,356690.987077,WAphnObzpm,891983,856851.948981,560OiuVejP +445347,498438.256279,tWr74L1XFq,773465,581972.497107,5WTeAECus7 +711093,438652.014039,YrUSXq2roB,222085,804048.959553,9O84HQYush +466301,741055.096187,ZxK4sR1hji,702329,726048.058552,QnQKPQKbuL +156543,633954.971816,CzW1APRDQs,699281,256126.565526,ytV2Es37m4 +687019,806526.269075,4LZwfi37HD,896431,671091.958253,cA1YMbXsYH +937254,214278.658429,t1AwsgSRHX,392381,30942.788241,fXHs9qLmtg +666828,310899.875887,pDA69RMd1n,587393,959859.445741,IVzDxnNVzf +902037,417456.140939,nZY0yNSGnC,289847,566234.927125,hNRiN5S1pZ +203914,911358.842966,QAxZcmIdzJ,89007,68386.141887,hVAhserVQG +998874,782637.577916,ArL2vfvlQ5,555313,586254.372668,B9ELnXuFRN +832557,719922.909395,png8PmElvY,435245,728779.222763,S2a8PxMCX3 +57202,339412.476840,HMQQagB4fc,352726,986279.786197,gBA98QlAbt +688422,164355.036892,2Sgb2Lx7pv,742399,212089.155697,MRODf8SJmu +304192,31281.046627,ii4Hl7QOwq,375380,770426.822831,hdS60X1WRv +125328,846437.949248,I6DwUc9XFn,63764,759927.226430,yVgLfVXnAA +243206,936650.606071,vMHDjESjRm,513320,655581.268054,ZHk5Dxt3Mo +39042,210056.207432,C0rN1f3prf,769375,787348.222651,ewhXzgANPW +242936,536970.824203,ljccLCiFeE,984270,258256.218729,n0fMIJk19P +830738,191056.673057,jpOQWZTlap,639034,600839.254234,IJg8DKrtxO +339520,689767.848989,hBhPHr3LLo,891860,498427.684442,c2tJwWdpqQ +400345,906367.456506,oqrpV6E6Qy,839921,378261.286019,b4wZEOQSLc +132914,22057.402986,ECQxB8REOk,752550,643469.046928,8WGZTRU98N +481000,911202.100768,66e5trMc1D,838862,643095.339867,UcT2LdF0yY +957895,968222.395253,jQvQQ82nyv,623627,228288.061824,dUmfzoINdT +48015,257147.721151,TgputZZEwW,582942,510774.984179,1lM7REGMaZ +197369,495695.651843,mRyGuKyCYE,567453,870060.289408,LuLZUPPocD +312138,715154.906432,x49sejcxhN,659136,395753.372511,eTjNTHbH4Q +268575,146676.643535,9FSVD5suI8,398132,199404.851902,D3EzwnYxL3 +560854,158302.715591,mi4vwzlE24,352840,681213.235813,1VWaMcXEYf +941147,413658.708869,J9DXPKDKLo,607089,186107.149961,VLsdeylEG7 +11479,389046.007166,kQ1HE0QCbf,880611,47935.649065,LJLFU5dD69 +212989,107551.857556,C6JGWPU63s,328882,512085.267639,k9J6SYri9L +525490,399370.510553,BsCu2MoxpF,950320,553629.588051,NANw8vtsjp +392609,254161.221425,cNCCA1xr1T,760084,549576.458030,F0tjLzAaS2 +88536,402278.054351,1NyBWVv5ZC,998014,284457.442623,Y6PbAKN7WR +51856,406363.464557,SzLLEEvoZj,606758,66969.747323,FTObkoAiDi +591061,752015.212819,sPlOAKSCfJ,459345,512695.713345,KL5GX0gt4V +954309,628147.506363,UPnv3oLNbS,652661,941476.579414,oA5X1zMTel +542060,993106.552997,f3SnEsBxcA,609203,983334.878279,XofDh0THD6 +647431,831666.327567,OOXluyQWei,664025,612893.705909,5yJM7zyLnZ +960884,621949.733007,NorQ1xSpKV,299808,718079.890505,1vu6sFm3kB +365357,332938.617747,MNDbx4uMmY,517281,928425.189239,O4Ow36JAE2 +259535,970300.322141,yqpA2gqO0t,207569,75171.747425,jynseecTYG +3966,510261.473675,FgOskNxcSS,319833,142208.181185,QXJkxSEyID +62971,217833.276170,JXH9lLqDwR,119498,691839.614971,BWd4bn1eFt +38772,850785.371571,Up9iIyIk0H,775413,919394.546255,nizf8Pg8y0 +508285,621868.194144,Y1S8sYPrl5,627979,390906.109150,TLxQR5w58F +908150,84165.105068,LPyNyZmTJ0,571541,173471.135360,ezG7YuEqJl +268024,730098.672150,oYNUJRwnnz,975129,921920.809308,69a5tUh5LS +423081,777147.202544,jBSRGFmiHS,194132,968583.343751,EhnFID0oaA +506683,772366.783277,nNUMJf2JKQ,900850,60369.824397,rQ5dPiucoO +923386,480408.692688,HkZSGLdxtA,49981,314631.313019,3xkZSygAKq +708152,298995.375518,RhNerGGIAD,936051,654139.818382,rERg28gc1c +65391,35770.681065,Sm2Um1Mles,21114,23975.415276,IlQeGyTgQs +98613,253411.975418,NTOqv6TeKL,293600,154597.690755,aa347hjnQ2 +805504,662434.395532,qxweIg1ZTG,603042,360127.843759,jaSA4mn1wc +496317,585095.810880,kMnvidqS3t,453465,635605.702464,PJxhdLSvqp +137051,181429.649752,3WqC7tYrTO,133154,182855.299152,n6wCrSShVQ +534487,212385.113943,biFGG6rEhh,369328,641643.180827,rR4BYQizRy +415243,535375.450601,bET4nsWg47,489615,621303.560643,lh5sQ2CY31 +140305,436428.080600,GvAg8f6K4e,500505,96943.640702,7J41P2zC1M +894783,533741.571698,dwARgAsCqk,599939,607622.113730,izr3x6Rlat +114344,389999.573677,MLKeUw4Lap,676634,234923.865992,iyNZPfx34w +884722,28089.354727,EjF22dokJr,307403,28790.579206,UFMsS5o4Tf +956178,638660.189058,5t2puK2ZYR,954210,184425.317994,X3hZS9VDvp +167590,439259.869274,MAXOw66VHV,568995,439801.970898,H6Vqbiikcx +851030,259641.650294,GyGC6Ft4tr,293675,517235.297942,j1WjawiJS7 +580959,412185.616319,pxbqmolES1,205186,663491.513069,efK9jqm0Xi +777087,865729.931839,13B8GztRJn,49638,832636.384295,b9fAzLEMah +566773,915681.649297,jABwlOfO6O,581913,111326.943674,rGMqc1gIXC +727986,742770.617934,XDqogxdHtN,553709,732682.381908,jINwYy2Kay +962817,428521.970455,e93wSrV3iL,317511,144348.506788,posXAVP6ZO +854689,252443.925418,LNYZeoudkO,378606,710842.697597,DTwbeyggmp +190588,916094.167765,DLeonLMFDN,445979,834702.616932,MJfM5oZ7Zx +740754,151905.101705,10jgKA2OyE,55625,242420.613304,FtwBX81Evz +45139,209967.092044,xPz7bESSal,35054,716979.142424,PjDRcHOd9D +639753,347264.924011,GvtBDpYCCA,84181,590952.396566,uWnLhx9ZEE \ No newline at end of file diff --git a/scripts/examples/extensions/csv/random_data.csv.meta b/scripts/examples/extensions/csv/random_data.csv.meta new file mode 100644 index 000000000..3a5a9a6ad --- /dev/null +++ b/scripts/examples/extensions/csv/random_data.csv.meta @@ -0,0 +1,30 @@ +{ + "numRows": 10000, + "numCols": 6, + "schema": [ + { + "label": "Name", + "valueType": "f64" + }, + { + "label": "Address", + "valueType": "f64" + }, + { + "label": "Email", + "valueType": "str" + }, + { + "label": "Date", + "valueType": "f64" + }, + { + "label": "JobTitle", + "valueType": "f64" + }, + { + "label": "Salary", + "valueType": "str" + } + ] +} \ No newline at end of file diff --git a/scripts/examples/extensions/csv/random_data.meta b/scripts/examples/extensions/csv/random_data.meta new file mode 100644 index 000000000..3a5a9a6ad --- /dev/null +++ b/scripts/examples/extensions/csv/random_data.meta @@ -0,0 +1,30 @@ +{ + "numRows": 10000, + "numCols": 6, + "schema": [ + { + "label": "Name", + "valueType": "f64" + }, + { + "label": "Address", + "valueType": "f64" + }, + { + "label": "Email", + "valueType": "str" + }, + { + "label": "Date", + "valueType": "f64" + }, + { + "label": "JobTitle", + "valueType": "f64" + }, + { + "label": "Salary", + "valueType": "str" + } + ] +} \ No newline at end of file diff --git a/scripts/examples/extensions/csv/specialCSV.csv b/scripts/examples/extensions/csv/specialCSV.csv new file mode 100644 index 000000000..ccdeb47cc --- /dev/null +++ b/scripts/examples/extensions/csv/specialCSV.csv @@ -0,0 +1,3 @@ +Alice!30!60000.0 +Bob!25!55000.5 +Charlie!35!70000.75 \ No newline at end of file diff --git a/scripts/examples/extensions/csv/specialCSV.csv.meta b/scripts/examples/extensions/csv/specialCSV.csv.meta new file mode 100644 index 000000000..7fcd0f7f5 --- /dev/null +++ b/scripts/examples/extensions/csv/specialCSV.csv.meta @@ -0,0 +1,6 @@ +{ + "numRows": 3, + "numCols": 3, + "valueType": "str", + "numNonZeros": 0 +} diff --git a/scripts/examples/extensions/experiment/matrix/csv_eval.daphne b/scripts/examples/extensions/experiment/matrix/csv_eval.daphne new file mode 100644 index 000000000..5d542a455 --- /dev/null +++ b/scripts/examples/extensions/experiment/matrix/csv_eval.daphne @@ -0,0 +1 @@ +m = readMatrix($filePath); diff --git a/scripts/examples/extensions/experiment/matrix/csv_plugin_eval.daphne b/scripts/examples/extensions/experiment/matrix/csv_plugin_eval.daphne new file mode 100644 index 000000000..e6fb088f8 --- /dev/null +++ b/scripts/examples/extensions/experiment/matrix/csv_plugin_eval.daphne @@ -0,0 +1,2 @@ +opts = {"engine": ["Daphne"]}; +m = readMatrix($filePath,opts); diff --git a/scripts/examples/extensions/experiment/matrix/csv_plugin_small_eval.daphne b/scripts/examples/extensions/experiment/matrix/csv_plugin_small_eval.daphne new file mode 100644 index 000000000..6c9b49738 --- /dev/null +++ b/scripts/examples/extensions/experiment/matrix/csv_plugin_small_eval.daphne @@ -0,0 +1,3 @@ +opts = {"engine": ["Daphne"]}; + +m = readMatrix("experiment/data.csv",opts); \ No newline at end of file diff --git a/scripts/examples/extensions/experiment/matrix/csv_small_eval.daphne b/scripts/examples/extensions/experiment/matrix/csv_small_eval.daphne new file mode 100644 index 000000000..1b8ca811d --- /dev/null +++ b/scripts/examples/extensions/experiment/matrix/csv_small_eval.daphne @@ -0,0 +1,5 @@ +t1=now(); +m = readMatrix("experiment/data.csv"); +t2=now(); + +print(t2-t1); \ No newline at end of file diff --git a/scripts/examples/extensions/experiment/matrix/parquet_multi_thread_eval.daphne b/scripts/examples/extensions/experiment/matrix/parquet_multi_thread_eval.daphne new file mode 100644 index 000000000..6e6f2b87b --- /dev/null +++ b/scripts/examples/extensions/experiment/matrix/parquet_multi_thread_eval.daphne @@ -0,0 +1,2 @@ +opts = {"engine": ["Daphne"],"threads": ["16"]}; +m = readMatrix($filePath, opts); \ No newline at end of file diff --git a/scripts/examples/extensions/experiment/matrix/parquet_plugin_small_eval.daphne b/scripts/examples/extensions/experiment/matrix/parquet_plugin_small_eval.daphne new file mode 100644 index 000000000..4e2f2380e --- /dev/null +++ b/scripts/examples/extensions/experiment/matrix/parquet_plugin_small_eval.daphne @@ -0,0 +1,3 @@ +opts = {"engine": ["Daphne"]}; + +m = readMatrix("experiment/ReadParquet1.parquet", opts); \ No newline at end of file diff --git a/scripts/examples/extensions/experiment/matrix/parquet_single_thread_eval.daphne b/scripts/examples/extensions/experiment/matrix/parquet_single_thread_eval.daphne new file mode 100644 index 000000000..b2a4d6d91 --- /dev/null +++ b/scripts/examples/extensions/experiment/matrix/parquet_single_thread_eval.daphne @@ -0,0 +1,3 @@ +opts = {"engine": ["Daphne"], "threads": ["1"]}; + +m = readMatrix($filePath, opts); \ No newline at end of file diff --git a/scripts/examples/extensions/experiment/matrix/parquet_small_eval.daphne b/scripts/examples/extensions/experiment/matrix/parquet_small_eval.daphne new file mode 100644 index 000000000..12daabf1d --- /dev/null +++ b/scripts/examples/extensions/experiment/matrix/parquet_small_eval.daphne @@ -0,0 +1 @@ +m = readMatrix("experiment/ReadParquet1.parquet"); \ No newline at end of file diff --git a/scripts/examples/extensions/parquetReader/Makefile b/scripts/examples/extensions/parquetReader/Makefile new file mode 100644 index 000000000..3d49d8db9 --- /dev/null +++ b/scripts/examples/extensions/parquetReader/Makefile @@ -0,0 +1,37 @@ +# Paths +DAPHNE_ROOT := /home/yazan/daphneFork/daphne +TP_INC_DIR := $(DAPHNE_ROOT)/thirdparty/installed/include +TP_LIB_DIR := $(DAPHNE_ROOT)/thirdparty/installed/lib +DS_LIB_DIR := $(DAPHNE_ROOT)/build/src/runtime/local/datastructures + +# Compiler & flags +CXX := g++ +CXXFLAGS := -std=c++17 -O3 -mavx2 -fPIC \ + -I$(DAPHNE_ROOT)/src \ + -I$(TP_INC_DIR) \ + -I$(DAPHNE_ROOT)/src/runtime/local/io \ + -DSPDLOG_FMT_EXTERNAL + +# Linker & libraries +LDFLAGS := -shared -Wl,-rpath=$(TP_LIB_DIR) +LDLIBS := \ + -L$(DS_LIB_DIR) -lDataStructures \ + -L$(TP_LIB_DIR) -larrow -lparquet -lMLIRIR -lMLIRSupport -lLLVMOption -lLLVMSupport -lLLVMDemangle -lLLVMCore -lspdlog -lfmt + +# Source files +SRC := parquetPlugIn.cpp +OBJ := $(SRC:.cpp=.o) +LIB_NAME := libparquetPlugIn.so + +.PHONY: all clean + +all: $(LIB_NAME) + +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +$(LIB_NAME): $(OBJ) + $(CXX) $(LDFLAGS) $^ -o $@ $(LDLIBS) + +clean: + rm -f $(OBJ) $(LIB_NAME) diff --git a/scripts/examples/extensions/parquetReader/libparquetPlugIn.so b/scripts/examples/extensions/parquetReader/libparquetPlugIn.so new file mode 100755 index 000000000..70473efc3 Binary files /dev/null and b/scripts/examples/extensions/parquetReader/libparquetPlugIn.so differ diff --git a/scripts/examples/extensions/parquetReader/parquet.json b/scripts/examples/extensions/parquetReader/parquet.json new file mode 100644 index 000000000..33c833db8 --- /dev/null +++ b/scripts/examples/extensions/parquetReader/parquet.json @@ -0,0 +1,27 @@ +[ + { + "extension": ".parquet", + "readerFuncName": "parquet_read", + "writerFuncName": "parquet_write", + "libPath": "libparquetPlugIn.so", + "type": "DenseMatrix", + "engine": "Daphne", + "priority": 100, + "options": { + "threads": "16", + "large_strings": "true", + "compression": "snappy" + } + }, + { + "extension": ".parquet", + "readerFuncName": "parquet_read_frame", + "writerFuncName": "parquet_write_frame", + "libPath": "libparquetPlugIn.so", + "type": "Frame", + "engine": "Daphne", + "options": { + "threads": "16" + } + } +] diff --git a/scripts/examples/extensions/parquetReader/parquetPlugIn.cpp b/scripts/examples/extensions/parquetReader/parquetPlugIn.cpp new file mode 100644 index 000000000..1eef0c01b --- /dev/null +++ b/scripts/examples/extensions/parquetReader/parquetPlugIn.cpp @@ -0,0 +1,1466 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// Cast an Arrow Array to target type if needed (returns original if already matching). +static std::shared_ptr cast_array_if_needed( + const std::shared_ptr& arr, + const std::shared_ptr& target_type, + arrow::MemoryPool* pool) +{ + if (arr->type()->Equals(target_type)) { + return arr; + } + arrow::compute::CastOptions copts; + copts.to_type = target_type; + copts.allow_int_overflow = true; + copts.allow_time_truncate = true; + auto res = arrow::compute::Cast(arr, copts); + if (!res.ok()) { + throw std::runtime_error("Arrow cast failed: " + res.status().ToString()); + } + return res.ValueOrDie().make_array(); +} + +// Return Parquet leaf column names in canonical (left-to-right) order as dot paths, e.g. "a.b.c". +static std::vector parquet_leaf_names(const parquet::FileMetaData* meta) { + std::vector names; + auto sch = meta->schema(); // parquet::schema::SchemaDescriptor + const int leaves = sch->num_columns(); + names.reserve(leaves); + for (int i = 0; i < leaves; ++i) { + names.emplace_back(sch->Column(i)->path()->ToDotString()); + } + return names; +} + +// Materialize a value from a dictionary's data array at 'code' as std::string. +static std::string materialize_dict_value(const std::shared_ptr& dict, int64_t code) { + using T = arrow::Type; + switch (dict->type_id()) { + case T::STRING: { + auto d = std::static_pointer_cast(dict); + return (code >= 0 && code < d->length() && d->IsValid(code)) ? d->GetString(code) : std::string{}; + } + case T::LARGE_STRING: { + auto d = std::static_pointer_cast(dict); + return (code >= 0 && code < d->length() && d->IsValid(code)) ? d->GetString(code) : std::string{}; + } + case T::BINARY: { + auto d = std::static_pointer_cast(dict); + if (!(code >= 0 && code < d->length()) || !d->IsValid(code)) return {}; + auto v = d->GetView(code); + return std::string(v.data(), v.size()); + } + case T::LARGE_BINARY: { + auto d = std::static_pointer_cast(dict); + if (!(code >= 0 && code < d->length()) || !d->IsValid(code)) return {}; + auto v = d->GetView(code); + return std::string(v.data(), v.size()); + } + default: { + auto sres = dict->GetScalar(code); + if (sres.ok() && sres.ValueOrDie()) return sres.ValueOrDie()->ToString(); + return {}; + } + } +} + +// Extract a single row i from arbitrary Arrow array as std::string (handles DICTIONARY safely). +static std::string get_string_at_any(const std::shared_ptr& arr, int64_t i, arrow::MemoryPool* pool) { + using T = arrow::Type; + if (!arr->IsValid(i)) return {}; // empty for nulls + + switch (arr->type_id()) { + case T::STRING: { + auto a = std::static_pointer_cast(arr); + return a->GetString(i); + } + case T::LARGE_STRING: { + auto a = std::static_pointer_cast(arr); + return a->GetString(i); + } + case T::BINARY: { + auto a = std::static_pointer_cast(arr); + auto v = a->GetView(i); + return std::string(v.data(), v.size()); + } + case T::LARGE_BINARY: { + auto a = std::static_pointer_cast(arr); + auto v = a->GetView(i); + return std::string(v.data(), v.size()); + } + case T::DICTIONARY: { + auto dict_arr = std::static_pointer_cast(arr); + + // Cast indices to int32 (supports int8/16/32/64 signed/unsigned) + arrow::compute::CastOptions copts; + copts.to_type = arrow::int32(); + copts.allow_int_overflow = true; + + auto casted_idx_res = arrow::compute::Cast(dict_arr->indices(), copts); + if (!casted_idx_res.ok()) { + // fallback: stringify index scalar if casting fails + auto s = dict_arr->indices()->GetScalar(i); + return (s.ok() && s.ValueOrDie()) ? s.ValueOrDie()->ToString() : std::string{}; + } + auto idx32 = std::static_pointer_cast(casted_idx_res.ValueOrDie().make_array()); + if (!idx32->IsValid(i)) return {}; + int32_t code = idx32->Value(i); + return materialize_dict_value(dict_arr->dictionary(), code); + } + default: { + // Numeric/bool/timestamp/nested: fallback to Scalar::ToString() + auto sres = arr->GetScalar(i); + return (sres.ok() && sres.ValueOrDie()) ? sres.ValueOrDie()->ToString() : std::string{}; + } + } +} + +extern "C" { + +void parquet_read( + Structure *&res, + const FileMetaData &fmd, + const char *filename, + IOOptions &opts, + DaphneContext *ctx +) { + using arrow::io::MemoryMappedFile; + using arrow::io::FileMode; + using parquet::ParquetFileReader; + + // 1) mmap + metadata + auto mmr = MemoryMappedFile::Open(filename, FileMode::READ); + if (!mmr.ok()) + throw std::runtime_error("mmap failed: " + mmr.status().ToString()); + std::shared_ptr infile = *mmr; + + std::unique_ptr pf = ParquetFileReader::Open(infile); + if (!pf) + throw std::runtime_error("ParquetFileReader::Open failed"); + std::shared_ptr meta = pf->metadata(); + + const int numRG = meta->num_row_groups(); + const int cols = meta->num_columns(); // PARQUET LEAF COLUMNS + const int64_t rows = fmd.numRows; + + if (cols != static_cast(fmd.numCols)) { + throw std::runtime_error("column count mismatch: parquet(leaves)=" + std::to_string(cols) + + " expected(meta)=" + std::to_string(fmd.numCols)); + } + + // 2) row-group offsets + std::vector rgOffset(numRG + 1, 0); + for (int rg = 0; rg < numRG; ++rg) + rgOffset[rg + 1] = rgOffset[rg] + meta->RowGroup(rg)->num_rows(); + if (rgOffset[numRG] != rows) + throw std::runtime_error("row count mismatch: parquet=" + + std::to_string(rgOffset[numRG]) + " expected(meta)=" + std::to_string(rows)); + + // Canonical leaf names in Parquet order; used to align RGs with differing visible fields + const auto leafNames = parquet_leaf_names(meta.get()); // size == cols + + // 3) thread count + int threads = 1; + if (auto it = opts.extra.find("threads"); it != opts.extra.end()) + threads = std::max(1, std::stoi(it->second)); + + const bool is_si8 = (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI8); + const bool is_si32 = (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI32); + const bool is_si64 = (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::SI64); + + const bool is_ui8 = (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI8); + const bool is_ui32 = (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI32); + const bool is_ui64 = (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::UI64); + + const bool is_f32 = (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::F32); + const bool is_f64 = (fmd.isSingleValueType && fmd.schema[0] == ValueTypeCode::F64); + + if (is_si8) { + auto *mat = DataObjectFactory::create>(rows, cols, false); + int8_t *data = mat->getValues(); + + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer, rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); + + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + { + auto cc = tbl->CombineChunks(pool); + if (!cc.ok()) throw std::runtime_error(cc.status().ToString()); + tbl = cc.ValueOrDie(); + auto fl = tbl->Flatten(); + if (!fl.ok()) throw std::runtime_error(fl.status().ToString()); + tbl = fl.ValueOrDie(); + } + + const int64_t base = rgOffset[rg]; + const int64_t nRG = tbl->num_rows(); + + std::unordered_map name2idx; + for (int j = 0; j < tbl->num_columns(); ++j) + name2idx.emplace(tbl->field(j)->name(), j); + + for (int c = 0; c < cols; ++c) { + auto it = name2idx.find(leafNames[c]); + if (it == name2idx.end()) { for (int64_t i=0;icolumn(it->second); + if (!chunked) { for (int64_t i=0;inum_chunks(); ++k) { + auto arr0 = chunked->chunk(k); + if (!arr0) continue; + auto arr = std::static_pointer_cast( + cast_array_if_needed(arr0, arrow::int8(), pool) + ); + const int64_t len = arr->length(); + int8_t *dst_col0 = data + (base + logical_row) * cols + c; + if (arr->null_count() == 0) { + const int8_t *src = arr->raw_values(); + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : 0; + } + logical_row += len; + } + if (logical_row != nRG) throw std::runtime_error("RG row mismatch (int8)"); + } + } + } catch (...) { std::lock_guard g(mx); if (!err) err = std::current_exception(); } + }); + } + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + res = mat; + return; + } + + + // ---------- INT32 path ---------- + if (is_si32) { + auto *mat = DataObjectFactory::create>(rows, cols, false); + int32_t *data = mat->getValues(); + + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer; + const int rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); + + // We will read all LEAF columns; later we align by leafNames + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + if (!tbl) throw std::runtime_error("ReadRowGroup returned null Table"); + + // Combine chunks + flatten (structs -> leaves as fields) + { + auto cc = tbl->CombineChunks(pool); + if (!cc.ok()) throw std::runtime_error("CombineChunks failed: " + cc.status().ToString()); + tbl = cc.ValueOrDie(); + + auto fl = tbl->Flatten(); + if (!fl.ok()) throw std::runtime_error("Flatten failed: " + fl.status().ToString()); + tbl = fl.ValueOrDie(); + } + + const int64_t base = rgOffset[rg]; + const int64_t nRG = tbl->num_rows(); + + // Map present field names -> index + std::unordered_map name2idx; + name2idx.reserve(static_cast(tbl->num_columns())); + for (int j = 0; j < tbl->num_columns(); ++j) { + name2idx.emplace(tbl->field(j)->name(), j); + } + + // Iterate canonical Parquet leaves + for (int c = 0; c < cols; ++c) { + auto it = name2idx.find(leafNames[c]); + if (it == name2idx.end()) { + // Missing in this RG: fill zeros + for (int64_t i = 0; i < nRG; ++i) + data[(base + i) * cols + c] = 0; + continue; + } + + auto chunked = tbl->column(it->second); + if (!chunked) { + for (int64_t i = 0; i < nRG; ++i) + data[(base + i) * cols + c] = 0; + continue; + } + + int64_t logical_row = 0; + const int n_chunks = chunked->num_chunks(); + for (int k = 0; k < n_chunks; ++k) { + auto arr = chunked->chunk(k); + if (!arr) continue; + + auto arr32 = std::static_pointer_cast( + cast_array_if_needed(arr, arrow::int32(), pool) + ); + + const int64_t len = arr32->length(); + const int32_t* src = arr32->raw_values(); + int32_t *dst_col0 = data + (base + logical_row) * cols + c; + + if (arr32->null_count() == 0) { + for (int64_t i = 0; i < len; ++i) dst_col0[i * cols] = src[i]; + } else { + for (int64_t i = 0; i < len; ++i) + dst_col0[i * cols] = arr32->IsValid(i) ? src[i] : 0; + } + logical_row += len; + } + if (logical_row != nRG) + throw std::runtime_error("RG row mismatch after chunking (int32)"); + } + } + } catch (...) { + std::lock_guard guard(mx); + if (!err) err = std::current_exception(); + } + }); + } + + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + res = mat; + return; + } + + if (is_si64) { + auto *mat = DataObjectFactory::create>(rows, cols, false); + int64_t *data = mat->getValues(); + + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer, rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); + + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + { + auto cc = tbl->CombineChunks(pool); + if (!cc.ok()) throw std::runtime_error(cc.status().ToString()); + tbl = cc.ValueOrDie(); + auto fl = tbl->Flatten(); + if (!fl.ok()) throw std::runtime_error(fl.status().ToString()); + tbl = fl.ValueOrDie(); + } + + const int64_t base = rgOffset[rg]; + const int64_t nRG = tbl->num_rows(); + + std::unordered_map name2idx; + for (int j = 0; j < tbl->num_columns(); ++j) + name2idx.emplace(tbl->field(j)->name(), j); + + for (int c = 0; c < cols; ++c) { + auto it = name2idx.find(leafNames[c]); + if (it == name2idx.end()) { for (int64_t i=0;icolumn(it->second); + if (!chunked) { for (int64_t i=0;inum_chunks(); ++k) { + auto arr0 = chunked->chunk(k); + if (!arr0) continue; + auto arr = std::static_pointer_cast( + cast_array_if_needed(arr0, arrow::int64(), pool) + ); + const int64_t len = arr->length(); + int64_t *dst_col0 = data + (base + logical_row) * cols + c; + if (arr->null_count() == 0) { + const int64_t *src = arr->raw_values(); + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : 0; + } + logical_row += len; + } + if (logical_row != nRG) throw std::runtime_error("RG row mismatch (int64)"); + } + } + } catch (...) { std::lock_guard g(mx); if (!err) err = std::current_exception(); } + }); + } + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + res = mat; + return; + } + + // ---------- UINT8 ---------- + if (is_ui8) { + auto *mat = DataObjectFactory::create>(rows, cols, false); + uint8_t *data = mat->getValues(); + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer, rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + auto cc = tbl->CombineChunks(pool); if (!cc.ok()) throw std::runtime_error(cc.status().ToString()); tbl = cc.ValueOrDie(); + auto fl = tbl->Flatten(); if (!fl.ok()) throw std::runtime_error(fl.status().ToString()); tbl = fl.ValueOrDie(); + const int64_t base = rgOffset[rg], nRG = tbl->num_rows(); + std::unordered_map name2idx; for (int j=0;jnum_columns();++j) name2idx.emplace(tbl->field(j)->name(), j); + for (int c=0;ccolumn(it->second); if (!chunked) { for (int64_t i=0;inum_chunks();++k) { + auto arr0 = chunked->chunk(k); if (!arr0) continue; + auto arr = std::static_pointer_cast(cast_array_if_needed(arr0, arrow::uint8(), pool)); + const int64_t len = arr->length(); + uint8_t *dst_col0 = data + (base + logical_row) * cols + c; + if (arr->null_count()==0) { const uint8_t *src = arr->raw_values(); for (int64_t i=0;iIsValid(i) ? arr->Value(i) : 0; } + logical_row += len; + } + if (logical_row != nRG) throw std::runtime_error("RG row mismatch (uint8)"); + } + } + } catch (...) { std::lock_guard g(mx); if (!err) err = std::current_exception(); } + }); + } + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + res = mat; + return; + } + + if (is_ui32) { + auto *mat = DataObjectFactory::create>(rows, cols, false); + uint32_t *data = mat->getValues(); + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer, rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + auto cc = tbl->CombineChunks(pool); if (!cc.ok()) throw std::runtime_error(cc.status().ToString()); tbl = cc.ValueOrDie(); + auto fl = tbl->Flatten(); if (!fl.ok()) throw std::runtime_error(fl.status().ToString()); tbl = fl.ValueOrDie(); + const int64_t base = rgOffset[rg], nRG = tbl->num_rows(); + std::unordered_map name2idx; for (int j=0;jnum_columns();++j) name2idx.emplace(tbl->field(j)->name(), j); + for (int c=0;ccolumn(it->second); if (!chunked) { for (int64_t i=0;inum_chunks();++k) { + auto arr0 = chunked->chunk(k); if (!arr0) continue; + auto arr = std::static_pointer_cast(cast_array_if_needed(arr0, arrow::uint32(), pool)); + const int64_t len = arr->length(); + uint32_t *dst_col0 = data + (base + logical_row) * cols + c; + if (arr->null_count()==0) { const uint32_t *src = arr->raw_values(); for (int64_t i=0;iIsValid(i) ? arr->Value(i) : 0; } + logical_row += len; + } + if (logical_row != nRG) throw std::runtime_error("RG row mismatch (uint32)"); + } + } + } catch (...) { std::lock_guard g(mx); if (!err) err = std::current_exception(); } + }); + } + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + res = mat; + return; + } + + // ---------- UINT64 ---------- + if (is_ui64) { + auto *mat = DataObjectFactory::create>(rows, cols, false); + uint64_t *data = mat->getValues(); + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer, rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + auto cc = tbl->CombineChunks(pool); if (!cc.ok()) throw std::runtime_error(cc.status().ToString()); tbl = cc.ValueOrDie(); + auto fl = tbl->Flatten(); if (!fl.ok()) throw std::runtime_error(fl.status().ToString()); tbl = fl.ValueOrDie(); + const int64_t base = rgOffset[rg], nRG = tbl->num_rows(); + std::unordered_map name2idx; for (int j=0;jnum_columns();++j) name2idx.emplace(tbl->field(j)->name(), j); + for (int c=0;ccolumn(it->second); if (!chunked) { for (int64_t i=0;inum_chunks();++k) { + auto arr0 = chunked->chunk(k); if (!arr0) continue; + auto arr = std::static_pointer_cast(cast_array_if_needed(arr0, arrow::uint64(), pool)); + const int64_t len = arr->length(); + uint64_t *dst_col0 = data + (base + logical_row) * cols + c; + if (arr->null_count()==0) { const uint64_t *src = arr->raw_values(); for (int64_t i=0;iIsValid(i) ? arr->Value(i) : 0; } + logical_row += len; + } + if (logical_row != nRG) throw std::runtime_error("RG row mismatch (uint64)"); + } + } + } catch (...) { std::lock_guard g(mx); if (!err) err = std::current_exception(); } + }); + } + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + res = mat; + return; + } + + // ---------- FLOAT (F32) ---------- + if (is_f32) { + auto *mat = DataObjectFactory::create>(rows, cols, false); + float *data = mat->getValues(); + + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer, rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); + + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + { + auto cc = tbl->CombineChunks(pool); + if (!cc.ok()) throw std::runtime_error(cc.status().ToString()); + tbl = cc.ValueOrDie(); + auto fl = tbl->Flatten(); + if (!fl.ok()) throw std::runtime_error(fl.status().ToString()); + tbl = fl.ValueOrDie(); + } + + const int64_t base = rgOffset[rg]; + const int64_t nRG = tbl->num_rows(); + + std::unordered_map name2idx; + for (int j = 0; j < tbl->num_columns(); ++j) + name2idx.emplace(tbl->field(j)->name(), j); + + for (int c = 0; c < cols; ++c) { + auto it = name2idx.find(leafNames[c]); + if (it == name2idx.end()) { for (int64_t i=0;i::quiet_NaN(); continue; } + auto chunked = tbl->column(it->second); + if (!chunked) { for (int64_t i=0;i::quiet_NaN(); continue; } + + int64_t logical_row = 0; + for (int k = 0; k < chunked->num_chunks(); ++k) { + auto arr0 = chunked->chunk(k); + if (!arr0) continue; + auto arr = std::static_pointer_cast( + cast_array_if_needed(arr0, arrow::float32(), pool) + ); + const int64_t len = arr->length(); + float *dst_col0 = data + (base + logical_row) * cols + c; + if (arr->null_count() == 0) { + const float *src = arr->raw_values(); + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : std::numeric_limits::quiet_NaN(); + } + logical_row += len; + } + if (logical_row != nRG) throw std::runtime_error("RG row mismatch (float)"); + } + } + } catch (...) { std::lock_guard g(mx); if (!err) err = std::current_exception(); } + }); + } + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + res = mat; + return; + } + + // ---------- DOUBLE path ---------- + if (is_f64) { + auto *mat = DataObjectFactory::create>(rows, cols, false); + double *data = mat->getValues(); + + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer, rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); + + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + if (!tbl) throw std::runtime_error("ReadRowGroup returned null Table"); + + // Combine chunks + flatten + { + auto cc = tbl->CombineChunks(pool); + if (!cc.ok()) throw std::runtime_error("CombineChunks failed: " + cc.status().ToString()); + tbl = cc.ValueOrDie(); + + auto fl = tbl->Flatten(); + if (!fl.ok()) throw std::runtime_error("Flatten failed: " + fl.status().ToString()); + tbl = fl.ValueOrDie(); + } + + const int64_t base = rgOffset[rg]; + const int64_t nRG = tbl->num_rows(); + + std::unordered_map name2idx; + name2idx.reserve(static_cast(tbl->num_columns())); + for (int j = 0; j < tbl->num_columns(); ++j) { + name2idx.emplace(tbl->field(j)->name(), j); + } + + for (int c = 0; c < cols; ++c) { + auto it = name2idx.find(leafNames[c]); + if (it == name2idx.end()) { + for (int64_t i = 0; i < nRG; ++i) + data[(base + i) * cols + c] = std::nan(""); + continue; + } + + auto chunked = tbl->column(it->second); + if (!chunked) { + for (int64_t i = 0; i < nRG; ++i) + data[(base + i) * cols + c] = std::nan(""); + continue; + } + + int64_t logical_row = 0; + const int n_chunks = chunked->num_chunks(); + for (int k = 0; k < n_chunks; ++k) { + auto arr = chunked->chunk(k); + if (!arr) continue; + + auto arr64 = std::static_pointer_cast( + cast_array_if_needed(arr, arrow::float64(), pool) + ); + + const int64_t len = arr64->length(); + const double* src = arr64->raw_values(); + double *dst_col0 = data + (base + logical_row) * cols + c; + + if (arr64->null_count() == 0) { + for (int64_t i = 0; i < len; ++i) dst_col0[i * cols] = src[i]; + } else { + for (int64_t i = 0; i < len; ++i) + dst_col0[i * cols] = arr64->IsValid(i) ? src[i] : std::nan(""); + } + logical_row += len; + } + if (logical_row != nRG) + throw std::runtime_error("RG row mismatch after chunking (double)"); + } + } + } catch (...) { + std::lock_guard guard(mx); + if (!err) err = std::current_exception(); + } + }); + } + + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + res = mat; + return; + } + + // ---------- STRING (robust) path ---------- + { + auto *mat = DataObjectFactory::create>(rows, cols, false); + std::string *data = mat->getValues(); + + std::mutex mx; std::exception_ptr err; + const int rgPer = (numRG + threads - 1) / threads; + std::vector workers; + + for (int t = 0; t < threads; ++t) { + const int rg0 = t * rgPer, rg1 = std::min(numRG, rg0 + rgPer); + if (rg0 >= rg1) break; + + workers.emplace_back([&, rg0, rg1]() { + try { + arrow::MemoryPool *pool = arrow::default_memory_pool(); + std::unique_ptr rdr; + PARQUET_THROW_NOT_OK(parquet::arrow::OpenFile(infile, pool, &rdr)); + rdr->set_use_threads(false); // external parallelism + + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + + for (int rg = rg0; rg < rg1; ++rg) { + std::shared_ptr tbl; + PARQUET_THROW_NOT_OK(rdr->ReadRowGroup(rg, all_cols, &tbl)); + if (!tbl) throw std::runtime_error("ReadRowGroup returned null Table"); + + // 1) Merge chunks; 2) Flatten structs into leaves + { + auto cc = tbl->CombineChunks(pool); + if (!cc.ok()) throw std::runtime_error("CombineChunks failed: " + cc.status().ToString()); + tbl = cc.ValueOrDie(); + + auto fl = tbl->Flatten(); + if (!fl.ok()) throw std::runtime_error("Flatten failed: " + fl.status().ToString()); + tbl = fl.ValueOrDie(); + } + + const int64_t base = rgOffset[rg]; + const int64_t nRG = tbl->num_rows(); + + // Build name -> index for present fields in this RG (flattened) + std::unordered_map name2idx; + name2idx.reserve(static_cast(tbl->num_columns())); + for (int j = 0; j < tbl->num_columns(); ++j) { + name2idx.emplace(tbl->field(j)->name(), j); + } + + // Iterate canonical Parquet leaf names (len == meta->num_columns()) + for (int c = 0; c < cols; ++c) { + auto it = name2idx.find(leafNames[c]); + if (it == name2idx.end()) { + // Missing column in this RG -> fill empties + for (int64_t i = 0; i < nRG; ++i) { + data[(base + i) * cols + c].clear(); + } + continue; + } + + auto chunked = tbl->column(it->second); + if (!chunked) { + for (int64_t i = 0; i < nRG; ++i) data[(base + i) * cols + c].clear(); + continue; + } + + int64_t logical_row = 0; + const int n_chunks = chunked->num_chunks(); + for (int k = 0; k < n_chunks; ++k) { + auto arr = chunked->chunk(k); + if (!arr) continue; + + const int64_t len = arr->length(); + for (int64_t i = 0; i < len; ++i) { + data[(base + logical_row + i) * cols + c] = get_string_at_any(arr, i, pool); + } + logical_row += len; + } + if (logical_row != nRG) + throw std::runtime_error("RG row mismatch after chunking (string)"); + } + } + } catch (...) { + std::lock_guard g(mx); + if (!err) err = std::current_exception(); + } + }); + } + + for (auto &w : workers) w.join(); + if (err) std::rethrow_exception(err); + + res = mat; + return; + } +} + +void parquet_read_frame( + Frame *&res, + const FileMetaData &fmd, + const char *filename, + IOOptions &opts, + DaphneContext *ctx +) { + using arrow::io::MemoryMappedFile; + using arrow::io::FileMode; + using parquet::ParquetFileReader; + + // 1) mmap + metadata + auto mmr = MemoryMappedFile::Open(filename, FileMode::READ); + if (!mmr.ok()) + throw std::runtime_error("mmap failed: " + mmr.status().ToString()); + auto infile = *mmr; + + std::unique_ptr pf = ParquetFileReader::Open(infile); + if (!pf) + throw std::runtime_error("ParquetFileReader::Open failed"); + auto meta = pf->metadata(); + + int numRG = meta->num_row_groups(); + int cols = meta->num_columns(); + int64_t rows = fmd.numRows; + if (cols != (int)fmd.numCols) + throw std::runtime_error("column count mismatch"); + + // compute row-group row offsets + std::vector rgOffset(numRG+1,0); + for (int rg = 0; rg < numRG; ++rg) + rgOffset[rg+1] = rgOffset[rg] + meta->RowGroup(rg)->num_rows(); + if (rgOffset[numRG] != rows) + throw std::runtime_error("row count mismatch"); + + // 2) labels from fmd + std::vector colLabels(cols); + if ((int)fmd.labels.size() < cols){ + throw std::runtime_error("Not enough labels in FileMetaData"); + } else { + for (int c = 0; c < cols; ++c)colLabels[c] = fmd.labels[c].c_str(); + } + // 3) allocate one rows×1 matrix per column + std::vector columns(cols); + for (int c = 0; c < cols; ++c) { + switch(fmd.schema[c]) { + case ValueTypeCode::SI8: columns[c] = DataObjectFactory::create>(rows,1,true); break; + case ValueTypeCode::SI32: columns[c] = DataObjectFactory::create>(rows,1,true); break; + case ValueTypeCode::SI64: columns[c] = DataObjectFactory::create>(rows,1,true); break; + case ValueTypeCode::UI8: columns[c] = DataObjectFactory::create>(rows,1,true); break; + case ValueTypeCode::UI32: columns[c] = DataObjectFactory::create>(rows,1,true); break; + case ValueTypeCode::UI64: columns[c] = DataObjectFactory::create>(rows,1,true); break; + case ValueTypeCode::F32: columns[c] = DataObjectFactory::create>(rows,1,true); break; + case ValueTypeCode::F64: columns[c] = DataObjectFactory::create>(rows,1,true); break; + default: columns[c] = DataObjectFactory::create>(rows,1,true); + } + } + + // 4) threading + int threads = 1; + if (auto it = opts.extra.find("threads"); it != opts.extra.end()) + threads = std::max(1, std::stoi(it->second)); + + std::mutex mtx; + std::exception_ptr eptr; + int rgPer = (numRG + threads - 1)/threads; + std::vector workers; + workers.reserve(threads); + + // all column indices + std::vector all_cols(cols); + std::iota(all_cols.begin(), all_cols.end(), 0); + + for(int t=0; t=endRG) break; + + workers.emplace_back([&,startRG,endRG](){ + try { + // each thread: fresh FileReader + arrow::MemoryPool* pool = arrow::default_memory_pool(); + std::unique_ptr reader; + PARQUET_THROW_NOT_OK( + parquet::arrow::OpenFile(infile, pool, &reader) + ); + + for(int rg=startRG; rg tbl; + PARQUET_THROW_NOT_OK( + reader->ReadRowGroup(rg, all_cols, &tbl) + ); + int64_t base = rgOffset[rg]; + int64_t nRG = tbl->num_rows(); + + for(int c=0; c( + cast_array_if_needed(tbl->column(c)->chunk(0), arrow::int8(), pool) + ); + auto *dst = static_cast*>(columns[c])->getValues(); + if (arr->null_count() == 0) { + const int8_t *src = arr->raw_values(); + std::memcpy(dst + base, src, nRG * sizeof(int8_t)); + } else { + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : int8_t(0); + } + break; + } + case ValueTypeCode::SI32: { + auto arr = std::static_pointer_cast( + cast_array_if_needed(tbl->column(c)->chunk(0), arrow::int32(), pool) + ); + auto *dst = static_cast*>(columns[c])->getValues(); + if (arr->null_count() == 0) { + const int32_t *src = arr->raw_values(); + std::memcpy(dst + base, src, nRG * sizeof(int32_t)); + } else { + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : int32_t(0); + } + break; + } + case ValueTypeCode::SI64: { + auto arr = std::static_pointer_cast( + cast_array_if_needed(tbl->column(c)->chunk(0), arrow::int64(), pool) + ); + auto *dst = static_cast*>(columns[c])->getValues(); + if (arr->null_count() == 0) { + const int64_t *src = arr->raw_values(); + std::memcpy(dst + base, src, nRG * sizeof(int64_t)); + } else { + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : int64_t(0); + } + break; + } + case ValueTypeCode::UI8: { + auto arr = std::static_pointer_cast( + cast_array_if_needed(tbl->column(c)->chunk(0), arrow::uint8(), pool) + ); + auto *dst = static_cast*>(columns[c])->getValues(); + if (arr->null_count() == 0) { + const uint8_t *src = arr->raw_values(); + std::memcpy(dst + base, src, nRG * sizeof(uint8_t)); + } else { + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : uint8_t(0); + } + break; + } + case ValueTypeCode::UI32: { + auto arr = std::static_pointer_cast( + cast_array_if_needed(tbl->column(c)->chunk(0), arrow::uint32(), pool) + ); + auto *dst = static_cast*>(columns[c])->getValues(); + if (arr->null_count() == 0) { + const uint32_t *src = arr->raw_values(); + std::memcpy(dst + base, src, nRG * sizeof(uint32_t)); + } else { + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : uint32_t(0); + } + break; + } + case ValueTypeCode::UI64: { + auto arr = std::static_pointer_cast( + cast_array_if_needed(tbl->column(c)->chunk(0), arrow::uint64(), pool) + ); + auto *dst = static_cast*>(columns[c])->getValues(); + if (arr->null_count() == 0) { + const uint64_t *src = arr->raw_values(); + std::memcpy(dst + base, src, nRG * sizeof(uint64_t)); + } else { + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : uint64_t(0); + } + break; + } + case ValueTypeCode::F32: { + auto arr = std::static_pointer_cast( + cast_array_if_needed(tbl->column(c)->chunk(0), arrow::float32(), pool) + ); + auto *dst = static_cast*>(columns[c])->getValues(); + if (arr->null_count() == 0) { + const float *src = arr->raw_values(); + std::memcpy(dst + base, src, nRG * sizeof(float)); + } else { + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : std::numeric_limits::quiet_NaN(); + } + break; + } + case ValueTypeCode::F64: { + auto arr = std::static_pointer_cast( + cast_array_if_needed(tbl->column(c)->chunk(0), arrow::float64(), pool) + ); + auto *dst = static_cast*>(columns[c])->getValues(); + if (arr->null_count() == 0) { + const double *src = arr->raw_values(); + std::memcpy(dst + base, src, nRG * sizeof(double)); + } else { + for (int64_t i=0;iIsValid(i) ? arr->Value(i) : std::numeric_limits::quiet_NaN(); + } + break; + } + default: { + // robust string: cast anything to utf8 (handles DICTIONARY/BINARY/etc.) + auto arr = cast_array_if_needed(tbl->column(c)->chunk(0), arrow::utf8(), pool); + auto s = std::static_pointer_cast(arr); + auto *dst = static_cast*>(columns[c])->getValues(); + for (int64_t i=0;iIsValid(i) ? s->GetString(i) : std::string{}; + break; + } + } + } + } + } + catch(...) { + std::lock_guard lock(mtx); + if(!eptr) eptr = std::current_exception(); + } + }); + } + + for(auto &w : workers) w.join(); + if(eptr) std::rethrow_exception(eptr); + + // 5) assemble Frame + createFrame( + res, + columns.data(), + cols, + colLabels.data(), + cols, + ctx + ); +} + +// Helper: map ValueTypeCode to a tag +enum class VTTag { F64, F32, SI64, SI32, SI8, UI64, UI32, UI8, STR }; + +static VTTag tag_from_schema(const FileMetaData &fmd) { + if(!(fmd.isSingleValueType) || fmd.schema.empty()) + throw std::runtime_error("parquet_write: expected single value type schema"); + switch(fmd.schema[0]) { + case ValueTypeCode::F64: return VTTag::F64; + case ValueTypeCode::F32: return VTTag::F32; + case ValueTypeCode::SI64: return VTTag::SI64; + case ValueTypeCode::SI32: return VTTag::SI32; + case ValueTypeCode::SI8: return VTTag::SI8; + case ValueTypeCode::UI64: return VTTag::UI64; + case ValueTypeCode::UI32: return VTTag::UI32; + case ValueTypeCode::UI8: return VTTag::UI8; + case ValueTypeCode::STR: return VTTag::STR; + default: throw std::runtime_error("parquet_write: unsupported VT in schema[0]"); + } +} + +extern "C" void parquet_write( + const void *data, + const FileMetaData &fmd, + const char *filename, + const IOOptions &opts, + DaphneContext * /*ctx*/ +) { + using namespace arrow; + + const int64_t rows = static_cast(fmd.numRows); + const int64_t cols = static_cast(fmd.numCols); + if(rows < 0 || cols <= 0) + throw std::runtime_error("parquet_write: invalid shape"); + + // Chunking to avoid Arrow 2GB-per-array limit + int64_t chunk_rows = 1024 * 1024; // default: 1M rows + if (auto it = opts.extra.find("row_group_size"); it != opts.extra.end()) { + try { chunk_rows = std::max(1, std::stoll(it->second)); } catch(...) {} + } + + // Compression (snappy|gzip|zstd|brotli|lz4|none) + parquet::Compression::type comp = parquet::Compression::SNAPPY; + if (auto it = opts.extra.find("compression"); it != opts.extra.end()) { + std::string s = it->second; std::transform(s.begin(), s.end(), s.begin(), ::tolower); + if(s=="none"||s=="uncompressed") comp = parquet::Compression::UNCOMPRESSED; + else if(s=="gzip"||s=="zlib") comp = parquet::Compression::GZIP; + else if(s=="zstd") comp = parquet::Compression::ZSTD; + else if(s=="brotli") comp = parquet::Compression::BROTLI; + else if(s=="lz4") comp = parquet::Compression::LZ4; + else if(s=="snappy") comp = parquet::Compression::SNAPPY; + } + auto props = parquet::WriterProperties::Builder().compression(comp)->build(); + + // large string option (use 64-bit offsets) + bool use_large_str = false; + if (auto it = opts.extra.find("large_strings"); it != opts.extra.end()) { + std::string s = it->second; std::transform(s.begin(), s.end(), s.begin(), ::tolower); + use_large_str = (s == "1" || s == "true" || s == "yes"); + } + + // Column names + auto col_name = [&](int64_t c)->std::string { + if (c < static_cast(fmd.labels.size()) && !fmd.labels[c].empty()) + return fmd.labels[c]; + return "col_" + std::to_string(c); + }; + + // Build fields + chunked columns + std::vector> fields; + fields.reserve(cols); + std::vector> chunked_cols; + chunked_cols.reserve(cols); + + const auto tag = tag_from_schema(fmd); + + auto add_numeric_column = [&](auto *mat, std::shared_ptr dtype, auto builder_mk, auto getter) { + const auto *vals = mat->getValues(); + const int64_t C = static_cast(mat->getNumCols()); + + for (int64_t c = 0; c < cols; ++c) { + std::vector> chunks; + chunks.reserve((rows + chunk_rows - 1) / chunk_rows); + + for (int64_t r0 = 0; r0 < rows; r0 += chunk_rows) { + int64_t r1 = std::min(r0 + chunk_rows, rows); + auto builder = builder_mk(); // e.g., Int32Builder(...) + PARQUET_THROW_NOT_OK(builder->Reserve(r1 - r0)); + + // Column-major build from row-major buffer + for (int64_t r = r0; r < r1; ++r) { + builder->UnsafeAppend(getter(vals, r, c, C)); + } + + std::shared_ptr arr; + PARQUET_THROW_NOT_OK(builder->Finish(&arr)); + chunks.push_back(std::move(arr)); + } + + fields.push_back(field(col_name(c), dtype)); + chunked_cols.push_back(std::make_shared(std::move(chunks), dtype)); + } + }; + + switch(tag) { + case VTTag::F64: { + auto *mat = static_cast*>(data); + add_numeric_column( + mat, float64(), + [](){ return std::make_unique(default_memory_pool()); }, + [](const double *vals, int64_t r, int64_t c, int64_t C){ return vals[r * C + c]; } + ); + break; + } + case VTTag::F32: { + auto *mat = static_cast*>(data); + add_numeric_column( + mat, float32(), + [](){ return std::make_unique(default_memory_pool()); }, + [](const float *vals, int64_t r, int64_t c, int64_t C){ return vals[r * C + c]; } + ); + break; + } + case VTTag::SI64: { + auto *mat = static_cast*>(data); + add_numeric_column( + mat, int64(), + [](){ return std::make_unique(default_memory_pool()); }, + [](const int64_t *vals, int64_t r, int64_t c, int64_t C){ return vals[r * C + c]; } + ); + break; + } + case VTTag::SI32: { + auto *mat = static_cast*>(data); + add_numeric_column( + mat, int32(), + [](){ return std::make_unique(default_memory_pool()); }, + [](const int32_t *vals, int64_t r, int64_t c, int64_t C){ return vals[r * C + c]; } + ); + break; + } + case VTTag::SI8: { + auto *mat = static_cast*>(data); + add_numeric_column( + mat, int8(), + [](){ return std::make_unique(default_memory_pool()); }, + [](const int8_t *vals, int64_t r, int64_t c, int64_t C){ return vals[r * C + c]; } + ); + break; + } + case VTTag::UI64: { + auto *mat = static_cast*>(data); + add_numeric_column( + mat, uint64(), + [](){ return std::make_unique(default_memory_pool()); }, + [](const uint64_t *vals, int64_t r, int64_t c, int64_t C){ return vals[r * C + c]; } + ); + break; + } + case VTTag::UI32: { + auto *mat = static_cast*>(data); + add_numeric_column( + mat, uint32(), + [](){ return std::make_unique(default_memory_pool()); }, + [](const uint32_t *vals, int64_t r, int64_t c, int64_t C){ return vals[r * C + c]; } + ); + break; + } + case VTTag::UI8: { + auto *mat = static_cast*>(data); + add_numeric_column( + mat, uint8(), + [](){ return std::make_unique(default_memory_pool()); }, + [](const uint8_t *vals, int64_t r, int64_t c, int64_t C){ return vals[r * C + c]; } + ); + break; + } + case VTTag::STR: { + // strings: choose utf8 or large_utf8 + auto *mat = static_cast*>(data); + const std::string *vals = mat->getValues(); + + for (int64_t c = 0; c < cols; ++c) { + std::vector> chunks; + chunks.reserve((rows + chunk_rows - 1) / chunk_rows); + + if (!use_large_str) { + for (int64_t r0 = 0; r0 < rows; r0 += chunk_rows) { + int64_t r1 = std::min(r0 + chunk_rows, rows); + StringBuilder b(default_memory_pool()); + for (int64_t r = r0; r < r1; ++r) + PARQUET_THROW_NOT_OK(b.Append(vals[r * cols + c])); + std::shared_ptr arr; + PARQUET_THROW_NOT_OK(b.Finish(&arr)); + chunks.push_back(std::move(arr)); + } + fields.push_back(field(col_name(c), utf8())); + chunked_cols.push_back(std::make_shared(std::move(chunks), utf8())); + } + else { + for (int64_t r0 = 0; r0 < rows; r0 += chunk_rows) { + int64_t r1 = std::min(r0 + chunk_rows, rows); + LargeStringBuilder b(default_memory_pool()); // 64-bit offsets + for (int64_t r = r0; r < r1; ++r) + PARQUET_THROW_NOT_OK(b.Append(vals[r * cols + c])); + std::shared_ptr arr; + PARQUET_THROW_NOT_OK(b.Finish(&arr)); + chunks.push_back(std::move(arr)); + } + fields.push_back(field(col_name(c), large_utf8())); + chunked_cols.push_back(std::make_shared(std::move(chunks), large_utf8())); + } + } + break; + } + } + + auto sch = schema(fields); + // Build table from chunked columns + std::shared_ptr tbl = arrow::Table::Make(sch, chunked_cols, rows); + auto out_res = arrow::io::FileOutputStream::Open(filename); + if (!out_res.ok()) + throw std::runtime_error("parquet_write: cannot open file: " + out_res.status().ToString()); + std::shared_ptr out = *out_res; + + // Write with Parquet + PARQUET_THROW_NOT_OK(parquet::arrow::WriteTable(*tbl, default_memory_pool(), out, static_cast(chunk_rows), props)); +} + + +void parquet_write_frame( + const void *data, + const FileMetaData &fmd, + const char *filename, + const IOOptions &opts, + DaphneContext * ctx +) { + using arrow::Array; + using arrow::DoubleBuilder; + using arrow::Int32Builder; + using arrow::StringBuilder; + using arrow::default_memory_pool; + using arrow::io::FileOutputStream; + + const auto *frame = static_cast(data); + const int64_t rows = static_cast(fmd.numRows); + const int64_t cols = static_cast(fmd.numCols); + if (rows < 0 || cols <= 0) + throw std::runtime_error("parquet_write_frame: invalid shape"); + + // Options: row group size + compression + int64_t row_group_size = 1024 * 1024; // default 1M rows/rg + if (auto it = opts.extra.find("row_group_size"); it != opts.extra.end()) { + try { row_group_size = std::max(1, std::stoll(it->second)); } catch(...) {} + } + + parquet::Compression::type comp = parquet::Compression::SNAPPY; + if (auto it = opts.extra.find("compression"); it != opts.extra.end()) { + std::string s = it->second; std::transform(s.begin(), s.end(), s.begin(), ::tolower); + if (s == "none" || s == "uncompressed") comp = parquet::Compression::UNCOMPRESSED; + else if (s == "gzip" || s == "zlib") comp = parquet::Compression::GZIP; + else if (s == "zstd") comp = parquet::Compression::ZSTD; + else if (s == "brotli") comp = parquet::Compression::BROTLI; + else if (s == "lz4") comp = parquet::Compression::LZ4; + else if (s == "snappy") comp = parquet::Compression::SNAPPY; + } + auto props = parquet::WriterProperties::Builder().compression(comp)->build(); + + // Build Arrow schema + columns + std::vector> fields; + fields.reserve(cols); + std::vector> arrays; + arrays.reserve(cols); + + auto col_name = [&](int64_t c)->std::string { + if (c < (int64_t)fmd.labels.size() && !fmd.labels[c].empty()) + return fmd.labels[c]; + return "col_" + std::to_string(c); + }; + + for (int64_t c = 0; c < cols; ++c) { + switch (fmd.schema[c]) { + case ValueTypeCode::SI32: { + // Expect column stored as DenseMatrix of shape rows x 1 + const auto *col = frame->getColumn(static_cast(c)); + const int32_t *vals = col->getValues(); + Int32Builder b(default_memory_pool()); + PARQUET_THROW_NOT_OK(b.Reserve(rows)); + for (int64_t r = 0; r < rows; ++r) + b.UnsafeAppend(vals[r]); // contiguous column vector + std::shared_ptr arr; + PARQUET_THROW_NOT_OK(b.Finish(&arr)); + fields.push_back(arrow::field(col_name(c), arrow::int32())); + arrays.push_back(std::move(arr)); + break; + } + case ValueTypeCode::F64: { + const auto *col = frame->getColumn(static_cast(c)); + const double *vals = col->getValues(); + DoubleBuilder b(default_memory_pool()); + PARQUET_THROW_NOT_OK(b.Reserve(rows)); + for (int64_t r = 0; r < rows; ++r) + b.UnsafeAppend(vals[r]); + std::shared_ptr arr; + PARQUET_THROW_NOT_OK(b.Finish(&arr)); + fields.push_back(arrow::field(col_name(c), arrow::float64())); + arrays.push_back(std::move(arr)); + break; + } + default: { + // Treat any other type as string (mirrors your reader) + const auto *col = frame->getColumn(static_cast(c)); + const std::string *vals = col->getValues(); + StringBuilder b(default_memory_pool()); + for (int64_t r = 0; r < rows; ++r) + PARQUET_THROW_NOT_OK(b.Append(vals[r])); + std::shared_ptr arr; + PARQUET_THROW_NOT_OK(b.Finish(&arr)); + fields.push_back(arrow::field(col_name(c), arrow::utf8())); + arrays.push_back(std::move(arr)); + break; + } + } + } + + auto schema = arrow::schema(fields); + auto table = arrow::Table::Make(schema, arrays, rows); + + auto out_res = FileOutputStream::Open(filename); + if (!out_res.ok()) + throw std::runtime_error("parquet_write_frame: cannot open file: " + out_res.status().ToString()); + std::shared_ptr out = *out_res; + + PARQUET_THROW_NOT_OK(parquet::arrow::WriteTable(*table, default_memory_pool(), out, row_group_size, props)); +} + +} // extern "C" \ No newline at end of file diff --git a/scripts/examples/extensions/parquetReader/parquetPlugIn.o b/scripts/examples/extensions/parquetReader/parquetPlugIn.o new file mode 100644 index 000000000..efb7e6545 Binary files /dev/null and b/scripts/examples/extensions/parquetReader/parquetPlugIn.o differ diff --git a/scripts/examples/extensions/parquetReader/random_doubles.parquet.meta b/scripts/examples/extensions/parquetReader/random_doubles.parquet.meta new file mode 100644 index 000000000..778361d76 --- /dev/null +++ b/scripts/examples/extensions/parquetReader/random_doubles.parquet.meta @@ -0,0 +1,59 @@ +{ + "numRows": 3000000, + "numCols": 16, + "valueType": "f64", + "schema": [ + { + "label": "col_1", + "valueType": "f64" + }, + { + "label": "col_2", + "valueType": "f64" + }, + { + "label": "col_3", + "valueType": "f64" + }, + { + "label": "col_4", + "valueType": "f64" + },{ + "label": "col_5", + "valueType": "f64" + },{ + "label": "col_6", + "valueType": "f64" + },{ + "label": "col_7", + "valueType": "f64" + },{ + "label": "col_8", + "valueType": "f64" + },{ + "label": "col_9", + "valueType": "f64" + },{ + "label": "col_10", + "valueType": "f64" + },{ + "label": "col_11", + "valueType": "f64" + },{ + "label": "col_12", + "valueType": "f64" + },{ + "label": "col_13", + "valueType": "f64" + },{ + "label": "col_14", + "valueType": "f64" + },{ + "label": "col_15", + "valueType": "f64" + },{ + "label": "col_16", + "valueType": "f64" + } + ] +} \ No newline at end of file diff --git a/scripts/examples/extensions/parquetReader/random_doubles2.parquet.meta b/scripts/examples/extensions/parquetReader/random_doubles2.parquet.meta new file mode 100644 index 000000000..6cdfd6420 --- /dev/null +++ b/scripts/examples/extensions/parquetReader/random_doubles2.parquet.meta @@ -0,0 +1,5 @@ +{ + "numRows": 3000000, + "numCols": 16, + "valueType": "f64" +} \ No newline at end of file diff --git a/src/api/cli/DaphneUserConfig.h b/src/api/cli/DaphneUserConfig.h index 9ea8cc648..4d5785e48 100644 --- a/src/api/cli/DaphneUserConfig.h +++ b/src/api/cli/DaphneUserConfig.h @@ -20,6 +20,7 @@ #include #include #include +#include "runtime/local/io/FileIORegistry.h" #include #include class DaphneLogger; @@ -134,6 +135,7 @@ struct DaphneUserConfig { DaphneLibResult *result_struct = nullptr; KernelCatalog kernelCatalog; + FileIORegistry registry; /** * @brief Replaces the prefix `"{exedir}/"` in the field `libdir` by the diff --git a/src/api/internal/daphne_internal.cpp b/src/api/internal/daphne_internal.cpp index d0ad1fb10..f7cfc91b3 100644 --- a/src/api/internal/daphne_internal.cpp +++ b/src/api/internal/daphne_internal.cpp @@ -15,6 +15,7 @@ */ #include "runtime/local/datastructures/IAllocationDescriptor.h" +#include "runtime/local/io/FileIORegistry.h" #ifdef USE_MPI #include "runtime/distributed/worker/MPIWorker.h" @@ -26,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -61,6 +63,57 @@ using namespace std; using namespace mlir; using namespace llvm::cl; +#include +#include +#include + +namespace fs = std::filesystem; + +static std::optional readRepoRootMarker() { + try { + fs::path exeDir = fs::canonical("/proc/self/exe").parent_path(); + fs::path marker = exeDir / ".daphne_repo_root"; + if (fs::exists(marker)) { + std::ifstream in(marker); + std::string line; std::getline(in, line); + if (!line.empty() && fs::exists(line)) + return fs::canonical(fs::path(line)); + } + } catch (...) {} + return std::nullopt; +} + +static std::string resolveRepoPathAuto(const std::string &rel) { + fs::path r(rel); + if (r.is_absolute()) + return fs::canonical(r).string(); + + if (auto rr = readRepoRootMarker()) { + fs::path p = *rr / r; + if (fs::exists(p)) return fs::canonical(p).string(); + } + + if (fs::exists(r)) // CWD + return fs::canonical(r).string(); + + try { + fs::path exeDir = fs::canonical("/proc/self/exe").parent_path(); + for (fs::path cur = exeDir; !cur.empty(); cur = cur.parent_path()) { + fs::path p = cur / r; + if (fs::exists(p)) return fs::canonical(p).string(); + if (cur == cur.parent_path()) break; + } + } catch (...) {} + + if (const char *env = std::getenv("DAPHNE_REPO")) { + fs::path p = fs::path(env) / r; + if (fs::exists(p)) return fs::canonical(p).string(); + } + + throw std::runtime_error("Could not resolve repo-relative path: " + rel); +} + + void parseScriptArgs(const llvm::cl::list &scriptArgsCli, unordered_map &scriptArgsFinal) { for (const std::string &pair : scriptArgsCli) { size_t pos = pair.find('='); @@ -281,6 +334,9 @@ int startDAPHNE(int argc, const char **argv, DaphneLibResult *daphneLibRes, int static opt kernelExt("kernel-ext", cat(daphneOptions), desc("Additional kernel extension to register " "(path to a kernel catalog JSON file).")); + static opt FileIOExt("FileIO-ext",cat(daphneOptions), + desc("Load an additional FileIO extention JSON file" + "path to a FileIO extention JSON file")); enum ExplainArgs { columnar, @@ -611,6 +667,44 @@ int startDAPHNE(int argc, const char **argv, DaphneLibResult *daphneLibRes, int DaphneIrExecutor executor(selectMatrixRepr, user_config); mlir::MLIRContext *mctx = executor.getContext(); + // ************************************************************************ + // Populate FileIO extension catalog + // ************************************************************************ + // --- FileIO catalogs (fully automatic) --- + FileIOCatalogParser fileIOParser; + FileIORegistry ®istry = executor.getUserConfig().registry; + + try{ + const std::string builtinsRel = + "scripts/examples/extensions/builtInIO/BuiltIns.json"; + + // resolve and load built-ins + fileIOParser.parseFileIOCatalog(resolveRepoPathAuto(builtinsRel), registry, std::nullopt); + registry.captureBaseline(); + + // resolve and load optional --FileIO-ext + if (!FileIOExt.empty()) { + std::string arg = FileIOExt; + std::optional prio = std::nullopt; + + if (auto pos = arg.rfind(':'); pos != std::string::npos) { + size_t idx = 0; long long v = std::stoll(arg.substr(pos+1), &idx); + if (idx != arg.size() - (pos+1)) + throw std::runtime_error("invalid priority in --FileIO-ext: " + FileIOExt); + prio = static_cast(v); + arg.resize(pos); + } + + const std::string path = resolveRepoPathAuto(arg); + fileIOParser.parseFileIOCatalog(path, registry, prio); + } + } + catch (const std::exception &e) { + std::cerr << "Error parsing FileIO catalog: " << e.what() << "\n"; + return 1; + } + + // ************************************************************************ // Populate kernel extension catalog // ************************************************************************ diff --git a/src/ir/daphneir/DaphneOps.td b/src/ir/daphneir/DaphneOps.td index c2e42894a..7579eb18f 100644 --- a/src/ir/daphneir/DaphneOps.td +++ b/src/ir/daphneir/DaphneOps.td @@ -1717,12 +1717,12 @@ def Daphne_ReadOp : Daphne_Op<"read", [ DeclareOpInterfaceMethods ]> { // TODO We might add arguments for a UDF later. - let arguments = (ins StrScalar:$fileName); + let arguments = (ins StrScalar:$fileName, MatrixOrFrame:$options); let results = (outs MatrixOrFrame:$res); } def Daphne_WriteOp : Daphne_Op<"write"> { - let arguments = (ins MatrixOrFrame:$arg, StrScalar:$fileName); + let arguments = (ins MatrixOrFrame:$arg, StrScalar:$fileName, MatrixOrFrame:$options); let results = (outs); // no results } diff --git a/src/parser/daphnedsl/DaphneDSLBuiltins.cpp b/src/parser/daphnedsl/DaphneDSLBuiltins.cpp index 45e6181e0..20043158f 100644 --- a/src/parser/daphnedsl/DaphneDSLBuiltins.cpp +++ b/src/parser/daphnedsl/DaphneDSLBuiltins.cpp @@ -1142,24 +1142,91 @@ antlrcpp::Any DaphneDSLBuiltins::build(mlir::Location loc, const std::string &fu } if (func == "readMatrix") { - checkNumArgsExact(loc, func, numArgs, 1); + checkNumArgsBetween(loc, func, numArgs, 1, 2); mlir::Type resType = mlir::daphne::MatrixType::get(builder.getContext(), utils.unknownType); - return static_cast(builder.create(loc, resType, /*filename = */ args[0])); + auto *ctx = builder.getContext(); + + if(numArgs == 1) { + auto strTy = mlir::daphne::StringType::get(ctx); + + auto emptyStr = builder.create(loc, strTy, builder.getStringAttr("")); + + auto oneIdx = builder.create(loc, 1); + + auto oneByOneMat = builder.create(loc, mlir::daphne::MatrixType::get(ctx, strTy), emptyStr, oneIdx, oneIdx); + + auto labelStr = builder.create(loc, strTy, builder.getStringAttr("dummy")); + + auto oneByOneFT = mlir::daphne::FrameType::get(ctx, { strTy }, 1, 1, nullptr); + + auto cf = builder.create(loc, oneByOneFT, mlir::ValueRange{ oneByOneMat }, mlir::ValueRange{ labelStr }); + + mlir::Value optsFrame = cf.getResult(); + + return static_cast(builder.create(loc, resType, /*filename = */ args[0], optsFrame)); + } + else { + return static_cast(builder.create(loc, resType, /*filename = */ args[0], args[1])); + } } if (func == "readFrame") { - checkNumArgsExact(loc, func, numArgs, 1); + checkNumArgsBetween(loc, func, numArgs, 1, 2); + auto *ctx = builder.getContext(); mlir::Type resType = mlir::daphne::FrameType::get(builder.getContext(), {utils.unknownType}); - return static_cast(builder.create(loc, resType, /*filename = */ args[0])); + if(numArgs == 1) { + auto strTy = mlir::daphne::StringType::get(ctx); + + auto emptyStr = builder.create(loc, strTy, builder.getStringAttr("")); + + auto oneIdx = builder.create(loc, 1); + + auto oneByOneMat = builder.create(loc, mlir::daphne::MatrixType::get(ctx, strTy), emptyStr, oneIdx, oneIdx); + + auto labelStr = builder.create(loc, strTy, builder.getStringAttr("dummy")); + + auto oneByOneFT = mlir::daphne::FrameType::get(ctx, { strTy }, 1, 1, nullptr); + + auto cf = builder.create(loc, oneByOneFT, mlir::ValueRange{ oneByOneMat }, mlir::ValueRange{ labelStr }); + + mlir::Value optsFrame = cf.getResult(); + + return static_cast(builder.create(loc, resType, args[0], optsFrame)); + } else { + return static_cast(builder.create(loc, resType, args[0], args[1])); + } } if (func == "writeFrame" || func == "writeMatrix" || func == "write") { // Note that the type of arg already indicates if it is a frame or a // matrix. - checkNumArgsExact(loc, func, numArgs, 2); + checkNumArgsBetween(loc, func, numArgs, 2, 3); + auto *ctx = builder.getContext(); mlir::Value arg = args[0]; mlir::Value filename = args[1]; - return builder.create(loc, arg, filename).getOperation(); + if(numArgs == 2) { + auto strTy = mlir::daphne::StringType::get(ctx); + + auto emptyStr = builder.create( loc, strTy, builder.getStringAttr("")); + + auto oneIdx = builder.create(loc, 1); + + auto oneByOneMat = builder.create( loc, mlir::daphne::MatrixType::get(ctx, strTy), emptyStr, oneIdx, oneIdx); + + auto labelStr = builder.create(loc, strTy, builder.getStringAttr("dummy")); + + auto oneByOneFT = mlir::daphne::FrameType::get(ctx, { strTy }, 1, 1, nullptr); + + auto cf = builder.create(loc, oneByOneFT, mlir::ValueRange{ oneByOneMat }, mlir::ValueRange{ labelStr }); + + mlir::Value optsFrame = cf.getResult(); + + return builder.create(loc, arg, filename, optsFrame).getOperation(); + } + else { + return builder.create(loc, arg, filename, args[2]).getOperation(); + } + } if (func == "receiveFromNumpy") { checkNumArgsExact(loc, func, numArgs, 4); diff --git a/src/runtime/distributed/worker/WorkerImpl.cpp b/src/runtime/distributed/worker/WorkerImpl.cpp index 8945f8b8e..4164d4144 100644 --- a/src/runtime/distributed/worker/WorkerImpl.cpp +++ b/src/runtime/distributed/worker/WorkerImpl.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -41,6 +42,8 @@ const std::string WorkerImpl::DISTRIBUTED_FUNCTION_NAME = "dist"; WorkerImpl::WorkerImpl(DaphneUserConfig &_cfg) : cfg(_cfg), tmp_file_counter_(0), localData_() {} +static Frame *emptyFrame = DataObjectFactory::create(0, 0, nullptr, nullptr, false); + template <> WorkerImpl::StoredInfo WorkerImpl::Store(Structure *mat) { auto identifier = "tmp_" + std::to_string(tmp_file_counter_++); localData_[identifier] = mat; @@ -237,11 +240,11 @@ Structure *WorkerImpl::readOrGetMatrix(const std::string &identifier, size_t num if (isSparse) { if (isFloat) { CSRMatrix *m2 = nullptr; - read>(m2, identifier.c_str(), nullptr); + read>(m2, identifier.c_str(),emptyFrame, nullptr); m = m2; } else { CSRMatrix *m2 = nullptr; - read>(m2, identifier.c_str(), nullptr); + read>(m2, identifier.c_str(), emptyFrame, nullptr); m = m2; } } else { diff --git a/src/runtime/local/datastructures/DenseMatrix.h b/src/runtime/local/datastructures/DenseMatrix.h index ec4c9bd05..1d722e289 100644 --- a/src/runtime/local/datastructures/DenseMatrix.h +++ b/src/runtime/local/datastructures/DenseMatrix.h @@ -333,8 +333,11 @@ template class DenseMatrix : public Matrix { for (size_t r = 0; r < numRows; ++r) { for (size_t c = 0; c < numCols; ++c) { - if (*(valuesLhs + c) != *(valuesRhs + c)) + if (*(valuesLhs + c) != *(valuesRhs + c)){ + std::cout << "Mismatch at (" << r << ", " << c << "): " + << *(valuesLhs + c) << " != " << *(valuesRhs + c) << std::endl; return false; + } } valuesLhs += rowSkipLhs; valuesRhs += rowSkipRhs; diff --git a/src/runtime/local/datastructures/Frame.h b/src/runtime/local/datastructures/Frame.h index 0d6dfc3f7..1792e31e0 100644 --- a/src/runtime/local/datastructures/Frame.h +++ b/src/runtime/local/datastructures/Frame.h @@ -491,6 +491,11 @@ class Frame : public Structure { return false; } break; + case ValueTypeCode::STR: + if (!(*(this->getColumn(c)) == *(rhs.getColumn(c)))) { + return false; + } + break; default: throw std::runtime_error("CheckEq::apply: unknown value type code"); } diff --git a/src/runtime/local/datastructures/ValueTypeCode.h b/src/runtime/local/datastructures/ValueTypeCode.h index f1f7e5f64..a3a39796b 100644 --- a/src/runtime/local/datastructures/ValueTypeCode.h +++ b/src/runtime/local/datastructures/ValueTypeCode.h @@ -36,8 +36,9 @@ enum class ValueTypeCode : uint8_t { F32, F64, // floating point (float, double) STR, // std::string - FIXEDSTR16, // fixed-size string (length 16) - INVALID, // only for JSON enum conversion + FIXEDSTR16, + BOOL, // fixed-size string (length 16) + INVALID, // only for JSON enum conversion // TODO Support bool as well, but poses some challenges (e.g. sizeof). // UI1 // boolean (bool) }; diff --git a/src/runtime/local/datastructures/ValueTypeUtils.cpp b/src/runtime/local/datastructures/ValueTypeUtils.cpp index 4c91b976f..f1679e588 100644 --- a/src/runtime/local/datastructures/ValueTypeUtils.cpp +++ b/src/runtime/local/datastructures/ValueTypeUtils.cpp @@ -86,7 +86,7 @@ void ValueTypeUtils::printValue(std::ostream &os, ValueTypeCode type, const void throw std::runtime_error("ValueTypeUtils::printValue: unknown value type code"); } } - +template <> const ValueTypeCode ValueTypeUtils::codeFor = ValueTypeCode::BOOL; template <> const ValueTypeCode ValueTypeUtils::codeFor = ValueTypeCode::SI8; template <> const ValueTypeCode ValueTypeUtils::codeFor = ValueTypeCode::SI32; template <> const ValueTypeCode ValueTypeUtils::codeFor = ValueTypeCode::SI64; diff --git a/src/runtime/local/datastructures/ValueTypeUtils.h b/src/runtime/local/datastructures/ValueTypeUtils.h index d8297cc2e..349e9a2cd 100644 --- a/src/runtime/local/datastructures/ValueTypeUtils.h +++ b/src/runtime/local/datastructures/ValueTypeUtils.h @@ -51,6 +51,7 @@ struct ValueTypeUtils { static const std::string irNameForCode(ValueTypeCode type); }; +template <> const ValueTypeCode ValueTypeUtils::codeFor; template <> const ValueTypeCode ValueTypeUtils::codeFor; template <> const ValueTypeCode ValueTypeUtils::codeFor; template <> const ValueTypeCode ValueTypeUtils::codeFor; diff --git a/src/runtime/local/io/FileIOCatalogParser.h b/src/runtime/local/io/FileIOCatalogParser.h new file mode 100644 index 000000000..43ce919bd --- /dev/null +++ b/src/runtime/local/io/FileIOCatalogParser.h @@ -0,0 +1,74 @@ +#pragma once +#include "runtime/local/io/FileIORegistry.h" +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * @brief Parses a JSON catalog of I/O plugins, discovers its reader/writer functions by name, and registers them as lazy + */ +class FileIOCatalogParser { +public: + FileIOCatalogParser() = default; + + /** + * Parses the given JSON file and registers each plugin's reader & writer. + * @param filePath Path to the catalog JSON + */ + void parseFileIOCatalog(const std::string &filePath, FileIORegistry ®istry, std::optional promptPriority = std::nullopt) const; +}; + +inline void FileIOCatalogParser::parseFileIOCatalog(const std::string &filePath, FileIORegistry ®istry, std::optional promptPriority) const { + namespace fs = std::filesystem; + fs::path dir = fs::path(filePath).parent_path(); + + std::ifstream in(filePath); + if(!in.good()) + throw std::runtime_error("Could not open I/O catalog: " + filePath); + + // Parse JSON array of plugin entries + nlohmann::json jsonData = nlohmann::json::parse(in); + for(const auto &entry : jsonData) { + // Read metadata + const std::string ext = entry.at("extension").get(); + const std::string rdrName = entry.at("readerFuncName").get(); + const std::string wtrName = entry.at("writerFuncName").get(); + const std::string libRel = entry.at("libPath").get(); + const std::string libPath = (dir / libRel).string(); + const std::string engine = entry.value("engine", "default"); + + int jsonPriority = entry.value("priority", 0); + int effPriority = promptPriority.has_value() ? *promptPriority : jsonPriority; + + const std::string typeName = entry.value("type", "Frame"); + + // Map typeName string to actual type_info + IODataType typeHash; + if(typeName == "Frame") { + typeHash = FRAME; + } else if(typeName == "DenseMatrix") { + typeHash = DENSEMATRIX; + } else if(typeName == "CSRMatrix") { + typeHash = CSRMATRIX; + } else { + throw std::runtime_error("Unknown type in I/O catalog: " + typeName); + } + + IOOptions opts; + if(auto it = entry.find("options"); it != entry.end()) { + for(auto jt = it->begin(); jt != it->end(); ++jt) { + // Each key/value in JSON becomes a string→string pair + // e.g. "delimiter":"", "hasHeader":"", etc. + opts.extra[jt.key()] = jt.value().get(); + } + } + + registry.registerLazy(ext, typeHash, libPath, rdrName, wtrName, opts, engine, effPriority); + + } +} diff --git a/src/runtime/local/io/FileIORegistry.h b/src/runtime/local/io/FileIORegistry.h new file mode 100644 index 000000000..43504cc37 --- /dev/null +++ b/src/runtime/local/io/FileIORegistry.h @@ -0,0 +1,429 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct FileMetaData; +class DaphneContext; + +enum IODataType { + FRAME, + DENSEMATRIX, + CSRMATRIX +}; + +// Flexible options passed to readers/writers, stored externally +struct IOOptions { + std::map extra; // plugin-specific flags +}; + +// Lazy spec describing how to load a symbol from a shared lib +struct LazySpec { + std::string libPath; + std::string readerSymbol; // "" if none + std::string writerSymbol; // "" if none + IOOptions opts; +}; + +// Generic reader signature including options +using GenericReader = std::function< + void(void* res, + const FileMetaData &fmd, + const char* filename, + const IOOptions& opts, + DaphneContext* ctx)>; + +// Generic writer signature including options +using GenericWriter = std::function< + void(const void* data, + const FileMetaData &fmd, + const char* filename, + const IOOptions& opts, + DaphneContext* ctx)>; + +class FileIORegistry { +public: + FileIORegistry() = default; + + static FileIORegistry &instance() { + static FileIORegistry inst; + return inst; + } + + // ---------- Registration (engine + priority explicit) ---------- + void registerReader(const std::string& ext, IODataType dt, + const std::string& engine, int priority, + const IOOptions& opts, GenericReader fn) { + std::lock_guard lk(mtx); + Key4 k{ext, engine, (size_t)dt, priority}; + if (readers.count(k) || + (lazySpecs.count(k) && !lazySpecs.at(k).readerSymbol.empty())) + throw std::runtime_error("Duplicate reader for ext=" + ext + + " engine=" + engine + " dt=" + std::to_string(dt) + + " priority=" + std::to_string(priority)); + readers[k] = std::move(fn); + optionsMap[k] = opts; + } + + + void registerWriter(const std::string &ext, IODataType dt, + const std::string &engine, int priority, + const IOOptions &opts, GenericWriter fn) { + std::lock_guard lk(mtx); + Key4 k{ext, engine, (size_t)dt, priority}; + if (writers.count(k) || (lazySpecs.count(k) && !lazySpecs.at(k).writerSymbol.empty())) + throw std::runtime_error("Duplicate writer for ext=" + ext + + " engine=" + engine + " dt=" + std::to_string(dt) + + " priority=" + std::to_string(priority)); + writers[k] = std::move(fn); + optionsMap[k] = opts; + } + + // Back-compat: single impl (engine="default", priority=0) + void registerReader(const std::string &ext, + IODataType dt, + const IOOptions &opts, + GenericReader fn) { + registerReader(ext, dt, "default", 0, opts, std::move(fn)); + } + + void registerWriter(const std::string &ext, + IODataType dt, + const IOOptions &opts, + GenericWriter fn) { + registerWriter(ext, dt, "default", 0, opts, std::move(fn)); + } + + void registerLazy(const std::string& ext, + IODataType dt, + const std::string& libPath, + const std::string& readerSymbol, + const std::string& writerSymbol, + const IOOptions& opts, + const std::string& engine, + int priority) { + std::lock_guard lk(mtx); + Key4 k{ext, engine, (size_t)dt, priority}; + + // Reject if anything already exists for this full key + if (lazySpecs.find(k) != lazySpecs.end() || + readers.find(k) != readers.end() || + writers.find(k) != writers.end()) { + throw std::runtime_error( + "registerLazy: duplicate registration for (ext=" + ext + + ", engine=" + engine + ", dt=" + std::to_string(dt) + + ", prio=" + std::to_string(priority) + ")"); + } + + lazySpecs[k] = LazySpec{libPath, readerSymbol, writerSymbol, opts}; + optionsMap[k] = opts; // defaults visible pre-load + } + + + // ---------- Lookup (engine optional; highest priority wins) ---------- + GenericReader getReader(const std::string &ext, IODataType dt, + const std::string &engine /* may be "" */) { + std::lock_guard lk(mtx); + + const Key4* best = findBestKey(readers, ext, (size_t)dt, engine); + if (!best) best = findBestKey(lazySpecs, ext, (size_t)dt, engine); + if (!best) throw std::out_of_range("No suitable reader found in the registry"); + + return ensureReaderLoaded(*best); + } + + GenericWriter getWriter(const std::string &ext, IODataType dt, + const std::string &engine /* may be "" */) { + std::lock_guard lk(mtx); + + const Key4* best = findBestKey(writers, ext, (size_t)dt, engine); + if (!best) best = findBestKey(lazySpecs, ext, (size_t)dt, engine); + if (!best) throw std::out_of_range("No suitable writer found in the registry"); + + return ensureWriterLoaded(*best); + } + + // Back-compat overloads (default engine selection) + GenericReader getReader(const std::string &ext, IODataType dt) { + return getReader(ext, dt, "" /* default selection */); + } + GenericWriter getWriter(const std::string &ext, IODataType dt) { + return getWriter(ext, dt, "" /* default selection */); + } + + // ---------- Options helpers ---------- + // Returns the IOOptions bound to the selected impl (best by engine/priority) + const IOOptions &getOptions(const std::string &ext, IODataType dt, + const std::string &engine /* may be "" */) { + std::lock_guard lk(mtx); + + const Key4* best = findBestKey(optionsMap, ext, (size_t)dt, engine); + if (!best) throw std::out_of_range("No suitable options found in the registry"); + return optionsMap.at(*best); + } + + // Optional: expose all (debugging) + std::map, IOOptions> getAllOptions() const { + std::lock_guard lk(mtx); + return optionsMap; + } + std::map, GenericReader> getAllReaders() const { + std::lock_guard lk(mtx); + return readers; + } + std::map, GenericWriter> getAllWriters() const { + std::lock_guard lk(mtx); + return writers; + } + + // ---------- Copy/assign & clear ---------- + FileIORegistry(const FileIORegistry& other) { + std::lock_guard lk(other.mtx); + readers = other.readers; + writers = other.writers; + optionsMap = other.optionsMap; + lazySpecs = other.lazySpecs; + libHandles = other.libHandles; // shallow copy of handles is fine (process-global) + } + + FileIORegistry& operator=(const FileIORegistry& other) { + if (this != &other) { + std::unique_lock lk1(mtx, std::defer_lock); + std::unique_lock lk2(other.mtx, std::defer_lock); + std::lock(lk1, lk2); + readers = other.readers; + writers = other.writers; + optionsMap = other.optionsMap; + lazySpecs = other.lazySpecs; + libHandles = other.libHandles; + } + return *this; + } + + void dumpReaders(std::ostream& os = std::cerr) const { + std::lock_guard lk(mtx); + + auto ioTypeName = [](IODataType t) { + switch (t) { + case FRAME: return "Frame"; + case DENSEMATRIX: return "DenseMatrix"; + case CSRMATRIX: return "CSRMatrix"; + } + return "?"; + }; + + os << "=== FileIORegistry: Readers ===\n"; + + // 1) Loaded readers + for (const auto& kv : readers) { + const auto& k = kv.first; + const std::string& ext = std::get<0>(k); + const std::string& engine = std::get<1>(k); + IODataType dt = static_cast(std::get<2>(k)); + int prio = std::get<3>(k); + os << " [loaded] ext='" << ext + << "' dt=" << ioTypeName(dt) + << " engine='" << engine + << "' priority=" << prio + << "\n"; + } + + // 2) Lazy reader facets that aren't loaded yet + for (const auto& kv : lazySpecs) { + const auto& k = kv.first; + const auto& spec = kv.second; + if (spec.readerSymbol.empty()) continue; // writer-only; skip + if (readers.find(k) != readers.end()) continue; // already listed as loaded + + const std::string& ext = std::get<0>(k); + const std::string& engine = std::get<1>(k); + IODataType dt = static_cast(std::get<2>(k)); + int prio = std::get<3>(k); + os << " [lazy ] ext='" << ext + << "' dt=" << ioTypeName(dt) + << " engine='" << engine + << "' priority=" << prio + << " symbol='" << spec.readerSymbol << "'" + << " lib='" << spec.libPath << "'" + << "\n"; + } + os << std::flush; + } + + void dumpWriters(std::ostream& os = std::cerr) const { + std::lock_guard lk(mtx); + + auto ioTypeName = [](IODataType t) { + switch (t) { + case FRAME: return "Frame"; + case DENSEMATRIX: return "DenseMatrix"; + case CSRMATRIX: return "CSRMatrix"; + } + return "?"; + }; + + os << "=== FileIORegistry: Writers ===\n"; + + // 1) Loaded writers + for (const auto& kv : writers) { + const auto& k = kv.first; + const std::string& ext = std::get<0>(k); + const std::string& engine = std::get<1>(k); + IODataType dt = static_cast(std::get<2>(k)); + int prio = std::get<3>(k); + os << " [loaded] ext='" << ext + << "' dt=" << ioTypeName(dt) + << " engine='" << engine + << "' priority=" << prio + << "\n"; + } + + // 2) Lazy writer facets that aren't loaded yet + for (const auto& kv : lazySpecs) { + const auto& k = kv.first; + const auto& spec = kv.second; + if (spec.writerSymbol.empty()) continue; // reader-only; skip + if (writers.find(k) != writers.end()) continue; // already listed as loaded + + const std::string& ext = std::get<0>(k); + const std::string& engine = std::get<1>(k); + IODataType dt = static_cast(std::get<2>(k)); + int prio = std::get<3>(k); + os << " [lazy ] ext='" << ext + << "' dt=" << ioTypeName(dt) + << " engine='" << engine + << "' priority=" << prio + << " symbol='" << spec.writerSymbol << "'" + << " lib='" << spec.libPath << "'" + << "\n"; + } + os << std::flush; + } + + + // Call this once right after you load BuiltIns.json + void captureBaseline() { + std::lock_guard lk(mtx); + baseline_readers = readers; + baseline_writers = writers; + baseline_options = optionsMap; + baseline_lazy = lazySpecs; + baselineCaptured = true; + } + + // Reset registry back to the captured baseline (keeps built-ins, drops recent) + void resetToBaseline() { + std::lock_guard lk(mtx); + if (!baselineCaptured) { readers.clear(); writers.clear(); optionsMap.clear(); lazySpecs.clear(); return; } + readers = baseline_readers; + writers = baseline_writers; + optionsMap = baseline_options; + lazySpecs = baseline_lazy; + } + + void clear(){ + readers.clear(); + writers.clear(); + optionsMap.clear(); + lazySpecs.clear(); + } + + +private: + using Key4 = std::tuple; + + template + static const Key4* findBestKey(const MapT &m, const std::string &ext, size_t dt, const std::string &engine /* "" = any */) { + const Key4* best = nullptr; + for (auto &kv : m) { + const auto &k = kv.first; + const auto &kExt = std::get<0>(k); + const auto &kEngine = std::get<1>(k); + const auto kDt = std::get<2>(k); + const auto kPrio = std::get<3>(k); + if (kExt == ext && kDt == dt && (engine.empty() || kEngine == engine)) { + if (!best || std::get<3>(*best) < kPrio) best = &k; + } + } + return best; + } + + GenericReader ensureReaderLoaded(const Key4 &k) { + if (auto it = readers.find(k); it != readers.end()) + return it->second; + + // lazy resolve via spec + auto itL = lazySpecs.find(k); + if (itL == lazySpecs.end()) + throw std::out_of_range("No reader (and no lazy spec) for requested key"); + + const auto &spec = itL->second; + if (spec.readerSymbol.empty()) + throw std::runtime_error("No reader symbol specified"); + + void* &h = libHandles[spec.libPath]; + if (!h) { + h = dlopen(spec.libPath.c_str(), RTLD_LAZY | RTLD_LOCAL); + if (!h) throw std::runtime_error("dlopen failed for " + spec.libPath + ": " + std::string(dlerror())); + } + using ReaderFn = void(*)(void*, const FileMetaData&, const char*, const IOOptions&, DaphneContext*); + void* sym = dlsym(h, spec.readerSymbol.c_str()); + if (!sym) + throw std::runtime_error("dlsym failed for " + spec.readerSymbol + " in " + spec.libPath + ": " + std::string(dlerror())); + + readers[k] = GenericReader(reinterpret_cast(sym)); + return readers[k]; + } + + GenericWriter ensureWriterLoaded(const Key4 &k) { + if (auto it = writers.find(k); it != writers.end()) + return it->second; + + auto itL = lazySpecs.find(k); + if (itL == lazySpecs.end()) + throw std::out_of_range("No writer (and no lazy spec) for requested key"); + + const auto &spec = itL->second; + if (spec.writerSymbol.empty()) + throw std::runtime_error("No writer symbol specified"); + + void* &h = libHandles[spec.libPath]; + if (!h) { + h = dlopen(spec.libPath.c_str(), RTLD_LAZY | RTLD_LOCAL); + if (!h) throw std::runtime_error("dlopen failed for " + spec.libPath + ": " + std::string(dlerror())); + } + using WriterFn = void(*)(const void*, const FileMetaData&, const char*, const IOOptions&, DaphneContext*); + void* sym = dlsym(h, spec.writerSymbol.c_str()); + if (!sym) + throw std::runtime_error("dlsym failed for " + spec.writerSymbol + " in " + spec.libPath + ": " + std::string(dlerror())); + + writers[k] = GenericWriter(reinterpret_cast(sym)); + return writers[k]; + } + +private: + mutable std::mutex mtx; + + // Core maps now keyed by (ext, engine, dt, priority) + std::map readers; + std::map writers; + std::map optionsMap; + std::map lazySpecs; + + std::map baseline_readers; + std::map baseline_writers; + std::map baseline_options; + std::map baseline_lazy; + bool baselineCaptured = false; + + std::map libHandles; +}; diff --git a/src/runtime/local/kernels/Read.h b/src/runtime/local/kernels/Read.h index f8eb25ad5..f9395395c 100644 --- a/src/runtime/local/kernels/Read.h +++ b/src/runtime/local/kernels/Read.h @@ -17,6 +17,9 @@ #ifndef SRC_RUNTIME_LOCAL_KERNELS_READ_H #define SRC_RUNTIME_LOCAL_KERNELS_READ_H +#include "runtime/local/io/FileIORegistry.h" +#include +#include #include #include #include @@ -33,141 +36,222 @@ #include #include +#include + +static Frame *dummyFrame = DataObjectFactory::create(0, 0, nullptr, nullptr, false); + + +// **************************************************************************** +// Helper: Merge a Frame* of column-label → single-row-value into IOOptions +// **************************************************************************** +static IOOptions mergeOptionsFromFrame(const std::string &ext, IODataType dt, const std::string &engine, Frame *optsFrame, DCTX(ctx)){ + auto& reg = ctx ? ctx->config.registry : FileIORegistry::instance(); + + // Ask the registry for defaults for this (ext, dt, engine). + // If engine == "", registry should pick highest-priority impl. + const IOOptions &defaults = reg.getOptions(ext, dt, engine); + + IOOptions merged = defaults; + + if(optsFrame != nullptr && optsFrame->getLabels()[0] != "dummy") { + const size_t nRows = optsFrame->getNumRows(); + const size_t nCols = optsFrame->getNumCols(); + if(nRows == 0) return merged; + + const std::string* labels = optsFrame->getLabels(); + + for(size_t colIdx = 0; colIdx < nCols; ++colIdx) { + const std::string &key = labels[colIdx]; + + // Ignore non-plugin selection knobs if user sent them in the frame. + if(key == "engine" || key == "priority") + continue; + + std::string value; + if(auto* strCol = dynamic_cast*>(optsFrame->getColumn(colIdx))) { + value = strCol->get(0, 0); + } + else if(auto* boolCol = dynamic_cast*>(optsFrame->getColumn(colIdx))) { + value = boolCol->get(0, 0) ? "true" : "false"; + } + else if(auto* intCol = dynamic_cast*>(optsFrame->getColumn(colIdx))) { + value = std::to_string(intCol->get(0, 0)); + } + else if(auto* floatCol = dynamic_cast*>(optsFrame->getColumn(colIdx))) { + value = std::to_string(floatCol->get(0, 0)); + } + else { + throw std::runtime_error("Unsupported column type for option: " + key); + } + + // Only override known plugin options + auto itKnown = merged.extra.find(key); + if(itKnown == merged.extra.end()) { + // silently ignore unknown keys instead of throwing if you prefer: + // continue; + throw std::runtime_error("Unknown option '" + key + "'"); + } + + merged.extra[key] = value; + } + } + + return merged; +} + + +// Extract "engine" (and ignore "priority") from the options Frame if present. +// Returns "" if not provided (so registry picks highest-priority default). +static std::string extractEngineFromFrame(Frame *optsFrame) { + + if(!optsFrame) return ""; + if(optsFrame->getNumRows() == 0) return ""; + const auto *labels = optsFrame->getLabels(); + const size_t nCols = optsFrame->getNumCols(); + + for(size_t c = 0; c < nCols; ++c) { + if(labels[c] == "engine") { + if(auto* strCol = dynamic_cast*>(optsFrame->getColumn(c))) + return strCol->get(0, 0); + // allow non-string columns too (we’ll stringify) + if(auto* boolCol = dynamic_cast*>(optsFrame->getColumn(c))) + return boolCol->get(0, 0) ? "true" : "false"; + if(auto* intCol = dynamic_cast*>(optsFrame->getColumn(c))) + return std::to_string(intCol->get(0, 0)); + if(auto* floatCol = dynamic_cast*>(optsFrame->getColumn(c))) + return std::to_string(floatCol->get(0, 0)); + } + } + return ""; +} + // **************************************************************************** // Struct for partial template specialization // **************************************************************************** template struct Read { - static void apply(DTRes *&res, const char *filename, DCTX(ctx)) = delete; + static void apply(DTRes *&res, const char *filename, Frame* opts, DCTX(ctx)) = delete; }; // **************************************************************************** // Convenience function // **************************************************************************** -template void read(DTRes *&res, const char *filename, DCTX(ctx)) { - Read::apply(res, filename, ctx); +template void read(DTRes *&res, const char *filename,Frame *opts, DCTX(ctx)) { + Read::apply(res, filename, opts, ctx); } -// **************************************************************************** -// (Partial) template specializations for different data/value types -// **************************************************************************** - // ---------------------------------------------------------------------------- // DenseMatrix // ---------------------------------------------------------------------------- template struct Read> { - static void apply(DenseMatrix *&res, const char *filename, DCTX(ctx)) { + // ------------------------------------------------------------------------ + // Overload: DenseMatrix with an options‐Frame + // ------------------------------------------------------------------------ + static void apply(DenseMatrix *&res, const char *filename, Frame *optsFrame, DCTX(ctx)){ FileMetaData fmd = MetaDataParser::readMetaData(filename); std::string ext(std::filesystem::path(filename).extension()); + IODataType typeHash = DENSEMATRIX; + try { + auto& registry = ctx ? ctx->config.registry : FileIORegistry::instance(); - if (ext == ".csv") { - if (res == nullptr) - res = DataObjectFactory::create>(fmd.numRows, fmd.numCols, false); - readCsv(res, filename, fmd.numRows, fmd.numCols, ','); - } else if (ext == ".mtx") { - if constexpr (std::is_same::value) - throw std::runtime_error("reading string-valued MatrixMarket files is not supported (yet)"); - else - readMM(res, filename); - } else if (ext == ".parquet") { - if constexpr (std::is_same::value) - throw std::runtime_error("reading string-valued Parquet files is not supported (yet)"); - else { - if (res == nullptr) - res = DataObjectFactory::create>(fmd.numRows, fmd.numCols, false); - readParquet(res, filename, fmd.numRows, fmd.numCols); - } - } else if (ext == ".dbdf") { - if constexpr (std::is_same::value) - throw std::runtime_error("reading string-valued DAPHNE binary format files is not supported (yet)"); - else - readDaphne(res, filename); + // Get the engine (may be "") + std::string engine = extractEngineFromFrame(optsFrame); + + // Select reader with engine hint + auto reader = registry.getReader(ext, typeHash, engine); + + // Merge user overrides using defaults for that engine + IOOptions mergedOpts = mergeOptionsFromFrame(ext, typeHash, engine, optsFrame, ctx); + + reader(&res, fmd, filename, mergedOpts, ctx); + return; + } + catch (const std::out_of_range &e) { + std::cerr << "no suitable reader found in the registry"; } #if USE_HDFS - else if (ext == ".hdfs") { + if (ext == ".hdfs") { if constexpr (std::is_same::value) throw std::runtime_error("reading string-valued HDFS files is not supported (yet)"); else { if (res == nullptr) res = DataObjectFactory::create>(fmd.numRows, fmd.numCols, false); readHDFS(res, filename, ctx); + return; } } #endif - else - throw std::runtime_error("file extension not supported: '" + ext + "'"); + throw std::runtime_error("no suitable reader found"); } -}; +}; // end Read> // ---------------------------------------------------------------------------- // CSRMatrix // ---------------------------------------------------------------------------- template struct Read> { - static void apply(CSRMatrix *&res, const char *filename, DCTX(ctx)) { + // ------------------------------------------------------------------------ + // Overload: CSRMatrix with an options‐Frame + // ------------------------------------------------------------------------ + static void apply(CSRMatrix *&res, const char *filename, Frame *optsFrame, DCTX(ctx)){ FileMetaData fmd = MetaDataParser::readMetaData(filename); std::string ext(std::filesystem::path(filename).extension()); + IODataType typeHash = CSRMATRIX; + try { + auto& registry = ctx ? ctx->config.registry : FileIORegistry::instance(); + + // Get the engine (may be "") + std::string engine = extractEngineFromFrame(optsFrame); + + // Select reader with engine hint + auto reader = registry.getReader(ext, typeHash, engine); + + // Merge user overrides using defaults for that engine + IOOptions mergedOpts = mergeOptionsFromFrame(ext, typeHash, engine, optsFrame, ctx); - if (ext == ".csv") { - if (fmd.numNonZeros == -1) - throw std::runtime_error("currently reading of sparse matrices requires a number of " - "non zeros to be defined"); - - if (res == nullptr) - res = DataObjectFactory::create>(fmd.numRows, fmd.numCols, fmd.numNonZeros, false); - - // FIXME: ensure file is sorted, or set `sorted` argument correctly - readCsv(res, filename, fmd.numRows, fmd.numCols, ',', fmd.numNonZeros, true); - } else if (ext == ".mtx") { - readMM(res, filename); - } else if (ext == ".parquet") { - if (res == nullptr) - res = DataObjectFactory::create>(fmd.numRows, fmd.numCols, fmd.numNonZeros, false); - readParquet(res, filename, fmd.numRows, fmd.numCols, fmd.numNonZeros, false); - } else if (ext == ".dbdf") - readDaphne(res, filename); - else - throw std::runtime_error("file extension not supported: '" + ext + "'"); + reader(&res, fmd, filename, mergedOpts, ctx); + return; + } + catch (const std::out_of_range &) { + throw std::runtime_error("no suitable reader found in the registry"); + } } -}; +}; // end Read> // ---------------------------------------------------------------------------- // Frame // ---------------------------------------------------------------------------- template <> struct Read { - static void apply(Frame *&res, const char *filename, DCTX(ctx)) { + // ------------------------------------------------------------------------ + // Overload: Frame with an options‐Frame + // ------------------------------------------------------------------------ + static void apply(Frame *&res, const char *filename, Frame *optsFrame, DCTX(ctx)){ FileMetaData fmd = MetaDataParser::readMetaData(filename); std::string ext(std::filesystem::path(filename).extension()); + IODataType typeHash = FRAME; + std::string engine; + try { + auto& registry = ctx ? ctx->config.registry : FileIORegistry::instance(); + + // Get the engine (may be "") + engine = extractEngineFromFrame(optsFrame); + + // Select reader with engine hint + auto reader = registry.getReader(ext, typeHash, engine); - if (ext == ".csv") { - ValueTypeCode *schema; - if (fmd.isSingleValueType) { - schema = new ValueTypeCode[fmd.numCols]; - for (size_t i = 0; i < fmd.numCols; i++) - schema[i] = fmd.schema[0]; - } else - schema = fmd.schema.data(); - - std::string *labels; - if (fmd.labels.empty()) - labels = nullptr; - else - labels = fmd.labels.data(); - - if (res == nullptr) - res = DataObjectFactory::create(fmd.numRows, fmd.numCols, schema, labels, false); - - readCsv(res, filename, fmd.numRows, fmd.numCols, ',', schema); - - if (fmd.isSingleValueType) - delete[] schema; - } else - throw std::runtime_error("file extension not supported: '" + ext + "'"); + // Merge user overrides using defaults for that engine + IOOptions mergedOpts = mergeOptionsFromFrame(ext, typeHash, engine, optsFrame, ctx); + + reader(&res, fmd, filename, mergedOpts, ctx); + return; + } catch (const std::out_of_range &) { + throw std::runtime_error("No suitable reader found in the registry"); + } } -}; +}; // end Read -#endif // SRC_RUNTIME_LOCAL_KERNELS_READ_H +#endif // SRC_RUNTIME_LOCAL_KERNELS_READ_H \ No newline at end of file diff --git a/src/runtime/local/kernels/Write.h b/src/runtime/local/kernels/Write.h index 6fd82e844..207aafa15 100644 --- a/src/runtime/local/kernels/Write.h +++ b/src/runtime/local/kernels/Write.h @@ -17,6 +17,7 @@ #ifndef SRC_RUNTIME_LOCAL_KERNELS_WRITE_H #define SRC_RUNTIME_LOCAL_KERNELS_WRITE_H +#include "runtime/local/io/FileIORegistry.h" #include #include #include @@ -26,6 +27,8 @@ #include #include #include +#include + #if USE_HDFS #include #endif @@ -38,15 +41,15 @@ // **************************************************************************** template struct Write { - static void apply(const DTArg *arg, const char *filename, DCTX(ctx)) = delete; + static void apply(const DTArg *arg, const char *filename, Frame* opts, DCTX(ctx)) = delete; }; // **************************************************************************** // Convenience function // **************************************************************************** -template void write(const DTArg *arg, const char *filename, DCTX(ctx)) { - Write::apply(arg, filename, ctx); +template void write(const DTArg *arg, const char *filename, Frame *opts, DCTX(ctx)) { + Write::apply(arg, filename, opts, ctx); } // **************************************************************************** @@ -58,21 +61,29 @@ template void write(const DTArg *arg, const char *filename, DCTX(c // ---------------------------------------------------------------------------- template struct Write> { - static void apply(const DenseMatrix *arg, const char *filename, DCTX(ctx)) { + static void apply(const DenseMatrix *arg, const char *filename, Frame *optsFrame, DCTX(ctx)) { std::string ext(std::filesystem::path(filename).extension()); - - if (ext == ".csv") { - File *file = openFileForWrite(filename); - FileMetaData metaData(arg->getNumRows(), arg->getNumCols(), true, ValueTypeUtils::codeFor); - MetaDataParser::writeMetaData(filename, metaData); - writeCsv(arg, file); - closeFile(file); - } else if (ext == ".dbdf") { - FileMetaData metaData(arg->getNumRows(), arg->getNumCols(), true, ValueTypeUtils::codeFor); - MetaDataParser::writeMetaData(filename, metaData); - writeDaphne(arg, filename); + try { + auto& registry = ctx ? ctx->config.registry : FileIORegistry::instance(); + IODataType typeHash = DENSEMATRIX; + std::string engine = extractEngineFromFrame(optsFrame); + auto writer = registry.getWriter(ext, typeHash, engine); + FileMetaData fmd(arg->getNumRows(), arg->getNumCols(), true, ValueTypeUtils::codeFor); + + MetaDataParser::writeMetaData(filename, fmd); + + // Merge user overrides from optsFrame + IOOptions mergedOpts = mergeOptionsFromFrame(ext, typeHash, engine, optsFrame, ctx); + + writer(arg, fmd, filename, mergedOpts, ctx); + //std::cout << "using registry\n"; + return; + } + catch (const std::out_of_range &e) { + std::cerr << "no suitable writer found in the registry"; + } #if USE_HDFS - } else if (ext == ".hdfs") { + if (ext == ".hdfs") { HDFSMetaData hdfs = {true, filename}; FileMetaData metaData(arg->getNumRows(), arg->getNumCols(), true, ValueTypeUtils::codeFor, -1, hdfs); // Get file extension before .hdfs (e.g. file.csv.hdfs) @@ -83,9 +94,10 @@ template struct Write> { // call WriteHDFS writeHDFS(arg, filename, ctx); + return; + } #endif - } else - throw std::runtime_error("file extension not supported: '" + ext + "'"); + throw std::runtime_error("no suitable writer found in the registry"); } }; @@ -94,23 +106,32 @@ template struct Write> { // ---------------------------------------------------------------------------- template <> struct Write { - static void apply(const Frame *arg, const char *filename, DCTX(ctx)) { + static void apply(const Frame *arg, const char *filename, Frame *optsFrame, DCTX(ctx)) { std::string ext(std::filesystem::path(filename).extension()); - if (ext == ".csv") { - File *file = openFileForWrite(filename); + try { + auto& registry = ctx ? ctx->config.registry : FileIORegistry::instance(); + IODataType typeHash = FRAME; + std::string engine = extractEngineFromFrame(optsFrame); + auto writer = registry.getWriter(ext, typeHash, engine); std::vector vtcs; std::vector labels; for (size_t i = 0; i < arg->getNumCols(); i++) { vtcs.push_back(arg->getSchema()[i]); labels.push_back(arg->getLabels()[i]); } - FileMetaData metaData(arg->getNumRows(), arg->getNumCols(), false, vtcs, labels); - MetaDataParser::writeMetaData(filename, metaData); - writeCsv(arg, file); - closeFile(file); - } else - throw std::runtime_error("file extension not supported: '" + ext + "'"); + FileMetaData fmd(arg->getNumRows(), arg->getNumCols(), false, vtcs, labels); + MetaDataParser::writeMetaData(filename, fmd); + + // Merge user overrides from optsFrame + IOOptions mergedOpts = mergeOptionsFromFrame(ext, typeHash, engine, optsFrame, ctx); + + writer(arg, fmd, filename, mergedOpts, ctx); + return; + } + catch (const std::out_of_range &e) { + throw std::runtime_error("No suitable writer found in the registry"); + } } }; @@ -119,17 +140,27 @@ template <> struct Write { // ---------------------------------------------------------------------------- template struct Write> { - static void apply(const Matrix *arg, const char *filename, DCTX(ctx)) { + static void apply(const Matrix *arg, const char *filename, Frame *optsFrame, DCTX(ctx)) { std::string ext(std::filesystem::path(filename).extension()); - - if (ext == ".csv") { - File *file = openFileForWrite(filename); - FileMetaData metaData(arg->getNumRows(), arg->getNumCols(), true, ValueTypeUtils::codeFor); - MetaDataParser::writeMetaData(filename, metaData); - writeCsv(arg, file); - closeFile(file); - } else - throw std::runtime_error("file extension not supported: '" + ext + "'"); + try { + auto& registry = ctx ? ctx->config.registry : FileIORegistry::instance(); + IODataType typeHash = CSRMATRIX; + std::string engine = extractEngineFromFrame(optsFrame); + auto writer = registry.getWriter(ext, typeHash, engine); + FileMetaData fmd(arg->getNumRows(), arg->getNumCols(), true, ValueTypeUtils::codeFor); + + MetaDataParser::writeMetaData(filename, fmd); + + // Merge user overrides from optsFrame + IOOptions mergedOpts = mergeOptionsFromFrame(ext, typeHash, engine, optsFrame, ctx); + + writer(arg, fmd, filename, mergedOpts, ctx); + return; + } + catch (const std::out_of_range &e) { + throw std::runtime_error("no suitable writer found in the registry"); + } + } }; diff --git a/src/runtime/local/kernels/kernels.json b/src/runtime/local/kernels/kernels.json index a4f62dbc1..41e3752f9 100644 --- a/src/runtime/local/kernels/kernels.json +++ b/src/runtime/local/kernels/kernels.json @@ -4054,6 +4054,10 @@ { "type": "const char *", "name": "filename" + }, + { + "type": "Frame *", + "name": "opts" } ] }, @@ -4106,6 +4110,10 @@ { "type": "const char *", "name": "filename" + }, + { + "type": "Frame *", + "name": "opts" } ] }, diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5d20ae772..67340e9b1 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -36,6 +36,7 @@ set(TEST_SOURCES api/cli/indexing/IndexingTest.cpp api/cli/inference/InferenceTest.cpp api/cli/io/ReadWriteTest.cpp + api/cli/extensibility/IO/IOReadWriteTest.cpp api/cli/lists/ListsTest.cpp api/cli/literals/LiteralsTest.cpp api/cli/operations/ConstantFoldingTest.cpp @@ -81,6 +82,8 @@ set(TEST_SOURCES runtime/local/datastructures/TensorTest.cpp runtime/local/io/ReadCsvTest.cpp + runtime/local/io/FileIOTest.cpp + runtime/local/io/FileIOBenchmarks.cpp runtime/local/io/ReadParquetTest.cpp runtime/local/io/ReadMMTest.cpp runtime/local/io/WriteDaphneTest.cpp diff --git a/test/api/cli/extensibility/IO/IOReadWriteTest.cpp b/test/api/cli/extensibility/IO/IOReadWriteTest.cpp new file mode 100644 index 000000000..99e0f351f --- /dev/null +++ b/test/api/cli/extensibility/IO/IOReadWriteTest.cpp @@ -0,0 +1,192 @@ +/* + * Copyright 2025 The DAPHNE Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +#include +#include + + +#include +#include + +#include +#include +#include + + +// ----------------------------------------------------------------------------- +// Paths +// ----------------------------------------------------------------------------- +static const std::string dirPath = "test/api/cli/extensibility/IO/"; +static const std::string outDir = dirPath + "out/"; +const std::string dirCheckPath = "test/api/cli/io/"; + +// Extra catalog flag (passed to every DAPHNE invocation) +static const char* kExtFlag = "--FileIO-ext"; +static const char* kExtPath = "scripts/examples/extensions/csv/csv.json"; + +#include +#include +#include +#include +#include + +static inline std::string trim(const std::string &s) { + size_t a = 0, b = s.size(); + while (a < b && std::isspace(static_cast(s[a]))) ++a; + while (b > a && std::isspace(static_cast(s[b-1]))) --b; + return s.substr(a, b - a); +} + +static std::vector splitCsvLine(const std::string &line, char delim) { + std::vector out; + std::string cur; + bool inQuotes = false; + for (size_t i = 0; i < line.size(); ++i) { + char c = line[i]; + if (inQuotes) { + if (c == '"') { + if (i + 1 < line.size() && line[i+1] == '"') { cur.push_back('"'); ++i; } + else inQuotes = false; + } else cur.push_back(c); + } else { + if (c == '"') inQuotes = true; + else if (c == delim) { out.push_back(cur); cur.clear(); } + else cur.push_back(c); + } + } + out.push_back(cur); + return out; +} + +static bool parseFloat(const std::string& s, double& out) { + char* end = nullptr; + out = std::strtod(s.c_str(), &end); + return end && *end == '\0'; +} + +bool compareCsvFiles(const std::string& aPath, + const std::string& bPath, + char delim = ',', + bool hasHeader = false, + double tol = 0.0, + bool nanSafe = false) +{ + std::ifstream fa(aPath), fb(bPath); + if (!fa.good() || !fb.good()) return false; + + std::string la, lb; + size_t row = 0; + + if (hasHeader) { std::getline(fa, la); std::getline(fb, lb); if (la != lb) return false; } + + while (true) { + bool ea = !std::getline(fa, la); + bool eb = !std::getline(fb, lb); + if (ea || eb) return ea && eb; // both ended? + ++row; + + auto ca = splitCsvLine(la, delim); + auto cb = splitCsvLine(lb, delim); + if (ca.size() != cb.size()) return false; + + for (size_t c = 0; c < ca.size(); ++c) { + std::string sa = trim(ca[c]); + std::string sb = trim(cb[c]); + + // try numeric compare if tol > 0 + if (tol > 0.0) { + double da, db; + bool na = parseFloat(sa, da); + bool nb = parseFloat(sb, db); + if (na && nb) { + if (nanSafe && std::isnan(da) && std::isnan(db)) continue; + if (std::isnan(da) || std::isnan(db)) return false; + if (std::fabs(da - db) > tol) return false; + continue; + } + } + if (sa != sb) return false; + } + } +} + + +// ----------------------------------------------------------------------------- +// Macros (same style as your externalSQL tests), but with the extra flag +// ----------------------------------------------------------------------------- + +// Compare stdout with .txt reference +#define MAKE_READ_TEST_CASE(name, count) \ + TEST_CASE(name "_success", TAG_IO) { \ + for (unsigned i = 1; i <= count; ++i) { \ + DYNAMIC_SECTION(name "_success_" << i << ".daphne") { \ + compareDaphneToRefSimple(dirPath, name "_success", i, kExtFlag, kExtPath); \ + } \ + } \ + } + +// For write tests: ensure SUCCESS, stdout OK, and files created in out/ +#define MAKE_CSV_WRITE_TEST_CASE(NAME_LIT, COUNT, DT_LIT) \ + TEST_CASE(NAME_LIT "_success", TAG_IO) { \ + const std::string name = NAME_LIT; \ + const std::string dt = DT_LIT; \ + std::filesystem::create_directories(dirPath + "out"); \ + \ + for (unsigned i = 1; i <= (COUNT); i++) { \ + DYNAMIC_SECTION(name << "_success_" << i) { \ + std::string scriptPathWrt = \ + dirPath + name + "_success_" + std::to_string(i) + ".daphne"; \ + std::string scriptPathCmp = \ + dirCheckPath + "do_check_" + dt + ".daphne"; \ + std::string outPath = \ + dirPath + "out/" + name + "_success_" + std::to_string(i) + ".csv"; \ + std::string refPath = \ + dirPath + "ref/" + name + "_success_" + std::to_string(i) + "_ref.csv"; \ + \ + std::error_code ec; \ + std::filesystem::remove(outPath, ec); \ + \ + checkDaphneStatusCode(StatusCode::SUCCESS, \ + scriptPathWrt.c_str(), "--args", \ + (std::string("outPath=\"") + outPath + "\"").c_str(), \ + kExtFlag, kExtPath); \ + \ + std::string nanSafe = "false"; \ + CHECK(compareCsvFiles(outPath, refPath, ',', /*hasHeader*/false, /*tol*/1e-9, /*nanSafe*/true)); \ + } \ + } \ + } + + + +// Expect EXECUTION_ERROR for failure scripts +#define MAKE_FAILURE_TEST_CASE(base, count) \ + TEST_CASE(base ", IO failure", TAG_IO) { \ + for (unsigned i = 1; i <= count; ++i) { \ + DYNAMIC_SECTION(base "_failure_" << i << ".daphne") { \ + checkDaphneStatusCodeSimple(StatusCode::EXECUTION_ERROR, \ + dirPath, base "_failure", i, \ + kExtFlag, kExtPath); \ + } \ + } \ + } + +// ----------------------------------------------------------------------------- +// Instantiate tests for your current files +// ----------------------------------------------------------------------------- + +// Read success +MAKE_READ_TEST_CASE("IO_read", 2) + +// Write success +MAKE_CSV_WRITE_TEST_CASE("IO_write", 2, "matrix") + +// Failures +MAKE_FAILURE_TEST_CASE("IO_read", 2) \ No newline at end of file diff --git a/test/api/cli/extensibility/IO/IO_read_failure_1.daphne b/test/api/cli/extensibility/IO/IO_read_failure_1.daphne new file mode 100644 index 000000000..e84cccc80 --- /dev/null +++ b/test/api/cli/extensibility/IO/IO_read_failure_1.daphne @@ -0,0 +1,6 @@ +// Use of unrecognised engine would lead to failure +opts = {"engine": ["noEngine"]}; + +m = readMatrix("scripts/examples/extensions/csv/data.csv", opts); + +print(m); diff --git a/test/api/cli/extensibility/IO/IO_read_failure_2.daphne b/test/api/cli/extensibility/IO/IO_read_failure_2.daphne new file mode 100644 index 000000000..b739eed84 --- /dev/null +++ b/test/api/cli/extensibility/IO/IO_read_failure_2.daphne @@ -0,0 +1,6 @@ +// Use of unrecognised option would lead to failure +opts = {"noOption": ["5"]}; + +m = readMatrix("scripts/examples/extensions/csv/data.csv", opts); + +print(m); diff --git a/test/api/cli/extensibility/IO/IO_read_success_1.daphne b/test/api/cli/extensibility/IO/IO_read_success_1.daphne new file mode 100644 index 000000000..5d4784526 --- /dev/null +++ b/test/api/cli/extensibility/IO/IO_read_success_1.daphne @@ -0,0 +1,6 @@ +// Use of a CSV reader by specifying the engine without changing the default options +opts = {"engine": ["Daphne"]}; + +m = readMatrix("scripts/examples/extensions/csv/data.csv", opts); + +print(m); diff --git a/test/api/cli/extensibility/IO/IO_read_success_1.txt b/test/api/cli/extensibility/IO/IO_read_success_1.txt new file mode 100644 index 000000000..c7179853e --- /dev/null +++ b/test/api/cli/extensibility/IO/IO_read_success_1.txt @@ -0,0 +1,4 @@ +DenseMatrix(3x3, std::string) +Alice 30 60000.0 +Bob 25 55000.5 +Charlie 35 70000.75 diff --git a/test/api/cli/extensibility/IO/IO_read_success_2.daphne b/test/api/cli/extensibility/IO/IO_read_success_2.daphne new file mode 100644 index 000000000..5e0b56913 --- /dev/null +++ b/test/api/cli/extensibility/IO/IO_read_success_2.daphne @@ -0,0 +1,6 @@ +// Use of a CSV reader by specifying the engine and changing the default options +opts = {"engine": ["Daphne"], "delimiter": ["!"], "hasHeader": ["false"]}; + +m = readMatrix("scripts/examples/extensions/csv/specialCSV.csv", opts); + +print(m); diff --git a/test/api/cli/extensibility/IO/IO_read_success_2.txt b/test/api/cli/extensibility/IO/IO_read_success_2.txt new file mode 100644 index 000000000..c7179853e --- /dev/null +++ b/test/api/cli/extensibility/IO/IO_read_success_2.txt @@ -0,0 +1,4 @@ +DenseMatrix(3x3, std::string) +Alice 30 60000.0 +Bob 25 55000.5 +Charlie 35 70000.75 diff --git a/test/api/cli/extensibility/IO/IO_write_success_1.daphne b/test/api/cli/extensibility/IO/IO_write_success_1.daphne new file mode 100644 index 000000000..19ccc69e2 --- /dev/null +++ b/test/api/cli/extensibility/IO/IO_write_success_1.daphne @@ -0,0 +1,11 @@ +// Use of a CSV writer by specifying the engine without changing the default options +opts = {"engine": ["Daphne"]}; + +X = [1, -22, 3, -44, + 5, -66, 0, 0](2, 4); + +write(X, $outPath, opts); + +m = readMatrix($outPath, opts); + +print(m); \ No newline at end of file diff --git a/test/api/cli/extensibility/IO/IO_write_success_2.daphne b/test/api/cli/extensibility/IO/IO_write_success_2.daphne new file mode 100644 index 000000000..fde89d03f --- /dev/null +++ b/test/api/cli/extensibility/IO/IO_write_success_2.daphne @@ -0,0 +1,11 @@ +// Use of a CSV writer by specifying the engine without changing the default options +opts = {"engine": ["Daphne"], "delimiter": ["!"]}; + +X = [1, -22, 3, -44, + 5, -66, 0, 0](2, 4); + +write(X, $outPath, opts); + +m = readMatrix($outPath, opts); + +print(m); \ No newline at end of file diff --git a/test/api/cli/extensibility/IO/out/IO_write_success_1.csv b/test/api/cli/extensibility/IO/out/IO_write_success_1.csv new file mode 100644 index 000000000..332b71f5c --- /dev/null +++ b/test/api/cli/extensibility/IO/out/IO_write_success_1.csv @@ -0,0 +1,2 @@ +1,-22,3,-44 +5,-66,0,0 diff --git a/test/api/cli/extensibility/IO/out/IO_write_success_1.csv.meta b/test/api/cli/extensibility/IO/out/IO_write_success_1.csv.meta new file mode 100644 index 000000000..727faaf8e --- /dev/null +++ b/test/api/cli/extensibility/IO/out/IO_write_success_1.csv.meta @@ -0,0 +1 @@ +{"numCols":4,"numRows":2,"valueType":"si64"} \ No newline at end of file diff --git a/test/api/cli/extensibility/IO/out/IO_write_success_2.csv b/test/api/cli/extensibility/IO/out/IO_write_success_2.csv new file mode 100644 index 000000000..385fc94aa --- /dev/null +++ b/test/api/cli/extensibility/IO/out/IO_write_success_2.csv @@ -0,0 +1,2 @@ +1!-22!3!-44 +5!-66!0!0 diff --git a/test/api/cli/extensibility/IO/out/IO_write_success_2.csv.meta b/test/api/cli/extensibility/IO/out/IO_write_success_2.csv.meta new file mode 100644 index 000000000..727faaf8e --- /dev/null +++ b/test/api/cli/extensibility/IO/out/IO_write_success_2.csv.meta @@ -0,0 +1 @@ +{"numCols":4,"numRows":2,"valueType":"si64"} \ No newline at end of file diff --git a/test/api/cli/extensibility/IO/ref/IO_write_success_1_ref.csv b/test/api/cli/extensibility/IO/ref/IO_write_success_1_ref.csv new file mode 100644 index 000000000..332b71f5c --- /dev/null +++ b/test/api/cli/extensibility/IO/ref/IO_write_success_1_ref.csv @@ -0,0 +1,2 @@ +1,-22,3,-44 +5,-66,0,0 diff --git a/test/api/cli/extensibility/IO/ref/IO_write_success_1_ref.csv.meta b/test/api/cli/extensibility/IO/ref/IO_write_success_1_ref.csv.meta new file mode 100644 index 000000000..727faaf8e --- /dev/null +++ b/test/api/cli/extensibility/IO/ref/IO_write_success_1_ref.csv.meta @@ -0,0 +1 @@ +{"numCols":4,"numRows":2,"valueType":"si64"} \ No newline at end of file diff --git a/test/api/cli/extensibility/IO/ref/IO_write_success_2_ref.csv b/test/api/cli/extensibility/IO/ref/IO_write_success_2_ref.csv new file mode 100644 index 000000000..385fc94aa --- /dev/null +++ b/test/api/cli/extensibility/IO/ref/IO_write_success_2_ref.csv @@ -0,0 +1,2 @@ +1!-22!3!-44 +5!-66!0!0 diff --git a/test/api/cli/extensibility/IO/ref/IO_write_success_2_ref.csv.meta b/test/api/cli/extensibility/IO/ref/IO_write_success_2_ref.csv.meta new file mode 100644 index 000000000..727faaf8e --- /dev/null +++ b/test/api/cli/extensibility/IO/ref/IO_write_success_2_ref.csv.meta @@ -0,0 +1 @@ +{"numCols":4,"numRows":2,"valueType":"si64"} \ No newline at end of file diff --git a/test/run_tests.cpp b/test/run_tests.cpp index 52e9c7e33..813b97e21 100644 --- a/test/run_tests.cpp +++ b/test/run_tests.cpp @@ -15,6 +15,7 @@ */ #define CATCH_CONFIG_MAIN // make catch2 generate a main-function +#define CATCH_CONFIG_ENABLE_BENCHMARKING #include #include "run_tests.h" diff --git a/test/runtime/local/io/FileIO/FileIOOverride.daphne b/test/runtime/local/io/FileIO/FileIOOverride.daphne new file mode 100644 index 000000000..569a829dd --- /dev/null +++ b/test/runtime/local/io/FileIO/FileIOOverride.daphne @@ -0,0 +1,2 @@ +#f = readFrame("scripts/examples/extensions/csv/random_data"); +#print(f); \ No newline at end of file diff --git a/test/runtime/local/io/FileIOBenchmarks.cpp b/test/runtime/local/io/FileIOBenchmarks.cpp new file mode 100644 index 000000000..867a37dc4 --- /dev/null +++ b/test/runtime/local/io/FileIOBenchmarks.cpp @@ -0,0 +1,180 @@ +// io_benchmarks.cpp +// Drop-in file with your exact benchmarks, gated by an env var. +// +// Run them only when you want: +// DAPHNE_BENCH=1 ./io_tests "[.bench]" +// +// If you don't use tags, they'll still be skipped unless DAPHNE_BENCH is set. + +#define CATCH_CONFIG_ENABLE_BENCHMARKING +#include + +#include +#include // std::getenv + +#include + +#include "runtime/local/io/FileIOCatalogParser.h" +#include "runtime/local/io/FileIORegistry.h" +#include "runtime/local/context/DaphneContext.h" +#include "runtime/local/datastructures/Frame.h" +#include "runtime/local/datastructures/DenseMatrix.h" +#include "runtime/local/datastructures/DataObjectFactory.h" +#include +#include + +// --------------------------- +// Small helper: enable switch +// --------------------------- +static inline bool daphne_bench_enabled() { +#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING) + const char* e = std::getenv("DAPHNE_BENCH"); + return e && *e; // any non-empty value enables running the benches +#else + return false; +#endif +} + +// --------------------------- +// Minimal globals to match your tests +// --------------------------- +static DaphneContext* ctx = nullptr; +static Frame* emptyFrame = DataObjectFactory::create(0, 0, nullptr, nullptr, false); + +//############################################# +// BENCHMARKS +//############################################# + +// 1) DenseMatrix parquet benchmark (1 thread vs 16 threads) +TEMPLATE_PRODUCT_TEST_CASE( + "FileIO Benchmark double parquet into a densematrix", + TAG_IO "[.bench]", + (DenseMatrix), + (double) +) { + if (!daphne_bench_enabled()) { + SUCCEED("Benchmarks disabled. Set DAPHNE_BENCH=1 to run."); + return; + } + + using DT = TestType; + FileIORegistry::instance().resetToBaseline(); + FileIORegistry ®istry = FileIORegistry::instance(); + DT *m1 = nullptr; + DT *m2 = nullptr; + + FileIOCatalogParser parser; + REQUIRE_NOTHROW(parser.parseFileIOCatalog("scripts/examples/extensions/parquetReader/parquet.json",registry)); + + std::vector columns(1); + auto* keyCol = DataObjectFactory::create>(1, 1, false); + auto* val1 = keyCol->getValues(); + val1[0] = "Daphne"; + columns[0] = keyCol; + const char* labels[1] = {"engine"}; + Frame* optsFrame = nullptr; + createFrame(optsFrame, columns.data(), 1, labels, 1, ctx); + + BENCHMARK("read double parquet into a DenseMatrix with 1 thread") { + read(m1, "scripts/examples/extensions/parquetReader/random_doubles2.parquet", optsFrame, ctx); + REQUIRE(m1->getNumRows() == 3000000); + REQUIRE(m1->getNumCols() == 16); + return 0; + }; + REQUIRE_NOTHROW(m1->get(1,1)); + + std::vector columns2(2); + auto* threadsCol = DataObjectFactory::create>(1, 1, false); + threadsCol->getValues()[0] = "16"; + + auto* engineCol = DataObjectFactory::create>(1, 1, false); + engineCol->getValues()[0] = "Daphne"; + + columns2[0] = threadsCol; + columns2[1] = engineCol; + + // Two labels matching the two columns + const char* labels2[2] = {"threads", "engine"}; + + Frame* optsFrame2 = nullptr; + createFrame(optsFrame2, columns2.data(), /*numCols=*/2, labels2, /*numLabels=*/2, ctx); + + BENCHMARK("read double parquet into a DenseMatrix with 16 thread") { + read(m2, "scripts/examples/extensions/parquetReader/random_doubles2.parquet", optsFrame2, ctx); + REQUIRE(m2->getNumRows() == 3000000); + REQUIRE(m2->getNumCols() == 16); + return 0; + }; + + REQUIRE(*m1 == *m2); + DataObjectFactory::destroy(m1); + DataObjectFactory::destroy(m2); + + FileIORegistry::instance().resetToBaseline(); +} + +// 2) Frame parquet benchmark (1 thread vs 16 threads) +TEMPLATE_PRODUCT_TEST_CASE( + "FileIO Benchmark double parquet into a Frame", + TAG_IO "[.bench]", + (DenseMatrix), + (double) +) { + if (!daphne_bench_enabled()) { + SUCCEED("Benchmarks disabled. Set DAPHNE_BENCH=1 to run."); + return; + } + + FileIORegistry::instance().resetToBaseline(); + FileIORegistry ®istry = FileIORegistry::instance(); + Frame *m1 = nullptr; + Frame *m2 = nullptr; + + FileIOCatalogParser parser; + REQUIRE_NOTHROW(parser.parseFileIOCatalog("scripts/examples/extensions/parquetReader/parquet.json",registry)); + + std::vector columns(1); + auto* keyCol = DataObjectFactory::create>(1, 1, false); + auto* val1 = keyCol->getValues(); + val1[0] = "Daphne"; + columns[0] = keyCol; + const char* labels[1] = {"engine"}; + Frame* optsFrame = nullptr; + createFrame(optsFrame, columns.data(), 1, labels, 1, ctx); + + BENCHMARK("read double parquet into a Frame with 1 thread") { + read(m1, "scripts/examples/extensions/parquetReader/random_doubles.parquet", optsFrame, ctx); + REQUIRE(m1->getNumRows() == 3000000); + REQUIRE(m1->getNumCols() == 16); + return 0; + }; + + std::vector columns2(2); + auto* threadsCol = DataObjectFactory::create>(1, 1, false); + threadsCol->getValues()[0] = "16"; + + auto* engineCol = DataObjectFactory::create>(1, 1, false); + engineCol->getValues()[0] = "Daphne"; + + columns2[0] = threadsCol; + columns2[1] = engineCol; + + // Two labels matching the two columns + const char* labels2[2] = {"threads", "engine"}; + + Frame* optsFrame2 = nullptr; + createFrame(optsFrame2, columns2.data(), /*numCols=*/2, labels2, /*numLabels=*/2, ctx); + + BENCHMARK("read double parquet into a Frame with 16 thread") { + read(m2, "scripts/examples/extensions/parquetReader/random_doubles.parquet", optsFrame2, ctx); + REQUIRE(m2->getNumRows() == 3000000); + REQUIRE(m2->getNumCols() == 16); + return 0; + }; + + REQUIRE(*m1 == *m2); + DataObjectFactory::destroy(m1); + DataObjectFactory::destroy(m2); + + FileIORegistry::instance().resetToBaseline(); +} \ No newline at end of file diff --git a/test/runtime/local/io/FileIOTest.cpp b/test/runtime/local/io/FileIOTest.cpp new file mode 100644 index 000000000..e2418859c --- /dev/null +++ b/test/runtime/local/io/FileIOTest.cpp @@ -0,0 +1,526 @@ +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "runtime/local/io/FileIOCatalogParser.h" +#include "runtime/local/io/FileIORegistry.h" +#include "runtime/local/io/FileMetaData.h" +#include "runtime/local/context/DaphneContext.h" +#include "runtime/local/datastructures/Frame.h" +#include "runtime/local/datastructures/DenseMatrix.h" +#include "runtime/local/datastructures/DataObjectFactory.h" +#include "runtime/local/datastructures/ValueTypeCode.h" +#include +#include +#include + +#include +#include +#include + +using namespace std; + +// Hard-coded path to the example JSON catalog +static const string JSON_PATH = "scripts/examples/extensions/csv/csv.json"; +IODataType frameHash = FRAME; +IODataType matrixHash = DENSEMATRIX; + +static const std::string CSV_FILE = "scripts/examples/extensions/csv/data.csv"; +static const std::string specialCSV = "scripts/examples/extensions/csv/specialCSV.csv"; + +DaphneContext* ctx = nullptr; +static Frame *emptyFrame = DataObjectFactory::create(0, 0, nullptr, nullptr, false); +FileIOCatalogParser parser; +auto ®istry = FileIORegistry::instance(); + +static void loadBuiltInIOPlugins() { + parser.parseFileIOCatalog("scripts/examples/extensions/builtInIO/BuiltIns.json", registry); + registry.captureBaseline(); +} + +TEST_CASE("FileIOCatalogParser registers CSV plugin via registry", "[io][catalog]") { + // Ensure registry is clean (if supported); otherwise run in fresh process + loadBuiltInIOPlugins(); + + // Should parse without throwing + REQUIRE_NOTHROW(parser.parseFileIOCatalog(JSON_PATH,registry)); + + // Now registry should have reader and writer for .csv and Frame type + + REQUIRE_NOTHROW(registry.getReader(".csv", matrixHash)); + REQUIRE_NOTHROW(registry.getWriter(".csv", matrixHash)); + registry.resetToBaseline(); +} + +TEST_CASE("FileIORegistry registerReader and getReader", "[io][registry]") { + + IOOptions opts; + + // Register a dummy reader for Frame type + registry.registerReader( + ".test", + frameHash, + opts, + [](void* res, const FileMetaData &fmd, const char* filename, IOOptions opts, DaphneContext* ctx) { + // no-op + } + ); + + SECTION("Lookup existing reader succeeds") { + REQUIRE_NOTHROW(registry.getReader(".test", frameHash)); + } + + SECTION("Lookup non-registered reader throws") { + REQUIRE_THROWS_AS(registry.getReader(".unknown", frameHash), std::out_of_range); + } + registry.resetToBaseline(); +} + +TEST_CASE("FileIO Plugin dynamic load and registration validity", "[io][plugin]") { + // The parser already loads and registers the plugin + + REQUIRE_NOTHROW(parser.parseFileIOCatalog(JSON_PATH,registry)); + + // Verify registry lookups work + auto reader = registry.getReader(".csv", matrixHash); + auto writer = registry.getWriter(".csv", matrixHash); + + REQUIRE(reader != nullptr); + REQUIRE(writer != nullptr); + + // Optionally, test that the .so exists + filesystem::path pluginDir = filesystem::path(JSON_PATH).parent_path(); + filesystem::path soPath = pluginDir / "libCsvIO.so"; + INFO("Expecting plugin file at: " << soPath.string()); + REQUIRE(filesystem::exists(soPath)); + registry.resetToBaseline(); +} + +TEST_CASE("FileIO csv_read loads numeric CSV into DenseMatrix", "[csv][read]") { + // Prepare a temporary CSV file + auto tempDir = std::filesystem::temp_directory_path(); + auto csvPath = tempDir / "test_read.csv"; + { + std::ofstream ofs(csvPath); + ofs << "1,2\n"; + ofs << "3,4\n"; + } + IOOptions opts; + + // Register the CSV plugin + REQUIRE_NOTHROW(parser.parseFileIOCatalog(JSON_PATH,registry)); + auto reader = registry.getReader(".csv", matrixHash,"Daphne"); + + // Invoke reader + Structure* res = nullptr; + // Create metadata: rows=2, cols=2, single value type int32 + FileMetaData fmd(2, 2, true, ValueTypeCode::SI32); + DaphneContext* ctx = nullptr; + REQUIRE_NOTHROW(reader(&res, fmd, csvPath.c_str(), opts, ctx)); + + // Check result matrix + auto *mat = dynamic_cast*>(res); + //REQUIRE(mat != nullptr); + REQUIRE(mat->getNumRows() == 2); + REQUIRE(mat->getNumCols() == 2); + const int32_t *data = mat->getValues(); + REQUIRE(data[0 * 2 + 0] == 1); + REQUIRE(data[0 * 2 + 1] == 2); + REQUIRE(data[1 * 2 + 0] == 3); + REQUIRE(data[1 * 2 + 1] == 4); + registry.resetToBaseline(); +} + +TEST_CASE("FileIO csv_write writes DenseMatrix to CSV", "[csv][write]") { + // Create a 2x2 double matrix + size_t rows = 2, cols = 2; + auto *mat = DataObjectFactory::create>(rows, cols, false); + double *vals = mat->getValues(); + vals[0] = 1.5; vals[1] = 2.5; + vals[2] = 3.5; vals[3] = 4.5; + + // Prepare output file path + auto tempDir = std::filesystem::temp_directory_path(); + auto outPath = tempDir / "test_write.csv"; + + //IOOptions opts; + + + // Register the CSV plugin + REQUIRE_NOTHROW(parser.parseFileIOCatalog(JSON_PATH,registry)); + + write(mat, outPath.c_str(), emptyFrame, ctx); + // Read back file + std::ifstream ifs(outPath); + REQUIRE(ifs.good()); + std::vector lines; + std::string line; + while (std::getline(ifs, line)) { + lines.push_back(line); + } + REQUIRE(lines.size() == 2); + REQUIRE(lines[0] == "1.5,2.5"); + REQUIRE(lines[1] == "3.5,4.5"); + registry.resetToBaseline(); + +} + +TEMPLATE_PRODUCT_TEST_CASE("FileIO CSV Reader via Registry and Read kernel for matrix", TAG_IO, (DenseMatrix), (std::string)) { + using DT = TestType; + DT *m = nullptr; + + + REQUIRE_NOTHROW(parser.parseFileIOCatalog(JSON_PATH,registry)); + + REQUIRE_NOTHROW(read(m, CSV_FILE.c_str(), emptyFrame, nullptr)); + + // Verify dimensions (3 rows, 3 cols) + REQUIRE(m->getNumRows() == 3); + REQUIRE(m->getNumCols() == 3); + + // Check values (all read as strings) + CHECK(m->get(0,0) == "Alice"); + CHECK(m->get(0,1) == "30"); + CHECK(m->get(0,2) == "60000.0"); + + CHECK(m->get(1,0) == "Bob"); + CHECK(m->get(1,1) == "25"); + CHECK(m->get(1,2) == "55000.5"); + + CHECK(m->get(2,0) == "Charlie"); + CHECK(m->get(2,1) == "35"); + CHECK(m->get(2,2) == "70000.75"); + + // Clean up + DataObjectFactory::destroy(m); + registry.resetToBaseline(); + +} + +TEST_CASE("FileIOCatalogParser parses options correctly", "[io][catalog]") { + // Parse the catalog + + // Retrieve the parsed options from the registry + + REQUIRE_NOTHROW(parser.parseFileIOCatalog(JSON_PATH,registry)); + + IOOptions opts = registry.getOptions(".csv", IODataType::DENSEMATRIX,"Daphne"); + + // Validate options fields + + REQUIRE(opts.extra.size() == 3); + CHECK(opts.extra.at("delimiter") == ","); + CHECK(opts.extra.at("hasHeader") == "false"); + CHECK(opts.extra.at("threads") == "1"); + FileIORegistry::instance().resetToBaseline(); +} + + +TEMPLATE_PRODUCT_TEST_CASE("FileIO CSV Reader with delimiter '!' and no header using options Frame", TAG_IO, (DenseMatrix), (std::string)) { + using DT = TestType; + DT *m = nullptr; + + // Parse catalog (to simulate normal system setup) + REQUIRE_NOTHROW(parser.parseFileIOCatalog(JSON_PATH,registry)); + + // Create override options in a Frame + std::vector columns(2); + + auto* keyCol = DataObjectFactory::create>(1, 1, false); + auto* valCol = DataObjectFactory::create>(1, 1, false); + + auto* val1 = keyCol->getValues(); + auto* val2 = valCol->getValues(); + + val1[0] = "false"; + val2[0] = "!"; + + columns[0] = keyCol; + columns[1] = valCol; + + const char* labels[2] = {"hasHeader", "delimiter"}; + + Frame* optsFrame = nullptr; + createFrame(optsFrame, columns.data(), 2, labels, 2, ctx); + + // Read CSV using the options Frame + REQUIRE_NOTHROW(read(m, specialCSV.c_str(), optsFrame, ctx)); + + // Verify content + REQUIRE(m->getNumRows() == 3); + REQUIRE(m->getNumCols() == 3); + + CHECK(m->get(0,0) == "Alice"); + CHECK(m->get(0,1) == "30"); + CHECK(m->get(0,2) == "60000.0"); + + CHECK(m->get(1,0) == "Bob"); + CHECK(m->get(1,1) == "25"); + CHECK(m->get(1,2) == "55000.5"); + + CHECK(m->get(2,1) == "35"); + CHECK(m->get(2,2) == "70000.75"); + + // Step 6: Cleanup + DataObjectFactory::destroy(m); + DataObjectFactory::destroy(optsFrame); + FileIORegistry::instance().resetToBaseline(); +} + +TEMPLATE_PRODUCT_TEST_CASE("FileIO ReadParquet, DenseMatrix", TAG_IO, (DenseMatrix), (double)) { + using DT = TestType; + DT *m = nullptr; + FileIORegistry::instance().resetToBaseline(); + REQUIRE_NOTHROW(parser.parseFileIOCatalog("scripts/examples/extensions/parquetReader/parquet.json",registry)); + + + read(m, "./test/runtime/local/io/ReadParquet1.parquet", emptyFrame, ctx); + + + CHECK(m->get(0, 0) == -0.1); + CHECK(m->get(0, 1) == -0.2); + CHECK(m->get(0, 2) == 0.1); + CHECK(m->get(0, 3) == 0.2); + + CHECK(m->get(1, 0) == 3.14); + CHECK(m->get(1, 1) == 5.41); + CHECK(m->get(1, 2) == 6.22216); + CHECK(m->get(1, 3) == 5); + + FileIORegistry::instance().resetToBaseline(); + DataObjectFactory::destroy(m); +} + +TEST_CASE("FileIO parquet_write_frame writes Frame to Parquet", "[parquet][write][frame]") { + const size_t rows = 2; + const size_t cols = 3; + + auto *c0 = DataObjectFactory::create>(rows, 1, /*alloc*/false); + auto *c1 = DataObjectFactory::create>( rows, 1, /*alloc*/false); + auto *c2 = DataObjectFactory::create>(rows, 1, /*alloc*/false); + + c0->getValues()[0] = 1; c0->getValues()[1] = 2; + c1->getValues()[0] = 1.5; c1->getValues()[1] = 2.5; + c2->getValues()[0] = "a"; c2->getValues()[1] = "b"; + + Structure *dataCols[3] = {c0, c1, c2}; + const char *dataLabels[3] = {"id", "value", "name"}; + + Frame *fr = nullptr; + DaphneContext *ctx = nullptr; + createFrame(fr, dataCols, cols, dataLabels, cols, ctx); + REQUIRE(fr != nullptr); + REQUIRE(fr->getNumRows() == rows); + REQUIRE(fr->getNumCols() == cols); + + // Temp output path + auto outPath = std::filesystem::temp_directory_path() / "test_frame_write.parquet"; + if (std::filesystem::exists(outPath)) std::filesystem::remove(outPath); + + // Register catalog (must map ".parquet"+"Frame" to parquet_write_frame) + + REQUIRE_NOTHROW(parser.parseFileIOCatalog("scripts/examples/extensions/parquetReader/parquet.json", registry)); + + std::vector columns(1); + auto* keyCol = DataObjectFactory::create>(1, 1, false); + auto* val1 = keyCol->getValues(); + val1[0] = "Daphne"; + columns[0] = keyCol; + const char* labels[1] = {"engine"}; + Frame* optsFrame = nullptr; + createFrame(optsFrame, columns.data(), 1, labels, 1, ctx); + + // ---------- Act ---------- + REQUIRE_NOTHROW(write(fr, outPath.c_str(), optsFrame, ctx)); + REQUIRE(std::filesystem::exists(outPath)); + + // ---------- Assert: read back with Arrow ---------- + auto fh_res = arrow::io::ReadableFile::Open(outPath.string()); + REQUIRE(fh_res.ok()); + std::shared_ptr infile = *fh_res; + + std::unique_ptr reader; + auto st_open = parquet::arrow::OpenFile(infile, arrow::default_memory_pool(), &reader); + REQUIRE(st_open.ok()); + + std::shared_ptr table; + auto st_tbl = reader->ReadTable(&table); + REQUIRE(st_tbl.ok()); + + REQUIRE(table->num_rows() == static_cast(rows)); + REQUIRE(table->num_columns() == 3); + + // Check column names match labels + auto schema = table->schema(); + REQUIRE(schema->field(0)->name() == "id"); + REQUIRE(schema->field(1)->name() == "value"); + REQUIRE(schema->field(2)->name() == "name"); + + // Column 0: int32 + { + auto arr = std::static_pointer_cast(table->column(0)->chunk(0)); + REQUIRE(arr->length() == static_cast(rows)); + REQUIRE(arr->Value(0) == 1); + REQUIRE(arr->Value(1) == 2); + } + // Column 1: double + { + auto arr = std::static_pointer_cast(table->column(1)->chunk(0)); + REQUIRE(arr->length() == static_cast(rows)); + REQUIRE(arr->Value(0) == Approx(1.5)); + REQUIRE(arr->Value(1) == Approx(2.5)); + } + // Column 2: string + { + auto arr = std::static_pointer_cast(table->column(2)->chunk(0)); + REQUIRE(arr->length() == static_cast(rows)); + REQUIRE(arr->GetString(0) == "a"); + REQUIRE(arr->GetString(1) == "b"); + } + + // Cleanup + std::filesystem::remove(outPath); + registry.resetToBaseline(); +} + +TEST_CASE("FileIO parquet_write writes DenseMatrix to Parquet", "[parquet][write]") { + // --- Arrange --- + const size_t rows = 2, cols = 2; + auto *mat = DataObjectFactory::create>(rows, cols, /*alloc*/false); + double *vals = mat->getValues(); + // Row-major: [ [1.5, 2.5], + // [3.5, 4.5] ] + vals[0] = 1.5; vals[1] = 2.5; + vals[2] = 3.5; vals[3] = 4.5; + + auto tempDir = std::filesystem::temp_directory_path(); + auto outPath = tempDir / "test_write.parquet"; + if (std::filesystem::exists(outPath)) + std::filesystem::remove(outPath); + + // Registry + catalog (must include the parquet_write symbol mapping) + REQUIRE_NOTHROW(parser.parseFileIOCatalog("scripts/examples/extensions/parquetReader/parquet.json", registry)); + + std::vector columns(1); + auto* keyCol = DataObjectFactory::create>(1, 1, false); + auto* val1 = keyCol->getValues(); + val1[0] = "Daphne"; + columns[0] = keyCol; + const char* labels[1] = {"engine"}; + Frame* optsFrame = nullptr; + createFrame(optsFrame, columns.data(), 1, labels, 1, ctx); + + // --- Act: write via generic write() that dispatches through the registry --- + REQUIRE_NOTHROW(write(mat, outPath.c_str(), optsFrame, ctx)); + REQUIRE(std::filesystem::exists(outPath)); + + // --- Assert: read back with Arrow and validate --- + std::shared_ptr infile; + auto st_open = arrow::io::ReadableFile::Open(outPath.string()); + REQUIRE(st_open.ok()); + infile = *st_open; + + std::unique_ptr reader; + auto st_r = parquet::arrow::OpenFile(infile, arrow::default_memory_pool(), &reader); + REQUIRE(st_r.ok()); + + std::shared_ptr table; + auto st_tbl = reader->ReadTable(&table); + REQUIRE(st_tbl.ok()); + + REQUIRE(table->num_rows() == static_cast(rows)); + REQUIRE(table->num_columns() == static_cast(cols)); + + auto col0 = std::static_pointer_cast(table->column(0)->chunk(0)); + auto col1 = std::static_pointer_cast(table->column(1)->chunk(0)); + REQUIRE(col0->length() == static_cast(rows)); + REQUIRE(col1->length() == static_cast(rows)); + + // row 0 + REQUIRE(col0->Value(0) == Approx(1.5)); + REQUIRE(col1->Value(0) == Approx(2.5)); + // row 1 + REQUIRE(col0->Value(1) == Approx(3.5)); + REQUIRE(col1->Value(1) == Approx(4.5)); + + // Cleanup (optional) + std::filesystem::remove(outPath); + FileIORegistry::instance().resetToBaseline(); +} + +static std::atomic MYREADER_CALLS{0}; +static std::atomic YOURREADER_CALLS{0}; + + +static void myReader(void* res, const FileMetaData&, const char*, const IOOptions&, DaphneContext*) { + MYREADER_CALLS.fetch_add(1); + *reinterpret_cast(res) = DataObjectFactory::create(0,0,nullptr,nullptr,false); +} +static void yourReader(void* res, const FileMetaData&, const char*, const IOOptions&, DaphneContext*) { + YOURREADER_CALLS.fetch_add(1); + *reinterpret_cast(res) = DataObjectFactory::create(0,0,nullptr,nullptr,false); +} + +TEST_CASE("FileIO Direct call proves selected engine runs") { + auto ® = FileIORegistry::instance(); + reg.resetToBaseline(); + MYREADER_CALLS = 0; YOURREADER_CALLS = 0; + + IOOptions opts; + // Register both engines for the same (.csv, FRAME) + reg.registerReader(".csv", IODataType::FRAME, "myReader", 5, opts, myReader); + reg.registerReader(".csv", IODataType::FRAME, "yourReader",10, opts, yourReader); + + std::vector columns(1); + auto* keyCol = DataObjectFactory::create>(1, 1, false); + auto* val1 = keyCol->getValues(); + val1[0] = "myReader"; + columns[0] = keyCol; + const char* labels[1] = {"engine"}; + Frame* optsFrame = nullptr; + createFrame(optsFrame, columns.data(), 1, labels, 1, ctx); + + // ----- A) No engine hint -> highest priority -> yourReader ----- + { + Frame* out = nullptr; + REQUIRE_NOTHROW(read(out, CSV_FILE.c_str(), emptyFrame, ctx)); + REQUIRE(YOURREADER_CALLS.load() == 1); + REQUIRE(MYREADER_CALLS.load() == 0); + DataObjectFactory::destroy(out); + } + + // ----- B) Explicit engine -> myReader even if lower priority ----- + { + Frame* out = nullptr; + read(out, CSV_FILE.c_str(), optsFrame, ctx); + REQUIRE(YOURREADER_CALLS.load() == 1); + REQUIRE(MYREADER_CALLS.load() == 1); + DataObjectFactory::destroy(out); + } + + reg.resetToBaseline(); +} + +TEST_CASE("FileIO Duplicate Registration is rejected") { + IOOptions opts; + + registry.registerReader(".csv", IODataType::FRAME, "myReader", 5, opts, myReader); + REQUIRE_THROWS( registry.registerReader(".csv", IODataType::FRAME, "myReader",5, opts, yourReader)); + + registry.resetToBaseline(); +} + +TEST_CASE("FileIO Duplicate lazy Registration is rejected") { + IOOptions opts; + + registry.registerLazy(".csv", IODataType::FRAME,"lib.so", "myReader", "mywriter", opts, "daphne",5); + REQUIRE_THROWS( registry.registerLazy(".csv", IODataType::FRAME, "lib.so", "myReader", "mywriter", opts, "daphne", 5)); + + registry.resetToBaseline(); +} \ No newline at end of file diff --git a/test/runtime/local/io/ReadParquet1.parquet.meta b/test/runtime/local/io/ReadParquet1.parquet.meta index 0e693c69a..f00dce68e 100644 --- a/test/runtime/local/io/ReadParquet1.parquet.meta +++ b/test/runtime/local/io/ReadParquet1.parquet.meta @@ -1 +1,5 @@ -2,4,1,f64 +{ + "numRows": 2, + "numCols": 4, + "valueType": "f64" +} \ No newline at end of file diff --git a/test/runtime/local/kernels/ReadTest.cpp b/test/runtime/local/kernels/ReadTest.cpp index e608f7061..c3730c7ab 100644 --- a/test/runtime/local/kernels/ReadTest.cpp +++ b/test/runtime/local/kernels/ReadTest.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#include "runtime/local/io/FileIOCatalogParser.h" +#include "runtime/local/io/FileIORegistry.h" #include #include #include @@ -26,9 +28,11 @@ #include +static Frame *emptyFrame = DataObjectFactory::create(0, 0, nullptr, nullptr, false); + + TEMPLATE_PRODUCT_TEST_CASE("Read CSV", TAG_KERNELS, (DenseMatrix), (double)) { using DT = TestType; - DT *m = nullptr; size_t numRows = 2; @@ -36,7 +40,7 @@ TEMPLATE_PRODUCT_TEST_CASE("Read CSV", TAG_KERNELS, (DenseMatrix), (double)) { char filename[] = "./test/runtime/local/io/ReadCsv1.csv"; - read(m, filename, nullptr); + read(m, filename, emptyFrame, nullptr); REQUIRE(m->getNumRows() == numRows); REQUIRE(m->getNumCols() == numCols); @@ -62,7 +66,7 @@ TEMPLATE_PRODUCT_TEST_CASE("Read MM", TAG_KERNELS, (DenseMatrix), (uint32_t)) { size_t numCols = 9; char filename[] = "./test/runtime/local/io/cig.mtx"; - read(m, filename, nullptr); + read(m, filename, emptyFrame, nullptr); REQUIRE(m->getNumRows() == numRows); REQUIRE(m->getNumCols() == numCols); @@ -77,7 +81,7 @@ TEMPLATE_PRODUCT_TEST_CASE("Read MM", TAG_KERNELS, (DenseMatrix), (uint32_t)) { TEST_CASE("Read - Frame", TAG_KERNELS) { Frame *f = nullptr; - read(f, "./test/runtime/local/io/ReadCsv4.csv", nullptr); + read(f, "./test/runtime/local/io/ReadCsv4.csv", emptyFrame, nullptr); CHECK(f->getNumRows() == 2); CHECK(f->getNumCols() == 2); diff --git a/test_custom_delim.csv b/test_custom_delim.csv new file mode 100644 index 000000000..d2a3f53f4 --- /dev/null +++ b/test_custom_delim.csv @@ -0,0 +1,3 @@ +Alice!30!60000.0 +Bob!25!55000.5 +Charlie!35!70000.75